Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. script-Fehler tritt nur manchmal auf

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    script-Fehler tritt nur manchmal auf

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

      Habe hier ein Script zum Aufzeichen der Tages-Minimum-Temperatur, welches seit Monaten funktioniert hat.
      Das selbe Script habe ich für die Max-Temperatur, das funktioniert immer noch!

      Wenn ich jetzt eine Temperatur von 50 in meinen Minimum-DP eintrage läuft es eine Weile, die neuen Temp-Werte werden auch eingtragen. Urplötzlich fängt javascript mit folgenen Daten an zu meckern:

      2020-05-28 15:19:05.598 - warn: javascript.0 (635) You are assigning a object to the state "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp" which expects a number. Please fix your code to use a number or change the state type to object. This warning might become an error in future versions.
      2020-05-28 15:19:05.620 - warn: javascript.0 (635) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1355:20)
      2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object. (script.js.common.Wetteraufzeichnung.Min-Temperatur:6:5)
      2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1052:38)
      2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:451:25)
      2020-05-28 15:19:05.622 - warn: javascript.0 (635) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
      2020-05-28 15:19:05.622 - warn: javascript.0 (635) at processImmediate (internal/timers.js:456:21)
      2020-05-28 15:19:05.622 - warn: javascript.0 (635) at process.topLevelDomainCallback (domain.js:137:15)
      

      folgendes Script liegt zu Grunde:

      // Min-Temp aufzeichen
      on({id: "wiffi-wz.0.root.192_168_1_142.w_temperatur"/*1*/, change: "any"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("wiffi-wz.0.root.192_168_1_142.w_temperatur").val < getState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp").val) {
          setState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp"/*Min-Temp*/, getState("wiffi-wz.0.root.192_168_1_142.w_temperatur").val, true);
        }
      });
      

      Der Datenpunkt hat folgende Einstellung:

      {
        "_id": "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp",
        "type": "state",
        "common": {
          "name": "Min-Temp",
          "role": "",
          "type": "number",
          "unit": "°C",
          "read": true,
          "write": true
        },
        "native": {},
        "from": "system.adapter.admin.0",
        "user": "system.user.admin",
        "ts": 1568652989732,
        "acl": {
          "object": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator",
          "state": 1636
        }
      }
      

      Wo muss ich suchen, oder liegt es evtl. am Adapter?

      Versionen:
      js-controller: 3.1.4
      node.js: 12.17.0 (mit der 12.16.x ging es auch schon nicht)
      NPM: 6.14.4
      script Engine: 4.6.17

      Glasfaser J.A.R.V.I.S. 2 Replies Last reply Reply Quote 0
      • Glasfaser
        Glasfaser @guergen last edited by

        @guergen sagte in script-Fehler tritt nur manchmal auf:

        2020-05-28 15:19:05.598 - warn: javascript.0 (635) You are assigning a object to the state "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp" which expects a number.

        Please fix your code to use a number or change the state type to object. This warning might become an error in future versions.

        Deinen selbst erstellter Datenpunkt , auf Number ändern ...

        G 1 Reply Last reply Reply Quote 0
        • J.A.R.V.I.S.
          J.A.R.V.I.S. Developer @guergen last edited by J.A.R.V.I.S.

          @guergen es scheint, als würdest du einen String setzen, obwohl eine Zahl erwartet wird.

          Entweder änderst du den DP oder du wandelst den String in eine Zahl um.

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

            @Glasfaser Der steht doch auf Number!

            1 Reply Last reply Reply Quote 0
            • G
              guergen @J.A.R.V.I.S. last edited by

              @J-A-R-V-I-S Jetzt grade werden die Daten ja als Nummer gesendet, sonst würde es ja sofort zum Fehler kommen. Die werden ja nicht plötzlich zum String 🙄

              J.A.R.V.I.S. Gaspode 2 Replies Last reply Reply Quote 0
              • G
                guergen last edited by

                Es gibt ja genau jetzt KEINEN Fehler...

                1 Reply Last reply Reply Quote 0
                • G
                  guergen last edited by

                  89d9dafc-e047-4efd-873b-d47dfe924252-grafik.png

                  1 Reply Last reply Reply Quote 0
                  • J.A.R.V.I.S.
                    J.A.R.V.I.S. Developer @guergen last edited by J.A.R.V.I.S.

                    @guergen dann schau mal, was da tatsächlich in deinem State drin steht:

                    // Min-Temp aufzeichen
                    
                    on({id: 'wiffi-wz.0.root.192_168_1_142.w_temperatur', change: 'any'}, function (obj) {
                    
                      const value = obj.state.val;
                      const oldValue = obj.oldState.val;
                     
                      const temp = getState('wiffi-wz.0.root.192_168_1_142.w_temperatur').val;
                    
                      console.log(typeof temp); // Hier sollte dann im Log der Type ausgegeben werden, entweder 'number' oder 'string'
                    
                      if (temp < getState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp').val) {
                    
                        setState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp', temp, true);
                    
                      }
                    
                    });
                    

                    Sollte im Log 'string' stehen, dann versuch mal folgendes:

                    setState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp', parseInt(temp), true);
                    
                    G 1 Reply Last reply Reply Quote 0
                    • G
                      guergen @J.A.R.V.I.S. last edited by

                      @J-A-R-V-I-S 2eaec0e6-568f-4980-ae18-4619ff9d12c7-grafik.png

                      J.A.R.V.I.S. 1 Reply Last reply Reply Quote 0
                      • G
                        guergen last edited by

                        Ich lasse das jetzt mal mitlaufen.... Schadet ja nicht

                        1 Reply Last reply Reply Quote 0
                        • J.A.R.V.I.S.
                          J.A.R.V.I.S. Developer @guergen last edited by

                          @guergen lass dir am besten auch direkt den Wert mit ausgeben, vielleicht ist auch mal ein null-Wert oder ähnliches dabei.

                          G paul53 2 Replies Last reply Reply Quote 0
                          • G
                            guergen @J.A.R.V.I.S. last edited by

                            @J-A-R-V-I-S Ich schreibe seit mehreren Monaten die Temperaturwerte dieses Gerätes mit, wenn da mal ein null-Wert dabei wäre, wäre es mir schon aufgefallen...
                            Das Max-Temp-Script bekommt ja die selben Werte, da läuft es durch (nur dass das Script "grösser als" benutzt

                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @J.A.R.V.I.S. last edited by paul53

                              @J-A-R-V-I-S sagte:

                              vielleicht ist auch mal ein null-Wert oder ähnliches dabei.

                              Das ist bei Typ "object" sogar wahrscheinlich.

                              You are assigning a object to the state

                              G 1 Reply Last reply Reply Quote 0
                              • G
                                guergen @paul53 last edited by

                                @paul53 Warum meckert das andere Script dann nicht?

                                1 Reply Last reply Reply Quote 0
                                • Gaspode
                                  Gaspode @guergen last edited by Gaspode

                                  @guergen said in script-Fehler tritt nur manchmal auf:

                                  @J-A-R-V-I-S Jetzt grade werden die Daten ja als Nummer gesendet, sonst würde es ja sofort zum Fehler kommen. Die werden ja nicht plötzlich zum String 🙄

                                  Javascript konvertiert immer automatisch, wenn es die Möglichkeit gibt. Von daher läuft dein Script, solange im State wiffi-wz.0.root.192_168_1_142.w_temperatur was drinsteht, das in eine Zahl konvertiert werden kann (z.B. "25"). Steht etwas drin, das nicht automatisch konvertiert werden kann, dann kommt es zum Fehler.
                                  "Beliebt" ist in so einem Fall, dass der String für Kommazahlen den falschen Dezimaltrenner hat. "25" klappt, "25,1" nicht, da "25.1" richtig wäre.
                                  Ich würde mal wie von J.A.R.V.I.S vorgeschlagen den Typ loggen, sondern den Wert an sich.

                                  G J.A.R.V.I.S. 2 Replies Last reply Reply Quote 0
                                  • G
                                    guergen @Gaspode last edited by

                                    @Alexi aber jetzt kommt ja wie im Beispiel 20.4

                                    1 Reply Last reply Reply Quote 0
                                    • J.A.R.V.I.S.
                                      J.A.R.V.I.S. Developer @Gaspode last edited by

                                      @Alexi das tut der Javascript Adapter eben nicht. Er schreibt zwar den Wert, gibt aber auch die Warnmeldung aus.

                                      Du kannst da auch Strings und Booleans reinschreiben, die nicht umgewandelt werden.

                                      G Gaspode 2 Replies Last reply Reply Quote 0
                                      • G
                                        guergen @J.A.R.V.I.S. last edited by

                                        @J-A-R-V-I-S es steht dann immer null drin nach dem Fehler

                                        paul53 1 Reply Last reply Reply Quote 0
                                        • Gaspode
                                          Gaspode @J.A.R.V.I.S. last edited by Gaspode

                                          @J-A-R-V-I-S said in script-Fehler tritt nur manchmal auf:

                                          Er schreibt zwar den Wert, gibt aber auch die Warnmeldung aus.

                                          Äh sorry. Den Satz verstehe ich nicht. Hast du ein Beispiel?

                                          Edit: Ach jetzt. OK. Ja, war auf dem falschen Dampfer. Ist ja keine Zuweisung an eine Variable sonder ein setState...

                                          J.A.R.V.I.S. Gaspode 2 Replies Last reply Reply Quote 0
                                          • paul53
                                            paul53 @guergen last edited by paul53

                                            @guergen sagte:

                                            es steht dann immer null drin nach dem Fehler

                                            Passiert das auch, wenn Du das Script mal so änderst ?

                                            // Min-Temp aufzeichen
                                            on("wiffi-wz.0.root.192_168_1_142.w_temperatur"/*1*/, function (obj) {
                                              var value = obj.state.val;
                                              if (value < getState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp").val) {
                                                setState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp"/*Min-Temp*/, value, true);
                                              }
                                            });
                                            
                                            G 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            624
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            8
                                            52
                                            3239
                                            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