Folgende Situation. Ich würde gerne einen "Wecker" integrieren, bei dem ich diverse Einstellungen machen kann.
Hier mein Code:
# Weckzeit
define Weckzeit dummy
define Weckzimmer dummy
define Wecktemp dummy
attr Weckzeit alias Stelle Weckzeit
attr Weckzimmer alias Stelle Weckzimmer
attr Wecktemp alias Stelle Temperatur
attr Weckzeit group Uhr wecken
attr Weckzimmer group Uhr wecken
attr Wecktemp group Uhr wecken
attr Weckzeit room Wecker
attr Weckzimmer room Wecker
attr Wecktemp room Wecker
attr Weckzeit setList state:02:00:00,02:15:00,02:30:00,02:45:00,03:00:00,03:15:00,03:30:00,03:45:00,04:00:00,04:15:00,04:30:00,04:45:00,05:00:00,05:15:00,05:30:00,05:45:00,06:00:00,06:15:00,06:30:00,06:45:00,07:00:00
attr Weckzimmer setList state:Badezimmer,Kueche
attr Wecktemp setList state:18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0
attr Weckzeit webCmd state
attr Weckzimmer webCmd state
attr Wecktemp webCmd state
define HeizWecker notify Weckzeit {\
my $Weckz1 = ReadingsVal("Weckzeit", "state", undef);;\
my $Weckzi1 = ReadingsVal("Weckzimmer", "state", undef);;\
my $Wecktemp1 = ReadingsVal("Wecktemp", "state", undef);;\
fhem ("define at $Weckz1 set $Weckzi1 desired-temp $Wecktemp1");;\
Log 3 ,"eingestellte Weckzeit: $Weckz1 Zimmer: $Weckzi1 Temperatur: $Wecktemp1";;\
}
Der Knackpunkt ist, dass es soweit schon das macht was es soll, nur noch nicht den "at" Befehl richtig hinzufügt, so dass der Job auch ab der bestimmten Zeit ausgeführt wird.
Im Log steht:
2013.02.12 11:37:36 3: define at 03:15:00 set Kueche desired-temp 19.5 : Unknown module 03:15:00, choose one of ALL3076 ALL4000T ALL4027 BS CM11 CUL CUL_EM CUL_FHTTK CUL_HM CUL_HOERMANN CUL_IR CUL_MAX CUL_RFR CUL_TX CUL_WS CULflash Calendar DbLog ECMD ECMDDevice EIB EM EMEM EMGZ EMWZ ESA2000 EnOcean FB_CALLMONITOR FHEM2FHEM FHEMWEB FHT FHT8V FHZ FLOORPLAN FS20 FileLog HCS HMLAN HMS HTTPSRV IPCAM IPWE IT Itach_Relay JsonList KM271 KS300 LGTV LIRC LUXTRONIK2 M232 M232Counter M232Voltage MAX MAXLAN MSG MSGFile MSGMail NetIO230B OREGON OWAD OWCOUNT OWDevice OWFS OWID OWLCD OWMULTI OWSWITCH OWServer OWTEMP OWTHERM OWX PID POKEYS PachLog RFXCOM RFXMETER RFXX10REC RSS SCIVT SISPM SIS_PMS SML STV TCM TRX TRX_ELSE TRX_LIGHT TRX_SECURITY TRX_WEATHER TUL TellStick Twilight USBWX USF1000 VantagePro2 WEBCOUNT WEBIO WEBIO_12DIGITAL WEBTHERM WOL WS2000 WS300 WS3600 Weather X10 XBMC YAMAHA_AVR ZWDongle ZWave _internal_ at autocreate average backup dewpoint dummy fheminfo holiday notify sequence structure telnet update watchdog weblink xxLG7000
2013.02.12 11:37:36 3: eingestellte Weckzeit: 03:15:00 Zimmer: Kueche Temperatur: 19.5
Man sieht also, dass es schon das macht was ich will, nur habe ich keinen Schimmer davon, welches Modul er meint ?
Hat jemand eine Idee ?
Du musst dem at einen Namen geben
Zu der Funktion oben (die auch wunderbar läuft), würde ich gerne noch eine weitere Funktion integrieren, dass man auch einen (Wunsch)Tag auswählen kann.
Ich habe dazu nun noch dieses integriert:
define Wecktag dummy
attr Wecktag setList state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
attr Wecktag webCmd state
Das Problem was ich jedoch habe ist: wie kann ich einen Job definieren, der z.B. dann erst in 2-x Tagen stattfindet ?.
Also als Beispiel würde ich am Montag den Job einstellen: "Am Freitag das Badezimmer um 01:00:00 Uhr auf 22 Grad setzen".
In dem Fall müsste ja FHEM nun hochrechnen: "Aha, heute ist Montag und er möchte am Freitag um 02:00 Uhr .... dann muss ich nun 4 Tage draufrechnen".
Ich könnte es ja nun zwar so machen, indem ich sage:
fhem ("define Wecker_Job at 01:00:00 set Badezimmer desired-temp 22") if ($wday = 5)
Aber das Leben wäre ja einfach, wenn es da nicht noch so eine weitere knifflige Sache gäbe :)
In der Zeit zwischen 22:30 Uhr und 03:00 Uhr schaltet sich meine NAS (auf der FHEM läuft) aus, um halt etwas Strom zu sparen.
In dem Fall müsste der Job ja vorher generiert werden, dass das Badezimmer schon gegen 22:15 auf z.B. 22 Grad gesetzt wird.
Hier kommt also das Knifflige dazu, dass FHEM versteht:
"AHa, er will also am Freitag um 01:00 Uhr das Badezimmer warm haben, aber ich arbeite ja nur bis um 22:30 am Donnerstagabend, kann ihm also nicht wirklich um 01:00 Uhr die Temp setzen, dafür aber um 22:15 Uhr am Vortag, also Donnerstag."
Demnach die Frage: wie gebe ich das FHEM zu verstehen ?.
Finde die Idee sehr gut.
Deinen Fehler habe ich natürlich auch. Wie hast Du diesen nun behoben? Hast Du vor dem at noch einen Namen vergeben.
Kannst Du kurz 2-3 Sätze zur genauen Funktions- und Vorgehensweise erläutern?
Wie bekommt meine Heiziungssteuerung im Badezimmer (eg_hz_heizung) nun die Temperatur übergeben. (Klappt bei mir noch nicht.)
Stellst Du nun für Deine beiden Räume abends den Wecker individuell?
Danke und Gruß
Gunther
Ja, UliM hatte mir ja den Fehler vor Augen gezeigt. Hatte nur den Namen vergessen, dann lief alles.. war ein blöder Flüchtigkeitsfehler.
Ich habe bisher diesen Code, den ich gerne auch mal einfüge und auch für dich / andere interessant ist.
Ich habe auch soeben schon das Problem mit dem "vorher einschalten" gelöst... nur bleibt dennoch (und hier bin ich noch am grübeln) die Frage, wie ich ihm den Tag beibringen soll ?.
Hier aber erstmal den bisherigen Code. Sicher ist das für den einen oder anderen etwas "Anfänger" und kann sicher noch professioneller gelöst werden, aber er läuft erstmal soweit.
# Weckzeit
define Weckzimmer dummy
attr Weckzimmer alias 1_Zimmer
attr Weckzimmer group 3_Uhr wecken
attr Weckzimmer room 1_Anwesenheit
attr Weckzimmer setList state:Badezimmer,Kueche,Arbeitszimmer,Wohnzimmer
attr Weckzimmer webCmd state
define Wecktemp dummy
attr Wecktemp alias 2_Temperatur
attr Wecktemp group 3_Uhr wecken
attr Wecktemp room 1_Anwesenheit
attr Wecktemp setList state:20.0,20.5,21.0,21.5,22.0,22.5,23.0
attr Wecktemp webCmd state
define Weckrepeat dummy
attr Weckrepeat alias 3_Wiederholung
attr Weckrepeat group 3_Uhr wecken
attr Weckrepeat room 1_Anwesenheit
attr Weckrepeat setList state:einmalig,taeglich
attr Weckrepeat webCmd state
define Weckart dummy
attr Weckart alias 4_Geraete
attr Weckart group 3_Uhr wecken
attr Weckart room 1_Anwesenheit
attr Weckart setList state:Heizung,Lampe
attr Weckart webCmd state
define Wecktag dummy
attr Wecktag alias 5_Wecktag
attr Wecktag group 3_Uhr wecken
attr Wecktag room 1_Anwesenheit
attr Wecktag setList state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
attr Wecktag webCmd state
define Weckzeit dummy
attr Weckzeit alias 6_Weckzeit
attr Weckzeit group 3_Uhr wecken
attr Weckzeit room 1_Anwesenheit
attr Weckzeit setList state:01:00:00,01:15:00,01:30:00,01:45:00,02:00:00,02:15:00,02:30:00,02:45:00,03:00:00,03:15:00,03:30:00,03:45:00,04:00:00,04:15:00,04:30:00,04:45:00,05:00:00,05:15:00,05:30:00,05:45:00,06:00:00,06:15:00,06:30:00,06:45:00,07:00:00
attr Weckzeit webCmd state
define HeizWecker notify Weckzeit {\
if (Value("HeizungWinterSommer") eq "on") {\
fhem ("set Weckzeit 22:15:00") if ((ReadingsVal("Weckzeit","state","") eq "01:00:00") || (ReadingsVal("Weckzeit","state","") eq "01:15:00") || (ReadingsVal("Weckzeit","state","") eq "01:30:00")|| (ReadingsVal("Weckzeit","state","") eq "01:45:00")|| (ReadingsVal("Weckzeit","state","") eq "02:00:00")|| (ReadingsVal("Weckzeit","state","") eq "02:15:00")|| (ReadingsVal("Weckzeit","state","") eq "02:30:00")|| (ReadingsVal("Weckzeit","state","") eq "02:45:00") || (ReadingsVal("Weckzeit","state","") eq "03:00:00"));;\
fhem ("set Wecktag 0") if (ReadingsVal("Wecktag","state","") eq "Sonntag");;\
fhem ("set Wecktag 1") if (ReadingsVal("Wecktag","state","") eq "Montag");;\
fhem ("set Wecktag 2") if (ReadingsVal("Wecktag","state","") eq "Dienstag");;\
fhem ("set Wecktag 3") if (ReadingsVal("Wecktag","state","") eq "Mittwoch");;\
fhem ("set Wecktag 4") if (ReadingsVal("Wecktag","state","") eq "Donnerstag");;\
fhem ("set Wecktag 5") if (ReadingsVal("Wecktag","state","") eq "Freitag");;\
fhem ("set Wecktag 6") if (ReadingsVal("Wecktag","state","") eq "Samstag");;\
my $Weckz1 = ReadingsVal("Weckzeit", "state", undef);;\
my $Weckzi1 = ReadingsVal("Weckzimmer", "state", undef);;\
my $Wecktemp1 = ReadingsVal("Wecktemp", "state", undef);;\
my $Weckrepeat = ReadingsVal("Weckrepeat", "state", undef);;\
my $Wecktag = ReadingsVal("Wecktag", "state", undef);;\
my $Weckart = ReadingsVal("Weckart", "state", undef);;\
fhem ("set On_the_Way 1");;\
fhem ("define Weckzeit_Stellen_once at $Weckz1 set $Weckzi1 desired-temp $Wecktemp1") if ((ReadingsVal("Weckrepeat","state","") eq "einmalig") && (ReadingsVal("Weckart","state","") eq "Heizung"));;\
fhem ("define Weckzeit_Stellen_daily at *$Weckz1 set $Weckzi1 desired-temp $Wecktemp1") if (ReadingsVal("Weckrepeat","state","") eq "taeglich");;\
fhem ("define Weckzeit_Stellen_lamp at $Weckz1 set Steckdose2 on") if ((ReadingsVal("Weckrepeat","state","") eq "einmalig") && (ReadingsVal("Weckart","state","") eq "Lampe"));;\
fhem ("define Weckzeit_Stellen_reset at 08:00:00 delete Weckzeit_Stellen_once ;;;; set On_the_Way 0") if (ReadingsVal("Weckrepeat","state","") eq "einmalig");;\
fhem ("define Weckzeit_Stellen_reset2 at 08:02:00 delete Weckzeit_Stellen_lamp ;;;; set On_the_Way 0") if (ReadingsVal("Weckrepeat","state","") eq "einmalig");;\
Log 3 ,"eingestellte Weckzeit: $Weckrepeat um $Weckz1 im Zimmer: $Weckzi1 mit Temperatur: $Wecktemp1";;\
} }
Zu der Erklärung:
Ich kann per Dropdown-Menü eine Zeit vorgeben, Z.B. soll halt um 04:00:00 mein Badezimmer oder die Küche oder ?? eine Temp von xx Grad starten.
Es wird aber nun auch geprüft, ob die eingestellte Zeit vor 03:15:00 Uhr liegt (weil ja wie erwähnt meine NAS dann down ist) und setzt dann schon am Tag / Abend davor die Temp ein.
In dem Fall arbeitet diese Schaltung halt unabhängig von den festen Zeiten in der FHT80 selbst.
Dieser Wecker soll ja hauptsächlich für einmalige Dinge sein, wenn ich z.B. mal außer der Reihe extrem früh raus muss, weil man z.B. in den Urlaub fährt und die Heizung dann im Badezimmer schon warm ist. Dieses "set On_the_Way 1" in diesem Code bezieht sich auf eine weitere Aktion, kann aber natürlich weggelassen werden.
Zum Problem:
Diese Auswahl des Tages soll nun sein, damit man z.B. einen Tag vor dem Ereignis nicht vergisst den Wecker zu stellen.
So könnte ich z.B. am Dienstagabend sagen "am Freitag soll das Bad... um 02:00 Uhr ... auf 22 Grad einschalten"... und würde es dann nicht am Donnerstag vergessen und plötzlich am Freitagmorgen um 02:00 in ein kaltes Bad kommen.
Wo steht denn welche Heizung angesteuert wird (wie heißt Dein Heizungsdevice)?
Die einzelnen FHTs habe ich zwar in derselben Datei, jedoch nicht hier eingefügt.
Im Prinzip aber würde z.B. für das Badezimmer der Heizkörper / FHT so aussehen:
# Badezimmer
define Badezimmer FHT 321e
attr Badezimmer fm_order 4
attr Badezimmer fp_Grundriss 256,603,2,aktuelle Temp
attr Badezimmer group Heizung
attr Badezimmer icon icoTemp
attr Badezimmer retrycount 3
attr Badezimmer room Raumuebersicht
define FileLog_Badezimmer FileLog /usr/local/FHEM/var/log/Badezimmer-%Y.log Badezimmer
attr FileLog_Badezimmer group Plots
attr FileLog_Badezimmer logtype fht:Temp/Act,text
attr FileLog_Badezimmer room Logfiles
define weblink_Badezimmer weblink fileplot FileLog_Badezimmer:fht:CURRENT
attr weblink_Badezimmer label "Badezimmer Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_Badezimmer room Graphen
Und dann steuerst du ja mit dem "Wecker-Code" z.B. das Badezimmer usw. an.
ahh, Dein "Badezimmer" ist Dein FHT-Device. Jetzt verstehe ich das!
Danke!
Super wäre es, wenn man nun per Datum und Uhrzeit vorstellen kann, wann die Heizung hochgeregelt werden soll.
Damit wäre es möglich geplante Events schon besser einplanen zu können.
Bei mir wäre das: Donnerstag um 16 Uhr habe ich ein Fotoshooting: Donnerstag morgen soll die Heizung hochregeln.
Vermutlich wird mir da aber das Modul heating_control reinpfuschen. Dafür müsste man dort vermutlich noch einen Status abfragen, der checkt ob am entsprechenden Tag ein Wecker gesetzt ist.
Hi lieber Günther,
wenn es um deinen Wunsch geht, dann ist mein Code oben schon im Grunde fertig für dich. Also wenn du als Beispiel am Donnerstagmorgen um 08:00 Uhr die Heizung hochregeln willst, füge den Code in deine z.B. fhem.cfg ein und restarte FHEM, bzw. tippe rereadcfg ein.
Denn wie du sehen kannst kann man den Raum, die Uhrzeit und die Temperatur schon einstellen. Sollte die Uhrzeit bei dir anders sein, kannst du ja diese entsprechend noch hinzufügen, bzw. verändern.
Nur fehlt halt noch die Auswahl des Tages, wo ich ja selbst noch am tüfteln bin.
Solltest du auch FHTs im Einsatz haben, würde dein Code komplett dann ungefähr so aussehen, könntest du dann so verwenden und nach deinen Wünschen noch anpassen...
# Hier dein z.B. Badezimmer entsprechend anpassen (also den FHT-Code xxx gegen deinen ändern)
define Badezimmer FHT xxxxx
attr Badezimmer group Heizung
attr Badezimmer retrycount 3
attr Badezimmer room Raumuebersicht
define FileLog_Badezimmer FileLog /usr/local/FHEM/var/log/Badezimmer-%Y.log Badezimmer
attr FileLog_Badezimmer group Plots
attr FileLog_Badezimmer logtype fht:Temp/Act,text
attr FileLog_Badezimmer room Logfiles
define weblink_Badezimmer weblink fileplot FileLog_Badezimmer:fht:CURRENT
attr weblink_Badezimmer label "Badezimmer Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_Badezimmer room Graphen
# hier dann der Code zum Wecker:
define Weckzimmer dummy
attr Weckzimmer alias 1_Zimmer
attr Weckzimmer group 3_Uhr wecken
attr Weckzimmer room 1_Anwesenheit
attr Weckzimmer setList state:Badezimmer,Kueche,Arbeitszimmer,Wohnzimmer
attr Weckzimmer webCmd state
define Wecktemp dummy
attr Wecktemp alias 2_Temperatur
attr Wecktemp group 3_Uhr wecken
attr Wecktemp room 1_Anwesenheit
attr Wecktemp setList state:20.0,20.5,21.0,21.5,22.0,22.5,23.0
attr Wecktemp webCmd state
define Weckrepeat dummy
attr Weckrepeat alias 3_Wiederholung
attr Weckrepeat group 3_Uhr wecken
attr Weckrepeat room 1_Anwesenheit
attr Weckrepeat setList state:einmalig,taeglich
attr Weckrepeat webCmd state
define Weckart dummy
attr Weckart alias 4_Geraete
attr Weckart group 3_Uhr wecken
attr Weckart room 1_Anwesenheit
attr Weckart setList state:Heizung,Lampe
attr Weckart webCmd state
define Wecktag dummy
attr Wecktag alias 5_Wecktag
attr Wecktag group 3_Uhr wecken
attr Wecktag room 1_Anwesenheit
attr Wecktag setList state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
attr Wecktag webCmd state
define Weckzeit dummy
attr Weckzeit alias 6_Weckzeit
attr Weckzeit group 3_Uhr wecken
attr Weckzeit room 1_Anwesenheit
attr Weckzeit setList state:01:00:00,01:15:00,01:30:00,01:45:00,02:00:00,02:15:00,02:30:00,02:45:00,03:00:00,03:15:00,03:30:00,03:45:00,04:00:00,04:15:00,04:30:00,04:45:00,05:00:00,05:15:00,05:30:00,05:45:00,06:00:00,06:15:00,06:30:00,06:45:00,07:00:00
attr Weckzeit webCmd state
define HeizWecker notify Weckzeit {\
if (Value("HeizungWinterSommer") eq "on") {\
fhem ("set Weckzeit 22:15:00") if ((ReadingsVal("Weckzeit","state","") eq "01:00:00") || (ReadingsVal("Weckzeit","state","") eq "01:15:00") || (ReadingsVal("Weckzeit","state","") eq "01:30:00")|| (ReadingsVal("Weckzeit","state","") eq "01:45:00")|| (ReadingsVal("Weckzeit","state","") eq "02:00:00")|| (ReadingsVal("Weckzeit","state","") eq "02:15:00")|| (ReadingsVal("Weckzeit","state","") eq "02:30:00")|| (ReadingsVal("Weckzeit","state","") eq "02:45:00") || (ReadingsVal("Weckzeit","state","") eq "03:00:00"));;\
fhem ("set Wecktag 0") if (ReadingsVal("Wecktag","state","") eq "Sonntag");;\
fhem ("set Wecktag 1") if (ReadingsVal("Wecktag","state","") eq "Montag");;\
fhem ("set Wecktag 2") if (ReadingsVal("Wecktag","state","") eq "Dienstag");;\
fhem ("set Wecktag 3") if (ReadingsVal("Wecktag","state","") eq "Mittwoch");;\
fhem ("set Wecktag 4") if (ReadingsVal("Wecktag","state","") eq "Donnerstag");;\
fhem ("set Wecktag 5") if (ReadingsVal("Wecktag","state","") eq "Freitag");;\
fhem ("set Wecktag 6") if (ReadingsVal("Wecktag","state","") eq "Samstag");;\
my $Weckz1 = ReadingsVal("Weckzeit", "state", undef);;\
my $Weckzi1 = ReadingsVal("Weckzimmer", "state", undef);;\
my $Wecktemp1 = ReadingsVal("Wecktemp", "state", undef);;\
my $Weckrepeat = ReadingsVal("Weckrepeat", "state", undef);;\
my $Wecktag = ReadingsVal("Wecktag", "state", undef);;\
my $Weckart = ReadingsVal("Weckart", "state", undef);;\
fhem ("define Weckzeit_Stellen_once at $Weckz1 set $Weckzi1 desired-temp $Wecktemp1") if ((ReadingsVal("Weckrepeat","state","") eq "einmalig") && (ReadingsVal("Weckart","state","") eq "Heizung"));;\
fhem ("define Weckzeit_Stellen_daily at *$Weckz1 set $Weckzi1 desired-temp $Wecktemp1") if (ReadingsVal("Weckrepeat","state","") eq "taeglich");;\
fhem ("define Weckzeit_Stellen_reset at 08:00:00 delete Weckzeit_Stellen_once") if (ReadingsVal("Weckrepeat","state","") eq "einmalig");;\
Log 3 ,"eingestellte Weckzeit: $Weckrepeat um $Weckz1 im Zimmer: $Weckzi1 mit Temperatur: $Wecktemp1";;\
} }
HI,
ich find die Idee super. Wollte gerade bei den Wünschen etwas ähnliches aufschreiben dann hab ich den Code hier gefunden.
Ich wollte eigentlich den Wunsch nach einem Modul äußern das wie ein Wecker für mehrere Personen funktioniert. Das wäre dann ja äquivalent zu den Räumen.
Für den Wecker würd ich dann gerne nach Auswahl der Person die Zeit eingeben und dann eine vorher bestimmte Weckmethode.
Die Weckmethode wäre ein vorher definierter Ablauf von Vorgängen der dann vom Timing auf die Weckzeit angepasst wird, ähnlich dem wakeup vom wakeuplight. Glaubt Ihr so etwas könnte man aus dem Code basteln? evtl. als richtiges Modul?
Des ist irgendwie noch so ein Punkt der mir etwas fehlt so ein richtiger Wecker den ich mit Aktionen programmieren kann.
Richtig edel wäre natürlich wenn das Modul die Personen anhand des Rommate Moduls selbst erkenn würde. Aber man muss es ja für den Anfang nicht übertreiben.
Wäre so etwas machbar?/ gewünscht