FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: itchako am 07 Oktober 2014, 20:17:12

Titel: Gelöst: Übersetzung von "Next:" bei at möglich?
Beitrag von: itchako am 07 Oktober 2014, 20:17:12
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: Dietmar63 am 07 Oktober 2014, 20:23:09
such mal nach stateFormat
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: itchako am 08 Oktober 2014, 11:50:31
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: karl0123 am 08 Oktober 2014, 11:56:17
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.
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: frank am 08 Oktober 2014, 13:04:18
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag 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.
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: frank am 08 Oktober 2014, 14:38:21
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: karl0123 am 08 Oktober 2014, 14:41:15
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.
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: frank am 08 Oktober 2014, 18:04:02
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: karl0123 am 08 Oktober 2014, 19:01:50
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.
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: frank am 08 Oktober 2014, 19:18:11
die frage war ja ob "möglich". nicht ob "sinnvoll".  :)

gruss frank
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: itchako am 09 Oktober 2014, 19:35:32
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: Puschel74 am 09 Oktober 2014, 19:37:49
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: itchako am 09 Oktober 2014, 19:41:44
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
Titel: Antw:Übersetzung von "Next:" bei at möglich?
Beitrag von: Puschel74 am 09 Oktober 2014, 19:56:47
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
Titel: Übersetzung von "Next:" bei at möglich?
Beitrag von: itchako am 09 Oktober 2014, 20:15:51
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
Titel: Antw:Gelöst: Übersetzung von "Next:" bei at möglich?
Beitrag von: frank am 09 Oktober 2014, 20:54:07
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
Titel: Antw:Gelöst: Übersetzung von "Next:" bei at möglich?
Beitrag von: itchako am 09 Oktober 2014, 21:34:31
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