hallo,
habe mehrere Timer gesetzt, Bsp:
define Heizung_anschalten at *06:00:00 set Heizung_Toilette_EG,Heizung_Kueche,Heizung_Bad value 50
attr Heizung_anschalten alias Heizung anschalten
attr Heizung_anschalten group Timer
attr Heizung_anschalten room Timer,Übersicht
Anzeige auf der Webseite ist sauber und zeigt "Heizung anschalten" an. Allerdings folgt dann ein "Next:" mit der Uhrzeit des nächsten Events.
Lässt sich dieses "Next" irgendwie anpassen wie z.B. mit dem alias attribut des define parts?
Gruss
itchako
such mal nach stateFormat
hallo Dietmar,
hab mir die Doku von stateFormat angesehen. Vorab, ich habe bis dato nicht in Perl programmiert, verstehe aber prinzipiell was stateFormat hier machen soll ...
Hier die Internals des At-Timers (wie heisst das Teil eigentlich richtig in "FHEM Sprache"??? .. ;-)):
Internals:
DEF *06:00:00 set Heizung_Toilette_EG,Heizung_Kueche,Heizung_Bad value 50
NAME Heizung_anschalten
NR 24
REP -1
STATE Next: 06:00:00
TRIGGERTIME 1412827200
TRIGGERTIME_FMT 2014-10-09 06:00:00
TYPE at
Attributes:
alias Heizung anschalten
group Timer
room Timer,Übersicht
Der "Next" Text ist also im STATE reading des At-Events und sollte dann mit stateFormat und der korrekten sprintf Funktion ausgetauscht/updated werden.
Da ich mehrfach gelesen habe man soll die fhem.cfg nicht direkt händisch ändern, hab ich es über die Commandline in der WebGUI versucht und zwar mit folgendem Eintrag (ich weiss das die sprintf argumente nicht stimmen, wollte nur sehen was prinzipiell passiert):
attr Heizung_anschalten stateFormat { sprintf("%s", ReadingsVal("Heizung_anschalten","STATE",0)) ;; }
FHEM sagt mir aber bereits hier, dass dieses Attribut nicht unterstützt wird ...
Kann es sein das stateFormat nur bei physischen Devices funktioniert und nicht bei at-Events?
Oder ist der Ansatz mit der Commandline prinzipiell falsch und ich komme ums programmieren nicht herum? Falls letzteres der Fall ist: Gibt es sowas wie eine "Einführung für angehende FHEM Programmierer"?
Gruss
Jakob
Das at hat kein Reading. Somit wird stateFormat auch nicht funktionieren, da stateFormat nur mit Readings gefüttert werden kann. Man könnte nun denken, dass ein UserReading helfen könnte. Aber diese würde ohne eine Reading, dass aktualisiert wird, nicht triggern.
ZitatFHEM sagt mir aber bereits hier, dass dieses Attribut nicht unterstützt wird ...
du kannst dir das attribut über attr global userattr auch für notifys freischalten.
gruss frank
Das hilft aber nicht, wenn das at (um das geht es hier, nicht um ein notify) kein Reading hat mit dem man stateFormat füttern könnte.
Zitat von: karl0123 am 08 Oktober 2014, 13:43:36
Das hilft aber nicht, wenn das at (um das geht es hier, nicht um ein notify) kein Reading hat mit dem man stateFormat füttern könnte.
kann man doch mit setreading einfügen.
gruss frank
Dann müsste man ja jedem at ein setreading mit der nächsten Ausführungszeit zufügen. Der neue STATE kann ja nur angezeigt werden, wenn er durch ein Reading getriggert wird. Ein einfaches setreading hilft da nicht.
wenn sich das at wiederholt, wie in deinem fall, müsste dies funktionieren (def des at):
*06:00:00 {
fhem("set Heizung_Toilette_EG,Heizung_Kueche,Heizung_Bad value 50");
fhem('define my_at at +00:00:01 {my $myState = InternalVal("Heizung_anschalten","NTM","???");;fhem("setreading Heizung_anschalten myState $myState");;}');
}
dadurch wird ein reading myState im at erzeugt, dass dann im stateformat genutzt werden kann. zb:
attr Heizung_anschalten stateFormat die nächste aktion ist um myState
hoffentlich kein schreibfehler. bei einem at bei mir hat es funktioniert. der eigene state ist natürlich erst nach der ersten ausführung des at vorhanden.
gruss frank
Das ist ja das, was ich oben beschreibe. Ob es aber wirklich sinnvoll ist so einen Overhead in jedem at zu haben, damit das stateFormat funktioniert, halte ich für sehr fraglich.
die frage war ja ob "möglich". nicht ob "sinnvoll". :)
gruss frank
hi und zunächst Merci!
Den ersten codeschnipsel hab ich jetzt ins DEF genommen und modify gedrückt, schein auch angenommen zu sein.
Jedenfalls kriege ich keine Fehlermeldungen.
Wie kriege ich aber die attr Zeile rein? In der Weboberfläche mit dem attr Button ist das Attribut nicht gelistet und somit nicht auswählbar.... Wenn ich es im Eingabefeld eingebe oder direkt mit nem Editor in die fhem.cfg eintrage kriege ich immer:
Heizung_anschalten: unknown attribute stateFormat. Type 'attr Heizung_anschalten ?' for a detailed list.
Gruss
Jakob
Hallo,
das Attribut zur liste der userattr bei global hinzufügen.
Dann solltest du das auch auswählen können.
Lässt sich über das Frontend eintragen ;)
Grüße
merci Puschel, habs grad selbst gemerkt aber direkt in die fhem.cfg eingetragen.... :)
Wollte grade meinen Beitrag löschen aber Du warst schneller...
Bin schon sehr gespannt ob ich morgen im kalten oder warmen Badezimmer duschen werde ... :) :) :)
hmm, konnte nicht warten und hab die Zeit umgestellt. Der Text ist geändert aber anstatt der Uhrzeit stehen da jetzt drei Fragezeichen... mal checken ob ich's selbst finde ... ROTFL... Aber die Heizungsventile sind jedenfalls auf 50% gegangen, von daher gibt's schonmal keine kalten Füsse ... 8)
Gruss
j
Hallo,
hast du direkt in der fhem.cfg die Zeit geändert?
Lass das und änder das DEF - das funktioniert auf alle Fälle inkl. der Anzeige ;)
Grüße
hab ich auch gemacht, trotzdem die drei Fragezeichen nach dem korrekten Text.
Ich denke das kommt von der Zeile:
InternalVal("Heizung_anschalten","NTM","???")
Gemaess Doku müsste ich doch das "NTM" irgendwo in den Internals finden.... oder sehe ich das falsch?
Und da FHEM kein NTM findet wird der default-Wert, hier halt die Fragezeichen gesetzt. Vermute ich jedenfalls.
Wenn ich da 06:00:00 reinschreibe, funkt es wie gewollt, da die Zeit (bei mir jedenfalls zunächst) immer gleich bleibt.
Hier nochmal das Listing (alles über die Oberfläche eingegeben):
Internals:
DEF *20:05:00 {
fhem("set Heizung_Toilette_EG,Heizung_Kueche,Heizung_Bad value 50");
fhem('define my_at at +00:00:01 {my $myState = InternalVal("Heizung_anschalten","NTM","???");;fhem("setreading Heizung_anschalten myState $myState");;}');
}
NAME Heizung_anschalten
NR 24
REP -1
STATE Aktion ist um ???
TRIGGERTIME 1412964300
TRIGGERTIME_FMT 2014-10-10 20:05:00
TYPE at
Readings:
2014-10-09 20:05:01 myState ???
Attributes:
alias Heizung anschalten
group Timer
room Timer,Übersicht
stateFormat Aktion ist um myState
Ich spiel mal ein bisschen mit "Triggertime_FMT"...
Und 5 Minuten später: Funkt wie gedacht, ich such mir jetzt noch den Perl String-Befehl raus um nur die Uhrzeit zu selektieren und dann sitzt das wie Lack...! Gelöst!
Vielen Dank für Euren Support und Eure Geduld!
Gruss
j
ZitatDer Text ist geändert aber anstatt der Uhrzeit stehen da jetzt drei Fragezeichen... mal checken ob ich's selbst finde ... ROTFL... Aber die Heizungsventile sind jedenfalls auf 50% gegangen, von daher gibt's schonmal keine kalten Füsse ... 8)
die fragezeichen kommen von hier, wenn das reading NTM undefiniert ist. entweder ist es nach dem ersten durchlauf des at vorhanden, sonst musst du hier ein anderes internal-reading nutzen.
InternalVal("Heizung_anschalten","NTM","???")
gruss frank
und wieder was gelernt, nämlich wie man den "Code" einfügt damit die Forums-Software aus den drei Fragezeichen keinen Smiley macht ... :)
Wie gesagt gelöst, ich danke Dir!
Gruss
j