NEWS
Aktualisierung der Datenpunkte bei gleichem Wert
-
Guuude!
Ich versuche mein Problem mal einigermaßen Verständlich zusammen zu fassen...
Ich habe unter anderem eine MP3 Türklingel über eine MQTT-Verbindung realisiert. Die Klingel spielt(e) einen Ton ab wenn ein Datenpunkt "aktualisiert" wird.
Nun geschieht diese Aktualisierung des Datenpunkts aber nicht mehr, wenn sich der Inhalt des Datenpunktwertes nicht vom vorherigen unterscheidet...
Sprich ich spiele beispielsweise Ton "8" ab, klicke auf den Datenpunkt, gebe abermals eine 8 ein um den Ton erneut abzuspielen, bestätige das, dann wird der Wert ohne neuen Zeitstempel eingetragen. Dadurch entsteht aber das Problem dass auch keine Änderung ge-published wird und die Klingel nicht klingelt...
Gebe ich einen anderen Wert ein, z.B. "9" oder auch die "8" aber mit Absatz aktualisiert er den Wert und die Klingel reagiert wie erwartet.
"Früher" ging das immer einwandfrei. Gibt es irgendwo eine Einstellung nach der Aktualisierung von ioBroker welche das verhindert, das gleiche Werte nicht aktualisiert werden?
-In diesem Fall Datenpunkt "Tone"-
-Wird weder nach dieser Aktion noch über einen Block von JS aktualisiert.-Vielen Dank schonmal!
Technische Daten:
Grüße
Lanzelotter -
Nein - keine Ahnung wie oder mit welcher Logikmaschine Du auswertest. Das Aktualisieren erfolgt immer und der Zeitstempel wird auch aktualisiert. Sprich Du musst halt auch Aktualisierung und nicht auf Änderung triggern.
Meines Erachtens fängt das Problem viel früher an, dass ggf. Deine Türklingel nicht nochmal aktualisiert - oder Du die Kombination von 2 Datenpunkten brauchst. In dem einen steht der Ton in dem anderen das signal des Drückens.
Der iob selbst macht in meinen Augen keine Unterscheidung welcher Datenpunkt da drin steht. Was anderes ist, wenn Du mqtt mässig was publishst, dann kann es Fehler geben oder Du hast den Haken drin, dass nur Änderungen gepublished werden oder oder
Also prüfe mal Deine mqtt Einstellungen.
-
@lanzelotter
1.) Warum ist Dein DP einstring
? Das sieht mir eher numerisch aus
2.) Welcher DP triggert Deine Klingel? Sowas wird doch üblicherweise mit einem einfachen on/off ausgelöst.
3.) Womit wertest Du das Ganze aus? NodeRed, JS, Blockly?Wenn ich mich recht erinnere macht es auch einen Unterschied, ob Du einen neuen Wert mit oder ohne ACK schreibst.
Aber wenn ich ehrlich bin, habe ich das Konstrukt auch noch nicht so genau verstanden.
Der DP "tone" regelt doch vermutlich nur, welcher Sound abgespielt werden soll, oder? Ob geklingelt wurde oder nicht sollte IMHO doch ein anderer DP repräsentieren. Warum sollte die Klingel bei einer Änderung der Soundeinstellung losplärren? -
Genau das war das Problem. Im MQTT Adapter war noch der Haken bei "Nur bei Änderungen publizieren" gesetzt...
Das ist mir natürlich exakt nach dem Abschicken des Beitrags aufgefallenDie Klingel/Lautsprecher funktioniert nun wieder wie gehabt.
Dennoch wird der Datenpunkt an sich immernoch nicht richtig aktualisiert, sprich es gibt keinen neuen Zeitstempel für die Aktualisierung des gleichen Wertes.
Habe das ganze nochmal mit einer schnellen Installation von ioBroker auf einem Raspi nachgecheckt, dort ist das gleiche Verhalten...-
Wird als "Zeichenkette" an den ESP8266 übertragen, ist aber im Grunde numerisch ja.
-
Tatsächlich etwas unüblich nehme ich an, da aber durch Änderung des "tone" Datenpunkts dessen Wert neu gepublished wird und der code auf der Klingel auf dessen Änderung hört, habe ich mir den extra Code und Datenpunkt zur Abfrage eines "triggers" gespart. Je nach dem welche Zahl ich in den Datenpunkt aktualisiere, wird entsprechender Ton von der SD-Karte abgespielt.
-
Die Reihenfolge eines Klingelvorgangs ist:
- Klingelknopf
- Erkennung durch Homematic Klingelsensor
- Blockly triggert auf Datenpunkt von hm-rpc Adapter
- Blockly aktualisiert Wert im MQTT Adapter
- MQTT published Wert zum esp8266
- esp spricht mp3 Modul an
- Ton mit entsprechender Nummer wird abgespielt
Habe mit und ohne ACK probiert, bei keinem wird der Zeitstempel beim gleichen Wert neu übernommen.
Das ganze ist mir im Endeffekt aufgefallen, da ich andersherum mit dem Gedanken spiele, mit NFC-Tags gewisse Steuerungen im smart-home zu realisieren. Dafür drehe ich den Spieß um und möchte mit einem ESP8266 via MQTT die Kennung des NFC Tags übermitteln und darauf reagieren. Als Tüpfelchen soll ein Bestätigungston von der Klingel abgespielt werden. Wenn ich aber doppelt mit gleicher Karte publishe und der Datenpunkt aufgrund des gleichen Wertes nicht aktualisiert wird, funktioniert dies nur einmal... Ich werde im laufe des Tages das mal nachprüfen, ob sich das auch durch eine externe Änderung so verhält.
-
-
@lanzelotter
OK, klingt zwar etwas nach "von hinten durch die Brust ins Auge", sollte aber theoretisch funktionieren
Wäre jetzt interessant, ob die Änderung in MQTT Besserung bringt.Ich persönlich würde das mit einem eigenen DP als Trigger regeln.
Das wäre mir dann sauberer getrennt. Liegt vermutlich an meinem Faible für "Clean Code" und "Separation of Concerns". Trennen in kleine Funktionseinheiten, die genau eine Aufgabe übernehmen. "Clean Code does one thing right".
Ein DP für den Trigger, ein DP für den abzuspielenden Sound. Macht eine Fehlersuche einfacher und sich langfristig bezahlt. -
Das ist genau mein Ding!
Bin zugegebenermaßen ein echt katastrophaler Programmierer, aber hey normalerweise funktionierts
Aber du hast natürlich recht. Ich sollte das ganze mal etwas sauberer ausführen...Funktionieren tut es nach dem Entfernen des Hakens wieder wie es soll und hat ja auch nur ein paar Stunden gedauert darauf zu kommen... Ist wie das fehlende ";"...
Von extern wird der Zeitstempel nun auch aktualisiert.
Neu ist allerdings, dass der Wert nicht grün aufblinkt wenn er sich nicht ändert und nur aktualisiert wird, kann das sein? -
@lanzelotter Ehrlich gesagt versteht man die Installation mit den 2 mqtt-Instanzen auch nicht. Aber generell scheinen hier auch ein paar Basics zu fehlen. Das der Haken raus muss, wenn man NICHT nur Änderungen publizieren will, ist vielleicht noch selbst erklärend.
Rot und Grün heißt beim iobroker nicht schlecht oder gut, sondern rot (ACK=false) und grün(ACK=true) - also bestätigt und unbestätigt. Generell müssen Datenpunkte immer unbestätigt also rot geschrieben werden, damit der Adapter weiß, dass er war publizieren soll. Bestätigte Werte sind in der Regel immer Werte, die der Adapter empfängt und selbst schreibt. Probleme gibt es immer wenn ein Broker publishen soll (das ist nämlich nicht seine Aufgabe, das macht nur ein Client). Da der Adapter oft auch als Broker eingesetzt wird, gibt es hier immer Fehlfunktionen. Deswegen empfehle ich inzwischen immer eine neue Instanz als Client zu installieren und den Broker in Ruhe zu lassen. -
Welche 2 Instanzen? Diese spezielle Problemstellung läuft in der zweiten Instanz. Dort ist der ioBroker der MQTT-Server.
Die erste MQTT Instanz ist als Client für emonpi zuständig. Die dritte nur für Testzwecke.Den Haken habe ich schlicht übersehen und bei meiner Suche als gegeben angenommen (Stecker nicht in der Steckdose Prinzip).
Es geht mir nicht um Rot und Grün sondern darum, dass ich der Meinung war, dass der Wert kurz aufblinkt wenn er geändert (tut er) oder aktualisiert wird (tut er nicht). Kann mich diesbezüglich aber auch irren, dann hatte ich mich davon in die Irre leiten lassen...
Sieh es mir nach, bin kein IT-Spezi und muss mich autodidaktisch überall einlernen... Das geht leider nur in eingeschränkterem Maße in meiner Freizeit
Vielen Dank für die ganzen Hinweise, das hat mir schonmal sehr weitergeholfen!