Änderung mindestens einer KVS Methode von Firmware 1.4.4 auf 1.5.1

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

  • Ich stellte soeben mit Verwunderung fest, dass eine afaik undokumentierte Änderung im Resultat der KVS Methode "KVS.GetMany" vorliegt. Imho stellt dies eine gewisse Inkonsistenz dar. Die Dokumentation dazu ist allerdings korrekt - seit wann? Im Changelog fand ich dazu nichts.

    Warum sehe ich dort eine gewisse Inkonsistenz - in der Resultatsstruktur?

    In Firmware 1.4.4 lieferte KVS.GetMany ... eine verschachtelte Objektstruktur. Auf deren Elemente konnte man per Keys zugreifen. Die gleiche Struktur lieferte KVS.List.

    In der Firmware 1.5.1 liefert KVS.GetMany ... hingegen ein Datenfeld mit numerischem Index. Der Zugriff auf Werte gelingt nun nicht mehr per Keys, sondern per Datenfeldindex. Die von mir angemerkte Inkonsistenz besteht in abweichender Resultatsstruktur von KVS.List. Letzte ist nach wie vor ein verschaltetes Objekt. Das ist insofern unschön, als dass Skripte, welche obige Methoden verwenden, nun angepasst werden müssen.

    Ich finde es widersprüchlich, wenn sich beide Resultatstypen unterscheiden, was sie bis Firmware 1.4.4 auch nicht taten.

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

  • Ich habe es gerade mal mit 1.6.0-beta1 getestet:

    KVS.List:

    Code
    {
      "keys": {
        "testkey": {
          "etag": "16c4/FIFdBvYPu2VnrRFCZVQ=="
        },
        "units": {
          "etag": "1FWOXkCE8zICexJRe6evDsPA=="
        }
      },
    }

    KVS.GetMany:

    Ich weiß jetzt nicht, wie die Rückgabe ausschaut, wenn ich viele KVS Einträge habe.

    Man könnte doch einfach items[0] nehmen und dann hat man wieder key/value - oder?

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

  • Man könnte doch einfach items[0] nehmen und dann hat man wieder key/value - oder?

    Erst einmal danke für diese fast einmalige (;)) Rückmeldung.

    Nein, leider nicht. Die Komponente key adressiert nicht value, beide stehen nebeneinander im Datenfeldelement. Es handelt sich somit hier um keine map, weil der value nicht nativ per key gefunden werden kann - tatsächlich kein KVS mehr. Das ist eine merkwürdige Änderung und vielleicht einem anderen (doofen) übergeordneten System geschuldet.

    Ich habe es per Iteration über das Datenfeld gelöst. Ich lasse von allen Elementen des Resultats (Datenfeld mit laufendem Index) die Komponente key mit den von mir definierten Schlüsselnamen vergleichen. Bei Übereinstimmung verwende ich die value Komponente. Ich konnte bisher keine andere Lösung finden.

    Alternativ ließe sich KVS.List verwenden, da hier eine map als Resultat geliefert wird. Ich bevorzuge allerdings zwecks Selektion einen Pre-Teil im key, bspw. "app_". Dies liefert mir nur die für mein Skript bedeutsamen Werte und nicht etwa alle.

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

  • Erst einmal danke für diese fast einmalige ( ;) ) Rückmeldung.

    Nein, leider nicht. Die Komponente key adressiert nicht value, beide stehen nebeneinander im Datenfeldelement

    =O:huh: ... oh oh, du hast ja so recht :beer:

    Da sieht man mal, welch merkwürdige Assoziationen man bekommen kann, wenn man den String "key" liest und nach key/value Ausschau hält.

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung