Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Somit ist die von Dir oben beschriebene eval-Lösung vermutlich die sauberste Lösung, da wird wenigstens der Reihe nach abgearbeitet ("FiFo-Queue").
Wird es beim on_change auch
und die eval Lösung erzeugt so wie oben beschrieben auch genau so viele MQTT Telegramme, weil jeder geänderte Wert das eval triggert.
Du könntest das per **on_change** in jedem Item mit den Einzelwerten machen.
Randbemerkung, mal rein aus Interesse:
Ich kenne mich zwar weder mit Milight noch mit MQTT aus. Ich könnte mir aber gut vorstellen, dass sich hier mehrere Werte gleichzeitig ändern können (z.B. r/g/b), und das sehr schnell in sehr kurzen Abständen (z.B. durch Slider auf der Visu). Das dürfte bei gleichzeitigem Triggern von on_change auf mehreren Items mit Schreibvorgang auf ein und dasselbe Zielitem vermutlich ein schönes Tohuwabohu geben, oder?
Somit ist die von Dir oben beschriebene eval-Lösung vermutlich die sauberste Lösung, da wird wenigstens der Reihe nach abgearbeitet ("FiFo-Queue").
Was ich noch nicht verstehe:
Warum sollten die einzelnen Items bei Änderung nicht jeder für sich einen passenden MQTT-String generieren und verschicken, statt jedesmal ein neues "globales" dict zusammenzufummeln? Vielleicht stecke ich da aber auch nicht genug in der Materie drin ...
Du kannst keinen einzelnen Eintrag in einem dict setzen. Dafür gibt es bisher keine Funktionalität. Du musst in jedem on_update das dict neu zusammen bauen.
Ich empfehle hier on_update(s) statt einem eval im dict item, da Du so das dict Item noch anderweitig (z.B. in der Admin GUI) modifizieren kannst, was bei einem evel erstmal nicht geht. Du kannst natürlich auch ein eval konstruieren, dass das dict zusammenbaut und alle Einzel-Items unter eval_trigger aufführen.
Du könntest das per **on_change** in jedem Item mit den Einzelwerten machen.
Bei der Verwendung von **on_change** weiß ich zumindest den Key für das entsprechende Wertepaar im Dict, aber wie bekomme ich den Wert im dict aktualisiert?
Im ersten Schritt habe ich das Dict "zerlegt", so dass die entsprechenden Werte in einzelnen Items zur Verfügung stehen und auch in der Visu benutzt werden können.
Nun suche ich nach der Möglichkeit, die einzelnen Werte bei Änderung wieder zu einem Dict zusammenzusetzen bzw. das bestehende entsprechend zu ändern und über das MQTT-Topic-Out zu senden.
Du solltest evtl. on_change statt on_update verwenden (je nach gewünschtem Verhalten). Bei on_update wird die Steckdose auch geschaltet wenn sich der Spiegellicht Wert nicht ändert (z.B. Spiegellicht ist bereits an und über die GA 1/1/100 kommt ein eineutes EIN Signal). Falls die Steckdose nur geschaltet werden soll, wenn sich der Zustand des Spiegellichts ändert, wäre on_change angebracht.
Danke für die raschen Antworten, es waren tatsächlich die Hochkommata.
Umbau auf das steurnde item habe ich auch schon versucht, eben auch hier ging es nicht wegend den Hochkommata.
Ich hatte ursprünglich Anführungszeichen (dachte, weil string), die hat aber der Parser reklamiert.
2020-11-18 00:04:37 WARNING lib.item Item OG.Kinderbad.Spiegellicht.EinAus: 'on_update' item-value='True' problem evaluating ON if value else OFF: name 'ON' is not defined
Wenn Du eval nutzt, wird das Item per Formel gesetzt und nicht „per Itembaum“.
wenn Du nur zusätzlich schalten willst wenn das Spieleglich schaltet, solltest Du statt eval im Steckdosen Item zu nutzen, im Spiegel item ein on_change verwenden. Das setzt dann bei einer Veränderung des Spiegellichts das Steckdosen Item. Das Steckdosen Item bleibt aber unabhängig schaltbar.
Schon mal 1 if bla()==1 else 0 probiert?
besser wäre noch das über on_update vom einaus item statt im eval zu machen. Dann kannst du jedenfalls unabhängig schalten
ich bin jetzt seit Stunden mit der Steckdose beschäftigt und bekomme es nicht hin.
Diese soll mit dem Spiegellicht mitgeschaltet werden, wenn 1 dann payload "ON" sonst payload "OFF"
Entferne ich die 2 eval Zeilen, kann ich über den Itembaum problemlos schalten, mit den Zeilen kann ich weder die Steckdose schalten, noch reagiert sie auf Änderungen des Lichts.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen und die Websiteaktivitäten zu analysieren. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: