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.
    • 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
                      • Glasfaser
                        Glasfaser @Basti97 last edited by

                        @basti97

                        Was macht das erste und zweite Script?

                        Hat er doch beschrieben !?:

                        um 02:30 Uhr wird das Bild täglich heruntergeladen.

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

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        599
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

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