Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skript um auf neue Tasmota Version zu prüfen

    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

    Skript um auf neue Tasmota Version zu prüfen

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      Jan1 @Leviathan09 last edited by

      @Leviathan09
      Wenn es Dir nur um die Master Version geht, dann ist das richtig. Bei der Dev. Version gibts fast täglich was neues. Wobei ich nur update, wenn auch für mich relevante Änderungen dabei sind, was so alle 3 Wochen der Fall ist. Deshalb hilft da nur nach schauen und lesen was geändert wurde.

      L 1 Reply Last reply Reply Quote 0
      • L
        Leviathan09 @Jan1 last edited by

        @Jan1 Ja geht mir erstmal nur um die Master. Da es bei mir nur ein paar einfache Steckdosen betrifft denke ich sind die Änderungen in den Dev-Releases nicht so wichtig für mich.

        1 Reply Last reply Reply Quote 0
        • L
          Leviathan09 last edited by Leviathan09

          So hier nun mal das Skript so wie ich es mir erstellt habe.
          Vermutlich könnte man auch immer die gleiche Variable nehmen und mit dem neuen Inhalt "updaten" aber so war es für mich als Anfänger übersichtlicher.
          Ebenso könnte man natürlich die Variablen noch global im Skript deklarieren usw. aber wie schon gesagt für mich als Anfänger war es so jetzt erstmal einfacher/übersichtlicher.

          exec('curl -X GET -k \'https://api.github.com/repos/arendst/Sonoff-Tasmota/releases/latest\'', function (error, result, stderr) { 	//GitAPI aufruf für JSON Inhalt von Latest Tasmota Release
              
              setState("ioBroker-Objekt-1", result, true); 			//JSON in Objekt schreiben
              var Tasmonta_JSON = JSON.parse(result) 				//JSON Resultat in Variable Schreiben
              
              var TasmotaTagName = Tasmonta_JSON.tag_name 			//JSON nach "tag_name" filtern und in Variable schreiben
              
              var TasmotaVersion = TasmotaTagName.replace(/v/i, ""); 		//Aus Variable überflüssiges "v" filtern und in Release-Variable schreiben
              console.log(TasmotaVersion); 					//Dient zur Überprüfung ob der richtige Wert abgerufen wird
          
              setState("ioBroker-Objekt-1", TasmotaVersion, true); 		//Release Nummer in Objekt schreiben
            });
          

          Die Ausgabe von "console.log" sieht am Ende dann so aus:

          21:13:15.456	info	javascript.0 script.js.common.Tasmota_Update: 6.5.0
          
          smartboart 1 Reply Last reply Reply Quote 0
          • smartboart
            smartboart @Leviathan09 last edited by smartboart

            @Leviathan09

            Hallo, fand die Idee von deinem Skript super und habe mal angefangen das weiter auszuarbeiten.
            Ich habe diverse Funktionen hinzugefügt, sowie einen täglichen Schedule zur Abfrage eingebaut. Ebenfalls States für Vis und als Trigger angelegt.
            Logs hinzugefügt und Telegram Nachrichten eingebaut.

            // - to do: automatischer download der Firmware und automatischer Update aller Endgeräte...
            // - download über Umwege lokal zum Multihostmaster oder NAS , wenn alle Tasmota Geräte vom Internet getrennt sind / bei mir der Fall.
            // - Für User welche alle Endgeräte mit dem Internet verbunden haben könnte automatisch OTA via Webserver upgedatet werden
            // - Ideen und Änderung weiterer User

            Hoffe du hast nix dagegen.. Wer interesse hat, hier die Erweiterung:

            // Ur Skript von Leviathan09 19.05.2019 erweitert von smartboart
            // smartboard 09.11.2019 
            // smartboart : diverse Funktionen hinzugefügt, sowie einen täglichen Schedule zur Abfrage eingebaut. 
            // Ebenfalls States für Vis und als Trigger angelegt.
            // logs erweitert und Telegram Nachrichten hinzugefügt 
            // - to do: automatischer download der Firmware und automatischer Update aller Endgeräte... 
            // - download über Umwege lokal zum Multihostmaster oder NAS , wenn alle Tasmota Geräte vom Internet getrennt sind / bei mir der fall.
            // - Für User welche alle Endgeräte mit dem Internet verbunden haben könnte automatisch OTA via Webserver upgedatet werden
            // - Ideen und Änderung weiterer User
            
            
            // Tasmota Update Script
            
            // States für Vis und zukünftige Trigger für Update
            createState('javascript.0.Status.Tasmota.Tasmota_Firmware.Update',{ def: false,  type: 'boolean', name: 'Tasmota Update verfügbar'});
            createState('javascript.0.Status.Tasmota.Tasmota_Firmware.Version',{ type: 'string', read: true, write: true, desc: 'Tasmota Firmware Version online', name: 'Tasmota Firmware Update Version'});
            
            const id1 = 'javascript.0.Status.Tasmota.Tasmota_Firmware.Update';
            const id2 = 'javascript.0.Status.Tasmota.Tasmota_Firmware.Version';
            
            var logging = true; // log aktivieren, deaktivieren
            var telegram = true; // telegram Versand aktiveren, deaktivieren
            var autoupdate = false; // under construction
            var download = false; // under construction
            var downloadlink = 'http://thehackbox.org/tasmota/release/sonoff.bin'; //downloadlink für bin file
            
            // Skriptstart
            check_Version();
            
            //Version abrufen
            
            function check_Version(){
            
                exec('curl -X GET -k \'https://api.github.com/repositories/80286288/releases/latest\'', function (error, result, stderr){	//GitAPI aufruf für JSON Inhalt von Latest Tasmota Release
                var Tasmota_JSON = JSON.parse(result) 				//JSON Resultat in Variable Schreiben
                var TasmotaTagName = Tasmota_JSON.tag_name 			//JSON nach "tag_name" filtern und in Variable schreiben
                if (logging)log('aktuelle Tasmota Firmware ' + TasmotaTagName); 					//Dient zur Überprüfung ob der richtige Wert abgerufen wird
                setState(id2, TasmotaTagName, true); 		//Release Nummer in Objekt schreiben
            });
            }
            
            // Function für Vis und für Update starten
            function Update() {
            if(telegram) sendTo("telegram.0", "send", {text: (['Tasmota Firmware Update verfügbar: ',getState(id2).val,''].join(''))});
            setState(id1,true,true);
            if(logging)log (['Tasmota Firmware Update verfügbar: ',getState(id2).val,''].join(''));
            }
            
            // Update starten oder Firmware automatisch herunter laden
            function Remote (){
            if(logging && autoupdate)log('Tasmota Firmwareupdate der dafür konfigurierten Geräte gestartet ');
            if(telegram && autoupdate) sendTo("telegram.0", "send", {text: ('Tasmota Firmware Update der dafür konfigurierten Geräte gestartet')});
            
            /*if(update)hier die dazu nötign Befehler integrieren. in Arbeit.....wie z.B download der Firmware in definierten Pfad ( eingetragen in der Tasmota Config)
            und update aller dazu konfigurierten Geräte. wenn Updtae ausgeführt State für Vis zurück setzen
            setState(id1,false,true);*/
            
            if(logging && download)log('Tasmota Firmwaredownload  gestartet ');
            if(telegram && download) sendTo("telegram.0", "send", {text: ('Tasmota Firmware download gestartet')});
            /*if(download) hier die dazu nötigen Befehle integrieren 
            Satet update verfügbar wird für diesen Fall manuell über vis zurück gesetzt */
            }
            
            // Trigger täglich um 23:58 die online verfügbare Version / latest abfragen
            schedule({hour: 23, minute: 58}, function () {
            check_Version ();
            if(logging)log('Tägliche Versionsabfrage')
            });
            
            // Trigger Meldung und Funktion für Vis wenn update Verfügbar bzw. bei Stateänderung
            on(id2, function(dp) {
            Update();
            if(logging)log('TasmotaFirmwareupdate verfügbar');
            });
            
            // Trigger für  Automatisches Update oder firmwaredownload
            on(id1, function(dp) {
            Remote();
            if(logging && autoupdate)log('Tasmota Firmwareupdate der dafür konfigurierten Geräte starten ');
            if(logging && download)log('Tasmota Firmware download starten ');
            });
            
            
            
            1 Reply Last reply Reply Quote 1
            • M
              Machinima last edited by

              In Anlehnung an das CCU-Firmwareupdate Skript habe ich mir das für die Sonoff-/Tasmota-Geräte angepasst. Auch hier müsst ihr einen Datenpunkt vom Typ Zeichenkette erstellen und ggf. in dem Skript ersetzen.

              const id_Version_Internet = '0_userdata.0.Servicemeldungen.Verfuegbare_Tasmota-Firmware'/*Verfuegbare Tasmota-Firmware*/;
              

              Benachrichtigung per Pushover, E-Mail oder oder Telegram funktioniert ebenfalls. Berücksichtigt werden nur Geräte, die unter dem Sonoff-Adapter laufen.

              const logging = true; 
              const debugging = false;
              
              //Prio für Pushover
              const prio_Firmware = 1;
              
              //Variablen für Pushover
              const sendpush = true;            //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt
              const pushover_Instanz0 =  'pushover.0';     // Pushover instance für Pio = 0
              const pushover_Instanz1 =  'pushover.1';     // Pushover instance für Pio = 1
              const pushover_Instanz2 =  'pushover.2';     // Pushover instance für Pio = 2
              const pushover_Instanz3 =  'pushover.3';     // Pushover instance für Pio = -1 oder -2
              let _prio;
              let _titel;
              let _message;
              //const _device = 'TPhone';         //Welches Gerät soll die Nachricht bekommen
              const _device = 'All'; 
              
              //Variablen für Telegram
              const sendtelegram = false;            //true = verschickt per Telegram Nachrchten // false = Telegram wird nicht benutzt
              const user_telegram = '';             //User der die Nachricht bekommen soll
              
              //Variable zum verschicken der Servicemeldungen per eMail
              const sendmail = false;            //true = verschickt per email Nachrchten // false = email wird nicht benutzt
              
              let _message_tmp;
              
              const id_Version_Internet = '0_userdata.0.Servicemeldungen.Verfuegbare_Tasmota-Firmware'/*Verfuegbare Tasmota-Firmware*/;
              var cacheSelectorTasmotaVersions = $('channel[state.id=sonoff.0.*.Version]');
              
              const request = require('request');
              
              function func_Version() {
                  var options = {
                      url: 'https://api.github.com/repos/arendst/Tasmota/releases/latest',
                      headers: {
                          'User-Agent': 'ioBroker Tasmota Firmware Check'
                      }
                  };
              
                  request(options, function (error, response, body) {
                      const availableFirmware = getState(id_Version_Internet).val;
              
                      if(error) {
                          log('error: ' + error);
                      } else {
                          var tasmotaJson = JSON.parse(body); 
                          var tasmotaTagName = tasmotaJson.tag_name;
                          var tasmotaVersion = tasmotaTagName.replace(/v/i, "").trim();
              
                          if(availableFirmware == ''){
                              if(logging){
                                  log('ausgewähltes Objekt leer. Firmware wird erstmalig gesetzt. Firmware: '+ tasmotaVersion);// +' Zentrale: ' +Version[3]);
                              }
                              setState(id_Version_Internet, tasmotaVersion);
                          }
              
                          var devices = [];
              
                          cacheSelectorTasmotaVersions.each(function (id, i) {
                              var installedFirmware = getState(id).val.trim();
                              installedFirmware = installedFirmware.replace('(sonoff)', '').trim();
                              installedFirmware = installedFirmware.replace('(tasmota)', '').trim();
              
                              var obj = getObject(id);
                              var infoId = id.substring(0, id.lastIndexOf("."));
                              var hostName = getState(infoId + '.Hostname').val;
              
                              if(installedFirmware == tasmotaVersion){
                                  if(logging){
                                      log('Installierte Tasmota-Firmware für Gerät ' + hostName  + ' ist aktuell.');
                                  }
                              } else {
                                  if(logging){
                                      log('Installierte Tasmota-Firmware für Gerät ' + hostName  + ' (' + installedFirmware + ') ist nicht aktuell. Aktuell verfügbare Version: ' + tasmotaVersion);
                                  }
                                  
                                  if(availableFirmware == tasmotaVersion){
                                      if(debugging){
                                          log('[DEBUG] ' + 'Version Internet hat sich nicht verändert');
                                      }
                                  } else {
                                      if(debugging){
                                          log('[DEBUG] ' + 'Installierte Tasmota-Firmware ist nicht aktuell.');
                                      }
                                      
                                      setState(id_Version_Internet, tasmotaVersion);
              
                                      devices.push(hostName + ' (' + installedFirmware + ')');
                                  }         
                              }
                          });
              
                          if(devices.length > 0) {
                              _message_tmp = 'Neue Tasmota-Firmware ' + tasmotaVersion + ' für folgende Geräte verfügbar:\n' + devices.join('\n');
                      
                              //Push verschicken
                              if(sendpush){
                                  _prio = prio_Firmware;
                                  _titel = 'Tasmota-Firmware';
                                  _message = _message_tmp;
                                  send_pushover_V4(_device, _message, _titel, _prio);
                              }
                              if(sendtelegram){
                                  _message = _message_tmp;
                                  send_telegram(_message, user_telegram);
                              }
                              if(sendmail){
                                  _message = _message_tmp;
                                  send_mail(_message);
                              }
                          }
                      }
                  });
              }
                      
              function send_pushover_V4 (_device, _message, _titel, _prio) {
                      let pushover_Instanz;
                      if (_prio === 0){pushover_Instanz =  pushover_Instanz0}
                      else if (_prio == 1){pushover_Instanz =  pushover_Instanz1}
                      else if (_prio == 2){pushover_Instanz =  pushover_Instanz2}
                      else {pushover_Instanz =  pushover_Instanz3}
                      sendTo(pushover_Instanz, { 
                      device: _device,
                      message: _message, 
                      title: _titel, 
                      priority: _prio,
                      retry: 60,
                      expire: 600,
                      html: 1
                  }); 
              }
              
              function send_telegram (_message, user_telegram) {
                  sendTo('telegram.0', { 
                      text: _message,
                      user: user_telegram,
                      parse_mode: 'HTML'
                  }); 
              }
              
              function send_mail (_message) {
                  sendTo("email", {
                      //from:    "iobroker@mydomain.com",
                      //to:      "aabbcc@gmail.com",
                      subject: "Servicemeldung",
                      text:    _message
                  });
              }
              
              // um 10:00 Uhr prüfen
              schedule({hour: 10, minute: 0}, func_Version);
              
              //beim Starten
              func_Version();
              
              1 Reply Last reply Reply Quote 1
              • smartboart
                smartboart last edited by smartboart

                Hallo, jemand ne idee wie ich den download der Datei hinbekomme und entsprechend ablege.. (downloadlink) im nächsten Schritt möchte ich die Datei auf dem ftpServer ablegen..

                Hab unten mal was zusammen geschustert, aber bekomme folgende Fehlermeldung..
                Wo mache ich einen Fehler?

                (1700) script.js.common.Status_Geraete.Sonstige.Tasmota_Updateprüfung: Fehler beim speichern: Error: EISDIR: illegal operation on a directory, open '/opt/iobroker/iobroker-data/files/_temp/'

                const id1 = 'javascript.0.Status.Tasmota.Tasmota_Firmware.Update';
                
                var logging = true;
                var telegram = false;
                var download = true; // under construction
                var destpath = '/opt/iobroker/iobroker-data/files/_temp/';
                //zielpfad für bin file
                var downloadlink1 = 'http://thehackbox.org/tasmota/release/tasmota-minimal.bin'; //downloadlink für bin file
                var downloadlink2 = 'http://thehackbox.org/tasmota/release/tasmota.bin'; //downloadlink für bin file
                
                var fs      = require('fs');
                var request = require('request');
                
                // Update starten oder Firmware automatisch herunter laden
                on({id:id1,val:true,change:'ne'},function(dp){
                if(download){
                    request.get({url: downloadlink1, download: 'binary'}, function (err, response, body) {
                        fs.writeFile(destpath, body, 'binary', function(err){
                if(logging )log('Tasmota Firmwaredownload  gestartet ');
                if(telegram) sendTo("telegram.0", "send", {text: ('Tasmota Firmware download gestartet')});
                        if (err && logging){
                             log('Fehler beim  speichern: ' + err);
                                }
                            }); 
                        });
                    }
                });
                
                
                1 Reply Last reply Reply Quote 0
                • H
                  Henning last edited by

                  @smartboart said in Skript um auf neue Tasmota Version zu prüfen:

                  var destpath = '/opt/iobroker/iobroker-data/files/_temp/'

                  Hallo Smartboart,
                  versuch mal statt des Pfades den Dateinamen angegeben, also

                  var destpath = '/opt/iobroker/iobroker-data/files/_temp/tasmota.bin'

                  EISDIR bedeutet: "Error, is Directory", es wird versucht, eine Datei in einen Verzeichnisnamen zu kopieren.

                  Viele Grüße,

                  Henning

                  smartboart 1 Reply Last reply Reply Quote 0
                  • smartboart
                    smartboart @Henning last edited by smartboart

                    @Henning sagte in Skript um auf neue Tasmota Version zu prüfen:

                    var destpath = '/opt/iobroker/iobroker-data/files/_temp/tasmota.bin'

                    Danke...das wars....

                    jetzt müsste ich das noch auf den FTP Server rüber schieben...
                    damit klappt es leider nicht...
                    noch ne idee?

                    var destpath1 = 'ftp://usr:pwd@ipadress/iobroker/tasmota/tasmota-minimal.bin'; //zielpfad für bin file
                    
                    
                    
                    //  Firmware automatisch herunter laden
                    
                    
                    var download = true; // under construction
                    var destpath1 = '/opt/iobroker/iobroker-data/files/_temp/tasmota-minimal.bin';
                    var destpath2 = '/opt/iobroker/iobroker-data/files/_temp/tasmota.bin';
                    var downloadlink1 = 'http://thehackbox.org/tasmota/release/tasmota-minimal.bin'; //downloadlink für bin file
                    var downloadlink2 = 'http://thehackbox.org/tasmota/release/tasmota.bin'; //downloadlink für bin file
                    var fs      = require('fs');
                    var request = require('request');
                    var logging = true; 
                    
                    on({id:idUpdate,val:true,change:'ne'},function(dp){
                        if(download){
                        download1();
                        download2();
                        }
                    });
                    
                    function download1(){
                        request.get({url: downloadlink1, download: 'binary'}, function (err, response, body) {
                            fs.writeFile(destpath1, body, 'binary', function(err){
                    if(logging)log('Tasmota Firmwaredownload tasmota-miniml.bin gestartet ');
                    if(sendtelegram) sendTo("telegram.0", "send", {text: ('Tasmota Firmware download tasmota-minimal.bin gestartet')});
                            if (err && logging){
                                 log('Fehler beim  speichern: ' + err);
                                }
                            }); 
                        });
                    }
                    
                    function download2(){
                        request.get({url: downloadlink2, download: 'binary'}, function (err, response, body) {
                            fs.writeFile(destpath2, body, 'binary', function(err){
                    if(logging)log('Tasmota Firmwaredownload tasmota.bin gestartet ');
                    if(sendtelegram) sendTo("telegram.0", "send", {text: ('Tasmota Firmware download tasmota.bin gestartet')});
                            if (err && logging){
                                 log('Fehler beim  speichern: ' + err);
                                }
                            }); 
                        });
                    } 
                    
                    1 Reply Last reply Reply Quote 0
                    • Basti97
                      Basti97 Most Active last edited by

                      Gibt es ein fertiges Script inklusive Telegram benachrichtigung von dir @smartboart 🙂
                      und Visu Anzeige.

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

                        @basti97
                        https://forum.iobroker.net/topic/38118/vorlage-tasmota-one-click-firmware-update-vis-javascript?_=1624399595655

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

                          @smartboart Danke ich werde es testen.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          799
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          javascript
                          7
                          17
                          2660
                          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