Hilfe mit mehreren Geräten über ein MQTT-Device (SwitchBot)

Begonnen von Guenni1404, 20 November 2022, 14:13:22

Vorheriges Thema - Nächstes Thema

Guenni1404

Hallo,

ich habe mir über die Seite https://github.com/devWaves/SwitchBot-MQTT-BLE-ESP32 den  SwitchBot BLE geflasht. Funktioniert auch soweit.

Nun würde ich gerne eine saubere MQTT Auswertung bekommen, da ich demnächst ein zweites Gerät bekomme und diese Daten da ebenfalls mitkommen.
Gleichzeitig möchte ich beim senden auch das Gerät auswählen können. Bisher habe ich folgendes.
List:
Internals:
   CFGFN     
   CID        SwitchBotMQTT
   DEF        SwitchBotMQTT
   FUUID      637a2370-f33f-5815-d860-3808dcfa505cb26a
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.178.54_64757
   MQTT2_FHEM_Server_MSGCNT 370
   MQTT2_FHEM_Server_TIME 2022-11-20 14:08:10
   MSGCNT     370
   NAME       MQTT2_SwitchBotMQTT
   NR         22657
   STATE      status
   TYPE       MQTT2_DEVICE
   eventCount 391
   READINGS:
     2022-11-20 13:54:08   IODev           MQTT2_FHEM_Server
     2022-11-20 13:54:19   _               switchbot/SwitchBotMQTT/curtain/curtainone
     2022-11-20 13:54:19   avty_t          switchbot/SwitchBotMQTT/lastwill
     2022-11-20 13:56:09   batt            86
     2022-11-20 13:56:09   battery         86
     2022-11-20 13:56:09   calib           true
     2022-11-20 13:54:19   cmd_t           ~/set
     2022-11-20 13:55:39   command         CLOSE
     2022-11-20 13:54:19   dev_cla         curtain
     2022-11-20 13:54:19   device_identifiers_1 switchbot_CB:79:F8:F4:94:25
     2022-11-20 13:54:19   device_manufacturer WonderLabs SwitchBot
     2022-11-20 13:54:19   device_model    Curtain
     2022-11-20 13:54:19   device_name     curtainone
     2022-11-20 13:54:08   firmware        v7.1
     2022-11-20 13:54:19   icon            mdi:cog
     2022-11-20 14:08:10   lastwill        online
     2022-11-20 13:56:09   light           1
     2022-11-20 13:54:19   name            curtainone Position
     2022-11-20 13:54:19   pl_off          false
     2022-11-20 13:54:19   pl_on           true
     2022-11-20 13:54:19   pl_stop         PAUSE
     2022-11-20 13:56:10   pos             2
     2022-11-20 13:54:19   pos_clsd        0
     2022-11-20 13:54:19   pos_open        100
     2022-11-20 13:54:19   pos_t           ~/position
     2022-11-20 13:54:19   pos_tpl         {{ value_json.pos }}
     2022-11-20 14:08:10   rssi            -48
     2022-11-20 13:54:19   set_pos_t       ~/set
     2022-11-20 13:54:19   set_pos_tpl     {{ position }}
     2022-11-20 13:54:19   stat_clsd       CLOSE
     2022-11-20 13:54:19   stat_open       OPEN
     2022-11-20 13:54:19   stat_stopped    PAUSE
     2022-11-20 13:54:19   stat_t          ~/position
     2022-11-20 14:06:16   state           status
     2022-11-20 13:56:10   status          idle
     2022-11-20 13:54:19   uniq_id         switchbot_CB:79:F8:F4:94:25_position
     2022-11-20 13:54:19   unit_of_meas    %
     2022-11-20 13:55:39   value           1
     2022-11-20 13:54:19   value_template  {{ value_json.pos }}
Attributes:
   readingList SwitchBotMQTT:switchbot/SwitchBotMQTT:.* { json2nameValue($EVENT) }
SwitchBotMQTT:switchbot/SwitchBotMQTT/esp32/firmware:.* firmware
SwitchBotMQTT:switchbot/SwitchBotMQTT/lastwill:.* lastwill
SwitchBotMQTT:homeassistant/sensor/SwitchBotMQTT/linkquality/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:homeassistant/sensor/SwitchBotMQTT/firmware/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:homeassistant/sensor/curtainone/battery/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:homeassistant/sensor/curtainone/linkquality/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:homeassistant/sensor/curtainone/illuminance/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:homeassistant/binary_sensor/curtainone/calibrated/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:homeassistant/cover/curtainone/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:homeassistant/sensor/curtainone/position/config:.* { json2nameValue($EVENT) }
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/battery:.* battery
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/rssi:.* rssi
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/attributes:.* { json2nameValue($EVENT) }
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/state:.* state
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/position:.* { json2nameValue($EVENT) }
SwitchBotMQTT:switchbot/SwitchBotMQTT/esp32/rssi:.* rssi
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/status:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE
   setList    state:OPEN,PAUSE,CLOSE switchbot/SwitchBotMQTT/curtain/curtainone/set $EVTPART1


RAW:
defmod MQTT2_SwitchBotMQTT MQTT2_DEVICE SwitchBotMQTT
attr MQTT2_SwitchBotMQTT readingList SwitchBotMQTT:switchbot/SwitchBotMQTT:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:switchbot/SwitchBotMQTT/esp32/firmware:.* firmware\
SwitchBotMQTT:switchbot/SwitchBotMQTT/lastwill:.* lastwill\
SwitchBotMQTT:homeassistant/sensor/SwitchBotMQTT/linkquality/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:homeassistant/sensor/SwitchBotMQTT/firmware/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:homeassistant/sensor/curtainone/battery/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:homeassistant/sensor/curtainone/linkquality/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:homeassistant/sensor/curtainone/illuminance/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:homeassistant/binary_sensor/curtainone/calibrated/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:homeassistant/cover/curtainone/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:homeassistant/sensor/curtainone/position/config:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/battery:.* battery\
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/rssi:.* rssi\
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/attributes:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/state:.* state\
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/position:.* { json2nameValue($EVENT) }\
SwitchBotMQTT:switchbot/SwitchBotMQTT/esp32/rssi:.* rssi\
SwitchBotMQTT:switchbot/SwitchBotMQTT/curtain/curtainone/status:.* { json2nameValue($EVENT) }
attr MQTT2_SwitchBotMQTT room MQTT2_DEVICE
attr MQTT2_SwitchBotMQTT setList state:OPEN,PAUSE,CLOSE switchbot/SwitchBotMQTT/curtain/curtainone/set $EVTPART1

setstate MQTT2_SwitchBotMQTT status
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:08 IODev MQTT2_FHEM_Server
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 _ switchbot/SwitchBotMQTT/curtain/curtainone
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 avty_t switchbot/SwitchBotMQTT/lastwill
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:56:09 batt 86
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:56:09 battery 86
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:56:09 calib true
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 cmd_t ~/set
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:55:39 command CLOSE
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 dev_cla curtain
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 device_identifiers_1 switchbot_CB:79:F8:F4:94:25
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 device_manufacturer WonderLabs SwitchBot
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 device_model Curtain
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 device_name curtainone
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:08 firmware v7.1
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 icon mdi:cog
setstate MQTT2_SwitchBotMQTT 2022-11-20 14:09:40 lastwill online
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:56:09 light 1
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 name curtainone Position
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 pl_off false
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 pl_on true
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 pl_stop PAUSE
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:56:10 pos 2
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 pos_clsd 0
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 pos_open 100
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 pos_t ~/position
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 pos_tpl {{ value_json.pos }}
setstate MQTT2_SwitchBotMQTT 2022-11-20 14:09:40 rssi -49
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 set_pos_t ~/set
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 set_pos_tpl {{ position }}
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 stat_clsd CLOSE
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 stat_open OPEN
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 stat_stopped PAUSE
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 stat_t ~/position
setstate MQTT2_SwitchBotMQTT 2022-11-20 14:06:16 state status
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:56:10 status idle
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 uniq_id switchbot_CB:79:F8:F4:94:25_position
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 unit_of_meas %
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:55:39 value 1
setstate MQTT2_SwitchBotMQTT 2022-11-20 13:54:19 value_template {{ value_json.pos }}


Damit kann ich auch das öffnen und schließen steuern. Allerdings kein Gerät auswählen. Das Gerät selber wird bei MQTT als
curtainone
übertragen. Das nächste wäre dann "curtaintwo".

Wie passe ich am besten die Auswertung und das senden an?

Otto123

Hi,

das klingt für mich nach der Vorgehensweise: bridge Device machen und dann jedes dieser Teile in ein separates MQTT2_DEVICE
Ich hatte dieses Vorgehen mal hier beschrieben. Im Wiki gibt es da auch viele Beispiele.
https://forum.fhem.de/index.php/topic,116480.msg1107818.html#msg1107818

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Guenni1404

Hallo Otto,

danke für den Tipp. Ich komme aber nicht weiter.
Ich habe als bridgeRegexp folgendes:

curtain\/([a-z]+)\/([a-z]+).*:.* "curtain_$1_$2_$3"


Wenn ich dann den "curtain" bewege und die MQTT Kommandos kommen, wird mir kein neues Devices angelegt.

Das List:
Internals:
   CFGFN     
   CID        SwitchBotMQTT
   DEF        SwitchBotMQTT
   FUUID      637a536c-f33f-5815-c874-deea02f694f20b76
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.178.54_56168
   MQTT2_FHEM_Server_MSGCNT 2082
   MQTT2_FHEM_Server_TIME 2022-11-20 21:18:09
   MSGCNT     2082
   NAME       MQTT2_SwitchBotMQTT
   NR         27611
   STATE      CLOSE
   TYPE       MQTT2_DEVICE
   eventCount 2162
   OLDREADINGS:
   READINGS:
     2022-11-20 21:18:09   lastwill        online
     2022-11-20 21:18:09   rssi            -28
Attributes:
   bridgeRegexp curtain\/([a-z]+)\/([a-z]+).*:.* "curtain_$1_$2_$3"
   readingList SwitchBotMQTT:switchbot/SwitchBotMQTT/lastwill:.* lastwill
SwitchBotMQTT:switchbot/SwitchBotMQTT/esp32/rssi:.* rssi
   room       MQTT2_DEVICE


Kannst du mir helfen?

Otto123

#3
Ich würde das bridgeRegexp so versuchen:
switchbot\/SwitchBotMQTT\/curtain\/([a-z]+)\/.* "curtain_$1"
Das matched auf den kompletten String und extrahiert dein benanntest Device durch einen groupmatch - siehe https://regex101.com/r/mSQwt7/1

Hinweis: die Escape Zeichen die https://regex101.com/ haben will, kann man in FHEM weglassen.
Dann solltest Du überlegen, ob Du alle topics brauchst und eventuell die Gruppe homeassistant gleich weglassen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Guenni1404

Hallo Otto,

bin Heute dazu gekommen. Der komplette RegEx war genau der richtige Tipp.
Danke

Gruß

guenni