Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Skript verschluckt Werte // JSON zerlegen?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    826

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Skript verschluckt Werte // JSON zerlegen?

Geplant Angeheftet Gesperrt Verschoben Blockly
5 Beiträge 3 Kommentatoren 60 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Online
    D Online
    Dieter_P
    schrieb am zuletzt editiert von Dieter_P
    #1

    Hallo

    bekomme von einem Mqtt Client eine JSON Payload geliefert:

    {"protocol":"S21","env":19.8,"online":true,"control":true,"home":21.0,"heat":true,"fanrpm":770,"comp":44,"outside":1.5,"liquid":33.0,"anglev":25,"Wh":1203200,"power":true,"mode":"H","temp":22.5,"demand":55,"fan":"A","swingh":false,"swingv":true,"econo":true,"powerful":false,"comfort":false,"autor":0.2,"autot":21.0,"auto0":"00:00","auto1":"00:00","autop":false,"autoe":true}
    

    Das zerlege ich per Blocky in die einzelnen Bestandteile:

    bf011a1d-7714-4ee4-bc99-c24c7a9d2b72-grafik.png

    Nun kommt es regelmäiß vor dass trotz Erfüllung der Triggerbedingung (Aktualisierung oder Änderung) Datenpunkte nicht aktualisiert werden (...."power":true,.... ) :

    3cbae23d-ee77-4390-bc08-ce57bf3a9a04-grafik.png

    Hier zB "Power" als boolischer Wert des Ein/Auschaltzustandes.

    Woran liegt das? Ist die Aktion/Inhalt in einem Trigger Auswertung von ca. 20 Attributen zu groß?

    An den Details des DP mit der gesamten Payload sieht man deutlich das der Trigger auslösen müßte:

    f8400ec3-a5b1-44f7-8fbe-f117d012ceec-grafik.png

    Danke!

    1 Antwort Letzte Antwort
    0
    • CodierknechtC Online
      CodierknechtC Online
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      Dazu braucht's gar kein Script.
      Das geht ganz easy über Aliase:
      https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps/12

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      1 Antwort Letzte Antwort
      0
      • D Online
        D Online
        Dieter_P
        schrieb am zuletzt editiert von Dieter_P
        #3

        Das ist ja prima, erklärt dennoch nicht warum das Extrahieren aus einem JSON im Blockly so nicht funktioniert.
        In der Starthilfe ist dbzgl. als Grund nur ein "Sparen" genannt und Ressourcenprobleme kann ich aktuell bei mir nicht erkennen bei minimalsten CPU (<5%) und Speicherauslastung (<15%).

        Die Verwendung der Funktion wurde hier im Bereich mal erklärt und empfohlen und ist darüber hinaus an einigen Stellen im Einsatz bei mir. Wenn es dort Einschränkungen, Probleme oder was auch immer gibt, wäre eine kurze Erläuterung erfreulich.

        1 Antwort Letzte Antwort
        0
        • AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          schrieb am zuletzt editiert von Asgothian
          #4

          Das die Anzahl der Funktionen im Trigger zu gross ist halte ich für ausgeschlossen. Ich habe trigger mit deutlich aufwändigeren daran hängenden Funktionen. Allerdings stellt sich schon die Frage ob wirklich immer alle Werte aktualisert werden müssen wenn der trigger feuert.

          Ich gehe aktuell davon aus das du eine race condition hast. Dein Trigger feuert in sehr kurzen Abständen (sieht man schön an Deinem Screenshot - die Zeit zwischen 'zuletzt geändert' und 'Zeitstempel' ist sehr kurz. Daher sehe ich 3 Mögliche Anpassungen:

          • Umstellung auf Alias - sprich für jeden aus dem JSON zu extrahierenden Wert einen Alias machen, mit der Transferfunktion entsprechenden Transferfunktion
          • Beibehalten des Triggers, aber nur Triggern bei Änderung, nicht bei Aktualisierung. Den rest des Codes beibehalten (kann immer noch mit einer Race-Condition zu Problemen führen)
          • Beibehalten des Triggers, Anpassen auf Trigger bei Änderung. Im Skript 2 Variablen halten. Einmal, als semi-Konstante den aktuellen Zustand der einzelnen DP's (sollte bei Skriptstart synchronisiert werden), sowie einmal als Objekt in dem nur die Attribute drin stehen die sich wirklich geändert haben. Nur diese werden dann am Ende des Triggers auch via aktualisiere geschrieben.

          Das was in deinem Skript die Zeit verbraucht sind die vielen aktualisiere Bausteine - bei denen ich davon aus gehe das nur in ganz seltenen Fällen wirklich mehrere / alle zu aktualisieren sind.

          A.

          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

          D 1 Antwort Letzte Antwort
          3
          • AsgothianA Asgothian

            Das die Anzahl der Funktionen im Trigger zu gross ist halte ich für ausgeschlossen. Ich habe trigger mit deutlich aufwändigeren daran hängenden Funktionen. Allerdings stellt sich schon die Frage ob wirklich immer alle Werte aktualisert werden müssen wenn der trigger feuert.

            Ich gehe aktuell davon aus das du eine race condition hast. Dein Trigger feuert in sehr kurzen Abständen (sieht man schön an Deinem Screenshot - die Zeit zwischen 'zuletzt geändert' und 'Zeitstempel' ist sehr kurz. Daher sehe ich 3 Mögliche Anpassungen:

            • Umstellung auf Alias - sprich für jeden aus dem JSON zu extrahierenden Wert einen Alias machen, mit der Transferfunktion entsprechenden Transferfunktion
            • Beibehalten des Triggers, aber nur Triggern bei Änderung, nicht bei Aktualisierung. Den rest des Codes beibehalten (kann immer noch mit einer Race-Condition zu Problemen führen)
            • Beibehalten des Triggers, Anpassen auf Trigger bei Änderung. Im Skript 2 Variablen halten. Einmal, als semi-Konstante den aktuellen Zustand der einzelnen DP's (sollte bei Skriptstart synchronisiert werden), sowie einmal als Objekt in dem nur die Attribute drin stehen die sich wirklich geändert haben. Nur diese werden dann am Ende des Triggers auch via aktualisiere geschrieben.

            Das was in deinem Skript die Zeit verbraucht sind die vielen aktualisiere Bausteine - bei denen ich davon aus gehe das nur in ganz seltenen Fällen wirklich mehrere / alle zu aktualisieren sind.

            A.

            D Online
            D Online
            Dieter_P
            schrieb am zuletzt editiert von Dieter_P
            #5

            @Asgothian sagte in Skript verschluckt Werte // JSON zerlegen?:

            Das was in deinem Skript die Zeit verbraucht sind die vielen aktualisiere Bausteine - bei denen ich davon aus gehe das nur in ganz seltenen Fällen wirklich mehrere / alle zu aktualisieren sind.

            Vielen Dank! Das hilft mir zu verstehen und hoffentlich zu verbessern/vermeiden.

            @Asgothian sagte in Skript verschluckt Werte // JSON zerlegen?:

            Beibehalten des Triggers, aber nur Triggern bei Änderung

            Damit habe ich bereits experimentiert und führt leider auch zu keinem verlässlichen Ergebnis. Manchmal ist die Extraktion ok/in Ordnung an anderen Tagen funktioniert es wieder gar nicht. Hatte schon den MqTTBroker in Verdacht und gewechselt aber der ist es nicht da die Rohdaten ja eintreffen.

            @Asgothian sagte in Skript verschluckt Werte // JSON zerlegen?:

            (kann immer noch mit einer Race-Condition zu Problemen führen)

            Danke Dann ist das so ungeschickt aus diesem Grund so aufgebaut und werde es überall anpassen.

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            351

            Online

            32.6k

            Benutzer

            82.1k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe