[Howto] Somfy Rolladen zwischen FHEM und Home Asssistant Syncron halten.

Begonnen von th0nix, 01 Juli 2024, 23:12:16

Vorheriges Thema - Nächstes Thema

th0nix

Hallo,

ich leben inzwischen mit FHEM und welchen manchen Integration im Home Assistent.
Nun wollte ich meine Somfy Rollläden auch noch im Home Assistent steuern können.

Ich möchte meinen aktuellen Stand - hat sicherlich noch Optimierungspotenzial teilen.

Zum Besseren Verständnis:
  • Im Home Assistant heißt mein Rollladen: Schlafzimmer Rolladen
  • Im FHEM ist MQTT_Rolladen_Schlafzimmer eine Repräsentation vom Status im Home Assistenat und sendet und Empfängt den Status
  • Im FHEM heißt mein Somfy Rolladen (Device) schlafzimmer_r

1) Im Home Assistant die MQTT Integration mit einem MQTT Server verbinden
2) Rollanden in der config/configuration.yaml wie folgt anlegen:
mqtt:
  cover:
  - name: "Schlafzimmer Rolladen"
    unique_id:  schlafzimmer_rolladen_unten
    command_topic: "fhem/schlafzimmer_rolladen_unten/set"
    state_topic: "fhem/schlafzimmer_rolladen_unten/state"
    position_topic: "fhem/schlafzimmer_rolladen_unten/position"
    set_position_topic: "fhem/schlafzimmer_rolladen_unten/set"
    payload_close: "close"
    payload_open: "open"
    payload_stop: "stop"
    state_closed: "closed"
    state_closing: "closing"
    state_open: "open"
    state_opening: "opening"
    state_stopped: "stopped"

3) MQTT Device im FHEM anlegen welchen den Status im Home Assistent representiert:
defmod MQTT_Rolladen_Schlafzimmer MQTT2_DEVICE mosquitto_MQTT
attr MQTT_Rolladen_Schlafzimmer autocreate 0
attr MQTT_Rolladen_Schlafzimmer readingList mosquitto_MQTT:fhem/schlafzimmer_rolladen_unten/set:.* ha_command
attr MQTT_Rolladen_Schlafzimmer room MQTT2_DEVICE
attr MQTT_Rolladen_Schlafzimmer setList closed:noArg fhem/schlafzimmer_rolladen_unten/state closed\
open:noArg fhem/schlafzimmer_rolladen_unten/state open\
position fhem/schlafzimmer_rolladen_unten/position $EVTPART1

4) Die Syncronisation zwischen dem Somfy Device und dem MQTT Device via DOIF machen
defmod schlafzimmer_r_ha_di DOIF ([MQTT_Rolladen_Schlafzimmer:ha_command] eq "close")\
( \
{Log 1, "$SELF: Close Request von HASS erkannt"},\
set schlafzimmer_r close \
)\
\
DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] eq "open")\
( \
{Log 1, "$SELF: Open Request von HASS erkannt"},\
set schlafzimmer_r open \
)\
\
DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] eq "stop")\
( \
{Log 1, "$SELF: Stop Request von HASS erkannt"},\
set schlafzimmer_r stop \
)\
\
DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] > "-1")\
( \
# Umrechnung 20%=80%,\
{Log 1, "$SELF: Potionsrequest von HASS erkannt".(([MQTT_Rolladen_Schlafzimmer:ha_command]-100)/-1)},\
set schlafzimmer_r pos {(([MQTT_Rolladen_Schlafzimmer:ha_command]-100)/-1)}\
)\
\
DOELSEIF ([schlafzimmer_r] eq "open")\
( set MQTT_Rolladen_Schlafzimmer open )\
\
DOELSEIF ([schlafzimmer_r] eq "closed")\
( \
  set MQTT_Rolladen_Schlafzimmer closed,\
  set MQTT_Rolladen_Schlafzimmer position 100\
 )\
\
DOELSEIF ([schlafzimmer_r:position] < 100 )\
( \
  set MQTT_Rolladen_Schlafzimmer open,\
  set MQTT_Rolladen_Schlafzimmer position {( (int([schlafzimmer_r:position])-100)/-1 )}\
)
attr schlafzimmer_r_ha_di do always

5) Bei dem Sonfy Gerät noch ein event-on-change-reading auf die position setzten:
attr schlafzimmer_r event-on-change-reading position