Hallo @all,
ich möchte mit folgendem Konstrukt einen FS20 Schalter dazu bringen, bei Dunkelheit ein Licht einzuschalten und 22.00 Uhr wieder aus. Der State schaltet zwar auf on und off, aber das FS20 Device nicht. Was mache ich falsch?
define BrunnenLicht_Autom WeekdayTimer BrunnenLicht Mo-Fr|14:00|on Mo-Fr|22:00|off {ReadingsVal("OWX_26_0A9116000000","light",0) >= "1"}
versuch es mal mit:
define BrunnenLicht_Autom WeekdayTimer BrunnenLicht Mo-Fr|14:00|on Mo-Fr|22:00|off {ReadingsVal("OWX_26_0A9116000000","light",0) gt "1"}
Perl hat die Besonderheit, dass zwischen numerischem Vergleich und Stringvergleich unterschiedliche Operatoren genutzt werden müssen - anfangs immer eine böse Falle.
Vielleicht liegt es daran.
Hallo Dietmar,
danke für den schnellen Versuch, daran lag es aber leider nicht = gleiches Ergebnis = state schaltet prima um (Zeit einfach auf 23.00 gesetzt) - state ist on - FS20 Schalter BrunnenLicht bleibt off...
Bin ratlos, irgendwie stört die Bedingung die Ausführung des Befehles.
schalte mal verbose 5 an. Dann siehst du was gesendet wird.
Hallo Dietmar,
sehen schon - aber verstehen - Fehlanzeige
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|14:00|on : 1 -> 14:00:00 -> on
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|14:00|on : 2 -> 14:00:00 -> on
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|14:00|on : 3 -> 14:00:00 -> on
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|14:00|on : 4 -> 14:00:00 -> on
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|14:00|on : 5 -> 14:00:00 -> on
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|23:10|off : 1 -> 23:10:00 -> off
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|23:10|off : 2 -> 23:10:00 -> off
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|23:10|off : 3 -> 23:10:00 -> off
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|23:10|off : 4 -> 23:10:00 -> off
2013.11.11 22:40:54 5: [BrunnenLicht_Autom] Switchingtime: Mo-Fr|23:10|off : 5 -> 23:10:00 -> off
2013.11.11 22:41:24 5: [BrunnenLicht_Autom] list of windowsenors found: ''
2013.11.11 22:41:24 4: [BrunnenLicht_Autom] 11.11.2013 14:00:00 ; aktParam: 0.0 ; newParam: on
2013.11.11 22:41:24 5: [BrunnenLicht_Autom] no switch in the yesterdays because of the devices type.
2013.11.11 22:41:24 4: [BrunnenLicht_Autom] Next switch 11.11.2013 23:10:00
warten bis
ZitatNext switch 11.11.2013 23:10:00
Hallo Diermar,
leider schaltet nachts nichts aus und nachmittags nichts an:
2013.11.12 14:00:01 5: [BrunnenLicht_Autom] list of windowsenors found: ''
2013.11.12 14:00:01 4: [BrunnenLicht_Autom] Jetzt:12.11.2013 14:00:06 -> Next: 12.11.2013 14:00:00 -> Param: on -6
2013.11.12 14:00:01 4: [BrunnenLicht_Autom] 12.11.2013 14:00:00 ; aktParam: 0.0 ; newParam: on
2013.11.12 14:00:01 4: [BrunnenLicht_Autom] command: {ReadingsVal("OWX_26_0A9116000000","light",0) gt "1"}
2013.11.12 14:00:01 3: 1
2013.11.12 14:00:01 4: [BrunnenLicht_Autom] Next switch 12.11.2013 23:10:00
versteh ich nicht
Hallo Dietmar,
ich versteh das leider ebenfalls nicht, der state Deines Moduls ist on, die Beleuchtung leider nicht. Im log steht wieder:
2013.11.13 14:00:00 5: [BrunnenLicht_Autom] list of windowsenors found: ''
2013.11.13 14:00:00 4: [BrunnenLicht_Autom] Jetzt:13.11.2013 14:00:05 -> Next: 13.11.2013 14:00:00 -> Param: on -5
2013.11.13 14:00:00 4: [BrunnenLicht_Autom] 13.11.2013 14:00:00 ; aktParam: 0.0 ; newParam: on
2013.11.13 14:00:00 4: [BrunnenLicht_Autom] command: {ReadingsVal("OWX_26_0A9116000000","light",0) gt "1"}
2013.11.13 14:00:00 3: 1
2013.11.13 14:00:00 4: [BrunnenLicht_Autom] Next switch 13.11.2013 23:10:00
aber ich verstehe es jetzt:
durch
{ReadingsVal("OWX_26_0A9116000000","light",0) gt "1"}
hast du keine Bedingung, sondern den kompletten Perlcode definiert, der zu den jeweiligen Schaltzeiten ausgeführt werden soll. In einem solchem Fall machen HC und WDT nichts selbst.
Im Grunde wird nur deine Bedingung geprüft aber nichts gemacht. Deine Code (command: {ReadingsVal("OWX_26_0A9116000000","light",0) gt "1"}) liefert jedenfalls true: die einsame "1" in der darauf folgenden Zeile.
Bedingungen müssen in runden Klammern eingeschlossen sein:
(ReadingsVal("OWX_26_0A9116000000","light",0) gt "1")
Dann sendet HC/WDT "set geraet ... on"
Du kannst es einfach ausprobieren, indem du in der Detailansicht der Oberfläche des HC/WDT die {} durch () ersetzt.
Hallo Dietmar,
Dein Versuch hat zur Folge :
STATE inactive
Das hatte ich schon versucht. Langsam dämmert mir, dass mglw. meine ganze Frage/Aufgabenstellung so nicht geht... Ziel ist es, ab 14 Uhr zu prüfen, ob es etwa schon dunkel genug ist - um das Außenlicht einzuschalten - und das dann zu tun, wenn die Bedingung eintritt. Bisher hatte ich da Twilight im Einsatz, möchte das aber gern durch einen 1-wire Lichtsensor ersetzen, der nicht so viel Daten liefert, welche ich zu so einfacher Aufgabe nicht benötige.
ich nutze dafür Twilight:
define TwilightMessage1 notify Twilight.*:aktEvent:.*ss_weather.* set StehlampeTisch on;; set StehlampeTV on
Du kannst vielleicht ein notify auf den 1wire-Sensor bauen, wenn er feuert, dann das Licht einschalten - ohne WD.
Hallo Dietmar,
will mal eine Rückmeldung geben, konnte heute das Problem folgendermaßen lösen:
define TH_Dunkel THRESHOLD OWX_26_0A9116000000:light:0:20 ||||OFF:ON
define BrunnenLicht_TH WeekdayTimer BrunnenLicht Mo-So|13:00|on Mo-So|22:00|off (ReadingsVal("TH_Dunkel", "state", "OFF") eq "ON")
und schon klappt es mit dem helligkeitsgesteuerten Außenlicht. Nächste Änderung kommt, wenn Du die Wochenende (+Feiertags) Funktion eingebaut hast.
Schon mal im Voraus vielen Dank für Deine hervorragende Arbeit!
Hallo,
Wochenende und Feiertage lassen sich bequem per $we prüfen.
Für die Feiertage muss dazu allerdings eine <beliebiger_Name>.holiday Datei angelegt und ausgewertet werden.
Diese pflege ich aber immer.
Somit weiß FHEM auch wann ich Urlaub habe oder - zeitnah logischerweise - wann ich krank bin (was Gottlob recht selten vorkommt).
Sobald ich die Krankmeldung vom Hausarzt in der Hand habe wird das in meine Feiertag.holiday eingetragen.
FHEM wertet diese Datei dann aus und füllt $we dann entsprechend mit 0 oder 1
Alternativ könnte man auch den Google-Kalender pflegen.
Ich lege meine Urlaubseinträge aber nicht in der "Cloud" ab sondern behalte diese lieber innerhalb der Hauswände 8)
Grüße
@Puschel74
sorry - aber Thema verfehlt -5- setzen (oder vor dem langen Kommentar richtig lesen, worum es geht)
Hallo,
mein komplett am Thema vorbei und sowas von schlecht eingeworfener Beitrag hat sich zwar auf das
Zitatwenn Du die Wochenende (+Feiertags) Funktion eingebaut hast.
bezogen aber ich denke mal ich hab durchaus einiges verpasst.
Zitat@Puschel74
sorry - aber Thema verfehlt -5- setzen (oder vor dem langen Kommentar richtig lesen, worum es geht)
In diesem Sinne werde ich mich brav setzen und die -5- als -- ich kann auf Ideen,Tipps oder Anregungen jeglicher Art dankend verzichten - verbuchen.
Schönen Abend und einen schönen 1. Advent noch 8)
Grüße
@ det.:
So einfach und unkompliziert, wie du dir das mit der Ergänzung von $we vorstellst, ist es leider nicht.
Ich habe ein wenig darüber nachgedacht, wie ich es machen könnte und bin über mehrere Probleme gestolpert.
etwa so soll es wohl aussehen:
define BrunnenLicht_TH WeekdayTimer BrunnenLicht Mo-So,$we|13:00|on Mo-So,$we|22:00|off (ReadingsVal("TH_Dunkel", "state", "OFF") eq "ON")
Ich müßte an den internen Verarbeitungen einiges verändern, weil folgendes möglich sein sollte:
define BrunnenLicht_TH WeekdayTimer BrunnenLicht Sa-So,$we|13:00|on Sa-So,$we|22:00|off (ReadingsVal("TH_Dunkel", "state", "OFF") eq "ON")
Im Moment wird bei einer solchen Definition nach der Sonntagsschaltung (ohne $we) erst am nächsten Samstag eine Schaltung eingestellt(InternalTimer). Wenn also Feiertage dazwischen wären, würden sie übergangen. Ich müßte also im voraus jeden Tag prüfen, ob er nicht wg. der Feiertagsangabe doch eine Schaltung erfahren müßte - kompliziert.
Bevor du Weihnachten völlig verzweifelst, hier erst einmal ein Vorschlag, wie du die harte Zeit ohne $we überbrücken kannst:
define BrunnenLicht_TH WeekdayTimer BrunnenLicht 13:00|on 22:00|off ($we && ReadingsVal("TH_Dunkel", "state", "OFF") eq "ON")
probier es mal aus - es müßte funktionieren.
möglich wäre z. Bsp. auch:
define BrunnenLicht_TH WeekdayTimer BrunnenLicht 13:00|on 22:00|off ( ($we || $wday == 6) && ReadingsVal("TH_Dunkel", "state", "OFF") eq "ON")
Dann würde Fr(6), Sa,So und an Feiertagen, die im holiday.file definiert sind, geschaltet.
PS: da hast du Puschel mit der Schulnote aber ein wenig geärgert. Er ist wirklich einer der hilfsbereitesten hier im Forum!!
Hallo Puschel74,
Nicht sauer sein, mein Beitrag in Sachen Feiertag bezog sich auf dieses Posting:
Zitathttp://forum.fhem.de/index.php/topic,10011.msg108874.html
und ich hatte versehentlich angenommen, dass Du es gelesen haben könntest.
Hallo Dietmar,
Vielen Dank, guter Ansatz. Ich werde das mal probieren, Ziel ist ja nicht das belanglose Licht einfacher zu schalten - sondern dass Hof und Garage zu bleiben, wenn Urlaub oder Feiertag ist. Das sollte dann also mit der Bedingung !we funktionieren. Mal sehen, ob die Dinger morgen früh aufgehen, wenn ich das einbaue.