Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

justme1968

auf die schnelle habe ich keine idee.

bitte ändere mal die zweite readingsGroup nacheinander so ab das immer nur eines der 5 geräte überwacht wird. geht es dann? wenn ja bei welchen?

gruss
  andre

ps: eventMap ist bei der readingsGroup nicht nötig.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ph1959de

Darf ich meine Fehlermeldungen zu readingsGroup hier auch noch in die Runde werfen? Ich bekomme regelmäßig

Missing argument in sprintf at ./FHEM/33_readingsGroup.pm line 533.
Invalid conversion in sprintf: end of string at ./FHEM/33_readingsGroup.pm line 533.

Missing argument in sprintf at ./FHEM/33_readingsGroup.pm line 352, <FH> line 23075.
Invalid conversion in sprintf: end of string at ./FHEM/33_readingsGroup.pm line 352, <FH> line 23075.


Version: 33_readingsGroup.pm 4233 2013-11-16 22:00:07Z justme1968 $

Wenn die folgende readingsGroups auskommentiert ist, kommen die Meldungen nicht mehr:

#define TempHygro readingsGroup TYPE=CUL_WS.*:temperature,humidity,dewpoint
#attr TempHygro mapping %ALIAS
#attr TempHygro valueFormat { temperature => "%.1f&deg;;C", humidity => "%.1f %", dewpoint => "%.1f&deg;;C"}


Ist da irgendetwas offensichtlich falsch oder kann/muss ich noch mehr Informationen liefern?

Gruß, Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

justme1968

du muss das % das wirklich angezeigt werden soll  verdoppeln.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ph1959de

Zitat von: justme1968 am 20 November 2013, 21:35:18
du muss das % das wirklich angezeigt werden soll  verdoppeln.
Blitzschnell und genial richtig. Danke Andre.

Ließe sich dieser Fehler irgendwie im readingsGroup abfangen? Könnte mir vorstellen, dass ich nicht der letzte bin, der da reinfällt.

Gruß, Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

justme1968

du bist auch nicht der erste.

das lässt sich nicht wirklich abfangen. zumindest habe ich keine idee die zuverlässig immer funktioniert und nicht zuviel overhead hat.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

versuche das mit der "Geräteliste" einzukreisen, aber ist noch nicht schlüssig. Vielleicht hilft ja langsames Herantasten.
Ich habe jetzt mal folgendes gemacht:
Mit dem schönen Trigger für die rg, die Du gebaut hast, habe ich jetzt drei Knöpfe unter die rg gesetzt: Alle_anzeigen, nur eingeschaltete, nur ausgeschaltete.
Der Trigger modifiziert das valueFormat der rg.
1. Mein Screenreader sagt aber, das da steht:  Alle anzeigen, eingeschaltete,ausgeschaltete,eingeschaltete,ausgeschaltete -> also 5 Knöpfe, statt drei. Definition:

define Alle_Geraete_im_Haus readingsGroup Sa_IR_strahler:state,<{anSeit($DEVICE)}> Sa_Sitzbank:state,<{anSeit($DEVICE)}> SonosBridge:state,<{anSeit($DEVICE)}> Ku_Squeezebox:state,<{anSeit($DEVICE)}> [MW]z_Media:state,<{anSeit($DEVICE)}> <{appendTrigger($DEVICE,"alle","Alle anzeigen");;}>,<{appendTrigger($DEVICE,"ein","eingeschaltete");;}>,<{appendTrigger($DEVICE,"aus","ausgeschaltete");;}>


Ok, wie ändern?
2. So sieht das notify aus:
sub ModifiziereAnzeige($$)
{
my ($liste,$event) = @_;
Log(3,"ModifiziereAnzeige: $liste $event");
if ($event eq "alle")
{
   fhem("deleteattr $liste valueFormat");
} # if alle
elsif ($event eq "ein")
{
   my $val = '{($VALUE=~/on/)?"":undef}';
fhem("attr $liste valueFormat $val");
} # if ein
elsif ($event eq "aus")
{
   my $val = '{($VALUE=~/off/)?"":undef}';
fhem("attr $liste valueFormat $val");
} # if aus

} # end sub modifiziereAnzeige



(old-fashion -C-Style :-))

Das schaltet auch, aber in der Liste "der ausgeschalteten Geräte erscheint das "eingeschaltete Gerät ohne Namen, aber mit Zeitangabe.
Ich habe mal einen Screenshot angehängt.
Wenn ich aber nur die "eingeschalteten" mir anzeigen lasse, ist alles korrekt... grübel... (Wo ist da die Symetrie?)
Dann ist da noch was stranges: Ich schalte die Sa_Sitzbank ein (am Schalter) und sie heizt auf. fhem zeigt sie aber mit "off" im state an.
Dann setze ich per fhem die auf "ein2 -> STATE ß= on, sobald ich aber die Webseite aufrufe, geht der state wieder auf "off", obwohl physikalisch das Teil weiter heizt. Da hängt nur ein notify mit einem at dran, welches mir die Heizung nach 30 Minuten wieder ausschalten soll.
Funktechnisch ist das Teil gleich neben an. Möglicherweise habe ich durch diesen Effekt beim Testen der rg zwei überlagernde Effekte, die die Analyse erschweren.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

du machst ja sachen :)

ich schaue mir das heute abend mal in ruhe an. nur kurz eins vorweg um ganz sicher zu gehen: wenn du so das valueFormat änderst braucht es zur zeit auf jeden fall einen refresh der html seite. und du musst in deinem anSeit berücksichtigen auch hier undef zurück gegeben wird wenn du die zeit nicht anzeigen lassen willst. also für die liste der ausgeschalteten geräte bei allen geräten die an sind.

wenn ich so darüber nachdenke ist das vermutlich schon genau das problem: die anSeit funktion muss wissen welche liste gerade angezeigt wird damit sie je nach dem die passenden undef zurück liefern kann. da das bei dir dynamisch ist wäre mein vorschlag das du in anSeit den namen der readingGroup mit übergibst (erst mal einfach hartkodiert), das du
in ModifiziereAnzeige der readingsGroup je nach liste ein reading 'liste' verpasst und dieses dann in anSeit auswertest.

es ist auch besser wenn du appendTrigger nur ein mal anhängst und im appendTrigger den passenden html code für alle drei links erzeugst. ich denke das macht es übersichtlicher.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

ja ja, drüber nachdenken und jetzt sieht es so aus:


sub                                               
anSeit($$)                                         
{                                                 
  my ($DEVICE,$mode) = @_;                               

  my $state = ReadingsVal($DEVICE,"state","" ); 
  my $time = ReadingsTimestamp($DEVICE,"state","");

if ($mode eq "ein")
{
  return undef if( !$state || $state eq "off" );
  return "an seit ". KonvertiereZeit($time);                       
} # if mode ein
elsif ($mode eq "aus")
{
  return undef if( !$state || $state =~m/on.*/ );
  return "aus seit ". KonvertiereZeit($time);                       

} # end if modeaus
# mode alle
   my $t = ($state =~m/on.*/)?"ein":"aus";
  return " $t seit ". KonvertiereZeit($time);                       
} # end anseit
###############################


Für die rg muss man jetzt definieren:

[A-Z][a-z]_Lampen.*:state,<{anseit($DEVICE,ReadingsVal("der Name der rg","mode","alle"))}>

Und an die rg hängt man ein userReading "mode" an, welches über die drei knöpfe je nach gewünschter Darstellung auf "ein","aus" oder "alle" gesetzt wird.

Und schwup, die wupp, hat man dynamische Listen, die einem alles mögliche mit Zusatzangaben darstellen.
Ein Refresh ist im übrigen nicht notwendig, wenn ich valueFormat ändere, baut sich die Liste gleich wieder korrekt auf.

#gruß


'Elektrolurch
configDB und Windows befreite Zone!

justme1968

die idee ist so gut du solltest es wirklich im wiki dokumentieren :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Ja, so langsam komme ich auf den Trichter, habe 20 Jahre nicht mehr programmiert....
Habe da noch mit zwei dummys, die zwei Menüs und 6 Textfelder haben und vier Knöpfe (set,read) eine Steuerung für die Heizungsthermostate gebaut, da kann man alle per Wochentag, Werktag, Wochende oder auch einzeln die Schaltzeiten und Temperaturen setzen. Kompakter geht es nicht an einer Weboberfläche.
So Checkboxen oder Radiobuttons wären auch noch eine schöne Ergänzung für fhem.
Auch würde mich noch interessieren, ob es möglich ist über attr webCmd die Werte eines dummys über mehrere Zeilen darzustellen...

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Hallo Andre,

ich habs gefunden. Vermutlich dürfte das auch den Meister König interessieren:

attr follow-on-timer 1

Wenn man dann das Gerät nur auf "on" setzt, geht es sofort auf "off". Das sollte eigentlich so nicht sein, so wie ich das verstehe, soll gemonitored werden, wenn man per timer das Gerät für eine Zeitdauer einschaltet.
Wer korrigiert den Fehler?
Hat bei mir eine Menge Verwirrung gestiftet...

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

das follow-on-for timer ist für fs20 geräte die mit on-for-timer eingeschaltet werden. weil es in fs20 keinen rückkanal gibt würde sonst fhem das automatische aus nach einer weile nicht mit bekommen. mit dem follow-on-for-timer wird bei einem on-for-timer automatisch ein internes at erzeugt das dann zu dem zeitpunkt in dem das echte device automatisch abschaltet auch das fhem device auf off setzt.

hat du das problem auch ohne readingsGroup?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

das war schon klar. Ich setze das Licht im Treppenahus mit der timer-Funktion von fs20 und habe dort das Attribut auch entsprechend gesetzt.
Für ein paar Geräte habe ich eine Überwachung laufen und wollte zuerst das "on" - Event mit einem "on-for-timer" ersetzen, mache es jetzt aber über ein at.
Bei dem device war aber das Attribut "follow-on-for-timer" = 1 gesetzt. Wird das Device aber nur mit "on" eingeschaltet, so setzt fhem es sofort wieder auf "off".
Da müsste eine Abfrage hinein, wie das Device eingeschaltet wird und ggfs bei nur "on" keinen timer starten, der gleich auf "off" geht.
Daher hatte ich in der rg die komischen Effekte, dass die Devices teilweise nicht angezeigt wurden. Nachdem ich da etwas herumprobiert habe, bin ich drauf gekommen, dass die Devices, bei den follow-on-for-timer gesetzt war, nicht korrekt angezeigt wurde.
Also, m.M.n. müsste da etwas in fhem.pl korrigiert werden.

Gruß


Elektrolurch

configDB und Windows befreite Zone!

rudolfkoenig

Koennt Ihr mir bitte das follow-on-for-timer Problem erklaeren, am liebsten mit einem einfachen Beispiel in einer neuen Diskussion? Das was ich mir als Problem zusammengereimt habe kann ich nicht nachvollziehen.

justme1968

ich hab mal eine wiki seite angefangen. es wäre schön wenn dort eine sammlung von beispielen und screenshots entstehen würde...

http://www.fhemwiki.de/wiki/ReadingsGroup

gruss
  adnre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968