Folgender Code soll den Sonnenstatus setzen, um dann mittels entsprechender notifys die Jalousien zu steuern.
define Sunstate_Calculation notify sunlight:.* { \
fhem("set sunstate night") if(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 15 && Value("sunstate") == "postdusk" );; \
fhem("set sunstate predawn") if(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 15 && Value("sunstate") == "night" );; \
fhem("set sunstate dawn") if(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 28 && Value("sunstate") == "predawn" );; \
fhem("set sunstate day") if(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 40 && Value("sunstate") == "dawn" );; \
fhem("set sunstate sunlight") if(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 98 && Value("sunstate") == "day" );; \
fhem("set sunstate day") if(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 92 && Value("sunstate") == "sunlight" );; \
fhem("set sunstate dusk") if(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 40 && Value("sunstate") == "day" );; \
fhem("set sunstate postdusk") if(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 28 && Value("sunstate") == "dusk" );; }
sunstate ist analog zu sunlight so definiert:
define sunstate dummy
attr sunstate event-on-change-reading state
...
Der Sonnenstatus ändert sich über den Tag auch wie vorgesehen.
Sichtbar wird das Problem allerdings, wenn ich versuche, etwas damit zu steuern:
define blinds_day notify sunstate:day { \
fhem "set switch_livingroom_window on;;";; \
...
Dieser Schaltvorgang wird bei jedem Update von sunlight/sunstate ausgeführt.
"event-on-change-reading state" das bei beiden dummys definiert ist, greift schlicht nicht.
Das notify auf sunstate springt selbst dann an, wenn eigentlich überhaupt kein Wert gesetzt werden sollte, weil durch den jeweils ltzten Check in jeder Zeile von Sunstate_Calculation kein gleicher Wert "überschrieben" werden dürfte.
Hat jemand eine Idee, woran das liegen kann bzw. einen Lösungsansatz?
Oder kuerzer formuliert:
attr sunstate event-on-change-reading state
ist wirkungslos.
Generell kann man sagen, event-on-change-reading funktioniert nicht fuer set.
Ich habe das (hoffentlich ohne unbeabsichtigten Nebenwirkungen) gefixed und eingecheckt, ab morgen per update verfuegbar.
Cool, Danke!
Abgesehen davon war mein Code natürlich auch noch riesengroßer Mist ;)
Strings werden mit eq verglichen, nicht mit ==.
Bei Versuch 1 wurden deshalb bei jedem notify-Durchlauf mehrere Werte hintereinander zugewiesen.
Versuch 2 (nicht gezeigt) hat dann noch mehrmals den gleichen Wert gesetzt.
Versuch 3 sieht schon besser aus:
define Sunstate_Calculation notify sunlight:.* { \
if(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 15 && Value("sunstate") eq "postdusk" ) {fhem("set sunstate night");;Log 1, "night";;} \
elsif(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 15 && Value("sunstate") eq "night" ) {fhem("set sunstate predawn");;Log 1, "predawn";;} \
elsif(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 28 && Value("sunstate") eq "predawn" ) {fhem("set sunstate dawn");;Log 1, "dawn";;} \
elsif(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 40 && Value("sunstate") eq "dawn" ) {fhem("set sunstate day");;Log 1, "day";;} \
elsif(Value("sunlight") >= OldValue("sunlight") && Value("sunlight") >= 95 && Value("sunstate") eq "day" ) {fhem("set sunstate sunlight");;Log 1, "sunlight";;} \
elsif(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 92 && Value("sunstate") eq "sunlight" ) {fhem("set sunstate day");;Log 1, "day";;} \
elsif(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 40 && Value("sunstate") eq "day" ) {fhem("set sunstate dusk");;Log 1, "dusk";;} \
elsif(Value("sunlight") <= OldValue("sunlight") && Value("sunlight") <= 28 && Value("sunstate") eq "dusk" ) {fhem("set sunstate postdusk");;Log 1, "postdusk";;} }
Das funktioniert auch schon mal soweit.
Eben ist mir (nach dem SVN Update) etwas aufgefallen: Meine Rolladenschaltung triggert beim Klick auf das Icon (oder up/down) doppelt.
2013-06-20 20:28:22 TRX_LIGHT blind_livingroom_window on
2013-06-20 20:28:22 dummy switch_livingroom_window on
2013-06-20 20:28:22 TRX_LIGHT blind_livingroom_window on
2013-06-20 20:28:22 dummy switch_livingroom_window on
2013-06-20 20:28:25 TRX_LIGHT blind_livingroom_window on
2013-06-20 20:28:25 TRX_LIGHT blind_livingroom_window on
Ich klicke den Dummy:
define switch_livingroom_window dummy
attr switch_livingroom_window eventMap up:on down:off
attr switch_livingroom_window webCmd up:down
Der steuert über notify den Aktor:
define blind_livingroom_window_down_switch notify switch_livingroom_window:down.* { \
if( Value("window_livingroom") eq "Closed" ) { \
fhem "set blind_livingroom_window off;;sleep 3;;set blind_livingroom_window off" \
} \
else { \
sound"livingroom";; \
sound"windowopen";; \
} \
}
Die doppelte Schaltung hat den Nebeneffekt dass die Hälfte der Jalousien durch den zu kurzen Impuls nicht schaltet, weshalb ich mir sicher bin dass das erst seit dem Update auf 3308 auftritt.
Vielleicht kannst du dir das ja nochmal ansehen.
Gegen #3307 getestet - liegt leider definitiv an deinem Update.
Das mag zwar sein, ich sehe aber noch keiner Fehler. Mit den von dir geposteten Definitions-Schnipsel kann bekomme ich (nach inform im telnet) beim Klick auf up/down nur
dummy switch_livingroom_window on
dummy switch_livingroom_window off
und das auch nur jeweils einmal.
Hab mit der Beschreibung aus http://forum.fhem.de/index.php?t=rview&th=13437 (//forum.fhem.de/index.php?t=rview&th=13437) nachstellen koennen, und habs auch gefixed, steht per update zur Verfuegung, bitte testen.
Hallo zusammen,
auch wenn das Thema hier schon 5 Jahre alt ist, hänge ich mich mal hier an. Mein Problem ist nämlich sehr ähnlich, daher denke ich dass Anhängen besser ist als ein neues Thema zu eröffnen.
Vorneweg: mein FHEM läuft inkl. Rollladensteuerung, Homematic usw. sehr gut und weitgehend problemfrei. Sowohl FHEM als auch Raspbian auf dem Pi3 sind auf aktuellem Stand. Allerdings habe ich ein Problem mit der Realisierung eines "virtuellen" Sonnensensors.
Folgendes möchte ich realisieren: An Redemacher Duofern Comfort-Geräte kann man einen Sonnensensor anschließen. Dieser zeigt durch ein Event (startSun bzw. endSun) den Start bzw. das Ende der überstiegenen Helligkeit an. Dieses Event nutze ich, um einen "virtuellen" Sonnensensor (dummy) an bzw. aus zu schalten. Sobald sich der Zustand des Dummys ändert möchte ich wiederrum andere Rollläden runter bzw. hoch fahren, an denen kein Sensor verbaut ist (bzw. nicht angeschlossen werden kann).
Was klappt ist: Das notify der Rollladensteuerung (hier: Device "AZ_Rolladen_Vorne") löst notify (hier: "n_AZ_Rolladen_Vorne_SunEvent") aus. Das notify schaltet den Dummy "Sonnensensor_Vorne" (Zustand im fhem Webinterface stimmt).
Was nicht klappt: Die Änderung im "Sonnensensor_Vorne" löst nicht das zugeordnete notify "n_Sonnensensor_Vorne" aus. Weder im zugehörigen Filelog, noch im FHEM-Log ist ein Eintrag drin. Triggere ich den "Sonnensensor_Vorne" aber manuell, so wird das notify ausgelöst!? Wenn ich das Filelog richtig lese, werden beim manuellen Trigger sogar alle vorherigen Trigger (Sonnensensor durch notify verändert) alle auch noch im Log verzeichnet.
Hier meine einzelnen Parts im Detail:
Device "AZ_Rolladen_Vorne"
Internals:
CODE 7000B0
DEF 7000B0
IODev Rademacher_USB
LASTInputDev Rademacher_USB
MODEL Troll Comfort DuoFern
MSGCNT 44
NAME AZ_Rolladen_Vorne
NR 92
Rademacher_USB_MSGCNT 44
Rademacher_USB_RAWMSG 0FFF0F230F000004583C1B123400047115C0FFFFFF01
Rademacher_USB_TIME 2018-05-01 21:22:00
STATE closed
SUBTYPE Troll Comfort DuoFern
TYPE DUOFERN
READINGS:
2018-05-01 21:21:59 blindsMode off
2018-05-01 21:21:59 dawnAutomatic off
2018-05-01 21:21:59 duskAutomatic off
2018-05-01 19:40:44 event endSun
2018-05-01 21:21:59 manualMode off
2018-05-01 21:21:59 motorDeadTime off
2018-05-01 21:21:59 moving stop
2018-05-01 21:21:59 position 100
2018-05-01 21:21:59 rainAutomatic off
2018-05-01 21:21:59 rainDirection up
2018-05-01 21:21:59 rainMode off
2018-05-01 21:21:59 reversal off
2018-05-01 21:21:59 runningTime 27
2018-05-01 21:21:59 state closed
2018-05-01 21:21:59 sunAutomatic on
2018-05-01 21:21:59 sunMode off
2018-05-01 21:21:59 sunPosition 60
2018-05-01 21:21:59 timeAutomatic off
2018-05-01 21:21:59 ventilatingMode off
2018-05-01 21:21:59 ventilatingPosition 88
2018-05-01 21:21:59 version 1.6
2018-05-01 21:21:59 windAutomatic off
2018-05-01 21:21:59 windDirection up
2018-05-01 21:21:59 windMode off
helper:
Attributes:
IODev Rademacher_USB
event-on-change-reading .*
genericDeviceType blind
icon fts_shutter_40
room DEV_DUOFERN,OG_Arbeitszimmer,Homekit
Vom Device "AZ_Rolladen_Vorne" ausgelöstes notify "n_AZ_Rolladen_Vorne_SunEvent":
define n_AZ_Rolladen_Vorne_SunEvent notify AZ_Rolladen_Vorne:event.* {\
Log 3, "$NAME: notify ausgeloest ($EVENT).";;\
if ($EVTPART1 eq "startSun") {\
Log 3, "---> Check: EVTPART1=$EVTPART1 should be startSun";;\
fhem("set Sonnensensor_Vorne on");;\
} elsif ($EVTPART1 eq "endSun") {\
Log 3, "---> Check: EVTPART1=$EVTPART1 should be endSun";;\
fhem("set Sonnensensor_Vorne off");;\
}\
}
attr n_AZ_Rolladen_Vorne_SunEvent addStateEvent 1
attr n_AZ_Rolladen_Vorne_SunEvent room DEV_DUOFERN
Zu schaltender Dummy (virtueller Sonnensensor):
Internals:
NAME Sonnensensor_Vorne
NR 559
STATE off
TYPE dummy
READINGS:
2018-05-01 21:21:31 state off
Attributes:
devStateIcon on:weather_sun@yellow off:weather_cloudy@grey
event-on-change-reading .*
genericDeviceType switch
room DEV_DUOFERN
webCmd on:off
Notify des virtuellen Sonnensensors (soll hier z.B. den Küchenrollladen steuern, wird aber leider nur beim manuellen Triggern ausgelöst):
define n_Sonnensensor_Vorne notify Sonnensensor_Vorne:.* {\
Log 3, "$NAME: notify ausgeloest ($EVENT)";;\
if (Value("Sonnensensor_Vorne") eq "on") {\
Log 3, "---> Check: should be on.";;\
fhem ("set KU_Rolladen sunMode on");;\
} else {\
Log 3, "---> Check: should be off.";;\
fhem ("set KU_Rolladen sunMode off");;\
}\
}
attr n_Sonnensensor_Vorne addStateEvent 1
attr n_Sonnensensor_Vorne room DEV_DUOFERN
Wäre super, wenn jemand einen Tipp für mich hätte. Ich sehe den Fehler einfach nicht und hoffe nicht, dass es nur ein ganz dummes Ding ist...
Danke und VG
Achim