Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Über SetState geänderte Werte werden auf dem objects-Tab nicht korrekt angezeigt

    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

    Über SetState geänderte Werte werden auf dem objects-Tab nicht korrekt angezeigt

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

      Ich teste gerade ein Java-Skript mit dem ich den Status von Hue/Tradfri Lampen abfrage und in Objekten in der Javascript-Instanz speichere. Dazu habe ich zunächst über

      createState("thorstd.E27_Wohnz_1", 0, {read: true, 
                                write: true, 
                                desc: "Lampe 1 Wohnzimmer", 
                                type: "number"
          });
      

      einen 'State' angelegt. Wenn das Skript erkennt daß eine Lampe an ist und der gespeicherte Status 0 ist (über GetState() ausgelesen) dann wird die aktuelle Uhrzeit mit SetState() gespeichert. Erkennt das Skript daß eine Lampe aus ist und der gespeicherte Status ist nicht 0 (ebenfalls über GetState() ausgelesen) dann setze ich den Status über SetState() auf 0.

      Das Skript funktioniert soweit einwandfrei. Da ich in jedem der if/else-Blöcke console.log verwende sehe ich, daß der Status korrekt erkannt und SetState() aufgerufen wurde. Hier die Ausgabe:

      19:07:20.651	[info]	javascript.0 script.js.common.Skript4: Lampe ist aus
      19:07:25.649	[info]	javascript.0 script.js.common.Skript4: Lampe ist aus
      19:07:30.647	[info]	javascript.0 script.js.common.Skript4: Lampe ist aus
      19:07:35.651	[info]	javascript.0 script.js.common.Skript4: Sichere Einschaltzeit
      19:07:45.649	[info]	javascript.0 script.js.common.Skript4: Einschaltdauer 4
      19:07:50.650	[info]	javascript.0 script.js.common.Skript4: Einschaltdauer 9
      19:07:55.649	[info]	javascript.0 script.js.common.Skript4: Einschaltdauer 14
      19:08:00.649	[info]	javascript.0 script.js.common.Skript4: Einschaltdauer 19
      19:08:05.649	[info]	javascript.0 script.js.common.Skript4: Einschaltdauer 24
      19:08:10.648	[info]	javascript.0 script.js.common.Skript4: Lampe ist aus
      19:08:10.648	[info]	javascript.0 script.js.common.Skript4: Setze Einschaltzeit auf 0
      19:08:15.652	[info]	javascript.0 script.js.common.Skript4: Lampe ist aus
      19:08:20.649	[info]	javascript.0 script.js.common.Skript4: Lampe ist aus
      19:08:25.649	[info]	javascript.0 script.js.common.Skript4: Lampe ist aus
      19:08:26.643	[info]	javascript.0 Stop script script.js.common.Skript4
      

      Das Problem ist nur, daß der Wert für das Statusobjekt auf dem Tab Objekte (meist) nicht korrekt angezeigt wird. Ist die Lampe aus und lt. Skript wurde die Einschaltzeit auf 0 gesetzt zeigt das Objekt immer noch die Einschaltzeit (bzw. umgekehrt). Siehe Bildschirmphoto.

      Mache ich hier etwas falsch oder laufe ich in einen Bug?

      function ManageLight(lamp)
      {
        var name_saved_state_lamp = "javascript.0.thorstd." + lamp; 
        var name_lamp             = "deconz.0.RaspBee-GW." + lamp;
      
        if (getState(name_lamp + ".on").val === true)
        {
          // Lampe ist an
          // console.log('Lampe ist an');
      
          if (getState(name_saved_state_lamp).val === 0) 
          {
            console.log('Sichere Einschaltzeit');
            setState(name_saved_state_lamp, new Date().getTime());
          } 
          else
          {
            // Prüfe wie lange die Lampe schon an ist
      
            var y2 = getState(name_saved_state_lamp).val;
            console.log((String('Einschaltdauer ') + String((function () {var v = getDateObject(((new Date().getTime()) - y2)); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})())));
          }
        } 
        else 
        {
          // Lampe ist aus, also Statusobjekt auf 0 setzen
          console.log('Lampe ist aus');
      
          if (getState(name_saved_state_lamp).val !== 0) 
          {
            console.log("Setze Einschaltzeit auf 0")
            setState(name_saved_state_lamp, 0, true)
          }
        }
      }
      // Einschaltdauer speichern
      schedule("*/5 * * * * *", function () 
      {
        ManageLight("E27_Wohnz_1");
        // ManageLight("E27_Wohnz_2");
      }
      );
      

      3296_iobroker1.jpg

      1 Reply Last reply Reply Quote 0
      • T
        Thorsten last edited by

        Niemand? 😢

        1 Reply Last reply Reply Quote 0
        • T
          Thorsten last edited by

          Ich hab die Lösung:

          setState(name_saved_state_lamp, new Date().getTime());
          

          funktioniert nicht. Hier liefert getState() zwar den korrekten Wert zurück, aber auf dem objects-Tab wird der geänderte Wert nicht angezeigt. Wenn ich aber Datum/Zeit nach Int konvertiere

          setState(name_saved_state_lamp, parseInt(new Date().getTime()));
          

          funktioniert es. <size size="150">Warum?</size>

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

          Support us

          ioBroker
          Community Adapters
          Donate

          842
          Online

          31.7k
          Users

          79.8k
          Topics

          1.3m
          Posts

          1
          3
          455
          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