Hallo zusammen,
ich habe mal wieder ein, für euch sicher, kleines Problem mit einem structure. Ich habe mit Testweise ein paar Xiaomi Fenster/Türkontakte bestellt und eingerichtet. Diese funktionieren jeder für sich über einen cc2351/zigbee2mqtt ohne Probleme.
Nun habe ich ein structure angelegt:
Internals:
ATTR strc_tueren
CHANGEDCNT 4
DEF strc_tueren eg_wohnzimmer_terrassentuer eg_kueche_terrassentuer eg_flur_haustuer
FUUID 5e1c1b4a-f33f-684f-4106-e0fc98696671dcdd
NAME strc_tueren
NR 110
NTFY_ORDER 50-strc_tueren
STATE true
TYPE structure
Helper:
DBLOG:
state:
DBLogging:
TIME 1578902356.52314
VALUE true
READINGS:
2020-01-13 08:59:16 LastDevice eg_flur_haustuer
2020-01-13 08:59:16 LastDevice_Abs eg_flur_haustuer
2020-01-13 08:59:16 state true
Attributes:
clientstate_behavior relative
clientstate_priority true false
devStateIcon true:fts_door@green false:fts_door_open@red
icon fts_door
room 97_Logik
An Devices selber wurden die userattr automatisch gepflegt.
Internals:
CID zigbee_0x00158d000424a2b4
DEF zigbee_0x00158d000424a2b4
DEVICETOPIC eg_kueche_terrassentuer
FUUID 5e10b052-f33f-684f-191d-4ece8f2de83b4412
IODev mqtt2server
LASTInputDev mqtt2server
MSGCNT 2
NAME eg_kueche_terrassentuer
NR 103
STATE true
TYPE MQTT2_DEVICE
mqtt2server_MSGCNT 2
mqtt2server_TIME 2020-01-13 08:57:10
Helper:
DBLOG:
battery:
DBLogging:
TIME 1578902230.03217
VALUE 100
contact:
DBLogging:
TIME 1578902230.03217
VALUE true
linkquality:
DBLogging:
TIME 1578902230.03217
VALUE 18
voltage:
DBLogging:
TIME 1578902230.03217
VALUE 3035
READINGS:
2020-01-04 16:33:38 associatedWith MQTT2_zigbee2mqtt
2020-01-13 08:57:10 battery 100
2020-01-13 08:57:10 contact true
2020-01-13 08:57:10 linkquality 18
2020-01-13 08:57:10 voltage 3035
Attributes:
IODev mqtt2server
devStateIcon true:fts_door_right@green false:fts_door_right_open@red
icon fts_door_right_open
readingList zigbee2mqtt/0x00158d000424a2b4:.* { json2nameValue($EVENT) }
room 10_Erdgeschoß -> 02_Küche
stateFormat contact
userattr strc_tueren strc_tueren_map structexclude
Dummerweise schaltet das structure aber nicht um?! Es bleibt immer auf true.
Vllt. habt ihr ja noch einen Tip, wo ich suchen könnte?
VG
stauraum
Dir fehlt ein state Reading im MQTT Device. Lege es an und dann sollte auch die Structure schalten.
Zitatich habe mal wieder ein, für euch sicher, kleines Problem mit einem structure.
Diese Annahme ist leider falsch, insb. wenn die clientstate Attribute gesetzt wurden.
ZitatVllt. habt ihr ja noch einen Tip, wo ich suchen könnte?
Das Wissen um _alle_ state Readings ist relevant, d.h. ich wuerde gerne die Ausgabe sehen von:
list eg_wohnzimmer_terrassentuer,eg_kueche_terrassentuer,eg_flur_haustuer state
Das State-Reading ist vorhanden, allerdings groß geschrieben.
eg_wohnzimmer_terrassentuer true
eg_kueche_terrassentuer true
eg_flur_haustuer true
Das wird mir auch so im structure angezeigt.
Probably associated with
eg_flur_haustuer
true
MQTT2_DEVICE
eg_kueche_terrassentuer
true
MQTT2_DEVICE
eg_wohnzimmer_terrassentuer
true
MQTT2_DEVICE
:o
Zitat von: stauraum am 13 Januar 2020, 09:37:34
Das State-Reading ist vorhanden, allerdings groß geschrieben.
eg_wohnzimmer_terrassentuer true
eg_kueche_terrassentuer true
eg_flur_haustuer true
Das wird mir auch so im structure angezeigt.
Probably associated with
eg_flur_haustuer
true
MQTT2_DEVICE
eg_kueche_terrassentuer
true
MQTT2_DEVICE
eg_wohnzimmer_terrassentuer
true
MQTT2_DEVICE
:o
Das STATE ist kein Reading sondenr ein Internal und dieses wird wirft kein Event welches aber von structure benötigt wird.
Bitte sei so nett und befolge die Nachfragen von Rudi.
Zitat von: rudolfkoenig am 13 Januar 2020, 09:29:22
Das Wissen um _alle_ state Readings ist relevant, d.h. ich wuerde gerne die Ausgabe sehen von:
list eg_wohnzimmer_terrassentuer,eg_kueche_terrassentuer,eg_flur_haustuer state
ZitatDas STATE ist kein Reading sondenr ein Internal und dieses wird wirft kein Event welches aber von structure benötigt wird.
Anders ausgedrueckt: man _muss_ ueberall das state _Reading_ setzen, sonst wird das nix mit dem structure :)
list eg_wohnzimmer_terrassentuer,eg_kueche_terrassentuer,eg_flur_haustuer state
bringt keinen Output. Da es das klein geschriebene Reading nicht gibt ...
Dann musst Du es setzen. Entweder über die MQTT Konfiguration (kenne mich damit nicht aus) oder über ein userreadings
attr DEVICENAME userreadings state:contact:.* { ReadingsVal($name,'contact','none') }
Das Attribut fuer die "MQTT Konfiguration" heisst in diesem Fall jsonMap, und ist ein Attribut der MQTT2_DEVICE Instanzen.
jsonmap greift bei mir in dem Fall eigenartigerweise aber nicht.
Der Sensor hat jetzt schon mehrfach ausgelöst:
Internals:
CID zigbee_0x00158d000302cc1e
DEF zigbee_0x00158d000302cc1e
DEVICETOPIC MQTT2_zigbee_0x00158d000302cc1e
FUUID 5cee4ef2-f33f-78f5-9b6b-00a7475b7ccd180f
IODev MQTT2_Server
LASTInputDev MQTT2_Server
MQTT2_Server_MSGCNT 114
MQTT2_Server_TIME 2020-01-13 10:11:58
MSGCNT 114
NAME MQTT2_zigbee_0x00158d000302cc1e
NR 148
STATE Motion: false<br>Luminance: 318
TYPE MQTT2_DEVICE
JSONMAP:
occupancy state
READINGS:
2019-05-29 11:20:50 associatedWith MQTT2_Zigbee_Bridge
2020-01-13 10:11:58 battery 91
2020-01-13 10:11:58 illuminance 318
2020-01-13 10:11:58 linkquality 2
2020-01-13 10:11:58 occupancy false
2020-01-13 10:11:58 voltage 2985
Attributes:
IODev MQTT2_Server
imageLink /fhem/deviceimages/mqtt2/RTCGQ11LM.jpg
jsonMap occupancy:state
model L_08_Human_Motion_TempSensor
readingList zigbee2mqtt/0x00158d000302cc1e:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE,Rollladen
stateFormat Motion: occupancy<br>Luminance: illuminance
Gruß
Thomas
Also bei mir greift weder userreading noch jsonMap:
attr eg_wohnzimmer_terrassentuer state:contact:.* { ReadingsVal($name,'contact','none') }
attr eg_wohnzimmer_terrassentuer jsonMap contact:state
Es taucht kein Reading "state" auf. :o
Wenn man jsonMap (neu) setzt, muss die passende Zeile in readingsList von
zigbee2mqtt/0x00158d000424a2b4:.* { json2nameValue($EVENT) }
nach
zigbee2mqtt/0x00158d000424a2b4:.* { json2nameValue($EVENT,'',$JSONMAP) }
geaendert werden.
Zitatattr eg_wohnzimmer_terrassentuer state:contact:.* { ReadingsVal($name,'contact','none') }
Das muesste
attr eg_wohnzimmer_terrassentuer userReadings state:contact:.* { ReadingsVal($name,'contact','none') }
sein, habs gerade mit einem dummy getestet.
bei jsonMap hab ich mich einfach auf das Template zigbee2mqtt_ContactSensor gestützt. Habe das auf alle drei Kontakte gesetzt, da war neben jsonMap auch die readingList richtig gesetzt. Genützt hat es nur nichts ... #argh!
Das userReading war schon richtig in FHEM einggbn. Hatte es hier nur schnell runter getippt. Aber wenn ich es richtig verstanden habe brauche ist das userreading ja mit jsonMap nicht ... ;-)
ZitatGenützt hat es nur nichts ...
Wenn ich das untersuchen soll, brauche ich ein FHEM Log Mitschnitt einer Nachricht, mit vorher gesetzten "attr mqtt2server verbose 5"
Ach ja, die Erklärung (https://forum.fhem.de/index.php/topic,106677.msg1005898.html#msg1005898) warum und weshalb war schon wieder in Vergessenheit geraten ;D
vllt. war ich einfach zu hektisch ...
list eg_wohnzimmer_terrassentuer,eg_kueche_terrassentuer,eg_flur_haustuer state
bringt jetzt:
eg_wohnzimmer_terrassentuer 2020-01-13 10:41:11 true
eg_kueche_terrassentuer 2020-01-13 11:16:02 true
eg_flur_haustuer 2020-01-13 10:39:43 true
Das strc_tueren steht nun auf undefined. Unter "Probably associated with" steht nun:
eg_flur_haustuer
close
MQTT2_DEVICE
eg_kueche_terrassentuer
close
MQTT2_DEVICE
eg_wohnzimmer_terrassentuer
close
MQTT2_DEVICE
Muss jetzt bei "clientstate_priority"
true false
oder
open close
rein?!
Fragen über Fragen ...
Das Log wird a weng unübersichtlich denke ich. Da schreiben alle 10 Sekunden auch diverse Steckdosen mit Tasmota rein ...
2020-01-13 13:34:00 Global global ATTR eg_wohnzimmer_terrassentuer verbose 5
2020-01-13 13:34:00 Global global ATTR eg_kueche_terrassentuer verbose 5
2020-01-13 13:34:00 Global global ATTR eg_flur_haustuer verbose 5
2020-01-13 13:34:00 Global global ATTR strc_tueren verbose 5
2020-01-13 13:57:05 structure strc_tueren true
2020-01-13 13:57:05 MQTT2_DEVICE eg_kueche_terrassentuer linkquality: 15
2020-01-13 13:57:05 MQTT2_DEVICE eg_kueche_terrassentuer voltage: 3035
2020-01-13 13:57:05 MQTT2_DEVICE eg_kueche_terrassentuer battery: 100
2020-01-13 13:57:05 MQTT2_DEVICE eg_kueche_terrassentuer close
2020-01-13 14:00:46 structure strc_tueren true
2020-01-13 14:00:46 MQTT2_DEVICE eg_flur_haustuer voltage: 3025
2020-01-13 14:00:46 MQTT2_DEVICE eg_flur_haustuer linkquality: 0
2020-01-13 14:00:46 MQTT2_DEVICE eg_flur_haustuer close
2020-01-13 14:00:46 MQTT2_DEVICE eg_flur_haustuer battery: 100
2020-01-13 14:01:23 structure strc_tueren true
2020-01-13 14:01:23 MQTT2_DEVICE eg_wohnzimmer_terrassentuer battery: 100
2020-01-13 14:01:23 MQTT2_DEVICE eg_wohnzimmer_terrassentuer close
2020-01-13 14:01:23 MQTT2_DEVICE eg_wohnzimmer_terrassentuer linkquality: 18
2020-01-13 14:01:23 MQTT2_DEVICE eg_wohnzimmer_terrassentuer voltage: 3035
2020-01-13 14:06:07 structure strc_tueren undefined
2020-01-13 14:06:07 MQTT2_DEVICE eg_kueche_terrassentuer battery: 100
2020-01-13 14:06:07 MQTT2_DEVICE eg_kueche_terrassentuer open
2020-01-13 14:06:07 MQTT2_DEVICE eg_kueche_terrassentuer linkquality: 18
2020-01-13 14:06:07 MQTT2_DEVICE eg_kueche_terrassentuer voltage: 3035
2020.01.13 13:57:04 5: in: PUBLISH: 0^(0)(30)zigbee2mqtt/0x00158d000424a2b4{"battery":100,"voltage":3035,"contact":true,"linkquality":15}
2020.01.13 13:57:04 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PUBLISH zigbee2mqtt/0x00158d000424a2b4:{"battery":100,"voltage":3035,"contact":true,"linkquality":15}
2020.01.13 13:57:04 5: mqtt2server: dispatch autocreate=simple\000zigbee2mqtt\000zigbee2mqtt/0x00158d000424a2b4\000{"battery":100,"voltage":3035,"contact":true,"linkquality":15}
2020.01.13 13:57:04 4: MQTT2_DEVICE_Parse: eg_kueche_terrassentuer zigbee2mqtt/0x00158d000424a2b4 => { json2nameValue($EVENT,'',$JSONMAP) }
2020.01.13 13:58:04 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
2020.01.13 13:59:04 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
2020.01.13 14:00:04 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
2020.01.13 14:00:45 5: in: PUBLISH: 0](0)(30)zigbee2mqtt/0x00158d00040aa902{"battery":100,"voltage":3025,"contact":true,"linkquality":0}
2020.01.13 14:00:45 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PUBLISH zigbee2mqtt/0x00158d00040aa902:{"battery":100,"voltage":3025,"contact":true,"linkquality":0}
2020.01.13 14:00:45 5: mqtt2server: dispatch autocreate=simple\000zigbee2mqtt\000zigbee2mqtt/0x00158d00040aa902\000{"battery":100,"voltage":3025,"contact":true,"linkquality":0}
2020.01.13 14:00:45 4: MQTT2_DEVICE_Parse: eg_flur_haustuer zigbee2mqtt/0x00158d00040aa902 => { json2nameValue($EVENT,'',$JSONMAP) }
2020.01.13 14:01:22 5: in: PUBLISH: 0^(0)(30)zigbee2mqtt/0x00158d00040ab06c{"battery":100,"voltage":3035,"contact":true,"linkquality":18}
2020.01.13 14:01:22 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PUBLISH zigbee2mqtt/0x00158d00040ab06c:{"battery":100,"voltage":3035,"contact":true,"linkquality":18}
2020.01.13 14:01:22 5: mqtt2server: dispatch autocreate=simple\000zigbee2mqtt\000zigbee2mqtt/0x00158d00040ab06c\000{"battery":100,"voltage":3035,"contact":true,"linkquality":18}
2020.01.13 14:01:22 4: MQTT2_DEVICE_Parse: eg_wohnzimmer_terrassentuer zigbee2mqtt/0x00158d00040ab06c => { json2nameValue($EVENT,'',$JSONMAP) }
2020.01.13 14:02:22 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
2020.01.13 14:03:22 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
2020.01.13 14:04:22 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
2020.01.13 14:05:22 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
2020.01.13 14:06:07 5: in: PUBLISH: 0_(0)(30)zigbee2mqtt/0x00158d000424a2b4{"battery":100,"voltage":3035,"contact":false,"linkquality":18}
2020.01.13 14:06:07 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PUBLISH zigbee2mqtt/0x00158d000424a2b4:{"battery":100,"voltage":3035,"contact":false,"linkquality":18}
2020.01.13 14:06:07 5: mqtt2server: dispatch autocreate=simple\000zigbee2mqtt\000zigbee2mqtt/0x00158d000424a2b4\000{"battery":100,"voltage":3035,"contact":false,"linkquality":18}
2020.01.13 14:06:07 4: MQTT2_DEVICE_Parse: eg_kueche_terrassentuer zigbee2mqtt/0x00158d000424a2b4 => { json2nameValue($EVENT,'',$JSONMAP) }
2020.01.13 14:07:07 4: mqtt2server_192.168.2.10_53230 zigbee2mqtt PINGREQ
root@bruno ~ #
Stand ist jetzt aktuell:
strc_tueren steht auf true, wenn alle Kontakte geschlossen sind. Geht einer auf false, geht das strc_tueren auf undefined.
Ich habe das strc_tueren ohne jegliche Attribute laufen lassen. Ich gehe mal davon aus das ich clientstate_priority "true false" setzen muss. Ist die Reihenfolge "true false" oder "false true" relevant?
Wie ich geschrieben habe: sobald irgendetwas mit clientstate kommt, muss ich selbst in der Doku nachschauen.
Kommt daher, dass dieser Feature nicht von mir stammt, und mein Hirn weigert sich daraus dauerhaft einen Sinn zu machen.
In der Doku (https://fhem.de/commandref_modular.html#clientstate_priority) steht aber relativ klar beschrieben:
ZitatIf clientstate_behavior is set to relative, then you have to set the attribute "clientstate_priority" with all states of the defined devices to this structure in descending order[...]
Man braucht also:
attr strc_tueren clientstate_behavior relative
attr strc_tueren clientstate_priority false true
Sehr verwirrend ... ;-)
Zumindest funktioniert es nun so aber erst einmal. Was mich noch irritiert ist, das das angehängt notify jedesmal auslöst, wenn ein Kontakt auf geht, auch wenn der State selber schon auf false ist.
Sprich, ein Kontakt geht auf, 2 bleiben zu. Das structure geht auf false, das notify wird ausgelöst. Soweit so gut. Geht jetzt aber ein zweiter Kontakt auf false wird ja am structure eigentlich nichts mehr geändert, das notify aber trotzdem noch einmal ausgelöst?