Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Bild in VIS einbinden (Script upload)

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Bild in VIS einbinden (Script upload)

    This topic has been deleted. Only users with topic management privileges can see it.
    • Mr. Burns
      Mr. Burns last edited by

      Hi,

      Ich möchte ein Bild im VIS anzeigen welchen NICHT durch den uploader hochgeladen wurde.

      Es wird durch ein script in den Ordner Vis.0 gespeichert (Kann auch jeder andere sein). Ich kann das Bild aber nicht anzeigen. Nur wenn ich es manuell über den uploader hochlade geht es.

      Das Bild ändert sich aber, dann gehts wieder nicht mehr (Kamerabild Haustür).

      Was muss ich machen? Externe Quellen gehen doch auch...muss doch auch intern funktionieren.

      Chaot Homoran 2 Replies Last reply Reply Quote 1
      • Chaot
        Chaot @Mr. Burns last edited by

        @Mr-Burns Nö. Geht nicht mehr.

        Einzige Möglichkeit ist das Bild per per Script in den Ordner zu schieben.

        ....
                 const bild1 = fs.readFileSync('/tuer/alarm1.jpg');
                 writeFile('0_userdata.0','alarm1.jpg', bild1);
                ...
        

        In dem Script

        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @Mr. Burns last edited by

          @Mr-Burns sagte in Bild in VIS einbinden (Script upload):

          Externe Quellen gehen doch auch...

          Aber nur wenn es über eine Netzwerkadresse aufzurufen ist.
          Das sollte doch bei der Kamera der Fall sein - dann als iFrame einbinden

          1 Reply Last reply Reply Quote 0
          • Mr. Burns
            Mr. Burns last edited by

            Die Kamera ist im Netzwerk. Aber die leifert ein Live-Bild. Mich interessiert, wer das letzte mal bei uns geklingelt hat. Bisher hab ich das per Script von der Homematic auf der CCU gespeichert und dann per Netzwerk darauf zugegriffen.

            Jetzt hab ich ein ioBroker script. Funktioniert alles...bis auf das Bild anzeigen.

            Das mit dem Script, hab ich nicht wirklich verstanden. Ich kann es mit dem vorhandenen Script doch überall hinschreiben. Warum verschieben?

            Homoran Chaot Negalein 3 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @Mr. Burns last edited by

              @Mr-Burns sagte in Bild in VIS einbinden (Script upload):

              Ich kann es mit dem vorhandenen Script doch überall hinschreiben.

              Bilder die in vis eingebunden werden müssen über die Upload Funktion in vis registriert werden

              1 Reply Last reply Reply Quote 1
              • Chaot
                Chaot @Mr. Burns last edited by

                @Mr-Burns
                Du musst sie zumindest mit dem Befehl "writefile" einbinden. Dann funktioniert das.

                1 Reply Last reply Reply Quote 0
                • Mr. Burns
                  Mr. Burns last edited by Mr. Burns

                  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.

                  Chaot 1 Reply Last reply Reply Quote 0
                  • Negalein
                    Negalein Global Moderator @Mr. Burns last edited by

                    @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?

                    Homoran 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @Negalein last edited by

                      @Negalein Hilft uns das hier weiter?

                      Negalein 1 Reply Last reply Reply Quote 0
                      • Mr. Burns
                        Mr. Burns last edited by

                        Ist eine Mobotix T26...aber ich denke unabhängig.
                        Ist halt ein jpg Bild.

                        1 Reply Last reply Reply Quote 0
                        • Negalein
                          Negalein Global Moderator @Homoran last edited by

                          @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.

                          1 Reply Last reply Reply Quote 0
                          • Chaot
                            Chaot @Mr. Burns last edited by

                            @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.

                            1 Reply Last reply Reply Quote 0
                            • Mr. Burns
                              Mr. Burns last edited by

                              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)

                              Chaot 1 Reply Last reply Reply Quote 0
                              • Chaot
                                Chaot @Mr. Burns last edited by

                                @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).

                                1 Reply Last reply Reply Quote 0
                                • Mr. Burns
                                  Mr. Burns last edited by

                                  Danke, ich probiere es aus und melde mich zurück. Versuch es heute Abend...

                                  Gruß

                                  1 Reply Last reply Reply Quote 0
                                  • Mr. Burns
                                    Mr. Burns last edited by

                                    Da bin ich wieder. Es funktioniert. Vielen Dank für eure unterstützung.

                                    Wichtig zu wissen wäre noch:

                                    1. Timer (TimeOut) ist notwendig, da das holen des Bildes von der Kamera länger dauert als das Kopieren.
                                    2. 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!

                                    Chaot 1 Reply Last reply Reply Quote 1
                                    • Chaot
                                      Chaot @Mr. Burns last edited by

                                      @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.

                                      1 Reply Last reply Reply Quote 1
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      638
                                      Online

                                      31.6k
                                      Users

                                      79.4k
                                      Topics

                                      1.3m
                                      Posts

                                      vis
                                      4
                                      17
                                      1453
                                      Loading More Posts
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      The ioBroker Community 2014-2023
                                      logo