Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [gelöst] Dynamische URL aus Datenpunkt als View-Hintergrund

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Dynamische URL aus Datenpunkt als View-Hintergrund

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

      Hallo,
      wir (@Glasfaser und ich) haben es nun hinbekommen. Mittels Script hole ich mir jeden Tag den Link zum Bild. Dann mache ich einen Download, wobei der Dateiname fest vergeben ist. Das Script erneuert die Datei also einmal in 24 Stunden. Auf den Views habe ich den Hintergrund auf diese Datei eingetragen.
      Man muss in den Einstellungen des Javascript-Adapters folgendes Modul hinzufügen:
      request

      Hier das Script:

      schedule('10 0 * * *' , function()
      {
      const id_uri = 'javascript.0.Bild';
      var uri = getState(id_uri).val; 
      var fs = require('fs');
      var request = require('request');
      
      createState('javascript.0.Bild', "");
      createState('javascript.0.Title', "");
      BilddesTages();
      function BilddesTages(){
              var url = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=de-DE';
              request(url, function (err, state, body){
                  if (body) {
                      body = JSON.parse(body);
                      var bild = "https://bing.com/" + body.images[0].url;
                      var title = body.images[0].title;
                      setState("javascript.0.Bild", bild);
                      setState("javascript.0.Title", title);
                  } else {
                  }
              });
      }
      exec('rm -f /media/backup/bild.jpg');
      setTimeout(function(){
      var download = function(uri, filename, callback){
        request.head(uri, function(err, res, body){
          console.log('content-type:', res.headers['content-type']);
          console.log('content-length:', res.headers['content-length']);
          request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
        });
      };
      download(uri, '/media/backup/bild.jpg', function(){
        console.log('Bild heruntergeladen');
       
      setTimeout(function(){
      const bild1 = fs.readFileSync('/media/backup/bild.jpg');
      writeFile('vis.0','/main/img/bild_des_tages/bild.jpg', bild1);
      console.log('Bild kopiert')
      }, 30000);           
      });
      }, 30000);
      });
      
      

      Ich habe dabei den Pfad /media/backup als Downloadpfad genommen, vor dem Download wird die vorhandene Datei gelöscht. Das Script kopiert dann die Datei von /media/backup/ nach /opt/iobroker/iobroker-data/files/vis.0/main/img/bild_des_tages/. Der Link auf die Datei in der View sieht wie folgt aus:

      url(http://192.168.1.100:8082/vis.0/main/img/bild_des_tages/bild.jpg)
      

      04cd2131-2754-41fc-8a49-1b98f8c1f684-image.png
      … und die View sieht dann wie folgt aus:
      82665c25-21ee-4283-89dd-4e596a129a82-image.png

      Basti97 1 Reply Last reply Reply Quote 3
      • opossum
        opossum last edited by opossum

        Hallo,

        andere Variante mit CSS geht nun auch. In der View in der globalen CSS-Sektion folgendes eintragen:
        d723a3d3-c330-43ca-beb8-bdce9f4db5ab-image.png
        Hier noch mal der Code zum Kopieren. Man kann hier natürlich noch mehr Eigenschaften für das Image festlegen, wenn man das möchte.

        .hintergrund{
            background-image: url(http://192.168.1.100:8082/vis.0/main/img/bild_des_tages/bild.jpg);
        }
        

        Dann in den View-Eigenschaften noch die CSS-Klasse eintragen, fertig.
        f3bb7ad8-1d88-49ea-ac22-1aeadb55ecdb-image.png und die View sieht dann wie folgt aus, hier mal meine Seitenvorlage:

        5fed9398-d12e-4312-9663-a98beff0ca70-image.png

        Glasfaser TG70 2 Replies Last reply Reply Quote 1
        • Glasfaser
          Glasfaser @opossum last edited by

          @opossum

          Sehr schön erklärt ,dein ToDo 👍

          1 Reply Last reply Reply Quote 1
          • opossum
            opossum last edited by opossum

            Hallo,

            ich musste das Script im ersten Beitrag noch einmal anpassen, da das Überschreiben der Datei nicht funktionierte. Ich downloade die Datei jetzt erst einmal nach /media/backup. Hier muss man eventuell im Terminalfenster das Verzeichnis mit entsprechenden Rechten ausstatten -

            sudo chmod 777 media
            

            und dann auch im Verzeichnis media das backup-Verzeichnis entsprechend anpassen

            sudo chmod 777 backup
            

            , wenn der Download nicht klappt. Dann kopiere ich die Datei in den vis.0...-Pfad. Muss das jetzt beobachten, ob es so funktioniert.

            Glasfaser 1 Reply Last reply Reply Quote 0
            • Glasfaser
              Glasfaser @opossum last edited by Glasfaser

              @opossum

              Vielleicht so:

              
              download(uri, '/tmp/bild.jpg', function(){
              
               
              
              // Bild kopieren in VIS Verzeichnis für Anzeige im Webübersichtsbild      
              
              setTimeout(function(){
              
                        const bild1 = fs.readFileSync('/tmp/bild.jpg');
              
                        writeFile('vis.0','/main/img/bild_des_tages/bild.jpg', bild1);
              
                        console.log('Bild kopiert')    
              
                       });
              
                      }, 30000); // 20 sek warten bevor man das JPG umkopiert   
              
              
              1 Reply Last reply Reply Quote 2
              • opossum
                opossum last edited by opossum

                Hallo, @Glasfaser ,

                danke Dir, habe das Script oben mal angepasst. Heute hat es nicht funktioniert, da ich die Ermittlung des Bildes nicht mehr im Script hatte 😕 . Mal sehen, wie das heute nacht aussieht. Das umkopieren funktioniert.
                EDIT: Ich habe noch den Löschbefehl für die vorhandene Bilddatei eingefügt. Das Löschen passiert vor dem erneuten Download. Jetzt bleibt nur noch, in das Script die Error-Behandlung einzubauen.

                1 Reply Last reply Reply Quote 0
                • TG70
                  TG70 Forum Testing @opossum last edited by

                  Hallo,
                  geht die Änderung des Hintergrundes auch wenn ich nur einen Farbcode verwenden möchte.
                  Mein Vorhaben: Alle Views gleichzeitig ändern zu können?

                  opossum 1 Reply Last reply Reply Quote 0
                  • opossum
                    opossum @TG70 last edited by

                    Hallo, @tg70,

                    das habe ich nicht probiert, müsste man das Hintergrund CSS vielleicht anpassen?

                    TG70 1 Reply Last reply Reply Quote 0
                    • TG70
                      TG70 Forum Testing @opossum last edited by

                      @opossum ... Ok schade, denn genau sowas suche ich gerade

                      1 Reply Last reply Reply Quote 0
                      • Basti97
                        Basti97 Most Active last edited by

                        Ich bin gerade auf dein Post gestoßen. Funktoniert dein Script noch? Ich wollte für meine vis auch ein veränderbares Hindergrund Bild einfügen.

                        opossum 1 Reply Last reply Reply Quote 0
                        • opossum
                          opossum @Basti97 last edited by opossum

                          Hallo, @basti97,

                          ja, das funktioniert noch. Habe gerade geschaut, wurde um gestern um 02:30 Uhr heruntergeladen und kopiert.

                          Basti97 1 Reply Last reply Reply Quote 0
                          • Basti97
                            Basti97 Most Active @opossum last edited by

                            @opossum Super Danke also brauche ich nur das Script einfügen und dann habe ich das Bild. Ich probiere es mal aus.

                            1 Reply Last reply Reply Quote 0
                            • Basti97
                              Basti97 Most Active @opossum last edited by

                              @opossum said in [gelöst] Dynamische URL aus Datenpunkt als View-Hintergrund:

                              Hallo,
                              wir (@Glasfaser und ich) haben es nun hinbekommen. Mittels Script hole ich mir jeden Tag den Link zum Bild. Dann mache ich einen Download, wobei der Dateiname fest vergeben ist. Das Script erneuert die Datei also einmal in 24 Stunden. Auf den Views habe ich den Hintergrund auf diese Datei eingetragen.
                              Man muss in den Einstellungen des Javascript-Adapters folgendes Modul hinzufügen:
                              request

                              Hier das Script:

                              schedule('10 0 * * *' , function()
                              {
                              const id_uri = 'javascript.0.Bild';
                              var uri = getState(id_uri).val; 
                              var fs = require('fs');
                              var request = require('request');
                              
                              createState('javascript.0.Bild', "");
                              createState('javascript.0.Title', "");
                              BilddesTages();
                              function BilddesTages(){
                                      var url = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=de-DE';
                                      request(url, function (err, state, body){
                                          if (body) {
                                              body = JSON.parse(body);
                                              var bild = "https://bing.com/" + body.images[0].url;
                                              var title = body.images[0].title;
                                              setState("javascript.0.Bild", bild);
                                              setState("javascript.0.Title", title);
                                          } else {
                                          }
                                      });
                              }
                              exec('rm -f /media/backup/bild.jpg');
                              setTimeout(function(){
                              var download = function(uri, filename, callback){
                                request.head(uri, function(err, res, body){
                                  console.log('content-type:', res.headers['content-type']);
                                  console.log('content-length:', res.headers['content-length']);
                                  request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
                                });
                              };
                              download(uri, '/media/backup/bild.jpg', function(){
                                console.log('Bild heruntergeladen');
                               
                              setTimeout(function(){
                              const bild1 = fs.readFileSync('/media/backup/bild.jpg');
                              writeFile('vis.0','/main/img/bild_des_tages/bild.jpg', bild1);
                              console.log('Bild kopiert')
                              }, 30000);           
                              });
                              }, 30000);
                              });
                              
                              

                              Ich habe dabei den Pfad /media/backup als Downloadpfad genommen, vor dem Download wird die vorhandene Datei gelöscht. Das Script kopiert dann die Datei von /media/backup/ nach /opt/iobroker/iobroker-data/files/vis.0/main/img/bild_des_tages/. Der Link auf die Datei in der View sieht wie folgt aus:

                              url(http://192.168.1.100:8082/vis.0/main/img/bild_des_tages/bild.jpg)
                              

                              04cd2131-2754-41fc-8a49-1b98f8c1f684-image.png
                              … und die View sieht dann wie folgt aus:
                              82665c25-21ee-4283-89dd-4e596a129a82-image.png

                              Ist es das aktuelle???

                              opossum 1 Reply Last reply Reply Quote 0
                              • opossum
                                opossum @Basti97 last edited by opossum

                                Hallo, @basti97 ,
                                stelle das aktuelle Script zur Sicherheit hier noch mal ein, um 02:30 Uhr wird das Bild täglich heruntergeladen.

                                schedule('30 2 * * *' , function()
                                {
                                var fs = require('fs');
                                //Neue URL holen
                                const id_uri = '0_userdata.0.Bild';
                                var uri = getState(id_uri).val; 
                                //Löschen Bild vom Vortag
                                exec('rm -f /media/bild.jpg');
                                //Neues Bild Download
                                setTimeout(function(){
                                var download = function(uri, filename, callback){
                                  request(uri, function(err, res, body){
                                    console.log('content-type:', res.headers['content-type']);
                                    console.log('content-length:', res.headers['content-length']);
                                    request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
                                  });
                                };
                                download(uri, '/media/bild.jpg', function(err){
                                    if(err) {
                                        console.log('Fehler beim Herunterladen des Bildes');
                                    } else {
                                        console.log('Bild heruntergeladen');
                                    }
                                // Bild kopieren in VIS Verzeichnis für Anzeige im Webübersichtsbild      
                                setTimeout(function(){
                                const bild1 = fs.readFileSync('/media/bild.jpg');
                                delFile('vis.0', '/main/img/bild_des_tages/bild.jpg', function (err) {}); 
                                writeFile('vis.0','/main/img/bild_des_tages/bild.jpg', bild1);
                                console.log('Bild kopiert')
                                }, 30000);           
                                });
                                }, 30000);
                                });
                                

                                Habe die Datenpunkte mittlerweile in den Userdata-Bereich umgezogen.

                                Habe jetzt noch ein zusätzliches Script, das mir die Bildurl täglich 02.15 Uhr in meine Datenpunkte schreibt.

                                schedule('15 2 * * *' , function()
                                {
                                createState('0_userdata.0.Bild_des_Tages.Bild', "");
                                createState('0_userdata.0.Bild_des_Tages.Title', "");
                                BilddesTages();
                                function BilddesTages(){
                                        var url = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=de-DE';
                                        request(url, function (err, state, body){
                                            if (body) {
                                                body = JSON.parse(body);
                                                var bild = "https://bing.com/" + body.images[0].url;
                                                var title = body.images[0].title;
                                                setState("0_userdata.0.Bild_des_Tages.Bild", bild);
                                                setState("0_userdata.0.Bild_des_Tages.Title", title);
                                            } else {
                                            }
                                        });
                                }
                                });
                                

                                Liegt daran, dass ich auf meiner VIS einen Copyrighthinweis eingebaut habe. Man weiß ja nie.

                                Basti97 2 Replies Last reply Reply Quote 0
                                • Basti97
                                  Basti97 Most Active @opossum last edited by

                                  @opossum Super Danke und die beiden Scripte muss ich dann einfach einfügen. Wird eigentlich ein Datenpunk benötigt?

                                  opossum 1 Reply Last reply Reply Quote 0
                                  • opossum
                                    opossum @Basti97 last edited by

                                    Hallo, @basti97,

                                    ja, ich habe die beiden Datenpunkte 0_userdata.0.Bild_des_Tages.Bild und 0_userdata.0.Bild_des_Tages.Title angelegt.

                                    Basti97 1 Reply Last reply Reply Quote 0
                                    • Basti97
                                      Basti97 Most Active @opossum last edited by

                                      @opossum Also muss ich sie per Hand in den Ordner erstellen oder geht das automatisch??

                                      Glasfaser 1 Reply Last reply Reply Quote 0
                                      • Glasfaser
                                        Glasfaser @Basti97 last edited by

                                        @basti97 sagte in [gelöst] Dynamische URL aus Datenpunkt als View-Hintergrund:

                                        geht das automatisch??

                                        Jipp ,deswegen ist das drin :

                                        createState
                                        
                                        Basti97 1 Reply Last reply Reply Quote 0
                                        • Basti97
                                          Basti97 Most Active @Glasfaser last edited by

                                          @glasfaser Dankeschön 🙂

                                          1 Reply Last reply Reply Quote 0
                                          • Basti97
                                            Basti97 Most Active @opossum last edited by

                                            @opossum Ich habe noch eine Frage? Um den Scripten einen Namen zu geben. Was macht das erste und zweite Script?
                                            Ich könnte mir folgendes vorstellen: 1 Script. Bild abspeichern
                                            2 Script. altes Bild löschen

                                            ist das so richtig?? 🙂

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            473
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            vis
                                            6
                                            30
                                            5675
                                            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