Hallo zusammen,
ich hänge gerade an einem Problem, dass ein notify nicht getriggert wird.
Hintergrund:
- Ich habe 2 Devices als Schalter für Licht Esszimmer, Licht Wohnzimmer (an und aus) --> funktioniert
- Ich habe einen RGBW Controller für die Farbe des Lichts (LED Band) [kein echtes Reading für RGB oder Brightness]
- Ich möchte nun zwei Dummy erstellen, die alle Funktionen vereint:
Wohnzimmer: An, Aus, Farbe, Dim
Esszimmer: An, Aus, Farbe, Dim
- Wird in einem Dummy die Farbe oder Dim geändert, muss der Wert natürlich in beiden angepasst werden, da nur eine Farbe und Dim für beides gewählt werden kann (Nur 1 Controller).
Idee:
- Beim Ändern des RGBs, oder der Brightness im RGBW soll dies in einem eigenen userReading gespeichert werden
- Diese Information soll auch an den Dummy weitergegeben werden, der letztlich alle Funktionen vereinen soll.
Mein Notify sieht wie folgt aus:
DEF
ZWave_SW_RGBW:state:.* IF ("$EVTPART0" eq "dim")
(
setreading ZWave_SW_RGBW _lastDim $EVTPART1,
setreading RGB_Esszimmer ControllerDim $EVTPART1,
setreading RGB_Esszimmer ControllerLastAction $EVENT
)
ELSE
(
IF ("$EVTPART0" eq "rgb")
(
setreading ZWave_SW_RGBW _lastRGB $EVTPART1 $EVTPART2 $EVTPART3,
setreading RGB_Esszimmer ControllerRGB $EVTPART1 $EVTPART2 $EVTPART3
),
setreading RGB_Esszimmer ControllerLastAction $EVENT
)
Meine Probleme:
Das notify wird nicht getriggert. Ändere ich den regex auf: ZWave_SW_RGBW.*, dann wird er getriggert, aber viel zu häufig.
Außerdem würde ich das notify gerne in ein Switch Case wandeln. Das gelingt mir leider auch nicht.
Ich hoffe ich konnte das gut darstellen.
Ich denke dein problem ist der zweite Doppelpunkt.
Ändere doch mal in
DEF
ZWave_SW_RGBW:state.* IF ("$EVTPART0" eq "dim")
Das mit dem switch case verstehe ich nicht. IF ist ein FHEM Befehl und kein perl-statement. in FHEM gibt es aber nur IF für solche Bedingungen.
Für switch case müsstest Du erst nach perl wechseln und dann alle FHEM-Kommandos in fhem(...) einschliessen.
Mir würden auch zum Beispiel Nur IF Anweisungen reichen, aber leider fordert das immer ein ELSE.
Zum Beispiel
IF ($EVTPART0 eq "bla") ()
IF ($EVTPART0 eq "bla2") ()
IF ($EVTPART0 eq "bla3") ()
Das funktioniert leider nicht
Zitat von: viegener am 22 Januar 2019, 10:38:26
Ich denke dein problem ist der zweite Doppelpunkt.
Ändere doch mal in
DEF
ZWave_SW_RGBW:state.* IF ("$EVTPART0" eq "dim")
funktioniert leider auch nicht.
Wird es nicht aufgerufen oder gibt es einen Fehler im Inhalt?
Gehe doch mal in den Eventmonitor und gucke nach, was für ein Event generiert wird ...
Wird gar nicht erst getriggert. EventMonitor habe ich auf.
Ich sehe, dass der set BEfehl für das Device ausgeführt wird, aber eben das notify fehlt
Hier ein Listing vom Device
Internals:
DEF cfdf8029 29
FUUID 5c458ed3-f33f-4184-af4f-52d18bc9b0d1bd79
IODev ZWDongle_0
LASTInputDev ZWDongle_0
MSGCNT 16
NAME ZWave_SW_RGBW
NR 159
STATE dim 2
TYPE ZWave
ZWDongle_0_MSGCNT 16
ZWDongle_0_RAWMSG 00131301
ZWDongle_0_TIME 2019-01-22 10:30:32
ZWaveSubDevice no
cmdsPending 0
endpointChildren ZWave_SW_RGBW.brightness,ZWave_SW_RGBW.red,ZWave_SW_RGBW.green,ZWave_SW_RGBW.blue,ZWave_SW_RGBW.white
homeId cfdf8029
isWakeUp
lastMsgSent 1548153023.82252
nodeIdHex 1d
READINGS:
2019-01-20 13:22:02 SEND_DATA failed:00
2019-01-22 09:11:48 _lastDim 11
2019-01-21 21:25:48 _lastRGB 31 11 0
2019-01-22 10:30:32 _lastRGBhex 1F0B00
2019-01-18 20:53:05 assocGroup_1 Max 5 Nodes
2019-01-18 20:53:05 assocGroup_2 Max 5 Nodes
2019-01-18 20:53:05 assocGroup_3 Max 5 Nodes
2019-01-18 20:53:05 assocGroup_4 Max 5 Nodes
2019-01-18 20:53:05 assocGroup_5 Max 1 Nodes
2019-01-18 20:53:05 assocGroups 5
2019-01-20 08:28:24 ccCapability WarmWhite Red Green Blue
2019-01-20 09:29:11 configActivePROGRAMAlarmTime 600
2019-01-20 09:29:11 configAlarm INACTIVENoResponseToAlarmFrames
2019-01-20 09:29:11 configAlarmSequenceProgram 10
2019-01-20 09:29:11 configAssociationsCommandClassChoice NormalRGBWCOLORCONTROLSETSTARTST1
2019-01-20 09:29:11 configCommandClassReportingOutputs42 ReportingAsAResultOfInputsAnd0
2019-01-20 09:29:11 configDimmingStepValueForMODE1 1
2019-01-20 09:29:11 configEnableDisableALLONOFF ALLONActiveALLOFFActive
2019-01-20 09:29:11 configInputsOutputsConfiguration 4369
2019-01-20 09:29:12 configMaximumDimmerLevel 255
2019-01-20 09:29:12 configMinimumDimmerLevel 2
2019-01-20 09:29:12 configOptionDoubleClick DoubleClickEnabled
2019-01-20 09:29:12 configOutputsStateChangeMode MODE1ConstantSpeedSpeedIsDefined0
2019-01-20 09:29:12 configPowerLoadReportingFrequency 30
2019-01-20 09:29:12 configReporting010vAnalogInputsChange43 5
2019-01-20 09:29:12 configReportingChangesInEnergyConsumed45 10
2019-01-20 09:29:12 configResponseToBRIGHTNESSSetTo0 LastSetColourIsMemorized
2019-01-20 09:29:12 configSavingStateBeforePowerFailure StateSavedAtPowerFailureAll1
2019-01-20 09:29:12 configStartingPredefinedProgram 1
2019-01-20 09:29:12 configTimeBetweenDimmingStepsForMODE1 10
2019-01-20 09:29:12 configTimeToCompleteTheEntire11 67
2019-01-20 09:29:12 configTripleClickAction NODEINFOControlFrameIsSent
2019-01-18 16:40:05 mcCapability_01 SWITCH_MULTILEVEL
2019-01-18 16:40:05 mcCapability_02 SWITCH_MULTILEVEL
2019-01-18 16:40:05 mcCapability_03 SWITCH_MULTILEVEL
2019-01-18 16:40:05 mcCapability_04 SWITCH_MULTILEVEL
2019-01-18 16:40:05 mcCapability_05 SWITCH_MULTILEVEL
2019-01-18 20:52:18 mcEndpoints total 5, identical
2019-01-18 20:52:25 meterSupported type: energy scales: 0:kWh, 2:W resetable: yes
2019-01-18 16:40:04 model FIBARO System FGRGBWM441 RGBW Controller
2019-01-18 16:40:04 modelConfig fibaro/fgrgbwm441.xml
2019-01-18 16:40:04 modelId 010f-0900-1000
2019-01-20 08:28:36 power 2.0 W
2019-01-22 10:23:57 reportedState dim xx
2019-01-22 10:30:23 state dim 2
2019-01-20 08:28:40 swa on off
2019-01-22 08:57:25 timeToAck 0.049
2019-01-22 10:30:32 transmit NO_ACK
Attributes:
IODev ZWDongle_0
classes SWITCH_ALL MANUFACTURER_SPECIFIC VERSION SWITCH_MULTILEVEL MULTI_CHANNEL CONFIGURATION METER SENSOR_MULTILEVEL ASSOCIATION COLOR_CONTROL
homebridgeMapping Hue=rgb::_lastRGBhex Saturation=rgb::_lastRGBhex Brightness=_lastDim, delay=true, nocache=1
On=state,valueOn=/on|^dim|^rgb/,valueOff=off,cmdOn=on,cmdOff=off,nocache=1
room Homekit,Vouten,ZWave
siriName LED_Vouten
userReadings _lastRGBhex
{
sprintf("%02X%02X%02X", (split(' ', ReadingsVal("$name","_lastRGB",""), 3))[0], (split(' ', ReadingsVal("$name","_lastRGB",""), 3))[1], (split(' ', ReadingsVal("$name","_lastRGB",""), 3))[2]);
}
userattr _lastRGB, _lastDim, _lastRGBhex
vclasses ASSOCIATION:2 COLOR_CONTROL:1 CONFIGURATION:1 MANUFACTURER_SPECIFIC:1 METER:2 MULTI_CHANNEL:3 SENSOR_MULTILEVEL:2 SWITCH_ALL:1 SWITCH_MULTILEVEL:1 VERSION:1
verbose 5
event-on-change-reading bei ZWave_SW_RGBW?
hatte ich drin
event-on-change-reading für state
hatte aber nix gebracht
Hi,
Einfach das notify mit dem richtigen Event anlegen lassen? Abschnitt 3
https://wiki.fhem.de/wiki/Notify
Und dann Abschnitt 4 im Link beachten und ruhig abarbeiten.
Gruß Otto
ZitatWird gar nicht erst getriggert. EventMonitor habe ich auf.
Solange es kein Event gibt ist alles andere nicht von Bedeutung.
Zitat von: flipse am 22 Januar 2019, 11:43:56
hatte ich drin
event-on-change-reading für state
hatte aber nix gebracht
Ich würde erstmal alles besondere löschen, wenns funktioniert kann man einschränken.
Zitat von: Otto123 am 22 Januar 2019, 11:47:49
Hi,
Einfach das notify mit dem richtigen Event anlegen lassen? Abschnitt 3
https://wiki.fhem.de/wiki/Notify
Und dann Abschnitt 4 im Link beachten und ruhig abarbeiten.
Gruß Otto
Die Doku habe ich mir natürlich schon angeschau und weil es nicht funktioniert hat, wende ich mich an euch. Oder ich habe dich nicht richtig verstanden
Für set ZWave_SW_RGBW dim 19
erhalte ich: 2019.01.22 11:21:46 3 : ZWave set ZWave_SW_RGBW dim 19
Ist denn im notify addStateEvent gesetzt?
Gruß
Hans
Zitat von: Hans Franz am 22 Januar 2019, 12:21:36
Ist denn im notify addStateEvent gesetzt?
Gruß
Hans
defmod ZWave_SW_RGBW_n notify ZWave_SW_RGBW:state:.* \
IF ("$EVTPART0" eq "dim") \
(\
setreading ZWave_SW_RGBW _lastDim $EVTPART1,\
setreading RGB_Esszimmer ControllerDim $EVTPART1,\
setreading RGB_Esszimmer ControllerLastAction $EVENT\
)\
ELSE \
(\
IF ("$EVTPART0" eq "rgb") \
(\
setreading ZWave_SW_RGBW _lastRGB $EVTPART1 $EVTPART2 $EVTPART3,\
setreading RGB_Esszimmer ControllerRGB $EVTPART1 $EVTPART2 $EVTPART3\
),\
setreading RGB_Esszimmer ControllerLastAction $EVENT\
)
attr ZWave_SW_RGBW_n addStateEvent 1
attr ZWave_SW_RGBW_n verbose 5
defmod ZWave_SW_RGBW_n notify ZWave_SW_RGBW:state.*\
IF ("$EVTPART1" eq "dim") \
(\
setreading ZWave_SW_RGBW _lastDim $EVTPART2,\
setreading RGB_Esszimmer ControllerDim $EVTPART2,\
setreading RGB_Esszimmer ControllerLastAction $EVENT\
)\
ELSE \
(\
IF ("$EVTPART1" eq "rgb") \
(\
setreading ZWave_SW_RGBW _lastRGB $EVTPART2 $EVTPART3 $EVTPART4,\
setreading RGB_Esszimmer ControllerRGB $EVTPART2 $EVTPART3 $EVTPART4\
),\
setreading RGB_Esszimmer ControllerLastAction $EVENT\
)
attr ZWave_SW_RGBW_n addStateEvent 1
attr ZWave_SW_RGBW_n verbose 5
Jetzt scheint es zu funktionieren.
Wenn ich jetzt jedoch sage, dass er nur auf state: rgb oder state:dim reagieren soll, wird es wieder nicht ausgeführt.
ZitatWenn ich jetzt jedoch sage, dass er nur auf state: rgb oder state:dim reagieren soll,
Nicht sagen, sondern so definieren.
defmod ZWave_SW_RGBW_n notify ZWave_SW_RGBW:state:(rgb.*|dim.*)
Deine Infos sind leider najaaaaaa......
1. Es MUSS ein Event erzeugt werden. Wenn dies nicht ist, dann auch kein notify
2. Wie sieht das Event dann aus?
3. Wenn es nur auf die beiden Dinge "(rgb.*|dim.*)" reagieren soll und nicht auf alles ".*" - Dann muss es auch so da stehen. Ich weiß leider nicht was bei dir in EVTPART0,1,2,3 usw drin steht. Das muss du leider heraus finden. Wenn der EVTPART aber korrekt ist, sollte es so ja laufen.
PS: Ich habe auch nur den Code oben rein geschrieben, weil ich selber ab und zu hänge und den Wald vor lauter Bäumen nicht sehe. Da ist Input von hier immer gut :)
Zitat von: flipse am 22 Januar 2019, 13:57:36
Jetzt scheint es zu funktionieren.
Wenn ich jetzt jedoch sage, dass er nur auf state: rgb oder state:dim reagieren soll, wird es wieder nicht ausgeführt.
Nicht sagen sondern Eventmonitor, Eventmonitor, Eventmonitor ... :o
Gruß Otto
Vermutlich ist irgendwo in deinem event ein doppelpunkt zu viel oder wenig drin. Dafür einfach den Event Monitor ckecken. Otto sagte es ja bereits.