FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: tpm88 am 16 Mai 2014, 10:49:27

Titel: Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 16 Mai 2014, 10:49:27
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.
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: justme1968 am 16 Mai 2014, 11:48:48
magst du das nicht so schön beschrieben ins wiki stellen.

gruss
  andre
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: T.ihmann am 17 Mai 2014, 09:31:59
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 17 Mai 2014, 10:56:57
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag 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) }
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 17 Mai 2014, 11:52:55
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: T.ihmann am 17 Mai 2014, 14:44:49
So funktioniert es. Danke
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: Jens_B am 19 Mai 2014, 14:14:52
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 19 Mai 2014, 18:10:35
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 11 Juni 2014, 22:14:16
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 12 Juni 2014, 14:17:58
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: justme1968 am 14 Juni 2014, 22:34:08
danke!

  andre
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: Tipetan am 07 Oktober 2014, 21:03:45
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

Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: justme1968 am 07 Oktober 2014, 22:03:42
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: Tipetan am 07 Oktober 2014, 22:13:34
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 07 Oktober 2014, 23:03:38
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: Tipetan am 08 Oktober 2014, 21:57:54
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: Tipetan am 08 Oktober 2014, 22:24:54
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 08 Oktober 2014, 22:28:57
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 08 Oktober 2014, 22:38:19
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: krikan am 08 Oktober 2014, 22:44:21
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.
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 08 Oktober 2014, 22:46:25
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...  :)
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: Tipetan am 09 Oktober 2014, 23:01:21
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 09 Oktober 2014, 23:20:06
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag 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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: cerberus am 14 November 2014, 10:06:29
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: justme1968 am 14 November 2014, 16:32:15
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: cerberus am 14 November 2014, 21:11:08
Sorry, du hast Recht.
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: justme1968 am 16 Juni 2015, 12:44:41
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag 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.

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.
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: tpm88 am 05 März 2016, 22:09:14
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.
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: fireball am 25 Mai 2019, 22:12:27
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é
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: juemuc am 25 Mai 2019, 22:40:22
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
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: fireball am 25 Mai 2019, 23:20:29
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é
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: fireball am 20 Mai 2020, 20:54:23
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é
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: juemuc am 20 Mai 2020, 21:01:55
Unter "global" autosave = 1 ?

Viele Grüße
Jürgen
Titel: Antw:Enable/Disable Button für WeekdayTimer via readingsGroup
Beitrag von: fireball am 24 Mai 2020, 13:13:54
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