Huhu,
ich versuche mir einen kleinen Wecker zu basteln und hab irgendwas verbastelt :-(
Ich finde den Fehler einfach nicht, vielleicht sitz ich zu lange davor. Hat jemand eine Idee wieso nach dem ändern eines Dropdownfeldes der Wert nicht mehr in den Dummy geschrieben wird?
Grüße aus Ffm
# --- Wecker
define Wecker_Radio at *20:47:00 set SRadio PLAY http://streams.ffh.de/ffhchannels/mp3/hq80er.m3u;;set SRadio VOLUME 90%
set Wecker_Radio inactive
define Wecker_Std dummy
attr Wecker_Std room Wecker
attr Wecker_Std group Wecker
attr Wecker_Std setList state:01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23
attr Wecker_Std webCmd state
attr Wecker_Std alias Stunden
attr Wecker_Std webCmd state:06
define irgendwas_Std notify Wecker_Std { my $Uhr_Std =ReadingsVal("Wecker_Std","state","12") }
define Wecker_Min dummy
attr Wecker_Min room Wecker
attr Wecker_Min group Wecker
attr Wecker_Min setList state:00,05,10,15,20,25,30,35,40,45,50,55
attr Wecker_Min webCmd state
attr Wecker_Min alias Minuten
attr Wecker_Min webCmd state:00
define irgendwas_Min notify Wecker_Min { my $Uhr_Min =ReadingsVal("Wecker_Min","state","00") }
define test dummy
attr test room Wecker
attr test group Wecker
attr test setList state:An,Aus
attr test webCmd state
attr test alias An oder Aus
attr test webCmd state:Aus
attr test devStateIcon Aus:general_aus@red An:general_an@green
Welcher Wert int welcher dummy?
Mir faellt nur auf, dass die notifys "sinnlos" sind, sie Fragen ein Wert ab, ohne etwas zu setzen.
Eigentlich will ich eine Variable mit Minuten und eine mit Stunden speichern um daraus den AT-Befehl zu basteln. Aber ich weiß nicht was ich da falsch mache :(
define irgendwas_Std notify Wecker_Std { my $Uhr_Std =ReadingsVal("Wecker_Std","state","12") }
notify läuft nins Leere, hier kann nichts gesetzt werden, das = an ReadingsVal, fehlt ein Leerzeichen
oops Rudi war schneller
VG
Frank
Zeiten im at werden über modifyTimeSpec geändert.
Hier mal ein Beispiel von mir, damit wird eine Zeit zum Einschalten der Kaffemaschine über setList vorgewählt:
define Kaffemaschine_an_du dummy
attr Kaffemaschine_an_du DbLogExclude .*
attr Kaffemaschine_an_du alias Kaffeemaschine Einschaltzeit Vorwahl
attr Kaffemaschine_an_du room Kueche
attr Kaffemaschine_an_du setList state:06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00
attr Kaffemaschine_an_du webCmd state
define Kaffee_an at *07:30 set Kaffeemaschine_Sw on
attr Kaffee_an DbLogExclude .*
attr Kaffee_an alias Kaffeemaschine an
attr Kaffee_an room Kueche
define Kaffemasch_nty notify Kaffemaschine_an_du set Kaffee_an modifyTimeSpec $EVENT
attr Kaffemasch_nty DbLogExclude .*
attr Kaffemasch_nty room Unsorted
VG
Frank
Das ist ja schon mal suuuuuuuuuuper toll :P
Das hatte ich irgendwann schonmal so zum laufen gebracht. Was ich jedoch dann wollte ( und somit verbockte ) war die aufteilung von Stunden und minuten in zwei dummys um von 0-23 Stunden und 0-59 Minuten stufenlos zu schalten.
Hilfst du/ihr mir da auch auf die Sprünge?
Das wird nicht funktionieren da der timespec ein Ausdruck h:min ist und du das im at nicht getrennt setzen kannst mit modifyTimeSpec.
Ich komme halt aus der PHP-Szene, da würde ich das quasi mit
$string = $std . ":" . $Min . ":00";
setzen. Das ist also da nicht möglich. Sehr schade :-(
Auf Perl Ebene bestimmt aber ich hab jetzt keine Zeit das zusammen zu knippern. Im Prinzip 2 dummys mit setList einmal für die Stunden und einmal für die Minuten dann mittels regex bei dummy1 die Minuten abschneiden und beim 2. dummy die Stunden und zum schluss beide wieder mit den gewählten h:min zusammensetzen und ins at schreiben.
Obwohl das garantiert auch einfacher gehen wird, seh ich iMo aber nicht 8)
VG
Frank
Trotzdem danke. Ich schaue mal was ich so zusammen klemptnern kann :-D
Oder sieh dir mal WeekdayTimer an, vlt. gehts damit.
VG
Frank
Ich würde zwei Dummys machen. Einer Stunde einer Minute. Mit setList einfach alle entsprechenden Werte pro Dummy. Also Dummy1 0-12 Dummy2 0-59. Was für ein Aufwand :-)
Dann ein notify auf Dummy2, weil man ja die Minuten zu meist als letztes setzt. In dem notify liest Du denn beide Dummys aus und bastelst daraus Dein string zum setzen des at's
Fertig
Zitat von: CoolTux am 12 Januar 2016, 10:49:06
Ich würde zwei Dummys machen.
Würde ich auch, daher mein Eingangsscript ganz oben, in dem das so war, aber nicht funktionierte :P
Hast Du nicht, daher hat es auch nicht funktioniert. Noch mal lesen bitte was ich geschrieben habe.
lol, wollte ich aber ;D
Ich schau mal was sich machen lässt mit dem Wissensstand
Perlcode für das notify
my $wakeUpTime = Value("dummy1") . ":" . Value(dummy2);
Voraussetzung ist das die eingestellte Stunde oder Minute im state drin steht.
Sollte das bockmist sein möge sich bitte jemand melden. Ich bin da auch noch nicht so fit beim verketten.
Grüße
OOch jetzt warst du schneller, hab gerade mal zwei dummys gebastelt und eine sub welche die Verkettung macht, funktioniert.
sub:
sub
time_set
{
my $tmin = ReadingsVal("Zeit_du_min","state",00);
my $thr = ReadingsVal("Zeit_du_h","state",00);
my $tmin_hr = ($thr . ":" . $tmin);
fhem "set dummy_past $tmin_hr";
}
dummys:
define Zeit_du_h dummy
attr Zeit_du_h DbLogExclude .*
attr Zeit_du_h room Test
attr Zeit_du_h setList state:00,1,2,3,4,5,6,7,8,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
attr Zeit_du_h webCmd state
define Zeit_du_min dummy
attr Zeit_du_min DbLogExclude .*
attr Zeit_du_min room Test
attr Zeit_du_min setList state:5,10,15,20,25,30,35,40,45,50,55,00
attr Zeit_du_min webCmd state
define dummy_past dummy
attr dummy_past DbLogExclude .*
attr dummy_past room Test
Ergebnis steht dann in dummy_past ;)
notify hab ich nicht gebaut, da ich nur den Grundansatz testen wollte
VG
Frank
Du musst ihm natürlich gleich wieder das volle Programm geben ;D
Nee ist schon ok, ich muß gestehen ich weiß nicht ganz ob mein Verketten der Value Ergebnisse so geht. Aber ich habe das aus dem Kopf gemacht. Wollte Code sparen.
Das interessiert mich jetzt aber echt mit dem Verketten, baue das gerade mal in meiner Testumgebung ein. ;D
Code getestet. Geht wie Bombe, bin doch nicht ganz so vergesslich wie ich dachte
my $wakeUpTime = Value( "dummy1" ) . ':' . Value( "dummy2" );
Damit hast Du in $wakeUpTime den kompletten String den Du für das modify Deines at's brauchst.
Grüße
Hat er in dummy_past auch :) :) ;)
VG
Frank
Ihr seit ja krass ;D
So schnell kann ich garnicht verinnerlichen was da abgeht :-)
Bevor ich aber den Faden verliere. Einen zusätzlichen Ein/Aus-Schalter hab ich vordefiniert. Basierend auf dem Kaffeemaschinen-Script von eben.
Will aber irgendwie nicht. Ich tendiere dazu das ich hier den selben Fehler mache wie eben schon.
Mögt ihr mal schauen?
define Wecker_an_aus dummy
attr Wecker_an_aus alias Wecker Ein-/Ausschalten
attr Wecker_an_aus devStateIcon Aus:general_aus@red An:general_an@green
attr Wecker_an_aus group Wecker
attr Wecker_an_aus room Wecker
attr Wecker_an_aus setList state:An,Aus
attr Wecker_an_aus webCmd state:Aus
define Wecker_an_aus_nty_an notify Wecker_an_aus {\
my $OG = Value("Wecker_an_aus")\
if ( $OG == "An" ) {fhem ("set Kaffee_an active")}\
if ( $OG == "Aus") {fhem ("set Kaffee_an inactive")}\
}
@Frank
Ja hat er auch, mir geht es bei meinem Code immer auch darum nichts doppelt zu haben und Code zu sparen. Deswegen mein Versuch. Also nichts gegen Deine Lösung, welche für einen Anfänger sicherlich verständlicher ist.
@accessburn
Nö mag ich nicht. Wir haben Dir Ansätze gegeben womit Du Deine Ursprungsanfrage lösen kannst.
Ausserdem sieht das aus wie direkt in der fhem.cfg editiert, da kann ich eh nicht helfen. Ich mache alles über das Frontend
Grüße
Leon
Na gut.
Dann teste ich halt weiter. Irgendwann krieg ich es schon hin.
Die Stunden und Minuten werde ich dann mal umbauen in euere Lösung und das mit dem zusätzlichen Schalter krieg ich auch hin irgendwie 8)
Stichwort numerische und String Vergleiche, Stichwort zwei: trigger vom notify, sooo und jetzt ein Perl Buch aufschlagen ;)
https://wiki.selfhtml.org/wiki/Perl/Operatoren
@CoolTux
ZitatIch mache alles über das Frontend
Genau, dann würden solch gravierende Syntax Fehler auch nicht passieren
VG
Frank
define Wecker_an_aus_nty_an notify Wecker_an_aus.* {
my $OG = Value("Wecker_an_aus");
fhem "set Kaffee_an active" if( $OG eq "An" );
fhem "set Kaffee_an inactive" if( $OG eq "Aus" );
}
define Wecker_an_aus_nty_an notify Wecker_an_aus.* {
my $OG = Value("Wecker_an_aus");
if ( $OG eq "An" ) {
fhem "set Kaffee_an active";
} else {
fhem "set Kaffee_an inactive";
}
}
Wenn es nicht geht, nicht meine Schuld :)
ZitatWenn es nicht geht, nicht meine Schuld
So lässt sich das ganze aber nicht 1:1 übers Frontend eingeben ;)
Aber zum bearbeiten dessen gibt es ja schon jede Menge Beiträge 8)
@CoolTux
OOch, jetzt hast du alles verraten und ihm das lesen erspart ::)
VG
Frank
Ich hege Hoffnung das er sich über den Code informiert und daran reift. Also der Anfragende, nicht der Code ;D
Zitatnicht der Code
;D ;D
Leicht off :p
Aber ein Bücherwurm bin ich nicht, ich (vorsicht neues Adjektiv) autodidakte!
Ich probiere, blättere nach und probiere erneut... Irgendwann klappt es:
define Kaffemaschine_an_du dummy
attr Kaffemaschine_an_du alias Kaffeemaschine Einschaltzeit Vorwahl
attr Kaffemaschine_an_du room Wecker
attr Kaffemaschine_an_du setList state:06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00
attr Kaffemaschine_an_du webCmd state
define Kaffee_an at *07:30 set Kaffeemaschine_Sw on
attr Kaffee_an alias Kaffeemaschine an
attr Kaffee_an room Wecker
define Kaffemasch_nty notify Kaffemaschine_an_du set Kaffee_an modifyTimeSpec $EVENT
attr Kaffemasch_nty room Wecker
define Wecker_an_aus dummy
attr Wecker_an_aus alias Wecker Ein-/Ausschalten
attr Wecker_an_aus devStateIcon on:general_aus@red off:general_an@green
attr Wecker_an_aus group Wecker
attr Wecker_an_aus room Wecker
attr Wecker_an_aus eventMap on:An off:Aus
attr Wecker_an_aus webCmd An:Aus
define Wecker_an_aus_nty_on notify Wecker_an_aus.on { fhem ("set Kaffee_an active") }
define Wecker_an_aus_nty_of notify Wecker_an_aus.off { fhem ("set Kaffee_an inactive") }
Nur das mit dem trennen von Stunden und Minuten muss noch
Was macht meine Kaffeemaschine jetzt in deinem Code :o
VG
Frank
Leider nicht viel, Kaffee wäre was gutes jetzt.
Die testet bis ich fertig bin. Anschließend (wenn alles funktioniert) degradiere ich deine Kaffeemaschine wieder zum Wecker :)