Hallo Zusammen,
ich habe mal eine vermutlich einfach zu lösende Frage. Um einen alten aber sehr guten Luftreiniger von Beurer smart zu machen, habe ich auf den Einschalter einen Swichtbot geklebt. Er betätigt den Taster zum ein und ausschalten. Den Bot steuere ich über einen ESP32 per MQTT. Der Gag bei der Sache ist der Switch Mode. Das bedeutet, wenn ich einen "set wz_feuchte on" schicke, drückt der Swichtbot 1x auf den Taster, schaltet das Gerät an und behält im state ON. Sende ich ein off. Drückt er wieder auf den Knopf und der state springt auf OFF. Das ist zwar keine 100% sicher Rückmeldung über den Status des Luftreinigers aber besser als nichts.
Soweit funktioniert das ganze auch völlig problemlos.
Nun möchte ich das Gerät in HomeKit integrieren. Dazu haben ich ein simples Homebridgemapping wie folgt angelegt:
On=state,valueOn=ON,valueOff=OFF,cmdOn=on,cmdOff=off
(der Arduino Code liefert den state in Großbuchstaben)
In dem Gerät der Homebridge GUI, funktioniert das auch exakt so wie ich es möchte:
1x drücken= Gerät on -> Kachel bleibt on
nochmal drücken= Gerät off -> Kachel off.
Im Homekit klapp das leider nicht. Hier passiert folgendes:
1x drücken = Gerät on -> Kachel ist kurz on und springt dann auf off
nochmal Drücken = keine Funktion mehr
Was mache ich falsch?
Hier ein List des MQTT Device:
Internals:
CID esp32_2
DEF esp32_2
DEVICETOPIC wz_feuchte
FUUID 61fae0d5-f33f-1248-badf-e9ea314df39a57c0
FVERSION 10_MQTT2_DEVICE.pm:0.255640/2022-01-26
IODev myBroker
LASTInputDev myBroker
MSGCNT 21368
NAME wz_feuchte
NR 378
STATE OFF
TYPE MQTT2_DEVICE
myBroker_CONN myBroker_192.168.23.185_54146
myBroker_MSGCNT 21368
myBroker_TIME 2022-02-13 18:45:59
READINGS:
2022-02-10 13:30:35 IODev myBroker
2022-02-13 18:45:11 assumedstate OFF
2022-02-13 18:45:11 batt 93
2022-02-13 09:52:05 command REQUESTSETTINGS
2022-02-13 09:52:05 firmware 4.9
2022-02-13 09:52:05 hold 0
2022-02-13 09:52:05 inverted false
2022-02-09 15:04:57 json2nameValueErrorText json2nameValue: no closing } found
2022-02-09 15:04:57 json2nameValueInput {"status":"getset0+swi
2022-02-13 18:45:59 lastwill online
2022-02-13 18:45:11 mode PressOnOff
2022-02-13 18:45:59 rssi -73
2022-02-13 18:45:11 state OFF
2022-02-13 18:45:11 status idle
2022-02-10 13:31:34 subscriptions switchbot/esp32_2/bot/switchbottwo/set switchbot/esp32_2/holdPress switchbot/esp32_2/requestInfo switchbot/esp32_2/requestSettings switchbot/esp32_2/rescan switchbot/esp32_2/setHold switchbot/esp32_2/setMode
2022-02-13 09:52:05 timers 0
2022-02-13 08:13:30 value 5
hmccu:
Attributes:
DbLogExclude .*
alexaName Wohnzimmer Feuchte
alexaRoom Wohnzimmer
alias Luft Waescher
cmdIcon on:general_an off:general_aus
devStateIcon OFF:humidity@grey ON:humidity@blue
event-on-change-reading .*
genericDeviceType switch
group Schalter
homebridgeMapping On=state,valueOn=ON,valueOff=OFF,cmdOn=on,cmdOff=off
icon mqtt_bridge_2
readingList esp32_2:switchbot/esp32_2:.* { json2nameValue($EVENT) }
esp32_2:switchbot/esp32_2/lastwill:.* lastwill
esp32_2:switchbot/esp32_2/bot/switchbottwo/assumedstate:.* assumedstate
esp32_2:switchbot/esp32_2/bot/switchbottwo/attributes:.* { json2nameValue($EVENT) }
esp32_2:switchbot/esp32_2/bot/switchbottwo/state:.* state
esp32_2:switchbot/esp32_2/bot/switchbottwo/status:.* { json2nameValue($EVENT) }
esp32_2:switchbot/esp32_2/bot/switchbottwo/settings:.* { json2nameValue($EVENT) }
esp32_2:switchbot/esp32_2/esp32/rssi:.* rssi
room 14 Wohnzimmer,Homekit
setList on switchbot/esp32_2/bot/switchbottwo/set ON
off switchbot/esp32_2/bot/switchbottwo/set OFF
webCmd on:off
Das homebridgeMapping an sich sieht gut aus.
Was sagt denn die Konsole von Homebridge beim Schalten über die WebGUI und über die Home App? Dort sollte doch ein Unterschied zu sehen sein.
Hast Du mal testweise probiert das homebridgeMapping zuerst zu "clear"en?
attr wz_feuchte homebridgeMapping clear On=state,valueOn=ON,valueOff=OFF,cmdOn=on,cmdOff=off
Gruß
Dan
Vielleicht noch ein paar Anmerkungen zum Device an sich:
switchbot/esp32_2/bot/switchbottwo/state:.* { { state => lc $EVENT } }
Könnte dazu führen, dass immer Kleinschriebung verwendet wird und dann das mapping insgesamt entfallen kann.
Vielleicht kann ein ergänzendes setStateList mit "on off" helfen, dass die Sprachsteuerung weiß, dass ein Übergangszustand gesetzt wurde, der vom Device noch nicht bestätigt wurde (dazu müßte man wissen, ob ggf. Anweisungen bestätigt werden).
Ob eocr mit ".*" hier glücklich gewählt ist, wäre auch die Frage.
Zitat von: Beta-User am 16 Februar 2022, 11:43:39
Vielleicht noch ein paar Anmerkungen zum Device an sich:
switchbot/esp32_2/bot/switchbottwo/state:.* { { state => lc $EVENT } }
Könnte dazu führen, dass immer Kleinschriebung verwendet wird und dann das mapping insgesamt entfallen kann.
Der "clear" hat nichts gebracht aber das mappen in Kleinbuchstaben hat die Lösung gebracht. Ich hab das homenridgemapping jetzt gelöscht und es klappt einwandfrei.
Vielen Dank :)