NEWS
Bild in VIS einbinden (Script upload)
-
Ich denke das mache ich...wenn auch nicht bewusst.
// Bild speichern function saveImage() { request.get({url: source_url, encoding: 'binary'}, function (err, response, body) { fs.writeFile(dest_path, body, 'binary', function(err) { if (err) { log('Fehler beim Bild speichern: ' + err, 'warn'); } else { log('Webcam Bild gespeichert'); sendImage(dest_path); } }); }); setState(Klingel, false); }
Ich speichere das Billd unter:
'/opt/iobroker/iobroker-data/files/vis.0/main/img/ipcam2.jpg'
Aber wie gesagt, in VIS lässt es sich nicht einbinden.
-
@Mr-Burns sagte in Bild in VIS einbinden (Script upload):
wer das letzte mal bei uns geklingelt hat
geht es zufällig um eine Doorbird?
-
@Negalein Hilft uns das hier weiter?
-
Ist eine Mobotix T26...aber ich denke unabhängig.
Ist halt ein jpg Bild. -
@Homoran sagte in Bild in VIS einbinden (Script upload):
Hilft uns das hier weiter?
Ja, denn wäre es eine Doorbird hätte ich ihm gleich die passenden Links für Vis liefern können.
-
@Mr-Burns
Ich denke mal da mit dem Befehl irgendwas nicht stimmt.
Hast du dir die beiden Dinger hier mal durchgelesen?
https://forum.iobroker.net/topic/25541/gelöst-wie-writefile-in-js-script-nutzen/9
https://forum.iobroker.net/topic/25541/gelöst-wie-writefile-in-js-script-nutzen/36
Ich nutze bei dem Befehl keine Pfadangabe wie du aufgeführt hast.
Probier doch einfach mal von mir den Codeschnipsel und schiebe das Bild in den anderen Ordner. -
Ich versuch es mal aufzubröseln:
Du liest in deiner internen Variable „bild1“ dein Bild (Pfad)ein (oder sind es Bildinformationen?).
- Der pfad ist je relativ. Wo liegt das Bild denn da genau? Im Javaordner?Dann schreibst du:
Was ist 0_userdata.0? Ein unterorder?
alarm1.jpg ist dein „neuer“ name und „bild1“ die herkunft?Wie triggerst du das 2. Script? Ich muss auch wissen, wo ich das Kamerabild im ersten script ablegen muss, damit das 2. script das Bild findet.
Wo liegt dein Bild dann in VIS?
Versteh nicht warum das so kompliziert ist. (Bzw. für mich)
-
@Mr-Burns
Ich gebe dir mal das ganze Script:var sperre = false; //verhindert das doppeltes Drücken das Script stoppt var timeout1, timeout2, timeout3, timeout4, timeout5, timeout6, timeout7, timeout8, timeout9, timeout10, timeout11; var fs = require('fs'); on({id: 'sonoff.0.Eingang.POWER2', val: true}, function (obj) { if(!sperre) { sperre = true; setState("tr-064-community.0.states.ring"/*ring*/, '**610, 15'); //Klingelt 15 Sekunden auf dem Telefon // Speichert das erste Bild bei Klingeln exec('wget --output-document /tuer/alarm1.jpg \'http://192.168.8.95:8765/picture/1/current/?_username=xxxxx&_signature=xxxxx\''); // Es wird 2500ms gewartet um dieses speichern auszuführen timeout1 = setTimeout(function () { // Und hier wird es versendet sendTo("email", "send", { text: '', to: 'xxxx@gmail.com', subject: 'Klingel', attachments:[ {path: '/tuer/alarm1.jpg', cid: "file1"}, ] }); sendTo("email", "send", { text: '', to: 'xxxx@gmail.com', subject: 'Klingel', attachments:[ {path: '/tuer/alarm1.jpg', cid: "file1"}, ] }); }, 2500); // Nach dem ersten Bild wird nach 5000ms das nächste Bild gespeichert timeout2 = setTimeout(function () { exec('wget --output-document /tuer/alarm2.jpg \'http://192.168.8.95:8765/picture/1/current/?_username=xxxx&_signature=xxxx\''); // Es wird 2500ms gewartet um dieses speichern auszuführen timeout3 = setTimeout(function () { // Und hier wird es versendet sendTo("email", "send", { text: '', to: 'xxxx@gmail.com', subject: 'Klingel', attachments:[ {path: '/tuer/alarm2.jpg', cid: "file1"}, ] }); sendTo("email", "send", { text: '', to: 'xxxx@gmail.com', subject: 'Klingel', attachments:[ {path: '/tuer/alarm2.jpg', cid: "file1"}, ] }); }, 2500); }, 5000); timeout4 = setTimeout(function () { exec('wget --output-document /tuer/alarm3.jpg \'http://192.168.8.95:8765/picture/1/current/?_username=xxxx&_signature=xxxx\''); }, 10000); timeout5 = setTimeout(function () { exec('wget --output-document /tuer/alarm4.jpg \'http://192.168.8.95:8765/picture/1/current/?_username=xxxx&_signature=xxxx\''); }, 10000); } setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "Neu/Tuer"}'); // oder //setState("vis.0.control.instance", 'FFFFFFFF'); //setState("vis.0.control.data", 'DemoView'); //setState("vis.0.control.command", 'changeView'); // muss immer letzte sein // Setze View auf Kamerabild timeout6 = setTimeout(function () { setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "Neu/Info"}'); }, 60000); // Nach 60 Sekunden, zeige wieder Start View timeout7 = setTimeout(function () { setState("alexa2.0.Echo-Devices.G2Axxxx.Commands.speak-volume"/*speak-volume*/, 70, true); }, 500); // Setzt Alexa auf 90% timeout8 = setTimeout(function () { setState("alexa2.0.Echo-Devices.G2Axxxx.Commands.speak"/*speak*/, 'Es ist jemand an der Tür'); }, 1000); // Sprachansage timeout9 = setTimeout(function () { setState("alexa2.0.Echo-Devices.G2Axxxx.Commands.speak-volume"/*speak-volume*/, 30, true); }, 5000); // Setzt Alexa auf 50% timeout10 = setTimeout(function() { sperre = false; }, 5000); //Zeit für Klingelsperre 1.Zeile timeout11 = setTimeout(function () { const bild1 = fs.readFileSync('/tuer/alarm1.jpg'); writeFile('0_userdata.0','alarm1.jpg', bild1); const bild2 = fs.readFileSync('/tuer/alarm2.jpg'); writeFile('0_userdata.0','alarm2.jpg', bild2); const bild3 = fs.readFileSync('/tuer/alarm3.jpg'); writeFile('0_userdata.0','alarm3.jpg', bild3); const bild4 = fs.readFileSync('/tuer/alarm4.jpg'); writeFile('0_userdata.0','alarm4.jpg', bild4); }, 5000); });
Ich speicher also das Bild im Ordner /tuer/ und verschiebe das dann in den Ordner 0_userdata.0. Du kannst auch den Ordner vis.0 nehmen wenn dir das lieber ist.
Der Ordner 0_userdata wurde mit dem Scriptupdate eingeführt und ich verwende den für solche Zwecke. Leider ist der VisEditor noch nicht so weit das man dort Daten über den Dateimanager hochladen kann.alarm#.jpg ist der Name unter dem ich das Bild im Ordner tuer speichere und das verschiebe ich dann in den userdata Ordner und benenne es um. Das umbenennen muss nicht unbedingt sein, aber ich habe das irgendwann mal gemacht weil ich gedacht habe das hilft mir die Bilder zu unterscheiden. Ist aber Blödsinn (den ich noch nicht korrigiert habe).
-
Danke, ich probiere es aus und melde mich zurück. Versuch es heute Abend...
Gruß
-
Da bin ich wieder. Es funktioniert. Vielen Dank für eure unterstützung.
Wichtig zu wissen wäre noch:
- Timer (TimeOut) ist notwendig, da das holen des Bildes von der Kamera länger dauert als das Kopieren.
- Der Pfad in VIS muss angegeben werden, da der Dateimanager nur bis /VIS.0 anzeigen kann (0_userdata.0 lässt sich aber einbinden)
Das man das so machen muss, ist das jetzt ein bug oder ein feature?
//Einlesen des Bildes (+informationen) und in die Datenbank übernehmen (für VIS) timeout_VIS = setTimeout(function () { //Zeitverzögert das Bild kopiere, da das Speichern länger als das kopieren dauert const bild = fs.readFileSync('/opt/ipcam/ipcam2.jpg'); // Lesen des Bildes(+Informationen) writeFile('0_userdata.0','ipcam2.jpg', bild); // Schreibe Bild in Userdaten (VIS: /0_userdata.0/ipcam2.jpg wird nicht über Explorer gefunden) }, 5000); // Zeitverzögerung in ms (5sec)
Noch mal danke für die Hilfe und Geduld!
-
@Mr-Burns Freut mich zu hören.
Stimmt übrigens mit dem Timeout. Das war mir total entfallen.
Der Weg ist ein Feature. Das hat damit zu tun das nicht einfach wild irgendwas in die Ordner geschrieben wird und das System liest die unkontrolliert ein.