Hallo!
Ich versuche gerade seit Stunden eine scheinbar einfache Lampenkopplung zu realisieren.
Also wenn Lampe1 über einen KNX-Taster oder die FHEM-Oberfläche ein- bzw. ausgeschaltet wird, soll Lampe2 den gleichen Zustand einnehmen.
Klingt erstmal total einfach.
Natürlich habe ich dazu gleich das anscheinend passende Notify im Wiki gefunden:
define LichtamRadioan notify LichtKueche set RadioKueche $EVENT
... und für meine Zwecke so modifiziert:
define Lichtkopplung notify EGEsstischHaengelampe set EGEsstischDeckenlampe $EVENT
Das resultiert jetzt aber leider darin, dass die Lampen mehrmals ein- und ausgeschaltet werden, bevor sie den interessanterweise korrekten Endzustand erreichen.
Sieht im Eventmonitor so aus:
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe setG1: off
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe off
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe setG1: on
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe on
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe setG1: on
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe on
2023-02-02 22:43:26 KNX EGEsstischHaengelampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischHaengelampe setG1: on
2023-02-02 22:43:26 KNX EGEsstischHaengelampe on
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe setG1: off
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe off
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe setG1: on
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe on
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe setG1: on
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe on
2023-02-02 22:43:26 KNX EGEsstischHaengelampe last-sender: 1.1.5
2023-02-02 22:43:26 KNX EGEsstischHaengelampe getG1: on
2023-02-02 22:43:26 KNX EGEsstischHaengelampe on
Die Regexp sind eindeutig.
Was mache ich da falsch?
Cheers,
Sigi
Zitat von: sigi3001 am 02 Februar 2023, 22:47:42
Die Regexp sind eindeutig.
Hi Sigi,
interessanter Satz - was meinst Du damit?
Dein notify triggert jetzt auf alles was das Device an Events sendet, Du musst das Suchmuster schärfer machen!
Am Besten im Eventmonitor das notify gleich anlegen lassen. (https://wiki.fhem.de/wiki/Event_monitor#Vorgehensweise_beim_Anlegen_eines_Ger.C3.A4tes)
Du musst Dir auch anschauen, ob set .. $EVENT das richtige ist. Eventuell darfst Du nur $EVTPARTx verwenden.
Siehe auch hier https://wiki.fhem.de/wiki/Notify
Dein Suchmuster kann am Ende optimiert so aussehen
EGEsstischHaengelampe:o[nf]+
;) da kannst Du auch mit $EVENT arbeiten.
Gruß Otto
Hallo Otto,
vielen Dank für die rasche Antwort!
Mit eindeutigen Regexp meinte ich, dass die Bezeichnungen der Lampen eindeutig sind und dadurch eigentlich nichts anderes mittriggern sollte.
Wenn ich drüber nachdenke, hat aber eh nix falsches mitgetriggert, sondern nur mehrfach.
Genau wie du geschrieben hast:
ZitatDein notify triggert jetzt auf alles was das Device an Events sendet, Du musst das Suchmuster schärfer machen!
Langsam lichtet sich der Nebel in meinem Gehirn!
Werde heute abend versuchen deinen Input umzusetzen.
Noch eine allgemeine Frage:
Nachdem ich ein totaler Anfänger bin - wo kann ich ein Grundlagenwissen herkriegen, wie man z.B. sowas macht :"...lampe:o[nf]+"
Cheers,
Sigi
Zitat von: sigi3001 am 03 Februar 2023, 09:52:57
Noch eine allgemeine Frage:
Nachdem ich ein totaler Anfänger bin - wo kann ich ein Grundlagenwissen herkriegen, wie man z.B. sowas macht :"...lampe:o[nf]+"
Nun ja, es gibt ein ziemlich dickes Buch über Reguläre Ausdrücke. Mir hilft oft diese Seite: https://www.data2type.de/xml-xslt-xslfo/regulaere-ausdruecke
PS: Hast Du im auslösenden Device "event-on-change-reading" gesetzt. Damit wird ein Event für die ausgewählten Readings nur noch dann erzeugt, wenn sich der Inhalt tatsächlich geändert hat.
Grüße Jörg
Hi,
Wie schon weiter oben geschrieben, bekommst du für jeden Tastendruck zumindest 3 events!
Zitat2023-02-02 22:43:26 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe setG1: off
2023-02-02 22:43:26 KNX EGEsstischDeckenlampe off
Aber dein notify ist NICHT eindeutig - triggert also 3 mal......
Vorschlag:
define Lichtkopplung notify EGEsstischHaengelampe:(on|off) set EGEsstischDeckenlampe $EVENT
Noch besserer Vorschlag (ohne notify):
Zitatattr EGEsstischDeckenlampe stateCMD {....}
Beispiele dafür gibts im wiki: https://wiki.fhem.de/wiki/KNX_Device_Definition_-_Beispiele (https://wiki.fhem.de/wiki/KNX_Device_Definition_-_Beispiele)
l.g. erwin
Anmerkungen:
Das Suchmuster bei notify ist zwar regExp, ist aber "konservativ" gestrickt - siehe Antwort von Rudi https://forum.fhem.de/index.php?topic=115414.0.
Der erste Vorschlag von Erwin sieht auf den ersten Blick eingängiger aus als meiner, ist aber auf den zweiten Blick nicht so effizient.
Man kann das mit dieser Funktion prüfen:
{notifyRegexpCheck('EGEsstischHaengelampe:(on|off)')}
Mein Vorschlag ist auch ein Kompromiss, der spricht nämlich nicht ausschließlich auf on und off an. Aber in dem Fall kommen nur diese beiden Events vor und diese Konstrukt ist im System effizienter:
{notifyRegexpCheck('EGEsstischHaengelampe:o[nf]+')}
Beide regExp sind gültig, notify kommt aber mit der Klammer nicht gut klar. Man kann das ausführlich schreiben:
EGEsstischHaengelampe:on|EGEsstischHaengelampe:off
damit kommt notify wieder besser klar als mit der Kurzform mit ()
Erwins zweiter Vorschlag ist für KNX sicher unschlagbar - aber mW nicht bei anderen Devicetypen zu finden.
Dein Fall ist dann nochmal spezieller, weil das von Jörg erwähnte Reading (hier state) im Event gar nicht auftaucht.
oh, ein Popcorn Thread...
@Otto:
Vielen Dank für deine Erklärungen - die letztere Variante ist die für mich einleuchtendste (und ausserdem am leichtesten zu verstehen ;) ).
Ich habe diese Variante jetzt mal umgesetzt. Dennoch kriege ich noch mehrere ON-Events:
2023-02-03 17:02:12 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-03 17:02:12 KNX EGEsstischDeckenlampe setG1: on
2023-02-03 17:02:12 KNX EGEsstischDeckenlampe on
2023-02-03 17:02:12 KNX EGEsstischHaengelampe last-sender: fhem
2023-02-03 17:02:12 KNX EGEsstischHaengelampe setG1: on
2023-02-03 17:02:12 KNX EGEsstischHaengelampe on
2023-02-03 17:02:12 KNX EGEsstischDeckenlampe last-sender: fhem
2023-02-03 17:02:12 KNX EGEsstischDeckenlampe setG1: on
2023-02-03 17:02:12 KNX EGEsstischDeckenlampe on
2023-02-03 17:02:12 KNX EGEsstischHaengelampe last-sender: 1.1.5
2023-02-03 17:02:12 KNX EGEsstischHaengelampe getG1: on
2023-02-03 17:02:12 KNX EGEsstischHaengelampe on
Was mir dabei komisch vorkommt ist, dass obwohl ich die EGEsstischHaengelampe triggere zuerst ein ON auf der EGEsstischDeckenlampe daherkommt.
Wie kann das zustande kommen?
@Erwin:
Ich habe mir den Wiki-Link und diverse weitere Erklärungsversuche zu stateCMD mehrfach durchgelesen. Leider kapiere ich nur einen Teil davon.
Mir erschliesst sich vor allem überhaupt nicht, wie ich da ohne notify auskommen könnte.
Falls das für KNX die beste Methode ist wäre ich aber sehr daran interessiert das zu lernen und zu verstehen, da praktisch alles was ich in der Zukunft programmieren möchte mit KNX zu tun hat. Und ich wäre froh gleich von Anfang an ein möglichst "sauberes" System zu erstellen.
@betateilchen:
Hä? Was ist ein Popcorn Thread?
Hi sigi3001!
ZitatWas mir dabei komisch vorkommt ist, dass obwohl ich die EGEsstischHaengelampe triggere zuerst ein ON auf der EGEsstischDeckenlampe daherkommt.
poste mal ein list der beide KNX-devices. Evtl. hast du für die Deckenlampe die gleiche GA-addr. wie für die HängeLampe definiert? oder noch ein notify, dass hier reinspuckt? -oder: da gibts noch mehere Möglichleiten, (z.B.: in der ETS definition des Tasters...)
ad stateCmd: dazu muss ich zuerst die logik im KNX-Modul erklären:
bei jeder Änderung eines Zustands im KNX-Device wird ein reading - readingname entspechend des GA_Alias gesetzt (also in deinem Fall setG1 / getG1). Unmitttelbar danach wird der gleiche Wert auch ins reading state gestetzt. Das ist mal historisch so gewachsen, der Wert des letzten events soll immer im reading state sein....
Das ist aber (für KNX-devices) nicht immer sinnvoll, daher gibt es die attribute stateRegex und stateCmd.
stateCmd kann perl-code enthalten, das z.B. den Wert vom state-reading modifiziert, aber auch beliebige andere perl- routinen....
Ein Beispiel:
attr EGEsstischHaengelampe stateCmd {
if ($gadName eq 'getG1') {
fhem ("sleep 0.05 quiet; set RadioKueche $state;");
}
return $state;
}
Erklärung: Wenn event: 'EGEsstischHaengelampe getG1 on/off' kommt, wird ein 'set RadioKueche on/off' ausgelöst,
das sleep ist notwendig, um zuerst die laufenden events abzuarbeiten bevor neue cmd/events generiert werden!!!
mit dem 'return $state' wird der Wert unverändert ins reading state gesetzt.
l.g. erwin
Hallo Erwin!
Hier sind die Devices:
define EGEsstischHaengelampe KNX 0/1/3:dpt1
attr EGEsstischHaengelampe room EG
# CFGFN
# DEF 0/1/3:dpt1
# FUUID 63dccd24-f33f-956d-68b1-42f2b38b9e7eae4c
# IODev KNX
# KNX_MSGCNT 30
# KNX_RAWMSG C01105w0010301
# KNX_TIME 2023-02-03 17:02:12
# LASTInputDev KNX
# MSGCNT 30
# NAME EGEsstischHaengelampe
# NR 5017
# STATE on
# TYPE KNX
# eventCount 40
# model dpt1
# GADDETAILS:
# g1:
# CODE 00103
# GROUP 0/1/3
# MODEL dpt1
# NO 1
# OPTION
# RDNAMEGET getG1
# RDNAMEPUT putG1
# RDNAMESET setG1
# SETLIST :on,off,toggle
# GADTABLE:
# 00103 g1
# READINGS:
# 2023-02-03 10:00:20 IODev KNX
# 2023-02-03 17:02:12 getG1 on
# 2023-02-03 17:02:12 last-sender 1.1.5
# 2023-02-03 17:02:12 setG1 on
# 2023-02-03 17:02:12 state on
#
setstate EGEsstischHaengelampe on
setstate EGEsstischHaengelampe 2023-02-03 10:00:20 IODev KNX
setstate EGEsstischHaengelampe 2023-02-03 17:02:12 getG1 on
setstate EGEsstischHaengelampe 2023-02-03 17:02:12 last-sender 1.1.5
setstate EGEsstischHaengelampe 2023-02-03 17:02:12 setG1 on
setstate EGEsstischHaengelampe 2023-02-03 17:02:12 state on
define EGEsstischDeckenlampe KNX 0/1/6:dpt1
attr EGEsstischDeckenlampe room EG
# CFGFN
# DEF 0/1/6:dpt1
# FUUID 63dc1833-f33f-956d-0ea5-812195ffa104aef4
# IODev KNX
# KNX_MSGCNT 84
# KNX_RAWMSG C0111cw0010600
# KNX_TIME 2023-02-03 08:18:30
# LASTInputDev KNX
# MSGCNT 84
# NAME EGEsstischDeckenlampe
# NR 4689
# STATE on
# TYPE KNX
# eventCount 418
# model dpt1
# GADDETAILS:
# g1:
# CODE 00106
# GROUP 0/1/6
# MODEL dpt1
# NO 1
# OPTION
# RDNAMEGET getG1
# RDNAMEPUT putG1
# RDNAMESET setG1
# SETLIST :on,off,toggle
# GADTABLE:
# 00106 g1
# READINGS:
# 2023-02-02 21:46:48 EinAus-get off
# 2023-02-02 21:54:19 EinAus-set off
# 2023-02-02 21:58:28 IODev KNX
# 2023-02-02 21:53:50 Status-get off
# 2023-02-03 08:18:30 getG1 off
# 2023-02-03 17:02:12 last-sender fhem
# 2023-02-03 17:02:12 setG1 on
# 2023-02-03 17:02:12 state on
#
setstate EGEsstischDeckenlampe on
setstate EGEsstischDeckenlampe 2023-02-02 21:46:48 EinAus-get off
setstate EGEsstischDeckenlampe 2023-02-02 21:54:19 EinAus-set off
setstate EGEsstischDeckenlampe 2023-02-02 21:58:28 IODev KNX
setstate EGEsstischDeckenlampe 2023-02-02 21:53:50 Status-get off
setstate EGEsstischDeckenlampe 2023-02-03 08:18:30 getG1 off
setstate EGEsstischDeckenlampe 2023-02-03 17:02:12 last-sender fhem
setstate EGEsstischDeckenlampe 2023-02-03 17:02:12 setG1 on
setstate EGEsstischDeckenlampe 2023-02-03 17:02:12 state on
Siehst du da irgendeinen Fehler?
Ein anderes Notify das eine der beiden Lampen enthält gibts auch nicht.
Vielen Dank für deine Erklärung des stateCMD. Das muss ich erst ein bisserl wirken lassen.....
LG
Sigi
Jetzt hab ich gerade bei einem "structure" mit Telegrambenachrichtigung ein ähnliches Verhalten entdeckt:
Ich habe eine structure mit 2 Nachtlichtern angelegt, die gemeinsam über eine Zeitschaltuhr geschaltet werden sollen.
Wenn das Ding dann einschaltet bekomme ich 2 bis 4x die Telegram Nachricht gesendet.
(Bei normalen Einzellampen kriege ich die Meldung nur 1x.)
Hier die Devices:
define Nachtlicht structure Gruppe GarderobeNachtlicht StiegeNachtlicht
attr Nachtlicht room System
# ATTR Gruppe
# CHANGEDCNT 15
# DEF Gruppe GarderobeNachtlicht StiegeNachtlicht
# FUUID 63d98d5c-f33f-956d-f0a8-45cd8f32a52d0d3a
# NAME Nachtlicht
# NOTIFYDEV StiegeNachtlicht,GarderobeNachtlicht,global
# NR 238
# NTFY_ORDER 50-Nachtlicht
# STATE on
# STILLDONETIME 0
# TYPE structure
# eventCount 48
# READINGS:
# 2023-02-03 20:50:36 LastDevice StiegeNachtlicht
# 2023-02-03 20:50:36 LastDevice_Abs StiegeNachtlicht
# 2023-02-03 20:50:36 state on
#
setstate Nachtlicht on
setstate Nachtlicht 2023-02-03 20:50:36 LastDevice StiegeNachtlicht
setstate Nachtlicht 2023-02-03 20:50:36 LastDevice_Abs StiegeNachtlicht
setstate Nachtlicht 2023-02-03 20:50:36 state on
define GarderobeNachtlicht KNX 2/1/4:dpt1:EinAus 8/3/12:dpt1:Status:listenonly
attr GarderobeNachtlicht userattr room_map structexclude
attr GarderobeNachtlicht room EG
# DEF 2/1/4:dpt1:EinAus 8/3/12:dpt1:Status:listenonly
# FUUID 63d98c89-f33f-956d-07d9-49031116de943427
# IODev KNX
# KNX_MSGCNT 17
# KNX_RAWMSG C0113aw0830c01
# KNX_TIME 2023-02-03 20:50:36
# LASTInputDev KNX
# MSGCNT 17
# NAME GarderobeNachtlicht
# NR 237
# STATE on
# TYPE KNX
# eventCount 32
# model dpt1
# GADDETAILS:
# EinAus:
# CODE 02104
# GROUP 2/1/4
# MODEL dpt1
# NO 1
# OPTION
# RDNAMEGET EinAus-get
# RDNAMEPUT EinAus-put
# RDNAMESET EinAus-set
# SETLIST :on,off,toggle
# Status:
# CODE 0830c
# GROUP 8/3/12
# MODEL dpt1
# NO 2
# OPTION listenonly
# RDNAMEGET Status-get
# RDNAMEPUT Status-put
# RDNAMESET Status-set
# SETLIST :on,off,toggle
# GADTABLE:
# 02104 EinAus
# 0830c Status
# READINGS:
# 2023-02-03 10:24:57 EinAus-get off
# 2023-02-03 20:50:36 EinAus-set on
# 2023-02-01 22:19:05 IODev KNX
# 2023-02-03 20:50:36 Status-get on
# 2023-02-03 20:50:36 last-sender 1.1.58
# 2023-02-03 20:50:36 state on
#
setstate GarderobeNachtlicht on
setstate GarderobeNachtlicht 2023-02-03 10:24:57 EinAus-get off
setstate GarderobeNachtlicht 2023-02-03 20:50:36 EinAus-set on
setstate GarderobeNachtlicht 2023-02-01 22:19:05 IODev KNX
setstate GarderobeNachtlicht 2023-02-03 20:50:36 Status-get on
setstate GarderobeNachtlicht 2023-02-03 20:50:36 last-sender 1.1.58
setstate GarderobeNachtlicht 2023-02-03 20:50:36 state on
define StiegeNachtlicht KNX 0/1/7:dpt1:EinAus 8/3/21:dpt1:Status:listenonly
attr StiegeNachtlicht userattr room_map structexclude
attr StiegeNachtlicht room OG
# DEF 0/1/7:dpt1:EinAus 8/3/21:dpt1:Status:listenonly
# FUUID 63d6cbd6-f33f-956d-36af-ef3e04ff91a7a6fe
# IODev KNX
# KNX_MSGCNT 14
# KNX_RAWMSG C01121w0831501
# KNX_TIME 2023-02-03 20:50:36
# LASTInputDev KNX
# MSGCNT 14
# NAME StiegeNachtlicht
# NR 162
# STATE on
# TYPE KNX
# eventCount 27
# model dpt1
# GADDETAILS:
# EinAus:
# CODE 00107
# GROUP 0/1/7
# MODEL dpt1
# NO 1
# OPTION
# RDNAMEGET EinAus-get
# RDNAMEPUT EinAus-put
# RDNAMESET EinAus-set
# SETLIST :on,off,toggle
# Status:
# CODE 08315
# GROUP 8/3/21
# MODEL dpt1
# NO 2
# OPTION listenonly
# RDNAMEGET Status-get
# RDNAMEPUT Status-put
# RDNAMESET Status-set
# SETLIST :on,off,toggle
# GADTABLE:
# 00107 EinAus
# 08315 Status
# READINGS:
# 2023-02-03 10:25:14 EinAus-get off
# 2023-02-03 20:50:36 EinAus-set on
# 2023-02-01 22:19:05 IODev KNX
# 2023-02-03 20:50:36 Status-get on
# 2023-02-03 20:50:36 last-sender 1.1.33
# 2023-02-03 20:50:36 state on
#
setstate StiegeNachtlicht on
setstate StiegeNachtlicht 2023-02-03 10:25:14 EinAus-get off
setstate StiegeNachtlicht 2023-02-03 20:50:36 EinAus-set on
setstate StiegeNachtlicht 2023-02-01 22:19:05 IODev KNX
setstate StiegeNachtlicht 2023-02-03 20:50:36 Status-get on
setstate StiegeNachtlicht 2023-02-03 20:50:36 last-sender 1.1.33
setstate StiegeNachtlicht 2023-02-03 20:50:36 state on
define NachtlichtTelegram notify Nachtlicht:on set AlarmBotLinz message Nachtlicht Linz EIN!
attr NachtlichtTelegram room Telegram
# DEF Nachtlicht:on set AlarmBotLinz message Nachtlicht Linz EIN!
# FUUID 63d98e0f-f33f-956d-c154-d8a75e3033d432c7
# NAME NachtlichtTelegram
# NOTIFYDEV Nachtlicht
# NR 239
# NTFY_ORDER 50-NachtlichtTelegram
# REGEXP Nachtlicht:on
# STATE active
# TRIGGERTIME 1675453836.18555
# TYPE notify
# eventCount 2
# READINGS:
# 2023-02-03 20:51:12 state active
# 2023-02-03 20:50:36 triggeredByDev GarderobeNachtlicht
# 2023-02-03 20:50:36 triggeredByEvent on
#
setstate NachtlichtTelegram active
setstate NachtlichtTelegram 2023-02-03 20:51:12 state active
setstate NachtlichtTelegram 2023-02-03 20:50:36 triggeredByDev GarderobeNachtlicht
setstate NachtlichtTelegram 2023-02-03 20:50:36 triggeredByEvent on
define NachtlichtTimer WeekdayTimer Nachtlicht 123456|06:30|on 123456|08:00|off 0123456|16:00|on 0123456|22:00|off
attr NachtlichtTimer commandTemplate set $NAME $EVENT
attr NachtlichtTimer room Timer
# COMMAND
# CONDITION
# DEF Nachtlicht 123456|06:30|on 123456|08:00|off 0123456|16:00|on 0123456|22:00|off
# DEVICE Nachtlicht
# FUUID 63d6cf67-f33f-956d-f4ef-cde2267457f1d427
# GlobalDaylistSpec
# LANGUAGE en
# NAME NachtlichtTimer
# NR 163
# Profil 0: Sunday 16:00:00 on, 22:00:00 off,
# Profil 1: Monday 06:30:00 on, 08:00:00 off, 16:00:00 on, 22:00:00 off,
# Profil 2: Tuesday 06:30:00 on, 08:00:00 off, 16:00:00 on, 22:00:00 off,
# Profil 3: Wednesday 06:30:00 on, 08:00:00 off, 16:00:00 on, 22:00:00 off,
# Profil 4: Thursday 06:30:00 on, 08:00:00 off, 16:00:00 on, 22:00:00 off,
# Profil 5: Friday 06:30:00 on, 08:00:00 off, 16:00:00 on, 22:00:00 off,
# Profil 6: Saturday 06:30:00 on, 08:00:00 off, 16:00:00 on, 22:00:00 off,
# STATE on
# STILLDONETIME 0
# TYPE WeekdayTimer
# eventCount 13
# setModifier
# READINGS:
# 2023-02-03 16:00:00 currValue on
# 2023-02-03 16:00:00 nextUpdate 2023-02-03 22:00:00
# 2023-02-03 16:00:00 nextValue off
# 2023-02-03 16:00:00 state on
# SWITCHINGTIMES:
# 123456|06:30|on
# 123456|08:00|off
# 0123456|16:00|on
# 0123456|22:00|off
# TIMER:
# NachtlichtTimer_4:
# HASH NachtlichtTimer
# MODIFIER 4
# NAME NachtlichtTimer_4
# NachtlichtTimer_midnight:
# HASH NachtlichtTimer
# MODIFIER midnight
# NAME NachtlichtTimer_midnight
# SETTIMERATMIDNIGHT 1
# helper:
# daysRegExp (su|mo|tu|we|th|fr|sa|\$we|\!\$we)
# daysRegExpMessage (su|mo|tu|we|th|fr|sa|$we|!$we)
# SWITCHINGTIME:
# 0:
# 16:00:00 on
# 22:00:00 off
# 1:
# 06:30:00 on
# 08:00:00 off
# 16:00:00 on
# 22:00:00 off
# 2:
# 06:30:00 on
# 08:00:00 off
# 16:00:00 on
# 22:00:00 off
# 3:
# 06:30:00 on
# 08:00:00 off
# 16:00:00 on
# 22:00:00 off
# 4:
# 06:30:00 on
# 08:00:00 off
# 16:00:00 on
# 22:00:00 off
# 5:
# 06:30:00 on
# 08:00:00 off
# 16:00:00 on
# 22:00:00 off
# 6:
# 06:30:00 on
# 08:00:00 off
# 16:00:00 on
# 22:00:00 off
# WEDAYS:
# 1 1
# 2 1
# profil:
# 1:
# EPOCH 1675402200
# PARA on
# TIME 06:30
# WE_Override 0
# DAYS:
# 1
# 2
# 3
# 4
# 5
# 6
# 2:
# EPOCH 1675407600
# PARA off
# TIME 08:00
# WE_Override 0
# DAYS:
# 1
# 2
# 3
# 4
# 5
# 6
# 3:
# EPOCH 1675436400
# PARA on
# TIME 16:00
# WE_Override 0
# DAYS:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 4:
# EPOCH 1675458000
# PARA off
# TIME 22:00
# WE_Override 0
# DAYS:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# profile_IDX:
# 0:
# 16:00:00 3
# 22:00:00 4
# 1:
# 06:30:00 1
# 08:00:00 2
# 16:00:00 3
# 22:00:00 4
# 2:
# 06:30:00 1
# 08:00:00 2
# 16:00:00 3
# 22:00:00 4
# 3:
# 06:30:00 1
# 08:00:00 2
# 16:00:00 3
# 22:00:00 4
# 4:
# 06:30:00 1
# 08:00:00 2
# 16:00:00 3
# 22:00:00 4
# 5:
# 06:30:00 1
# 08:00:00 2
# 16:00:00 3
# 22:00:00 4
# 6:
# 06:30:00 1
# 08:00:00 2
# 16:00:00 3
# 22:00:00 4
#
setstate NachtlichtTimer on
setstate NachtlichtTimer 2023-02-03 16:00:00 currValue on
setstate NachtlichtTimer 2023-02-03 16:00:00 nextUpdate 2023-02-03 22:00:00
setstate NachtlichtTimer 2023-02-03 16:00:00 nextValue off
setstate NachtlichtTimer 2023-02-03 16:00:00 state on
... und der Eventmonitor:
2023-02-03 20:46:34 KNX GarderobeNachtlicht last-sender: fhem
2023-02-03 20:46:34 KNX GarderobeNachtlicht EinAus-set: on
2023-02-03 20:46:34 KNX GarderobeNachtlicht on
2023-02-03 20:46:34 KNX StiegeNachtlicht last-sender: fhem
2023-02-03 20:46:34 KNX StiegeNachtlicht EinAus-set: on
2023-02-03 20:46:34 KNX StiegeNachtlicht on
2023-02-03 20:46:34 TelegramBot AlarmBotLinz message Nachtlicht Linz EIN!
2023-02-03 20:46:34 structure Nachtlicht on
2023-02-03 20:46:34 KNX GarderobeNachtlicht last-sender: 1.1.58
2023-02-03 20:46:34 KNX GarderobeNachtlicht Status-get: on
2023-02-03 20:46:34 KNX GarderobeNachtlicht on
Könnte das irgendwie auf die gleiche Ursache zurückzuführen sein?
Cheers,
Sigi
Hi Sigi3001!
da ist nix mehrfach - alles ok
2023-02-03 20:46:34 KNX GarderobeNachtlicht last-sender: fhem
2023-02-03 20:46:34 KNX GarderobeNachtlicht EinAus-set: on ### set cmd 1
2023-02-03 20:46:34 KNX GarderobeNachtlicht on
2023-02-03 20:46:34 KNX StiegeNachtlicht last-sender: fhem
2023-02-03 20:46:34 KNX StiegeNachtlicht EinAus-set: on ### set cmd 2
2023-02-03 20:46:34 KNX StiegeNachtlicht on
2023-02-03 20:46:34 TelegramBot AlarmBotLinz message Nachtlicht Linz EIN!
2023-02-03 20:46:34 structure Nachtlicht on
2023-02-03 20:46:34 KNX GarderobeNachtlicht last-sender: 1.1.58
2023-02-03 20:46:34 KNX GarderobeNachtlicht Status-get: on ### status von GardrobeNachtlicht (Feedback vom KNX-Aktor!)
2023-02-03 20:46:34 KNX GarderobeNachtlicht on
siehe meine Kommentare ####
es passieren immer 3 Events pro "Aktion": last-sender: xxx, <readingname>: <value>, state: <value>
l.g. erwin
Hallo Erwin!
Hab mir gerade deine Antwort durch den Kopf gehen lassen.
Wenn ich das jetzt soweit richtig verstanden habe - in Verbindung mit meinen gestrigen mehrstündigen Studium von Regex - dann löst mein Telegram-Notify deshalb 3x aus, weil der Wortteil "Nachtlicht" in der Structure und im Namen der Lampen steckt.
Liege ich da richtig?
Wäre dann das die korrekte Syntax?
^Nachtlicht$
Cheers,
Sigi
Zitatdann löst mein Telegram-Notify deshalb 3x aus, weil der Wortteil "Nachtlicht" in
... das glaub ich nicht, allerdings bin ich nicht so firm was structure betrifft.
ich denke, das reading state in deinem structure device wird mehrfach gesetzt durch die "Rückmeldung" der zwei KNX-devices an structure (und einmal mal durch set NachtLicht on cmd)...
Schau dir doch mal die Attrs: clientstate_behavior und clientstate_priority an !
Alternativ: trigger doch Telegram-notify versuchsweise mit z.B: GarderobeNachtlicht:on
...das wäre der Beweis für mein Vermutung.
Ja das habe ich schon probiert.
Zeigt das gleiche Verhalten - auch 3x Telegramm.
Jetzt habe ich mittlerweile auch ^Nachtlicht$:on probiert - da geht gar nix mehr.
Dann habe ich das Nachtlicht auf Nightlight umbenannt -> wieder 3x das Telegramm.
Ich probier jetzt mal mit clientstate herum...
Danke für den Hinweis!
Mit clientstate bin ich auch nicht wirklich weitergekommen (wahrscheinlich mangels Detailverständnis).
Aber ich habe den Übeltäter des mehrfach-Telegrammes identifiziert:
Ich habe alle meine KNX-devices nach folgendem Muster angelegt:
define Lampe2 KNX 14/1/1:dpt1:EinAus 14/2/1:dpt1:Status:listenonly
Wenn ich überall den Statusteil aus der Definition entferne, dann kommt das Telegramm nur mehr 1x.
Ist zwar nicht die ideale Lösung, aber momentan weiss ich mir nicht besser zu helfen.
Cheers,
Sigi
Das ist jetzt aber kontraproduktiv!
Zuerst sollten die KNX-Devices sauber definiert sein und funktionieren, inklusive status,
und dann kommen goodies wie Telegram, notify, structure, Weekdaytimer,..... - alles auf einmal ist reichlich verwirrend!
Schau dir nochmal das <struct-type>_map attribut an und setzte es (in den KNX-devices) auf:
attr <device> Gruppe_map Status
damit sollte das reading Status als input für structure verwendet werden!
PS: 2 KNX geräte kann man aus via cmdalias ein/ausschalten... dazu brauchts kein structure!
structure wurde jüngst wegen dieses Verhaltens aktualisiert. Evtl. muss zusätzlich ein Attribut gesetzt werden.
Ich zitiere mich mal selbst... ;D
ZitatZuerst sollten die KNX-Devices sauber definiert sein und funktionieren, inklusive status,
dann überlegen welche events man für die "Weiterverarbeitung" (- Log, Db, notifies, charts...), braucht,
und erst dann notifies,... anlegen.
Sobald du so definiert hast:
define Lampe2 KNX 14/1/1:dpt1:EinAus 14/2/1:dpt1:Status:listenonly
kannst du mittels 'attr <device> event-on-change-reading Status' die Anzahl events auf jene reduzieren, die du wirklich brauchst!
Das reduziert die Systemlast wesentlich!
Hallo Erwin,
erstmal vielen Dank, dass du für einen blutigen Anfänger wie mich so viel Zeit und Geduld aufbringst.
Ich habe jetzt den ganzen Sonntag damit verbracht, mit den diversen Attributen herumzuspielen.
Zwischenzeitlich hab ich sogar den ganzen Raspi nochmal neu aufgesetzt, weil ich dachte, dass möglicherweise an der Grundkonfiguration was falsch sein könnte.
(Hat aber nix gebracht. ::) )
Beim korrekten Setzen der Attributen bin ich leider immer noch relativ ratlos.
Wenn ich z.B. attr Kuechenlampe envent-on-change-reading Status setze, dann schaltet das Licht zwar korrekt, aber es erscheint keine einzige Zeile mehr im Eventmonitor.
Und wenn ich z.B. ein Device nach der Vorlage aus dem Wiki neu anlege:
define Lampe2 KNX 14/1/1:dpt1:EinAus 14/2/1:dpt1:Status:listenonly
attr Lampe2 stateFormat Status
attr Lampe2 devStateIcon off:li_wht_off:on on:li_wht_on:off ##Nebenfrage: was soll das on bzw off nach den Iconnamen bedeuten?
...dann erhalte ich eine Lampe wo statt dem Symbol für on und off nur Status dortsteht.
Lustig ist auch, dass ich mit klick auf das Wort Status die Lampe nur einschalten, aber nicht ausschalten kann. (Die on-off-Buttons funktionieren normal.)
Wenn ich ausschliesslich das devStateIcon setze dann funktioniert der Klick auf das Icon wie ein Toggle.
Noch spannender finde ich, dass das defStateIcon anscheinend nicht den Status vom Rückmeldeobjekt anzeigt, denn wenn ich eine völlig falsche 2. Gruppenadresse eingebe schaltet das Icon trotzdem um.
Cheers,
Sigi
ZitatWenn ich z.B. attr Kuechenlampe envent-on-change-reading Status setze, dann schaltet das Licht zwar korrekt, aber es erscheint keine einzige Zeile mehr im Eventmonitor.
gibts im device ein reading "Status" - und änderte sich das, wenn du die Lampe schaltest? - Falls nein - kommt keine Rückmeldung vom KNX-device !!!
Damit wird auch STATE (damit wird das Icon gesteuert) sich nicht ändern!
Zitatwas soll das on bzw off nach den Iconnamen bedeuten
Siehe 'help FHEMWEB" :
ZitatSpace separated list of regexp:icon-name:cmd triples, icon-name and cmd may be empty.
Ja das devStateIcon funktioniert in diesem Fall wie ein Toggle.: status= off -klick- cmd=on... status=on -klick- cmd=off...
ZitatLustig ist auch, dass ich mit klick auf das Wort Status die Lampe nur einschalten, aber nicht ausschalten kann
Auch das ist klar: wenn der Wert (also das erste wort im devStateIcon) sich nicht ändert, löst du mit jedem klick das selbe cmd aus!
Du hattest schon mal ein Device, wo Status sich geändert hat: GardrobeNachtlicht !!! Allerdings hieß das reading damals Status-get..... (dein post vom 03 Februar 2023, 21:00:12)
Folgendes glaube ich jetzt herausgefunden zu haben:
Bei einem Device laut Wiki (KNX Device Definition - Beispiele):
definde Testdevice KNX 1/2/3:dpt1:OnOff 4/5/6:Status:listenonly
wird ein Reading mit dem Namen Status-get erzeugt, das den Wert der Gruppenadresse 4/5/6 anzeigt.
Das heisst aber ich muss dann entweder
attr Testdevice stateFormat Status-get
angeben, oder ich muss
:nosuffix
im Device setzen.
Falls ich damit richtig liege sollte das auch im Wiki korrigiert werden.
Weil so wie es dort steht (attr Testdevice stateFormat Status) ohne :nosuffix funktioniert es definitiv nicht.
Cheers,
Sigi
Hi Sigi,
völlig korrekt, danke für den Hinweis, hab wiki ausgebessert!
l.g. erwin
Perfekt!
Damit hat sich auch die ursprüngliche Frage gelöst: damit mein Notify nur mehr 1x auslöst werde ich nun das "Status-get"-Reading auswerten.
Damit würde ich diesen Thread als gelöst betrachten.
Vielen Dank nochmal an alle, die mich bei der Lösung dieses Problems und des Knotens in meinem Gehirn unterstützt haben.
;D
Cheers,
Sigi