DOIF Problem was mache ich falsch

Begonnen von Sepp, 17 Februar 2025, 17:57:44

Vorheriges Thema - Nächstes Thema

Sepp

es bezieht sich auf diesen Arikel
[Howto] Somfy Rolladen zwischen FHEM und Home Asssistant Syncron halten

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
-------------------------------------------------------------------
da bekomme ich den Fehler in Fhem
------------------------------------------------------------
schlafzimmer_r_ha_di DOIF: expected DOELSEIF or DOELSE: \ ( \ {Log 1, "schlafzimmer_r_ha_di: Close Request von HASS erkannt"},\ set schlafzimmer_r close \ )\ \ DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] eq "open")\ ( \ {Log 1, "schlafzimmer_r_ha_di: Open Request von HASS erkannt"},\ set schlafzimmer_r open \ )\ \ DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] eq "stop")\ ( \ {Log 1, "schlafzimmer_r_ha_di: Stop Request von HASS erkannt"},\ set schlafzimmer_r stop \ )\ \ DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] > "-1")\ ( \ # Umrechnung 20%=80%,\ {Log 1, "schlafzimmer_r_ha_di: 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
könnte mir dabei jemand Helfen bin am verzweifeln

Sepp

Sorry hier die list von meinen in Fhem angelegten Rollo

Internals:
   CHANNEL_RECEIVE 1
   DEF        9240B101
   FUUID      67af3feb-f33f-3e5d-fe31-62a568db972e622b
   ID         9240B10
   IODev      Signal_Duino
   MODEL      LE-Device
   NAME       schlafzimmer_r
   NR         145
   NTFY_ORDER 50-schlafzimmer_r
   STATE      notAvaible
   TYPE       Siro
   Version    1.3
   CODE:
     1          9240B101
   READINGS:
     2025-02-16 17:56:42   ActionTime      1739725002
     2025-02-16 17:56:42   ActionTrigger   fhem
     2025-02-16 17:56:42   BetweentActionTime 2
     2025-02-16 20:12:28   IODev           Signal_Duino
     2025-02-16 17:56:42   LastAction      stop
     2025-02-16 17:56:42   LastActionTime  1739725000
     2025-02-16 17:56:40   aktActionFinish 0
     2025-02-16 17:56:40   aktEndAction    0
     2025-02-16 17:56:40   aktRunningAction noAction
     2025-02-16 17:56:40   aktTimeAction   0
     2025-02-16 17:56:40   batteryState    unknown
     2022-03-14 17:03:35   command         position-60
     2022-03-14 17:03:35   desired_position 60
     2022-03-14 17:03:35   drive-type      modul
     2022-03-14 17:03:41   homekit_pos     40
     2022-03-14 17:03:35   last_drive      drive-down
     2025-02-16 17:56:42   motor-term      Function is not available without set runtime attribute, please define
     2025-02-16 17:56:40   pct             100
     2025-02-16 17:56:40   position        100
     2025-02-16 17:56:42   state           notAvaible
   helper:
     progmode   off
Attributes:
   devStateIcon {return FHEM::Siro::Siro_icon($name)}
   event-on-change-reading position
   room       HASS
   webCmd     open:close:stop:position

Beta-User

Warum fragst du nicht im DOIF-Bereich oder in diesem howto-Artikel (https://forum.fhem.de/index.php?topic=138649.0?)?

Meine Meinung: dieses Rumgeschubse von Daten zwischen verschiedenen Devices ist Murks, das kann und sollte man per MQTT_GENERIC_BRIDGE und den passenden Attributen direkt an dem Siro-Device lösen....

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Sepp

Kannst du mir bitte erklären wie oder wo ich schauen muss ?

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Sepp

habe jetzt das gemacht
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

dann hatte ich nur diese Fehlermeldung komme aber nicht weiter so oder so:
schlafzimmer_r_ha_di DOIF: expected DOELSEIF or DOELSE: attr schlafzimmer_r_ha_di do always

Sepp

Na da hab ich ja wieder was neues zu lesen zu lesen und denken mal schauen wie weit ich das schaffe :o
Danke für deinen Tip

passibe

Zitat von: Sepp am 17 Februar 2025, 18:25:29attr schlafzimmer_r_ha_di do always
Hast du das einfach in die Definition deines DOIF reinkopiert?
"always" muss über das "do" Attribut gesetzt werden, das hat in der Definition davon, was das DOIF machen soll, nichts zu suchen.

Deshalb auch die Fehlermeldung
Zitat von: Sepp am 17 Februar 2025, 18:25:29expected DOELSEIF or DOELSE

Sepp

Danke passibe aber das hab ich weggelassen und es bleibt zwar jetzt in fhem aber schalten kann ich den Rollo trotzdem noch nicht.(von fhem geht er aber nicht in HA)
Aber Steckdosen funktionieren alle einwandfrei also ist doch mit MQTT alles ok(so sehe ich das)

also da verzweifelt man schon
wenn jemand ein Beispiel hätte wo es mit dem Rollo funktioniert das wäre toll
Gruß

passibe

Ok, aber die Fehlermeldung aus dem Eingangspost
Zitat von: Sepp am 17 Februar 2025, 17:57:44schlafzimmer_r_ha_di DOIF: expected DOELSEIF or DOELSE: \ ( \ {Log 1, "schlafzimmer_r_ha_di: Close Request von HASS erkannt"},\ set schlafzimmer_r close \ )\ \ DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] eq "open")\ ( \ {Log 1, "schlafzimmer_r_ha_di: Open Request von HASS erkannt"},\ set schlafzimmer_r open \ )\ \ DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] eq "stop")\ ( \ {Log 1, "schlafzimmer_r_ha_di: Stop Request von HASS erkannt"},\ set schlafzimmer_r stop \ )\ \ DOELSEIF ([MQTT_Rolladen_Schlafzimmer:ha_command] > "-1")\ ( \ # Umrechnung 20%=80%,\ {Log 1, "schlafzimmer_r_ha_di: 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
und diese Fehlermeldung
Zitat von: Sepp am 17 Februar 2025, 18:25:29schlafzimmer_r_ha_di DOIF: expected DOELSEIF or DOELSE: attr schlafzimmer_r_ha_di do always
müssten jetzt doch weg sein?

Was passiert denn jetzt, wenn du das Rollo bedienst?

Ansonsten lies doch mal mit MQTT Explorer o.ä. mit, ob/was denn überhaupt für MQTT-Nachrichten hin und hergesendet werden.

Sepp

#10
Fehlermeldung hab ich keine mehr
Aber das steht in HA MQTT im Log
2025-02-18 14:35:57: Warning: Mosquitto should not be run as root/administrator.
2025-02-18 14:35:57: mosquitto version 2.0.20 starting
2025-02-18 14:35:57: Config loaded from /etc/mosquitto/mosquitto.conf.
2025-02-18 14:35:57: Loading plugin: /usr/share/mosquitto/go-auth.so
2025-02-18 14:35:57:  ├── Username/password checking enabled.
2025-02-18 14:35:57:  ├── TLS-PSK checking enabled.
2025-02-18 14:35:57:  └── Extended authentication not enabled.
2025-02-18 14:35:57: Opening ipv4 listen socket on port 1883.
2025-02-18 14:35:57: Opening ipv6 listen socket on port 1883.
2025-02-18 14:35:57: Opening websockets listen socket on port 1884.
2025-02-18 14:35:57: mosquitto version 2.0.20 running
2025-02-18 14:35:57: New connection from ::1:57882 on port 1883.
2025-02-18 14:35:57: Client <unknown> disconnected due to protocol error.
[14:35:57] INFO: Successfully send discovery information to Home Assistant.
[14:35:57] INFO: Successfully send service information to the Supervisor.
2025-02-18 14:36:00: New connection from 172.30.32.1:38901 on port 1883.
2025-02-18 14:36:00: New client connected from 172.12.32.1:38901 as 0UfMtOz5lZ7UEwFHe (p2, c1, k60, u'mqtt-user').
2025-02-18 14:36:04: New connection from 192.168.178.53:50476 on port 1883.
2025-02-18 14:36:04: New client connected from 192.168.178.53:50476 as fhem (p1, c1, k60, u'mqtt-user').
2025-02-18 14:36:16: New connection from 172.12.32.1:55792 on port 1883.
2025-02-18 14:36:16: Client <unknown> closed its connection.
2025-02-18 14:38:16: New connection from 172.12.32.1:58804 on port 1883.


Sepp


Beta-User

Zitat von: Sepp am 18 Februar 2025, 17:47:39Sorry Nichts passiert
Sorry, aber "nichts" ist "zu dürftig"...

Insgesamt MUSS dir die Kette klar sein, über die die Daten hier in beide Richtungen laufen sollen - und da sind imo zum einen viel zu viele Devices beteiligt, und zum anderen ist dir anscheinend überhaupt nicht klar, was ein "event" in FHEM ist, was ein "Event-Handler", und was Attribute wie dieses bewirken:
Zitat von: Sepp am 17 Februar 2025, 18:05:30event-on-change-reading position

Um in deinem Konstrukt zurechtzufinden, brauchst du (gleichzeitig!)
- Ein Browser-Fenster mit der Detailansicht des Siro-Devices
- Ein Browser-Fenster " mit deinem (unnötigen...) "Kopierdevice" (MQTT_Rolladen_Schlafzimmer)
- Ein "irgendwas", in dem du den MQTT-VERKEHR (! keine "Zustände") sehen kannst - ich würde das einfach über "show traffic" im MQTT2_CLIENT machen (dann siehst du auch gleich, dass und wie du die Subscriptions einschränken solltest! Alternativ mosquitto_sub, falls man im genannten MQTT-Explorer nicht den Verkehr mitlesen kann)

In letzterem MUSS irgendwas zu sehen sein, wenn du von HA aus versuchst, den Rollladen zu steuern...

Aber nochmal: Der ganze Wust an zusätzlichen Devices (DOIF+MQTT2_DEVICE) ist unnötig kompliziert, verwende MQTT_GENERIC_BRIDGE (richtig)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Sepp

Ok dann beschäftige ich mich mal mit MQTT_GENERIC_BRIDGE (die hab ich ja schon aber ich Denke wahrscheinlich wieder zu kompliziert)
Aber trotzdem vielen Dank werde mal alles Löschen dann neu starten
Und es versuchen
Gruß