Guten Morgen!
Eine Pumpe wird manuell bzw per Schaltuhr gesteuert. Die Pumpe hat 3 Modi für Geschwindigkeiten und einen Aus. Diese werden mit einem kurzen Schalten über 4 verschiedenen Ausgänge gesteuert (GPIO 17/18/22/27). Die Rückmeldung, dass der Motor läuft kommt über GPIO23.
Am Beginn habe ich die Pumpe nur gesteuert, wusste aber nie, ob die Pumpe läuft oder nicht. Die Anzeige des Status des Motors habe ich erst später implementiert. Damit ich nicht alles neu machen muss, ist es vielleicht etwas komplizierter als notwendig.
Grundsätzlich funktioniert aber alles wie gewollt, jedoch sehe ich in den LOGs einige Fehlermeldungen. Ich verstehe einfach nicht, wo der Fehler ist.
2024.05.15 07:30:02 3: n_PumpeAus return value: Unknown argument motor:, choose one of toggle:noArg on:noArg off:noArg off-till-overnight on-till-overnight intervals off-for-timer on-for-timer on-till off-till blink
2024.05.15 07:30:02 3: n_PumpeAus return value: Unknown argument motor:, choose one of toggle:noArg on:noArg off:noArg off-till-overnight on-till-overnight intervals off-for-timer on-for-timer on-till off-till blink
2024.05.15 07:30:03 3: n_PumpeAus return value: Unknown argument motor:, choose one of toggle:noArg on:noArg off:noArg on-till off-till on-for-timer blink off-till-overnight off-for-timer on-till-overnight intervals
Der Dummy PumpeAus gibt mir einen Btn auf der GUI der ua den Status von GPIO23 anzeigt. Ich habe stateFormat auf "motor" geändert, damit der Btn nicht den Status des Dummys, sondern von GPIO23 anzeigt.
define PumpeAus dummy
attr PumpeAus alias Pumpe
attr PumpeAus devStateIcon on.*:general_an@green:on-2 .*:general_aus@red:on-2
attr PumpeAus eventMap /on-for-timer .5:on-2/
attr PumpeAus group Pumpensteuerung
attr PumpeAus icon Shutdown
attr PumpeAus room Technik
attr PumpeAus setList on off
attr PumpeAus sortby 1
attr PumpeAus stateFormat motor
attr PumpeAus useSetExtensions 1
attr PumpeAus webCmd :
# FUUID 62711d34-f33f-be15-e89b-2d03b2a486610466
# NAME PumpeAus
# NR 47
# STATE off
# TYPE dummy
# eventCount 9
# READINGS:
# 2024-05-14 22:13:26 motor off
# 2024-05-14 22:13:24 state off
#
setstate PumpeAus off
setstate PumpeAus 2024-05-14 22:13:26 motor off
setstate PumpeAus 2024-05-14 22:13:24 state off
Das notify kommt von n_PumpeAus
define n_PumpeAus notify PumpeAus set GPIO17 $EVENT
# DEF PumpeAus set GPIO17 $EVENT
# FUUID 62712332-f33f-be15-c2f9-b970dcea11c5012c
# NAME n_PumpeAus
# NOTIFYDEV PumpeAus
# NR 48
# NTFY_ORDER 50-n_PumpeAus
# REGEXP PumpeAus
# STATE 2024-05-15 07:30:03
# TRIGGERTIME 1715751003.85355
# TYPE notify
# READINGS:
# 2024-05-14 21:51:58 state active
# 2024-05-15 07:30:03 triggeredByDev PumpeAus
# 2024-05-15 07:30:03 triggeredByEvent motor: on
#
setstate n_PumpeAus 2024-05-15 07:30:03
setstate n_PumpeAus 2024-05-14 21:51:58 state active
setstate n_PumpeAus 2024-05-15 07:30:03 triggeredByDev PumpeAus
setstate n_PumpeAus 2024-05-15 07:30:03 triggeredByEvent motor: on
sowie von n_gpio23. Hier wird der Status in "motor" gespeichert und an PumpeAus weitergegeben.
define n_gpio23 notify GPIO23:.* {my $value = ReadingsVal('GPIO23','state','');;if ($value eq 'on' or $value eq 'off') {fhem "setreading PumpeAus motor $value";;}}
# DEF GPIO23:.* {my $value = ReadingsVal('GPIO23','state','');if ($value eq 'on' or $value eq 'off') {fhem "setreading PumpeAus motor $value";}}
# FUUID 663775f0-f33f-be15-96e8-bf871b27140fbc4b
# NAME n_gpio23
# NOTIFYDEV GPIO23
# NR 69
# NTFY_ORDER 50-n_gpio23
# REGEXP GPIO23:.*
# STATE 2024-05-15 07:30:03
# TRIGGERTIME 1715751003.8506
# TYPE notify
# READINGS:
# 2024-05-14 21:51:59 state active
# 2024-05-15 07:30:03 triggeredByDev GPIO23
# 2024-05-15 07:30:03 triggeredByEvent Longpress: on
#
setstate n_gpio23 2024-05-15 07:30:03
setstate n_gpio23 2024-05-14 21:51:59 state active
setstate n_gpio23 2024-05-15 07:30:03 triggeredByDev GPIO23
setstate n_gpio23 2024-05-15 07:30:03 triggeredByEvent Longpress: on
Vielen Dank für eure Hilfe! Ich sehe leider vor lauter Bäumen den Wald nicht mehr.
Stefan
Hallo Stefan,
Du reichst alle Events im notify weiter, Deine GPIO17 versteht aber motor xxx nicht. Du musst das Suchmuster im notiy einschränken, eventuell so:
defmod n_PumpeAus notify PumpeAus:on|PumpeAus:off set GPIO17 $EVENT
Oder etwas kürzer
defmod n_PumpeAus notify PumpeAus:o[nf]+ set GPIO17 $EVENT
Gruß Otto
Die Fehlerursache steht doch klar in Deinen listings:
Zitat# 2024-05-15 07:30:03 triggeredByDev PumpeAus
# 2024-05-15 07:30:03 triggeredByEvent motor: on
Im define des notify steht:
define n_PumpeAus notify PumpeAus set GPIO17 $EVENT
Wenn also der event "motor: on" kommt, dann versucht das notify den Befehl "set GPIO17 motor: on" auszuführen. Und das geht halt nicht - logischerweise.
Mögliche Lösungen:
- Gib in Deinem notify eine vernünftige regex an, die nur auf die events triggert, um die es geht. Aktuell steht da nur "PumpeAus" als regex, es wird also auf alles getriggert, in dem dieser String vorkommt.
- Lass das notify aus dem EventMonitor von FHEM automatisch anlegen, wenn Du es selbst nicht hinbekommst.
Otto war schneller, aber ich war ausführlicher... 8)
Vielen Dank euch beiden für die Hilfe!
Hab's schon angepasst und es funktioniert.