Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Hilfe für Javascript Legastheniker und js v8.3.x

    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

    Hilfe für Javascript Legastheniker und js v8.3.x

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      TT-Tom @oFbEQnpoLKKl6mbY5e13 last edited by

      @ofbeqnpolkkl6mby5e13

      sende bitte nochmal jetzt das komplette Script, ich sehe mir das morgenfrüh an. da Passt etwas mit dem erstellen des color State nicht.

      O 1 Reply Last reply Reply Quote 0
      • O
        oFbEQnpoLKKl6mbY5e13 @TT-Tom last edited by

        @tt-tom

        Okay, vielen Dank!

        const city_id = 66005;
        const area_id = 2800;
        const logging = false;
        const name = 'Müllabfuhr';
        const numberOfEntries = 69;
        
        const instanz = '0_userdata.' + instance + '.muell-test';
        
        if (logging) log('starting muell.' + instanz);
        
        extendObject(instanz, {
               type: "device",
               common: {
                   name: name
               }
           }, function (err) {
               if (err) {
                   log('could not create device: ', 'warn');
                   return;
               }
           
           }
        );
        let baseData = {};
        
        // query names first
        
        httpGet('https://mymuell.jumomind.com/mmapp/api.php?r=trash&city_id=' + city_id + '&area_id=' + area_id, { timeout: 2000 }, (error, response) => {
          if (!error && response.statusCode == 200) {
               var data = JSON.parse(response.data);  // info ist ein Objekt
                  data.forEach((v, i) => {
                      baseData[v._name] = v;
                  })
          updateMuell();
          } else {
              console.error(error);	
          }
        });
        
        
        schedule('{"time":{"exactTime":true,"start":"12:17"},"period":{"days":1}}', updateMuell);
        
        
        function updateMuell() {
           var options = 'https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=' + city_id + '&area_id=' + area_id + '&ws=3'
        
           httpGet(options, (error, response) => {
               if (!error && response.statusCode == 200) {
                   var info = JSON.parse(response.data);  // info ist ein Objekt
                   if (info[0].Ack === 'Success') {
                       var data = info[0]._data;  // xy ist eine Eigenschaft des Objektes info
                       let counter = 0;
                       const date = (new Date())
                       const todayStr = date.getFullYear() + "-" + ('00' + (date.getMonth() + 1)).slice(-2) + "-" + ('00' + date.getDate()).slice(-2)
                       log(todayStr);
                       data.forEach((v, i) => {
                           if (todayStr < v.cal_date && counter <= numberOfEntries) {
        
                               const basePath = instanz + '.' + ('000' + counter).slice(-3);
                               log(v.cal_date + ' -> ' + basePath, 'debug');
                               // States erstellen
                               extendObject(basePath, {
                                   type: "channel",
                                   common: {
                                       name: v.cal_date_normal
                                   }
                               }, function (err) {
                                   if (err) {
                                       log('could not create device: ', 'warn');
                                       return;
                                   }
        
                               }
                               );
                               createState(basePath + '.date', v.cal_date_normal, {
                                   name: 'Datum',
                                   desc: 'Datum der Abholung',
                                   type: 'string',
                                   read: true,
                                   write: false
                               }, () => {
                                   setState(basePath + '.date', v.cal_date_normal, true);
                               });
        
                               createState(basePath + '.desc', baseData[v.cal_garbage_type].title, {
                                   name: 'Beschreibung',
                                   desc: 'Beschreibung der Abholung',
                                   type: 'string',
                                   read: true,
                                   write: false
                               }, () => {
                                   setState(basePath + '.desc', baseData[v.cal_garbage_type].title, true);
                               });
                               createState(basePath + '.color', {
                                   name: 'Farbe',
                                   desc: 'Farbe',
                                   type: 'string',
                                   role: 'level.color',
                                   read: true,
                                   write: false
                               }, () => {
                                   setState(basePath + '.color', baseData[v.cal_garbage_type].color, true);
                               });
        
                               counter++;
                           }
                       });
                   }
               };
           })
        }
        
        

        W T 2 Replies Last reply Reply Quote 0
        • W
          wolfi913 @oFbEQnpoLKKl6mbY5e13 last edited by

          @ofbeqnpolkkl6mby5e13
          @tt-tom
          Nur eine Idee von jemandem der sich aber mit JS nicht auskennt. Daher schlagt mich nicht, falls ich totalen Unsinn schreibe.
          Evtl. liegt's an der Variable var data im Ursprungsscript (z.B. Zeile 51). Möglicherweise funktioniert das nach dem Update auf V8.3.1 nicht mehr. Hatte ein ähnliches Problem in einem Blockly. Da hatte ich eine Variable log. Die musste auch umbenannt werden damit's wieder funktioniert.

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

            @paul53 DANKE!
            den Block hab ich gesucht.
            Das Pulldown habe ich natürlich nicht gesehen.

            hatte gestern abend den Timeout auf 4000 gestellt.
            Seitdem kein Fehler mehr.
            Sehe gerade dass im Original ein Timeout von 3000 steht.

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

              @wolfi913 sagte in Hilfe für Javascript Legastheniker und js v8.3.x:

              Evtl. liegt's an der Variable var data im Ursprungsscript

              Hab zwar auch keine Ahnung, kann mir aber nicht vorstellen dassdie variable data bei response.data mitmischen sollte.

              T O 2 Replies Last reply Reply Quote 0
              • T
                TT-Tom @oFbEQnpoLKKl6mbY5e13 last edited by

                @ofbeqnpolkkl6mby5e13

                bei mir kommen die Meldungen auch, aber nur beim anlegen der States, irgendwie verschluckt er sich da mit den Daten. Wenn die States alle angelegt sind bekomme ich dann keine Meldungen mehr. Werde mal die Stateserstellung mir nochmal genauer ansehen, kann aber etwas dauern.

                T 1 Reply Last reply Reply Quote 1
                • T
                  TT-Tom @Homoran last edited by

                  @homoran
                  Nein daran liegt es nicht. Die Meldungen kommen nur beim anlegen der States. Danach läuft es bei mir ohne Meldungen weiter.

                  1 Reply Last reply Reply Quote 0
                  • T
                    TT-Tom @TT-Tom last edited by

                    @oFbEQnpoLKKl6mbY5e13

                    so jetzt sollte es ohne Meldung funktionieren, bei Color State hat der Wert gefehlt beim erstellen des State.

                    const city_id = 66005;
                    const area_id = 2800;
                    const logging = false;
                    const deviceName = 'Müllabfuhr';
                    const numberOfEntries = 69;
                     
                    const instanz = '0_userdata.' + instance + '.muell-test';
                     
                    if (logging) log('starting muell.' + instanz);
                     
                    extendObject(instanz, {
                           type: "device",
                           common: {
                               name: deviceName
                           }
                       }, function (err) {
                           if (err) {
                               log('could not create device: ', 'warn');
                               return;
                           }
                       
                       }
                    );
                    let baseData = {};
                     
                    // query names first
                      
                    httpGet('https://mymuell.jumomind.com/mmapp/api.php?r=trash&city_id=' + city_id + '&area_id=' + area_id, { timeout: 2000 }, (error, response) => {
                        if (logging) log(`first query statusCode ${response.statusCode}`);
                        if (logging) log(`first query data ${response.data}`);
                        if (!error && response.statusCode == 200) {
                            let data = JSON.parse(response.data);  // info ist ein Objekt
                            data.forEach((v, i) => {
                                baseData[v._name] = v;
                            })
                            updateMuell();
                        } else {
                            log(error, 'error');
                        }
                    });
                    
                      
                    schedule('{"time":{"exactTime":true,"start":"12:17"},"period":{"days":1}}', updateMuell);
                      
                      
                    function updateMuell() {
                        const options = 'https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=' + city_id + '&area_id=' + area_id + '&ws=3'
                    
                        httpGet(options, (error, response) => {
                            if (logging) log(`update query statusCode ${response.statusCode}`);
                            if (logging) log(`update query data ${response.data}`);
                            if (!error && response.statusCode == 200) {
                                let info = JSON.parse(response.data);  // info ist ein Objekt
                                if (info[0].Ack === 'Success') {
                                    let data = info[0]._data;  // xy ist eine Eigenschaft des Objektes info
                                    let counter = 0;
                                    const date = (new Date())
                                    const todayStr = date.getFullYear() + "-" + ('00' + (date.getMonth() + 1)).slice(-2) + "-" + ('00' + date.getDate()).slice(-2)
                                    log(todayStr);
                                    data.forEach((v, i) => {
                                        if (todayStr < v.cal_date && counter <= numberOfEntries) {
                    
                                            const basePath = instanz + '.' + ('000' + counter).slice(-3);
                                            if (logging) log(v.cal_date + ' -> ' + basePath);
                                            // States erstellen
                                            extendObject(basePath, {
                                                type: "channel",
                                                common: {
                                                    name: v.cal_date_normal
                                                }
                                            }, function (err) {
                                                if (err) {
                                                    log('could not create device: ', 'warn');
                                                    return;
                                                }
                    
                                            }
                                            );
                                            createState(basePath + '.date', v.cal_date_normal, {
                                                name: 'Datum',
                                                desc: 'Datum der Abholung',
                                                type: 'string',
                                                read: true,
                                                write: false
                                            }, () => {
                                                setState(basePath + '.date', v.cal_date_normal, true);
                                            });
                    
                                            createState(basePath + '.desc', baseData[v.cal_garbage_type].title, {
                                                name: 'Beschreibung',
                                                desc: 'Beschreibung der Abholung',
                                                type: 'string',
                                                read: true,
                                                write: false
                                            }, () => {
                                                setState(basePath + '.desc', baseData[v.cal_garbage_type].title, true);
                                            });
                    
                                            createState(basePath + '.color',baseData[v.cal_garbage_type].color, {
                                                name: 'Farbe',
                                                desc: 'Farbe',
                                                type: 'string',
                                                read: true,
                                                write: false
                                            }, () => {
                                                setState(basePath + '.color', baseData[v.cal_garbage_type].color, true);
                                            });
                    
                                            counter++;
                                        }
                                    });
                                }
                            }
                        });
                    }
                    

                    O 1 Reply Last reply Reply Quote 1
                    • O
                      oFbEQnpoLKKl6mbY5e13 @TT-Tom last edited by

                      @tt-tom

                      Ganz herzlichen Dank für deine Hilfe! Skript läuft.

                      1 Reply Last reply Reply Quote 0
                      • O
                        oFbEQnpoLKKl6mbY5e13 @Homoran last edited by oFbEQnpoLKKl6mbY5e13

                        @homoran

                        Welches Fazit wollen wir nun ziehen?

                        Aus meiner Sicht ist es schlicht unmöglich, eine Anleitung zu erstellen. Jedes Skript ist potentiell so unterschiedlich, dass man nicht einfach einen Block durch einen anderen austauschen kann. Vielleicht muss man hier das Wort "Anleitung" im wahrsten Sinn des Wortes verstehen. Sie kann einen User nur bei der Umstellung "anleiten".

                        T W Homoran 3 Replies Last reply Reply Quote 0
                        • T
                          TT-Tom @oFbEQnpoLKKl6mbY5e13 last edited by

                          @ofbeqnpolkkl6mby5e13
                          ich glaube, wenn am die alte Schreibweise der neuen gegenüberstellt und sieht, wo die Parameter jetzt eingesetzt werden bzw. wie sie jetzt heißen, wird es verständlicher.

                          O 2 Replies Last reply Reply Quote 1
                          • W
                            wolfi913 @oFbEQnpoLKKl6mbY5e13 last edited by

                            @ofbeqnpolkkl6mby5e13 sagte in Hilfe für Javascript Legastheniker und js v8.3.x:

                            Welches Fazit wollen wir nun ziehen?

                            Matthias @haus-automatisierung hat hier zwischenzeitlich einen Upgrade-Guide erstellt.

                            https://forum.iobroker.net/topic/74659/request-package-is-deprecated-please-use-httpget/25

                            1 Reply Last reply Reply Quote 2
                            • Homoran
                              Homoran Global Moderator Administrators @oFbEQnpoLKKl6mbY5e13 last edited by

                              @ofbeqnpolkkl6mby5e13 Ja, da gebe ich dir recht.
                              Allerdings denke ich (will ich glauben) dass die komplexen Skripte, die nicht einfach umzustellen sind, in der Minderheit sind.

                              Inzwischen gibt es schon mehrere Threads zu diesem Thema und ich habe alle verfolgt!
                              Ich glaube auch, dass die Welle der Hilfesuchenden gerade erst anschwappt und noch lange icht ihren Höhepunkt erreicht hat.

                              Zum Glück gibt's auch Inzwischen viele Helfende, die sich um die Hilfesuchenden kümmern.

                              Wenn es hilft einigen bis mehreren durch die einfachste Formel
                              request(... durch httpGet(.... zu ersetzen, body dort zu streichen und statt den folgenden body jetzt response.data einzugeben wäre schon viel geholfen.

                              Die wichtigste Botschaft für Hilfesuchende, die ich aus diesem bisherigen Thread entnehme, ist: Es wird schon irgendwie ans laufen zu bringen sein.

                              DANKE an alle Unterstützer

                              1 Reply Last reply Reply Quote 3
                              • O
                                oFbEQnpoLKKl6mbY5e13 @TT-Tom last edited by

                                @tt-tom

                                Ich hatte das gestern jedes Mal gemacht, wenn du neuen Code gepostest hast. Heute hatte ich bisher nicht mehr die Muße..

                                1 Reply Last reply Reply Quote 0
                                • O
                                  oFbEQnpoLKKl6mbY5e13 @TT-Tom last edited by oFbEQnpoLKKl6mbY5e13

                                  @tt-tom

                                  Noch mal eine kleine Frage zum Parameter Timeout. Diesen hatte ich in der ersten httpGet-Abfrage eingebaut, allerdings in der zweiten Abfrage entweder vergessen oder erstmal zur Vereinfachung weggelassen.

                                  httpGet('https://mymuell.jumomind.com/mmapp/api.php?r=trash&city_id=' + city_id + '&area_id=' + area_id, { timeout: 4000 }, (error, response) => {
                                      if (logging) log(`first query statusCode ${response.statusCode}`);
                                      if (logging) log(`first query data ${response.data}`);
                                      if (!error && response.statusCode == 200) {
                                          let data = JSON.parse(response.data);  // info ist ein Objekt
                                          data.forEach((v, i) => {
                                              baseData[v._name] = v;
                                          })
                                          updateMuell();
                                      } else {
                                          log(error, 'error');
                                      }
                                  });
                                   
                                    
                                  schedule('{"time":{"exactTime":true,"start":"12:17"},"period":{"days":1}}', updateMuell);
                                    
                                    
                                  function updateMuell() {
                                      const options = 'https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=' + city_id + '&area_id=' + area_id + '&ws=3'
                                   
                                      httpGet(options, (error, response) => {
                                  

                                  Wäre die Syntax so richtig?

                                  function updateMuell() {
                                      const options = 'https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=' + city_id + '&area_id=' + area_id + '&ws=3'
                                   
                                      httpGet(options, { timeout: 4000 }, (error, response) => {
                                  
                                  T 1 Reply Last reply Reply Quote 0
                                  • T
                                    TT-Tom @oFbEQnpoLKKl6mbY5e13 last edited by

                                    @oFbEQnpoLKKl6mbY5e13
                                    Jo passt
                                    Link Doku

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    763
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    8
                                    104
                                    6562
                                    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