FHEM Forum

FHEM => Automatisierung => Thema gestartet von: gitarero am 01 September 2018, 09:31:20

Titel: Userreading ist immer versetzt zum eigentlichen Status
Beitrag von: gitarero am 01 September 2018, 09:31:20
Hallo zusammen,
ich erstelle gerade einen einfachen Wecker mit "at".
Dazu brauche ich den Status des "at" im MQTT.
Wenn ich über MQTT-Bridge das publishState nutze kommt zwar beim "inactive" was durch, die Änderung auf "active" wird zwar im Eventmonitor angezeigt, aber nicht über MQTT übertragen.

Also habe ich ein Userreading "Power" angelegt, welches eigentlich nur "STATE" des "at" wiederspiegelt und dann über MQTT sendet. Soweit so gut. Funktioniert auch - nur nicht ganz richtig.

Setze ich das "at" auf "active" springt das Userreading auf "inactive" und umgekehrt - also "at" auf inactive, dann ist das Userreading "Next hh:mm:ss"

Irgendwie sollte das doch nicht so sein... oder?

Hier noch ein List des "at":

Internals:
   CFGFN     
   COMMAND    {
if (!$we){
fhem ("set Kugellampe dim 50");
}
}
   DEF        *07:40 {
if (!$we){
fhem ("set Kugellampe dim 50");
}
}
   NAME       Wecker
   NR         114
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 07:40:00
   TIMESPEC   07:40
   TRIGGERTIME 1535866800
   TRIGGERTIME_FMT 2018-09-02 07:40:00
   TYPE       at
   READINGS:
     2018-09-01 09:21:08   Power           inactive
     2018-09-01 09:21:08   Zeit            07:40
     2018-09-01 09:21:08   state           Next: 07:40:00
Attributes:
   room       90_Logik
   userReadings Zeit {InternalVal("Wecker", "TIMESPEC", "00:00");},Power {InternalVal("Wecker", "STATE", "FEHLER");}


Über eine Antwort würde ich mich sehr freuen!
Viele Grüße,
Ingo
Titel: Antw:Userreading ist immer versetzt zum eigentlichen Status
Beitrag von: igami am 01 September 2018, 11:15:32
STATE ist kein Reading, sondern ein Internal und wird erst nach den Readings aktualisiert. Bin ich auch schon drauf reingefallen.
Titel: Antw:Userreading ist immer versetzt zum eigentlichen Status
Beitrag von: rudolfkoenig am 01 September 2018, 11:16:07
Kleine Erklaerung:
- das Internal STATE wird fuer die Anzeige verwendet, und leitet sich entweder direkt aus dem Reading state ab, oder indirekt ueber stateFormat.
- das Setzen von STATE passiert _nach_ Auswertung von userReading und stateFormat, aber _vor_ dem Aufruf von notify/DOIF/FileLog/etc.
- at setzt in manchen Faellen STATE direkt, was eigentlich ein Fehler ist.
- InternalVal($dev, "STATE", "default") wird normalerweise als Value($dev) geschrieben.
Titel: Antw:Userreading ist immer versetzt zum eigentlichen Status
Beitrag von: gitarero am 01 September 2018, 11:51:01
Okay,
hab ich verstanden - danke für die Erklärung.
Dann habe ich scheinbar ein Problem mit der MQTT-BRIDGE.

Ein Event wird bei Änderung des Readings(!) "state" erzeugt, aber nicht per MQTT übertragen.
Allerdings nur beim Wechsel des "at" von "inactive" nach "active".

Der Wechsel von "active" nach "inactive" wird übertragen. Sehr merkwürdig...

Viele Grüße,
Ingo

Edit:
Ich hänge mal den entsprechenden Auszug aus dem Event-Monitor an:
Das Userreading "Zeit" wird in beiden Fällen übertragen.

2018-09-01 11:51:30 MQTT_BRIDGE MQTT_Wecker transmission-state: outgoing publish sent
2018-09-01 11:51:30 MQTT_BRIDGE MQTT_Wecker transmission-state: outgoing publish sent
2018-09-01 11:51:30 at Wecker inactive
2018-09-01 11:51:30 at Wecker Zeit: 06:15
2018-09-01 11:51:44 MQTT_BRIDGE MQTT_Wecker transmission-state: outgoing publish sent
2018-09-01 11:51:44 at Wecker Next: 06:15:00
2018-09-01 11:51:44 at Wecker Zeit: 06:15


Letztes Edit:
Hier: https://forum.fhem.de/index.php/topic,90735.msg832361.html#msg832361 (https://forum.fhem.de/index.php/topic,90735.msg832361.html#msg832361) gehts weiter... hoffentlich...