FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: harald654 am 19 Dezember 2016, 14:27:23

Titel: notify soll nur auf STATE eines Devices reagieren
Beitrag von: harald654 am 19 Dezember 2016, 14:27:23
Hallo,

ich verwende ein notify um eine Funksteckdose in Abhängigkeit von meinem Musikplayer zu schalte:
define LS_on notify SB_Wohnzmr:on set POWER_LS off

Das funktioniert an sich auch prima, nur reagiert das notify auf jede Änderung in welcher "on" vorkommt, ich hätte gerne dass das notify nur auf Änderungen von"STATE" des Devices reagiert.
Ist das möglch?

habe es schon mit:
define LS_on notify SB_Wohnzmr:STATE:on set POWER_LS off
define LS_on notify SB_Wohnzmr:STATE eg "on" set POWER_LS off

versucht, aber leider ohne Erfolg :(

Gruß,
H.
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: CoolTux am 19 Dezember 2016, 14:32:41
Auf STATE kann nicht reagiert werden, da STATE ein Internal ist und keine Events produziert. Du kannst auf state wenn dann reagieren.
Gib mal die Ausgabe im Eventmonitor wenn du on machst.
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: harald654 am 19 Dezember 2016, 15:03:09
Hallo CoolTux,

achso, state gibt es auch :)
In dem Fall würde ich dann gerne auf state reagieren (Benutze das Sqeezbox plugin)

Meine Ausgabe,
ausschalten:
2016-12-19 13:57:42 IT POWER_LS on
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr off
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr power: off
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr sb_name: SB_Wohnzmr
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr FAVSTR_FTUI: DASDING_908_Euro-Hits:1LIVE_diggi_-_Multimedia_-_1LIVE_Electro
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr playStatus: stopped
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr sb_name: SB_Wohnzmr
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr FAVSTR_FTUI: DASDING_908_Euro-Hits:1LIVE_diggi_-_Multimedia_-_1LIVE_Electro
2016-12-19 13:57:42 IT POWER_LS on
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr off
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr power: off
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr sb_name: SB_Wohnzmr
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr FAVSTR_FTUI: DASDING_908_Euro-Hits:1LIVE_diggi_-_Multimedia_-_1LIVE_Electro
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr lastunknowncmd: menustatus ARRAY(0x5b72fb0) add 00:23:55:5c:29:72
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr sb_name: SB_Wohnzmr
2016-12-19 13:57:42 SB_PLAYER SB_Wohnzmr FAVSTR_FTUI: DASDING_908_Euro-Hits:1LIVE_diggi_-_Multimedia_-_1LIVE_Electro

einschalten:
2016-12-19 14:00:43 IT POWER_LS off
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr on
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr power: on
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr sb_name: SB_Wohnzmr
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr FAVSTR_FTUI: DASDING_908_Euro-Hits:1LIVE_diggi_-_Multimedia_-_1LIVE_Electro
2016-12-19 14:00:43 IT POWER_LS off
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr on
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr power: on
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr sb_name: SB_Wohnzmr
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr FAVSTR_FTUI: DASDING_908_Euro-Hits:1LIVE_diggi_-_Multimedia_-_1LIVE_Electro
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr lastunknowncmd: menustatus ARRAY(0x5d8e840) add 00:23:55:5c:29:72
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr sb_name: SB_Wohnzmr
2016-12-19 14:00:43 SB_PLAYER SB_Wohnzmr FAVSTR_FTUI: DASDING_908_Euro-Hits:1LIVE_diggi_-_Multimedia_-_1LIVE_Electro

(Bei dem Device POWER_LS sind on und off vertauscht, darum das gegensätzliche ausführen )

Gruß,
H
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: CoolTux am 19 Dezember 2016, 15:08:12
Wieso nimmst du nicht das power Reading. Das scheint ja genau dafür zu sein.


define LS_on notify SB_Wohnzmr.power:.on set POWER_LS off


Hier wird dann auf power on getriggert
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: automatisierer am 19 Dezember 2016, 15:13:33
Laut commandref muss das Event genau deinem Suchmuster entsprechen.

Die Aussage, dass das notify bei allem triggert was 'on' enthält, kann also nicht passen.

Ich tippe mal, dass die Events in regelmäßigen Abständen wiederholt werden und dein Notify dann immer wieder triggert.

Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: CoolTux am 19 Dezember 2016, 15:16:09
Stimmt das wäre auch eine Möglichkeit. Hier kann ein event-on-change-reading helfen.
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: harald654 am 19 Dezember 2016, 16:26:42
define LS_on notify SB_Wohnzmr.power:.on set POWER_LS off
scheint zu funktionieren, falls es doch nochmal vorkommt werd ich event-on-change-reading mal ausprobieren :)

Vielen Dank für die Hilfe.
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: harald654 am 19 Dezember 2016, 21:01:02
Ich bins nochmal :)

leider passt es doch noch nicht so ganz. Solange der state on ist wird alle 30sek versucht meine Steckdose einzuschalten:
2016.12.19 19:10:17 2: sduino IT_set: POWER_LS off
2016.12.19 19:10:57 2: sduino IT_set: POWER_LS off
2016.12.19 19:13:55 2: sduino IT_set: POWER_LS off
2016.12.19 19:14:31 2: sduino IT_set: POWER_LS off
2016.12.19 19:15:35 2: sduino IT_set: POWER_LS off
2016.12.19 19:16:38 2: sduino IT_set: POWER_LS off
2016.12.19 19:17:40 2: sduino IT_set: POWER_LS off
2016.12.19 19:18:43 2: sduino IT_set: POWER_LS off
2016.12.19 19:19:31 2: sduino IT_set: POWER_LS off


Ich denke damit es nur bei einer Änderung von state schaltet brauch ich wohl das event-on-change-reading.
Nur ist mir nicht ganz klar wie ich dies einsetzen muss.
Wenn ich es bei dem notify hinzufüge verändert sich nichts:
define LS_on notify SB_Wohnzmr.power:.on set POWER_LS off
attr LS_on event-on-change-reading state
define LS_off notify SB_Wohnzmr.power:.off set POWER_LS on
attr LS_off event-on-change-reading state


Wenn ich es bei meinem Divice(Sqeez-Player) hinzufüge auf welchem das notify reagiert funktioniert es, aber es werden keine Änderungen des Players mehr auf der Tablet UI Oberfläche übernommen/angezeigt:
define SB_Wohnzmr SB_PLAYER 00:23:55:5c:29:72
attr SB_Wohnzmr IODev SqueezeBoxServer
attr SB_Wohnzmr amplifier play
attr SB_Wohnzmr coverartheight 100
attr SB_Wohnzmr coverartwidth 100
attr SB_Wohnzmr donotnotify false
attr SB_Wohnzmr fadeinsecs 10
attr SB_Wohnzmr idismac true
attr SB_Wohnzmr room SB_PLAYER
attr SB_Wohnzmr serverautoon true
attr SB_Wohnzmr ttslanguage de-de
attr SB_Wohnzmr ttslink http://translate.google.com/translate_tts?ie=UTF-8&tl=<LANG>&q=<TEXT>&client=tw-ob
attr SB_Wohnzmr userReadings sb_name {"SB_Wohnzmr"}, FAVSTR_FTUI {my $t=InternalVal($name,'FAVSTR','');;$t=~s/,/:/g;;return($t)}
attr SB_Wohnzmr volumeLimit 100
attr SB_Wohnzmr volumeStep 3
attr SB_Wohnzmr event-on-change-reading state

:-\
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: CoolTux am 19 Dezember 2016, 21:14:43
Es kommt nicht zum notify sondern zum Devices welches die Events liefert. Also Dein Wohnzimm dingsda


event-on-change-reading .*


zusätzlich kannst noch im Notify anhängen

set POWER_LS:FILTER=state!=off off
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: automatisierer am 19 Dezember 2016, 21:23:28
oder zu DOIF wechseln... 8)
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: harald654 am 19 Dezember 2016, 21:27:06
Danke CoolTux,

mit:
event-on-change-reading .*
wird das schalten der Steckdose nur 1 mal gesendet und die Aktualisierung in Tablet UI geht trozdem noch, perfekt :)
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: svenson08 am 20 Dezember 2016, 19:21:19
Hallo ,

ZitatDu kannst auf state wenn dann reagieren.

trotzdem funktioniert ein Notify auf das Reading "state" im default nicht

define irgendwas:state:.* mach was

und das obwohl es im FHEM Web über den Wizard angeboten wird.

Falls das notify auf state reagieren soll, muss man addStateEvent ergänzen. Siehe
http://fhem.de/commandref_DE.html#DOIF_addStateEvent (http://fhem.de/commandref_DE.html#DOIF_addStateEvent)



Gruß
svenson
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: CoolTux am 20 Dezember 2016, 19:28:30
Das ist richtig. Genau wissen tue ich es nicht daher kann ich nur aus meiner Beobachtung berichten.
Ein Event mit einem Reading sieht so aus

Device Reading: Value

Ein Event von einem state so

Device Value

Da man aber dann die Regex sehr exakt setzen muss und nach Möglichkeit ohne Wildcard ist das etwas knifflig.
Aber wie gesagt ich weiß es nicht. Es ist eine Beobachtung.
Titel: Antw:notify soll nur auf STATE eines Devices reagieren
Beitrag von: svenson08 am 20 Dezember 2016, 19:37:37
Man muss im Notify das Attribut addStateEvent auf 1 setzen.
Dann kann man das Notify wie vom Wizard angeboten auf z.B.

define testnotify irgendwas:state:.* mach was

setzen. Läuft bei mir so.