Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script zur Überprüfung ob eine neue Firmware für die CCU verfügbar ist

    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

    Script zur Überprüfung ob eine neue Firmware für die CCU verfügbar ist

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

      @cash said in Script zur Überprüfung ob eine neue Firmware für die CCU verfügbar ist:

      Leider funktioniert das Script nur für ccu2 und ccu3.

      Bitte noch einmal meinen ersten Post lesen....

      Leider funktioniert das Script nur für ccu2 und ccu3.

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

        danke für den Hinweis...hatte ich aber gelesen....hab ne raspberrymatic ccu3... oder meinst du damit das es nur mit der originalen CCU 3 funktioniert?
        Edit...habe mir gerade das Script nochmal angeschaut...geht nur mit der originalen, wegen des link von homematic...
        'http://update.homematic.com/firmware/download?cmd=js_check_version&version=12345&product=HM-CCU3&serial=12345

        hab das mal im homematic forum angefragt...

        cash 2 Replies Last reply Reply Quote 0
        • iomountain
          iomountain last edited by iomountain

          Meine CCU hat kein Internet und steuert nur die Heizung und das läuft so Perfekt, das ich den Adapter irgendwann wieder deinstalliert habe.
          Hab mir einfach einen zweiten Datenpunkt 'id_Version_Installiert' angelegt. Jetzt bekomme ich dank Dir eine Meldung wenn mal wieder ein Update gemacht werden sollte. Super Sache, Danke

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

            @smartboart Raspberrymatic ist keine ccu3. Genau so wenig wie alle anderen Clone...

            Wie Du richtig erkannt hast fehlt es an einer einfachen Abfrage ob eine neue Version für die anderen CCU-Ableger existieren...

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

              @smartboart In der nächsten Version ist die Abfrage für Raspi möglich.

              smartboart 1 Reply Last reply Reply Quote 0
              • Dutchman
                Dutchman Developer Most Active Administrators last edited by Dutchman

                hab mir erlaubt nen pull request zu schicken mit n par Optimierungen der Variablen 🙂
                Schöne Sache btw ! i like it !

                Man könnte mal schauen ob wir das nicht in de RPC oder mega integrieren könnten ?

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

                  @cash hier der link dafür...Rasperrymatic
                  https://gitcdn.xyz/repo/jens-maus/RaspberryMatic/master/release/LATEST-VERSION.js?version=CURRENT_VERSION

                  Das aktuelle Skript funktioniert wenn man den link ccu3 damit austauscht auch mit der Raspberrymatic.

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

                    @smartboart Hatte ich schon im Homematic Forum gefunden und eingebaut. Bitte einmal testen und nochmal kurzes Feedback ob es klappt...

                    @Dutchman wie besprochen habe ich Deinen pull request gemerged oder wie auch immer man das nennt 🙂 Hätte nicht dagegen wenn in in den RPC Adapter eingebunden würde. Per Script ist man halt flexibler und jeder kann sich das ganze so anpassen wie man es will.

                    Habe gerade die aktuelle Version hochgeladen. Jetzt mit Support für Raspberrymatic. Das ganze einfach in der Konfiguration auswählen.

                    Homer.J. smartboart 2 Replies Last reply Reply Quote 0
                    • Homer.J.
                      Homer.J. @cash last edited by Homer.J.

                      @cash Hi cash, Hier mal ein Auszug vom Log.
                      Aktuelle Firmversion ist bei mir Installiert.

                      javascript.0 2019-04-01 20:23:52.734 warn at process._tickCallback (internal/process/next_tick.js:181:9)
                      javascript.0 2019-04-01 20:23:52.734 warn at _combinedTickCallback (internal/process/next_tick.js:139:11)
                      javascript.0 2019-04-01 20:23:52.734 warn at endReadableNT (_stream_readable.js:1064:12)
                      javascript.0 2019-04-01 20:23:52.734 warn at IncomingMessage.emit (events.js:208:7)
                      javascript.0 2019-04-01 20:23:52.734 warn at emitNone (events.js:111:20)
                      javascript.0 2019-04-01 20:23:52.734 warn at Object.onceWrapper (events.js:313:30)
                      javascript.0 2019-04-01 20:23:52.734 warn at IncomingMessage.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1083:12)
                      javascript.0 2019-04-01 20:23:52.734 warn at Request.emit (events.js:211:7)
                      javascript.0 2019-04-01 20:23:52.734 warn at emitOne (events.js:116:13)
                      javascript.0 2019-04-01 20:23:52.734 warn at Request.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1161:10)
                      javascript.0 2019-04-01 20:23:52.733 warn at Request.emit (events.js:214:7)
                      javascript.0 2019-04-01 20:23:52.733 warn at emitTwo (events.js:126:13)
                      javascript.0 2019-04-01 20:23:52.733 warn at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:185:22)
                      javascript.0 2019-04-01 20:23:52.733 warn at Request._callback (script.js.common.Homematic.Firmversion:127:25)
                      javascript.0 2019-04-01 20:23:52.733 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20)
                      javascript.0 2019-04-01 20:23:52.732 warn State "Systemvariable.0.Servicemeldungen.Verfuegbare_CCU-Firmware" not found
                      javascript.0 2019-04-01 20:23:52.732 info script.js.common.Homematic.Firmversion: Installierte Firmware 3.45.5.20190330 der CCU ist nicht aktuell. Aktuell verfügbare Version: 2.41.9
                      javascript.0 2019-04-01 20:23:52.615 info script.js.common.Homematic.Firmversion: registered 0 subscriptions and 1 schedule
                      javascript.0 2019-04-01 20:23:52.614 warn at script.js.common.Homematic.Firmversion:165:5
                      javascript.0 2019-04-01 20:23:52.614 warn at func_Version (script.js.common.Homematic.Firmversion:84:30)
                      javascript.0 2019-04-01 20:23:52.612 warn getState "Systemvariable.0.Servicemeldungen.Verfuegbare_CCU-Firmware" not found (3)

                      cash 1 Reply Last reply Reply Quote 0
                      • cash
                        cash Most Active @Homer.J. last edited by

                        @Homer-J Bitte mal die Konfiguration durchlesen und bearbeiten.

                        Vor allen die vier Zeilen:

                        //Datenpunkt auswählen wo die installierte Version ersichtlich ist (aus Homematic.Rega Adapter)
                        const id_Version_installiert = "hm-rega.0.MEQ0228930.0.FIRMWARE_VERSION"/*hm-rega.0.MEQ0228930.0.FIRMWARE_VERSION*/;
                        //Datenpunkt muss manuell angelegt werden. Kann irgendwo angelegt werden. Anschließend hier ersetzen
                        const id_Version_Internet = 'Systemvariable.0.Servicemeldungen.Verfuegbare_CCU-Firmware'/*Verfuegbare CCU-Firmware*/;
                        

                        Laut Log gibt es bei Dir kein Objekt Systemvariable.0.Servicemeldungen.Verfuegbare_CCU-Firmware

                        Wo Du das Objekt anlegst und wie es heißt bleibt Dir überlassen. Du kannst unter Javascript etwas anlegen oder eine eigene Ebene bauen. Da ich es gerne ordentlich habe, habe ich ein Oberobjekt angelegt Systemvariable.0 dort packe ich alle meine Datenpunkte rein die ich in meinen Script verwende.

                        Homer.J. 1 Reply Last reply Reply Quote 0
                        • Homer.J.
                          Homer.J. @cash last edited by Homer.J.

                          @cash Ich meinte die Firmware die passt nicht, die Variable hab ich noch Fix angelegt.

                          cash 1 Reply Last reply Reply Quote 0
                          • cash
                            cash Most Active @Homer.J. last edited by

                            @Homer-J Das verstehe ich jetzt nicht. Was meinst Du mit Firmware passt nicht? Deine installierte, die im Internet? Was hast Du denn? Einen ccu2, ccu3 oder Raspi?

                            Homer.J. 1 Reply Last reply Reply Quote 0
                            • Homer.J.
                              Homer.J. @cash last edited by

                              @cash Ich hab die Raspberrymatic CCU3 Version installiert ist 3.45.5.20190330 und angezeigt als neue wird 2.41.9

                              cash 1 Reply Last reply Reply Quote 0
                              • cash
                                cash Most Active @Homer.J. last edited by

                                @Homer-J Und in der Konfiguration hast Du bei ccu die 4 gewählt?

                                Homer.J. 1 Reply Last reply Reply Quote 0
                                • Homer.J.
                                  Homer.J. @cash last edited by

                                  @cash Hab ich übersehen ☺
                                  funktioniert danke Dir.

                                  Grüße Homer.J.

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

                                    @cash hi warum hast du jetzt alles als const programmiert...bei den States

                                    //Datenpunkt auswählen wo die installierte Version ersichtlich ist (aus Homematic.Rega Adapter)
                                    const id_Version_installiert = "hm-rega.0.PEQ0624923.0.FIRMWARE_VERSION";
                                    //Datenpunkt muss manuell angelegt werden. Kann irgendwo angelegt werden. Anschließend hier ersetzen
                                    const id_Version_Internet = 'javascript.0.Status.Homematic.CCU_Firmware.Version';

                                    verstehe ich das noch aber den Rest hättest du doch als var belassen können..

                                    Die Version wird auch nicht angezeigt in der const_id_Version_Internet bzw. im angelegten State.

                                    createState('javascript.0.Status.Homematic.CCU_Firmware.Version',{ read: true, write: true, desc: 'Firmware Version online', type: 'string', name: 'CCU3 Firmware Update Version'});

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

                                      @smartboart Dutchman hat das Script umgeändert von var auf const und let. Soll wohl weniger Probleme geben. Mir ist es egal. Laufen tut diese Version genau wie die alte mit var.

                                      Was heißt der Datenpunkt wird nicht beschrieben? Onetime = true?
                                      Ansonsten bitte einmal irgend etwas in das angelegte Objekt schreiben. Bei mir funktioniert es ohne Probleme.

                                      Ansonsten bitte mal Debug = true und Ausgabe hier posten

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

                                        Edit...ok Schwachsinn was ich schreibe....Der state wird nur bei unterschied gesetzt..
                                        ich ändere das ab, sodass ich es immer angezeigt bekomme...Möchte das für vis haben...
                                        habe jetzt bei den ganzen Elsen das dazu gepackt.. somit ist die Version jetzt auch angezeigt..
                                        setState(id_Version_Internet,Version[1]);

                                        Nicht wundern hab noch nen state dazu gepackt um ne Anzeige in Vis bei Update Verfügbarkeit aufpoppen zu lassen...

                                        Der State wird nicht mit der Verfügbaren Online Version gefüllt...Oder wird die Version nur bei einer höheren bzw. bei verfügbaren Update dort angezeigt?

                                        Unbenannt1.PNG

                                        Unbenannt.PNG

                                        /**************************
                                        * Prüft ob im Internet eine neue Firmwarer verfügbar ist
                                        * 
                                        * 19.03.19 V1.00    Erste Version
                                        * 20.03.19 V1.01    Logging optimiert
                                        * 01.04.19 V1.02    Firmware kann auch für Rasperrymatic überwacht werden
                                        *                   Umstellung von var auf var und let (by Dutchman)
                                        **************************/
                                        createState('javascript.0.Status.Homematic.CCU_Firmware.Update',{ def: false,  type: 'boolean', name: 'CCU3 Firmware Update verfügbar'});
                                        createState('javascript.0.Status.Homematic.CCU_Firmware.Version',{ read: true, write: true, desc: 'Firmware Version online', type: 'string', name: 'CCU3 Firmware Update Version'});
                                        
                                        var logging = true; 
                                        var debugging = true; 
                                        var debugging_response = false;       //nur im Fehlerfall auf true. Hiermit wird die Antwort der Internetadresse protokolliert
                                        var CCU_Version = 4;                  //Hier eine Zahl eintragen: 2 = CCU2 // 3 = CCU3 // 4 = Rasperrymatic
                                        //Datenpunkt auswählen wo die installierte Version ersichtlich ist (aus Homematic.Rega Adapter)
                                        const id_Version_installiert = "hm-rega.0.PEQ0624923.0.FIRMWARE_VERSION";
                                        //Datenpunkt muss manuell angelegt werden. Kann irgendwo angelegt werden. Anschließend hier ersetzen
                                        const id_Version_Internet = 'javascript.0.Status.Homematic.CCU_Firmware.Version';
                                        const id_Update_Internet = 'javascript.0.Status.Homematic.CCU_Firmware.Update';
                                        
                                        
                                        var observation = true;         //Dauerhafte Überwachung der Firmware (true = aktiv // false =inaktiv)
                                        var onetime = true;             //Prüft beim Scriptstart auf aktuelle Firmware
                                        
                                        //Prio für Pushover
                                        var prio_Firmware = 0;
                                        
                                        
                                        //Variablen für Pushover
                                        var sendpush = false;            //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt
                                        var pushover_Instanz0 =  'pushover.0';     // Pushover instance für Pio = 0
                                        var pushover_Instanz1 =  'pushover.1';     // Pushover instance für Pio = 1
                                        var pushover_Instanz2 =  'pushover.2';     // Pushover instance für Pio = 2
                                        var pushover_Instanz3 =  'pushover.3';     // Pushover instance für Pio = -1 oder -2
                                        let _prio;
                                        let _titel;
                                        let _message;
                                        var _device = 'TPhone';         //Welches Gerät soll die Nachricht bekommen
                                        //var _device = 'All'; 
                                        
                                        //Variablen für Telegram
                                        var sendtelegram = true;            //true = verschickt per Telegram Nachrchten // false = Telegram wird nicht benutzt
                                        var user_telegram = 'Smartboart';             //User der die Nachricht bekommen soll
                                        
                                        //Variable zum verschicken der Servicemeldungen per eMail
                                        var sendmail = true;            //true = verschickt per email Nachrchten // false = email wird nicht benutzt
                                        
                                        
                                        // ab hier keine Änderung
                                        
                                        let _message_tmp;
                                        var request = require('request');
                                        
                                        function send_pushover_V4 (_device, _message, _titel, _prio) {
                                                if (_prio === 0){let 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
                                            });
                                        }
                                        
                                        function func_Version(){
                                            var Version_Internet = getState(id_Version_Internet).val;
                                            var ccu2 = 'http://update.homematic.com/firmware/download?cmd=js_check_version&version=12345&product=HM-CCU2&serial=12345';
                                            var ccu3 = 'http://update.homematic.com/firmware/download?cmd=js_check_version&version=12345&product=HM-CCU3&serial=12345';
                                            var Raspi = 'https://gitcdn.xyz/repo/jens-maus/RaspberryMatic/master/release/LATEST-VERSION.js?_version_=CURRENT_VERSION';
                                            let ccu;
                                            if(CCU_Version == 3){ccu = ccu3;}
                                            else if(CCU_Version == 4){ccu = Raspi;}
                                            else {ccu = ccu2;}
                                            url = ccu;
                                        
                                            request({url : url},
                                        
                                                function (error, response, body) {
                                                    var Version_installiert = (getState(id_Version_installiert).val).trim();
                                                    var Version = body.split("'");
                                                    if(error){
                                                        log('error: ' + error);
                                                    } else {
                                                        if(Version_Internet === ''){
                                                            if(logging){
                                                                log('ausgewähltes Objekt leer. Firmware wird erstmalig gesetzt.');
                                                            }
                                                            setState(id_Version_Internet,Version[1]);
                                                        }
                                                        
                                                        if(Version_installiert == Version[1]){
                                                            setState(id_Update_Internet,false);
                                                            if(logging){
                                                                log('Installierte Firmware '+Version_installiert  +' der CCU ist aktuell');
                                                            }
                                                        }
                                                        else{
                                                            setState(id_Update_Internet,true);
                                                            if(logging){
                                                                log('Installierte Firmware '+Version_installiert  +' der CCU ist nicht aktuell. Aktuell verfügbare Version: '+Version[1]);
                                                            }
                                                            
                                                            if(Version_Internet == Version[1]){
                                                                if(debugging){
                                                                    log('[DEBUG] ' +'Version Internet hat sich nicht verändert');
                                                                }
                                                            } else {
                                                                if(debugging){
                                                                    log('[DEBUG] ' +'Installierte Firmware der CCU ist nicht aktuell.');
                                                                }
                                                                setState(id_Version_Internet,Version[1]);
                                                                 _message_tmp = 'Installierte Firmware der CCU ist nicht aktuell. Installiert: ' +Version_installiert +' --- Verfügbare Version: '+Version[1];
                                                                
                                                                 //Push verschicken
                                                                if(sendpush){
                                                                    _prio = prio_Firmware;
                                                                    _titel = 'CCU-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);
                                                                }
                                                            }         
                                                        }
                                                
                                                        if(debugging_response){
                                                            log('body: ' + body);
                                                            log('Länge ' + Version.length + ' --- Version: ' + Version[1]);
                                                            log('response: ' + JSON.stringify(response));
                                                        }
                                                    }
                                                }
                                            );
                                        }
                                        
                                        if(observation){
                                            //Nachts einmalig ausführen 00:30 Schaltzeiten berechnen
                                            schedule("54 05 * * *", func_Version);
                                        }
                                        
                                        if(onetime){
                                            //beim Starten
                                            func_Version();
                                        }
                                        
                                        cash 1 Reply Last reply Reply Quote 0
                                        • cash
                                          cash Most Active @smartboart last edited by

                                          @smartboart Ok Du hast das Script verändert. Auch wenn das eigentlich keine Rolle spielt.

                                          Bei Dir hat die Abfrage:

                                          if(Version_Internet === '')

                                          Nicht funktioniert? Die Frage wäre warum? Wenn man das Objekt manuell anlegt funktioniert es. Evtl liegt es daran das Du es per CreatState anlegst? Wobei das Feld derzeit bei Dir irrelevant ist, da Du die aktuelle Version installiert hast. Das Feld wird nur genutzt wenn Du nicht die aktuelle Version installiert hast damit er weiß das er Dich bereits über eine neue Firmware informiert hat...

                                          Spätestens in einen Monat (beim Raspi kommt doch jeden Monat eine neue Version) wird das Feld beschrieben.

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

                                            @cash ja der part hat nicht funktioniert...

                                                       } else {
                                            
                                                           if(Version_Internet === ''){
                                            
                                                               if(logging){
                                            
                                                                   log('ausgewähltes Objekt leer. Firmware wird erstmalig gesetzt.');
                                            
                                                               }
                                            
                                                               setState(id_Version_Internet,Version[1]);
                                            
                                                           }
                                            
                                            cash 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            899
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            21
                                            95
                                            10009
                                            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