2017-02-16 7 views
0

Merci de cliquer sur ce post, j'ai un tableau de bord alimenté par Dashing sur mon RPI 3 où j'ai ajouter un widget pour mon appareil photo IP (D -link DSC 4201).snapshot.jpg de caméra IP (D-LINK DSC 4201) pas actualiser dans Dashing

Camera-widget Link

Il y a les emplois de rubis qui attrapent la snapshot.jpeg de mon appareil photo:

require 'net/http' 

@cameraDelay = 1 # Needed for image sync. 
@fetchNewImageEvery = '3s' 

@camera1Host = "192.168.0.20" ## CHANGE 
@camera1Port = "80" ## CHANGE 
@camera1Username = 'admin' ## CHANGE 
@camera1Password ='*****' 
@camera1URL = "/dms?nowprofileid=1&" 
@newFile1 = "assets/images/cameras/snapshot1_new.jpg" 
@oldFile1 = "assets/images/cameras/snapshot1_old.jpg" 


def fetch_image(host,old_file,new_file, cam_user, cam_pass, cam_url) 
    `rm #{old_file}` 
    `mv #{new_file} #{old_file}`  
    Net::HTTP.start(host) do |http| 
     req = Net::HTTP::Get.new(cam_url) 
     if cam_user != "None" ## if username for any particular camera is set to 'None' then assume auth not required. 
      req.basic_auth cam_user, cam_pass 
     end 
     response = http.request(req) 
     open(new_file, "wb") do |file| 
      file.write(response.body) 
     end 

     end 
    new_file 
end 

def make_web_friendly(file) 
    "/" + File.basename(File.dirname(file)) + "/" + File.basename(file) 
end 

SCHEDULER.every @fetchNewImageEvery do 

     new_file1 = fetch_image(@camera1Host,@oldFile1,@newFile1,@camera1Username,@camera1Password,@camera1URL) 

    if not File.exists?(@newFile1) 
     warn "Failed to Get Camera Image" 
    end 
    send_event('camera1', image: make_web_friendly(@oldFile1)) 
    sleep(@cameraDelay) 
    send_event('camera1', image: make_web_friendly(new_file1)) 

end 

En fait, mes emplois affichent uniquement les deux premières images (en @ oldFile1, @ newFile1) et après il était en stock dans une boucle où il n'affiche que les deux premières images attrapées sur mon tableau de bord fringant.

Donc, j'ai regardé dans le/assets et je vois mes deux snapshots.jpg actualiser en temps réel comme mes travaux comme l'a fait, mais le tableau de bord en pointillés ne l'affiche pas.

Alors pourquoi le tableau de bord ne prend pas l'image de rafraîchissement ..?

Répondre

0

juste couru dans ce numéro aujourd'hui. J'ai fini par réécrire les choses un peu. Assez sûr que c'est un problème de mise en cache du navigateur en ce que le nom du fichier est le même. Juste ajouté le datetime et le pousser semblait fonctionner.

require 'net/http' 
require 'open-uri' 

@url = 'http://172.1.1.16/image.jpg' 

SCHEDULER.every '4s', :first_in => 0 do |job| 

    `find '/dashing/f12dash/assets/images/cameras/' -type f -mmin +1 -print0 | xargs -0 rm -f` 

    @currentTime = Time.now.strftime("%Y-%m-%d_%H-%M-%S") 
    @newFile1 = "assets/images/cameras/snapshot-" + @currentTime + "_new.jpeg" 

    open(@url, :http_basic_authentication => ['root', 'CamPW']) do |f| 
     open(@newFile1,'wb') do |file| 
     file.puts f.read 
     end 
    end 

    send_event('camera1', image: ("/" + File.basename(File.dirname(@newFile1)) + "/" + File.basename(@newFile1))) 

end 
+0

Merci beaucoup travaillé votre script trouver, mais pour une raison inconnue, le image.jpeg parfois n'a pas été afficher sur le tableau de bord comme peut-être toutes les 5 images, au début, je pense que c'est parce qu'ils sont trop lourds, mais il est évidemment pas le fait, une idée? avez-vous eu le même problème? – Thibz