EDIT: Ab Version 98_WeekdayTimer.pm 6057 2014-06-04 vereinfacht sich die Lösung wie weiter unten in http://forum.fhem.de/index.php/topic,23655.msg176087.html#msg176087 (http://forum.fhem.de/index.php/topic,23655.msg176087.html#msg176087) beschrieben.
Hallo zusammen,
Aufgabe war es, einen (WAF kompatiblen) Enable/Disable Button für zwei WeekdayTimer zu realisieren, die eine einfache Bewässerung steuern. Die Lösung lässt sich natürlich auf alle Objekte übertragen, die das "disable" Attribut haben.
Ich habe das wie folgt gelöst - möglicherweise lässt sich das an der einen oder anderen Ecke auch noch etwas eleganter oder weniger komplex lösen - Feedback ist ausdrücklich erwünscht.
Grundidee: Eine readingsGroup für die Timer mit einem zusätzlichen userReading "active" als Button. Die in der RG hinterlegten commands für den Button setzen bzw. löschen jeweils das Attribut "disable" der Timer. Falls der Timer aktiv ist, wird der nächste Schaltzeitpunkt und Kommando für das geschaltete Device angezeigt, falls inaktiv, wird "disabled" angezeigt.
Kurzversion:
1. zusätzliches userReading "active" für die WeekdayTimer definieren mit den möglichen Werten "enabled" und "disabled"
2. readingsGroup für die WeekdayTimer anlegen mit folgenden readings: "active", "+DEF", "nextUpdate", "nextValue"
3. die Attribute valueFormat, valueIcon und commands wie unten detailliert beschrieben setzen
4. ein zusätzliches jede Minute ausgeführtes at aktualisiert das userReading "active", falls doch einmal das Attribut "disable" manuell für einen Timer verändert wird
Hier die Details:
Punkt 1 - userReading für WeekdayTimer:
attr timer_Wasser_01 userReadings active { return "enabled" if ! ($attr{$hash->{NAME}}{disable}); return "disabled" }
Punkt 2 - readingsGroup definieren:
define rg_Timer_Wasser readingsGroup timer_Wasser_..:active,+DEF,nextUpdate,nextValue
Das interne Attribut "+DEF" zeigt die definierten Schaltpunkte an - der in +DEF enthaltene Name des WeekdayTimer wird mit Hilfe von valueFormat noch ausgeblendet.
Punkt 3 - Attribute für die RG:
attr rg_Timer_Wasser valueFormat { my @text = split(" ", $VALUE); shift @text; if ( $READING =~ m/.*DEF/ ) { return join(" ", @text) }; return $VALUE if (ReadingsVal($DEVICE, "active", "enabled") eq "enabled"); return "disabled"; }
Hiermit wird für das Reading "+DEF" wie oben erwähnt der voranstehende Name des WeekdayTimer entfernt und nur die definierten Schaltpunkte angezeigt. Die Readings nextUpdate und nextValue werden nur angezeigt, wenn der Timer "enabled" ist - sonst wird "disabled" ausgegeben.
Das Kommando kann so nicht direkt eingegeben werden. Sonst tritt der u.a. Fehler auf: http://forum.fhem.de/index.php/topic,23655.msg169379.html#msg169379
Über die Detailsansicht des Webfrontends kann das Attribut valueFormat aber mit dem String:
{ my @text = split(" ", $VALUE); shift @text; if ( $READING =~ m/.*DEF/ ) { return join(" ", @text) }; return $VALUE if (ReadingsVal($DEVICE, "active", "enabled") eq "enabled"); return "disabled"; }
angelegt werden.
attr rg_Timer_Wasser valueIcon { 'active.enabled' => 'Restart', 'active.disabled' => 'Shutdown' }
Stellt das Reading "active" je nach Zustand enabled/disabled als roten (Default Icon Shutdown) bzw. grünen (Default Icon Restart) da.
attr rg_Timer_Wasser commands { 'active.enabled' => 'attr $DEVICE disable 1; setreading $DEVICE active disabled', 'active.disabled' => 'attr $DEVICE disable 0; setreading $DEVICE active enabled' }
Definiert die Aktionen, die beim Drücken auf den Button ausgelöst werden. Wenn der Timer "enabled" ist, führt ein Drücken des Button zum Setzen des Attributs disable, gleichzeitig wird das UserReading active auf "disabled" aktualisiert. Analog der Fall für Button Drücken, wenn "disabled". Das setreading Kommando sorgt auch dafür, daß der neue Zustand sofort im Frontend dargestellt wird.
Punkt 4 - Zusätzliches at Kommando (Hilfskonstrukt)
define update_timer_status at +*00:01 { my $timer;
foreach $timer ('timer_Wasser_01', 'timer_Wasser_02')
{ if ($attr{$timer}{disable}) { fhem "setreading $timer active disabled" }
else { fhem "setreading $timer active enabled" }
}
}
Dieser at sorgt ggf. minütlich für einen Update des UserReadings "active", falls manuell das Attribut "disable" für einen Timer verändert wird. Diese Krücke benötige ich, da mir kein Weg bekannt ist, einen Trigger auf das Setzen eines Attributs zu definieren.
Fertig sieht die readingGroup "Scheduling" in der Gruppe "Bewässerung" dann so aus - siehe Screenshot.
Gruss
Tobias
Edit: attr Kommandos korrigiert. Hinweis zum valueFormat.
magst du das nicht so schön beschrieben ins wiki stellen.
gruss
andre
Habe das mal versucht nachzuvollziehen: Es kommen leider mehrere Fehlermeldungen:
Unknown command attribute, try help.
Unknown command shift, try help.
IF: no left bracket: { return join(" ", @text) }
Unknown command return, try help.
Unknown command return, try help.
Unknown command }, try help.
1.) attribute sollte wohl attr heißen
Zitat von: T.ihmann am 17 Mai 2014, 09:31:59
1.) attribute sollte wohl attr heißen
Ja klar - danke für den Hinweis - hab ich oben korrigiert.
Tobias
Die Fehlermeldung ist weg, aber bei Punkt 3
attr rg_Timer_Wasser valueFormat { my @text = split(" ", $VALUE); shift @text; if ( $READING =~ m/.*DEF/ ) { return join(" ", @text) }; return $VALUE if (ReadingsVal($DEVICE, "active", "enabled") eq "enabled"); return "disabled"; }
kommt immer noch diese Fehlermeldung
Unknown command shift, try help.
IF: no left bracket: { return join(" ", @text) }
Unknown command return, try help.
Unknown command return, try help.
Unknown command }, try help.
Da scheint noch etwas nicht zu stimmen. Ich habe das mal versucht zu analysieren, sind aber mir zu viele Verschachtelungen
Zitat von: T.ihmann am 17 Mai 2014, 11:30:14
Die Fehlermeldung ist weg, aber bei Punkt 3
attr rg_Timer_Wasser valueFormat { my @text = split(" ", $VALUE); shift @text; if ( $READING =~ m/.*DEF/ ) { return join(" ", @text) }; return $VALUE if (ReadingsVal($DEVICE, "active", "enabled") eq "enabled"); return "disabled"; }
kommt immer noch diese Fehlermeldung
Unknown command shift, try help.
IF: no left bracket: { return join(" ", @text) }
...
Ich habe keine Ahnung, warum sich da das IF (nicht if!!) Modul einmischt...
Was jedoch funktioniert ist, das Attribut über das WebFrontend anzulegen - d.h. in der Detailansicht zur angelegten readingsGroup aus dem Pull-Down-Menu bei attr "valueFormat" auswählen und dann den String
{ my @text = split(" ", $VALUE); shift @text; if ( $READING =~ m/.*DEF/ ) { return join(" ", @text) }; return $VALUE if (ReadingsVal($DEVICE, "active", "enabled") eq "enabled"); return "disabled"; }
in das leere Eingabefeld dahinter kopieren und mit Druck auf den "attr" Button abschliessen.
Gruss
Tobias
So funktioniert es. Danke
Das gefällt mir. Damit könnte ich die Rollladenschaltung auf dem Frontend bisschen schöner machen. Ich habe für Wochenende und Wochentag unterschiedliche Schaltzeiten, leider zeigt Weekdaytimer immer nur "active" oder "inactive" an. Dabei wären die Schaltzeiten viel Interessanter :)
Vielleicht kann das ja so auch irgendwann mal direkt in Weekdaytimer eingebaut werden?
Ich finde das minütliche Abfrage des Readings etwas unglücklich auf schwachbrüstigen CPUs ;)
Grundsätzlich fände ich es für manche Device schön, wenn man bestimmte Readings direkt im frontend platzieren könnte (ohne den Umweg mit Readingsgroup)
So ein Attribut wie "show_reading_web" oder so...
Gruß
Jens
Hallo Jens,
Dietmar wird beim WeekdayTimer und Heating_Control einige Anpassungen vornehmen, sodaß man zumindest ohne das UserReading und das minütliche Polling auskommen wird (siehe: http://forum.fhem.de/index.php/topic,10011.msg169505.html#msg169505 (http://forum.fhem.de/index.php/topic,10011.msg169505.html#msg169505)).
Sobald diese Änderungen da sind, werde ich obiges HowTo entsprechend aktualisieren - vermutlich wird es aber nicht ohne readingsGroup gehen.
Gruss
Tobias
Wie angekündigt hat Dietmar die Module WeekdayTimer und Heating_Control mit einem set Kommando zum Setzen und Löschen des disable Attributs und einem Reading "disabled" erweitert. Damit vereinfacht sich der Enable/Disable Button für WeekdayTimer ab Version 98_WeekdayTimer.pm 6057 2014-06-04
wie folgt:
Punkt 1 - userReading für WeekdayTimer: - entfällt, da es jetzt ein Standardreading "disabled" gibt
Punkt 2 - readingsGroup definieren:
define rg_Timer_Wasser readingsGroup timer_Wasser_..:disabled,+DEF,<{rg_timer_Wasser_show_conditional($DEVICE)}@disabled>
Das interne Attribut "+DEF" zeigt die definierten Schaltpunkte an - der in +DEF enthaltene Name des WeekdayTimer wird mit Hilfe von valueFormat noch ausgeblendet.
Zusätzlich sorgt die folgende Funktion rg_timer_Wasser_show_conditional in der 99_myUtils.pm dafür, daß das Reading nextUpdate des Timers nur angezeigt wird, wenn der Timer aktiv ist. Ansonsten wird "disabled" angezeigt. Das abschließende @disabled sorgt dafür, daß der LongPoll Mechanismus die Anzeige sofort ändert, wenn der Button betätigt wird.
sub rg_timer_Wasser_show_conditional($)
{
my ($DEVICE) = @_;
return ( ReadingsVal($DEVICE, "disabled", "1") eq "0" )? "Next: ".ReadingsVal($DEVICE, "nextUpdate", "ERROR_next_value") : "disabled";
}
Punkt 3 - Attribute für die RG:
Erläuterung zu den Attributen und Handling siehe den (ersten) Originalpost ganz oben.
attr rg_Timer_Wasser valueFormat { if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE); shift @text; return join(" ", @text) }}
attr rg_Timer_Wasser valueIcon { 'disabled.0' => 'Restart', 'disabled.1' => 'Shutdown' }
attr rg_Timer_Wasser commands { 'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable' }
Punkt 4 - Zusätzliches at Kommando (Hilfskonstrukt) - entfällt, da die Änderung des "disable" Attributs automatisch das "disabled" Reading triggert
Tobias
Zitat von: justme1968 am 16 Mai 2014, 11:48:48
magst du das nicht so schön beschrieben ins wiki stellen.
Done.
http://www.fhemwiki.de/wiki/ReadingsGroup#Enable.2FDisable_Button_am_Beispiel_eines_WeekdayTimer (http://www.fhemwiki.de/wiki/ReadingsGroup#Enable.2FDisable_Button_am_Beispiel_eines_WeekdayTimer)
Tobias
danke!
andre
Guten Abend,
ich habe versucht diese Anleitung mit meinen eingeschränkten Programmierkenntnissen zu implementieren.
http://www.fhemwiki.de/wiki/ReadingsGroup#Enable.2FDisable_Button_am_Beispiel_eines_WeekdayTimer (http://www.fhemwiki.de/wiki/ReadingsGroup#Enable.2FDisable_Button_am_Beispiel_eines_WeekdayTimer)
Nur leider bekomme ich ein komisches Fehlerbild wie ich es im Anhang dargestellt habe.
Hat Jemand eine Idee worann das liegen könnte?
Hier der Auszug aus meinem Config-File an der Stelle an der ich den Weekdaytimer und den Enable/Disable Button definiere.
define Timer.Rollo.EG1 WeekdayTimer EGRollo1 1234567|06:00|rauf
attr Timer.Rollo.EG1 alias Timer_Wohnzimmer
attr Timer.Rollo.EG1 group Timer
attr Timer.Rollo.EG1 room Timer
attr Timer.Rollo.EG1 devStateIcon rauf:black_up.png runter:black_down.png
attr Timer.Rollo.EG1 icon timer
attr Timer.Rollo.EG1 sortby 1
define rg_timer_Rollo readingsGroup Timer.Rollo.EG1:disabled,+DEF,<{rg_timer_Rollo_show_conditional($DEVICE,"nextUpdate")}@disabled>,<{rg_timer_Rollo_show_conditional($DEVICE,"nextValue")}@disabled>
attr rg_timer_Rollo valueFormat if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE); shift @text; return join(" ", @text) }
attr rg_timer_Rollo valueIcon {'disabled.0' => 'timer_on', 'disabled.1' => 'timer_off'}
attr rg_timer_Rollo commands {'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable'}
attr rg_timer_Rollo group Timer
attr rg_timer_Rollo room Timer
attr rg_timer_Rollo sortby 2
Auszug aus der 99_myUtils.pm
sub rg_timer_Rollo_show_conditional($$)
{
my ($DEVICE,$READING) = @_;
return ( ReadingsVal($DEVICE, "disabled", "1") eq "0" )?
ReadingsVal($DEVICE, $READING, "reading_undef") : "disabled";
}
Weiterhin kommt nach dem rereadcfg folgende Fehlermeldung
ZitatUnknown command shift, try help.
Unknown command return, try help.
Vielen Dank für eure Unterstützung
Tipetan
du musst auf jeden fall valueFormat in { } einschliessen:{if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE); shift @text; return join(" ", @text) } }
den rest habe ich mir nicht weiter angeschaut.
gruss
andre
Hallo,
danke für den Tipp. Das war noch ein altes Rudiment aus meiner Phase: Ich Probiere erst mal selber!
Ich habe die geschweiften klammern nun gesetzt aber ohne Erfolg. Die Geschweiften Klammer tauchen jetzt ebenfalls mit auf.
Noch weitere Ideen?
Gruß
Tipetan
Hallo Tipetan,
schau dir mal meine Antwort #5 ( http://forum.fhem.de/index.php/topic,23655.msg169379.html#msg169379 (http://forum.fhem.de/index.php/topic,23655.msg169379.html#msg169379) ) weiter oben im Thread an.
Die Attribute definierst Du am besten über das FHEM Webfrontend und _NICHT_ durch direktes Einsetzen in die fhem.cfg. Andernfalls müssen nämlich einige Semikolons und ggf. Klammern verdoppelt werden - siehe den Abschnitt Perl Specials in der Command Ref.
Hier nur zum Vergleich trotzdem meinen Abschnitt aus der fhem.cfg:
define rg_timer_Wasser readingsGroup timer_Wasser_..:disabled,+DEF,<{rg_timer_Wasser_show_conditional($DEVICE,"nextUpdate")}@disabled>,<{rg_timer_Wasser_show_conditional($DEVICE,"nextValue")}@disabled>
attr rg_timer_Wasser alias Scheduling
attr rg_timer_Wasser commands { 'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable' }
attr rg_timer_Wasser group Bewässerung
attr rg_timer_Wasser notime 1
attr rg_timer_Wasser room Terrasse
attr rg_timer_Wasser sortDevices 1
attr rg_timer_Wasser style style="border:0px;;background:none;;box-shadow:none"
attr rg_timer_Wasser valueFormat { if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE);; shift @text;; return join(" ", @text) }}
attr rg_timer_Wasser valueIcon { 'disabled.0' => 'Restart', 'disabled.1' => 'Shutdown' }
Das direkte Editieren der fhem.cfg (und wieder Einlesen mit rereadcfg ) ist nicht nur wegen der "Perl Specials" selten eine gute Idee. Siehe hierzu unzählige Diskussionen im Forum.... Wenn doch, sollte man zumindest sehr genau wissen, was man tut...
Gruss
Tobias
Hallo,
das würde ich gerne probieren aber der Bereich zum einfügen von Attributen ist nicht da? Siehe Anhang.
Die Updates sind alle auf dem neusten Stand.
Weißt du warum er nicht da ist?
Gruß
Tipetan
Hallo,
Fortschritt! Es lag am Internet Explorer. Ich hab dan mal den Firefox genommen und er hat alles richtig dargestellt.
Dann habe ich die Attribute über das Frontend eingegeben und es zeigte sich zumindest eine Änderung. der Code war den Schaltzeiten gewichen.
Icons sehe ich leider noch nicht obwohl sie unter \fhem\www\images\Default\ vorhanden sind.
Ne Idee?
Gute Abend
Zitat von: Tipetan am 08 Oktober 2014, 21:57:54
Weißt du warum er nicht da ist?
Sorry - keine Ahnung, wie sowas passieren kann.
Vorschlag: Du löscht nochmal die komplette RG rg_timer_Rollo aus deiner Konfiguration raus.
delete rg_timer_Rollo
Dann nur das "define" Kommando in der Eingabezeile im FHEMWeb Frontend eingeben, um die RG neu anzulegen.
Und dann solltest Du auch die Attribute über das Frontend eingeben können.
Zum Schluss ein save, um die Konfiguration zu sichern. Wenn Du am Ende partout die Konfig zu der RG in eine separate include cfg Datei auslagern möchtest, kannst Du die entsprechenden Zeilen - nachdem alles funktioniert - aus der fhem.cfg ausschneiden.
Gruss
Tobias
Zitat von: Tipetan am 08 Oktober 2014, 22:24:54
Icons sehe ich leider noch nicht obwohl sie unter \fhem\www\images\Default\ vorhanden sind.
Ne Idee?
Schwierig mit so wenigen Informationen....
- wie heissen die genauen Dateinamen der Icons ? => müssten timer_off.png und timer_on.png sein wenn du die Konfig weiter oben nicht verändert hast
- du musst FHEM neu starten, wenn du die Icon-Dateien erst nach FHEM-Start in das obige Verzeichnis kopiert hast, nach meiner Erfahrung zieht FHEM "dynamisch" keine neuen Icons an
Tobias
Zitatdu musst FHEM neu starten, wenn du die Icon-Dateien erst nach FHEM-Start in das obige Verzeichnis kopiert hast, nach meiner Erfahrung zieht FHEM "dynamisch" keine neuen Icons an
Dagegen sollte der Befehl rereadicons http://fhem.de/commandref#FHEMWEB ohne Neustart helfen.
Zitat von: krikan am 08 Oktober 2014, 22:44:21
Dagegen sollte der Befehl rereadicons http://fhem.de/commandref#FHEMWEB ohne Neustart helfen.
Danke! Wieder 'was gelernt... :)
Guten Abend,
hab noch viel probiert und am Ende lag es daran, das das Attribut Disable im Timer nicht angelegt war.
define Timer.Rollo.EG1 WeekdayTimer EGRollo1 1234567|06:00|rauf 1234567|19:26|runter
attr Timer.Rollo.EG1 alias Timer_Wohnzimmer
attr Timer.Rollo.EG1 devStateIcon rauf:black_up.png runter:black_down.png
attr Timer.Rollo.EG1 group Timer_Wohnzimmer
attr Timer.Rollo.EG1 icon timer
attr Timer.Rollo.EG1 room Timer
attr Timer.Rollo.EG1 disable 0
attr Timer.Rollo.EG1 sortby 1
define rg.Timer.Rollo.EG1 readingsGroup Timer.Rollo.EG1:disabled,+DEF,<{rg_timer_Rollo_show_conditional($DEVICE,"nextUpdate")}@disabled>,<{rg_timer_Rollo_show_conditional($DEVICE,"nextValue")}@disabled>
attr rg.Timer.Rollo.EG1 commands { 'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable' }
attr rg.Timer.Rollo.EG1 alias Timer Wohnzimmer
attr rg.Timer.Rollo.EG1 group Timer_Wohnzimmer
attr rg.Timer.Rollo.EG1 sortby 2
attr rg.Timer.Rollo.EG1 icon timer
attr rg.Timer.Rollo.EG1 room Timer
attr rg.Timer.Rollo.EG1 valueFormat { if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE);; shift @text;; return join(" ", @text) }}
attr rg.Timer.Rollo.EG1 valueIcon { 'disabled.0' => 'timer_on', 'disabled.1' => 'timer_off' }
Weiß jemand wie ich Gruppennamen und/oder Devicenamen (der Name oder alias vom Define) ausblenden kann.
Vielen dank für eure Unterstützung
Wenn jemand Interesse an meinen Timericons hat. Im Anhang.
Gute Nacht
Zitat von: Tipetan am 09 Oktober 2014, 23:01:21
Weiß jemand wie ich Gruppennamen und/oder Devicenamen (der Name oder alias vom Define) ausblenden kann.
=> Attribute noheading und/oder nonames der readingsGroup. Siehe CommandRef.
Gruss
Tobias
Hallo, was läuft hier noch flasch? Ich wollte alle Schaltzeiten in der readingGroup anzeigen lassen sowie auch aktiv bzw. inaktiv schalten können. Es werden die Readings der Timer welche mit WTimer_ beginnen abgefragt. Ich habe dazu die Definition wie folgt geändert .....readingsGroup WTimer_.*:disabled.............
Leider bekomme ich jetzt folgende Anzeige, siehe Bild.
Kann mir jemand bitte helfen und mit sagen was da noch falsch läuft.
meine Config
define rg_WTimer readingsGroup WTimer_.*:disabled,+DEF,<{rg_WTimer_show_conditional($DEVICE,"nextUpdate")}@disabled>,<{rg_WTimer_show_conditional($DEVICE,"nextValue")}@disabled>
attr rg_WTimer commands { 'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable' }
attr rg_WTimer room Timer
attr rg_WTimer valueFormat { if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE)
attr rg_WTimer valueIcon { 'disabled.0' => 'Restart', 'disabled.1' => 'Shutdown' }
Eintag in der 99_myUtils
sub rg_WTimer_show_conditional($$)
{
my ($DEVICE,$READING) = @_;
return ( ReadingsVal($DEVICE, "disabled", "1") eq "0" )?
ReadingsVal($DEVICE, $READING, "reading_undef") : "disabled";
}
Grüße
cerberus
Alles gut, habe die Lösung hier im Forum schon gefunden :)
das maskieren der ; war bei valueFormat falsch, sollte im wiki mal geändert werden.
Als Tipp noch, man könnte man das define auch so schreiben, so mache ich das.
define rg_WTimer readingsGroup TYPE=WeekdayTimer:disabled.............
richtig ist es so
define rg_WTimer readingsGroup TYPE=WeekdayTimer:disabled,+DEF,<{rg_WTimer_show_conditional($DEVICE,"nextUpdate")}@disabled>,<{rg_WTimer_show_conditional($DEVICE,"nextValue")}@disabled>
attr rg_WTimer commands { 'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable' }
attr rg_WTimer room Timer
attr rg_WTimer valueFormat { if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE);; shift @text;; return join(" ", @text) }}
attr rg_WTimer valueIcon { 'disabled.0' => 'Restart', 'disabled.1' => 'Shutdown' }
Zitat von: cerberus am 14 November 2014, 09:48:06
Hallo, was läuft hier noch flasch? Ich wollte alle Schaltzeiten in der readingGroup anzeigen lassen sowie auch aktiv bzw. inaktiv schalten können. Es werden die Readings der Timer welche mit WTimer_ beginnen abgefragt. Ich habe dazu die Definition wie folgt geändert .....readingsGroup WTimer_.*:disabled.............
Leider bekomme ich jetzt folgende Anzeige, siehe Bild.
Kann mir jemand bitte helfen und mit sagen was da noch falsch läuft.
meine Config
define rg_WTimer readingsGroup WTimer_.*:disabled,+DEF,<{rg_WTimer_show_conditional($DEVICE,"nextUpdate")}@disabled>,<{rg_WTimer_show_conditional($DEVICE,"nextValue")}@disabled>
attr rg_WTimer commands { 'disabled.0' => 'set $DEVICE disable', 'disabled.1' => 'set $DEVICE enable' }
attr rg_WTimer room Timer
attr rg_WTimer valueFormat { if ( $READING =~ m/.*DEF/ ) { my @text = split(" ", $VALUE)
attr rg_WTimer valueIcon { 'disabled.0' => 'Restart', 'disabled.1' => 'Shutdown' }
Eintag in der 99_myUtils
sub rg_WTimer_show_conditional($$)
{
my ($DEVICE,$READING) = @_;
return ( ReadingsVal($DEVICE, "disabled", "1") eq "0" )?
ReadingsVal($DEVICE, $READING, "reading_undef") : "disabled";
}
Grüße
cerberus
das was im wiki steht ist so korrekt. inklusive diesem hinweis:
ZitatBitte beachten: die folgenden Beispiele enthalten keine Maskierungen oder Verdoppelungen für ; und Zeilenende, sondern sind so angegeben, wie sie im Web Interface im Befehls-Eingabefeld oder nach Klick auf DEF eingegeben werden. Beim manuellen Einfügen in eine Konfigurationsdatei sind diese Maskierungen oder Verdoppelungen natürlich vorzunehmen.
gruss
andre
Sorry, du hast Recht.
mit dem nächsten update wird es möglich sein in einer readingGroup attribute auch direkt über commands zu setzen. die syntax ist dann wie bei den set kommandos auch:define <rg> readingsGroup TYPE=WeekdayTimer:...,?disable,...
attr <rg> commands { disable => 'disable:' }
im wiki gibt es ein beispiel dazu.
gruss
andre
Ist das denn OK das beim betätigen des Schalters z.B. auf meinem Tablett, parallel dazu im fhem Frontend angezeigt wird Konfiguration speichern.
Also oben bei Save config erscheint sofort ein rotes Fragezeichen.
Wie kann ich dazu angezeigten Status Ändern. Das "disabled" habe ich in der 99_myUtils in deaktiviert umbenannt aber das "on" kriege ich nicht geändert.
Zitat von: tomspatz am 05 März 2016, 17:59:02
Ist das denn OK das beim betätigen des Schalters z.B. auf meinem Tablett, parallel dazu im fhem Frontend angezeigt wird Konfiguration speichern.
Also oben bei Save config erscheint sofort ein rotes Fragezeichen.
Ja, das ist ok. Das Drücken des Schalters bewirkt das Setzen eines Attributs, was einer Konfigurationsänderung entspricht. Das siehst du, wenn du auf das rote Fragezeichen klickst.
Nabend...
anstatt erstmal zu suchen :) (hier gibts ja immer schon Lösungen, die ich mir selber erstmal lange überlege...) habe ich folgendes gebaut:
4 WeekdayTimer für meine GartenBewässerung = GB_Kreis_1_Timer, GB_Kreis_2_Timer, GB_Kreis_3_Timer und GB_Kreis_4_Timer
funktionieren einwandfrei.
Jetzt wollte ich einen Schalter haben, mit denen ich alle Kreise enable/disable kann.
Ich hatte keinen Bock mehr, das immer von Hand für jeden Kreis zu machen und zu speichern, wenn ich es mal nicht will und ich will diesen neuen Schalter später in Abhängigkeit von "es regnet" oder einen Feuchtigkeitssensor im Rasen einfach schalten und dann die Timer aussetzen.
Ich habe also ein DummyDevice Gartenbewässerung
define Gatenbewaesserung dummy
attr Gatenbewaesserung eventMap on:enable off:disable
attr Gatenbewaesserung room GARTEN
attr Gatenbewaesserung webCmd on:off
und ein Notify für alle Kreise
define notify_Gatenbewaesserung notify Gatenbewaesserung set (GB_Kreis_._Timer) $EVENT
attr notify_Gatenbewaesserung room GARTEN,STEUERUNG
Das funktioniert auch...
Der Schalter Gartenbewässerung kann ich ein und ausschalten, über eventMap wirds in enable/disable umgesetzt und das Notify setzt das in allen Timern.
Aber jetzt kommt in der FHEM Oberfläche immer das rote Fragenzeichen zum Speichern der Konfiguration.
Ist das jetzt falsch? Wenn ja was... oder kann ich das ignorieren?
Ich finde meinen "3Zeiler" eigentlich sehr einfach und überschaubar...
Danke für eurer Feedback.
VG
René
Hallo Fireball,
Deine Änderungs ist nur "temporär". Nach einem FHEM-Neustart wäre Deine Einstellung weg. Du must auch noch den Befehl "save" absetzen.
Viele Grüße
Jürgen
Hi Jürgen,
danke für die späte Antwort!!! Works as designed!
define notify_Gatenbewaesserung notify Gatenbewaesserung set (GB_Kreis_._Timer) $EVENT;; save
attr notify_Gatenbewaesserung room GARTEN
So gehts => einfach in DEF des Notify hinter dem set noch ein ; save (IM DEF ist es ein ; im fhem.cfg ;; )
Das hats gebracht.
Danke!!!
Schönes WE
René
Hallo Jürgen, all,
mein Problem ist wieder da?! Wenn ich meine Dummy "Gartenbewaesserung" einschalte oder ausschalte, dann werden die WeekTimer mit set WeekTimer disable oder enable gesetzt. Danach muss ich aber noch den Befehl save absetzen, damit das rote Fragezeichen verschwindet... lief jetzt ein Jahr lang einwandfrei... seit ich auf meinem P4 bin kommt es wieder... jemand ne Idee??
VG
René
Unter "global" autosave = 1 ?
Viele Grüße
Jürgen
Hallo Jürgen,
stimmt, mein autosave war auf 0, ich habe es auf 1 gesetzt, nun geht das wieder. Es ist oder war mir aber nicht bewusst, dass ich das jemals gesetzt hatte... viell einfach zu lange her... aber in der Doku steht auch, dass es beim reboot wieder verloren geht..
ZitatAuch wenn man autosave auf 1 setzt, wird es automatisch beim Starten wieder auf 0 gesetzt, falls beim Starten was schiefgegangen ist, damit ein automatisches Save (wie auch manche Module das ungefragt machen) nicht zum Verlust von Teilen der Konfiguration führt.
Dann muss ich da wohl immer wieder aufpassen!??!
VG