Neues Modul readingsGroup

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

Vorheriges Thema - Nächstes Thema

justme1968

1. das problem mit # ist das es als kommentarzeichen im config file gilt. es geht also solange bis du abspeicherst und neu lädst. das gilt z.b. auch für farben oder hex codes. du kannst es umgehen in dem du <{...}> mit einer kleinen funktion in 99_myUtils.pm verwendest die dann das # zurück gibt. das geht.

2. undef lässt den wert wirklich aus. wenn du die spalte beibehalten aber leer haben möchtest kannst du ein leerzeichen oder &nbsp; verwenden

4. die userreadings haben eine formel hinterlegt und werden automatisch berechnet und gesetzt wenn sich ein anderes reading ändert. es gibt z.b. den modifier differential der automatisch die zeit berücksichtig um etwas pro zeit zu berechnen. ads ist im prinzip nichts das mit einem notify und selber rechnen und setreading nicht auch geht. die userreadings machen es nicht einfacher und es gab sie schon bevor es setreading gab.

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

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

Elektrolurch

Ok. Danke, habe verstanden. Das "#" habe ich durch "Pos" ersetzt.
Da ich an die userreadings eh nix anhänge, dass lieber selber über das notify direkt im Perl-Code erledige... Passt mir das so ganz gut. In der fhem - Doku wäre es ev. ganz hilfreich, da mal auf das notify von readings einzugehen. Der State kommt direkt als Wert, der reading mit "Name:", für den Anfänger, erst einmal ein wenig Experiment...
Da musste ich auch erst einmal etwas Zeit investieren. Auch das Konzept mit den Hashes von Perl und in der Realisierung von fhem ist schon Forschungsarbeit. Die "$defs" habe ich in der Doku auch nicht gefunden....
W#äre so mal ein Ergänzungsforschlag für die Doku.

Gruß


Elektrolurch
configDB und Windows befreite Zone!

rudolfkoenig

ZitatW#äre so mal ein Ergänzungsforschlag für die Doku.

Wenn, dann bitte als diff, und zweisprachig :)

Elektrolurch

Hallo Andre,

Du hattest mir ja mal vor einiger Zeit ein Stückchen Code gegeben, um die readingsGroup - anzeige zu modifizieren. Allerdings habe ich da etwas Probleme mit den Knöpfen. Statt drei Knöpfe, erscheinen fünf in drei Spalten und ich kann mir absolut keinen Reim drauf machen.

Alle anzeigen

eingeschaltete
ausgeschaltete
eingeschaltete

ausgeschaltete


Den Screenshot (hoffentlich sieht man da was) hänge ich mal an. Wenn ich den html-Quelcode anzeigen lasse, so finde ich da eigentlich auch nur drei Knöpfe.
Definition der Gruppe:

define Alle_Lampen_im_Haus readingsGroup [A-Z][E-z][012]*_.*[LlFf](ampe|luter).*:state,<{anSeit($DEVICE,ReadingsVal("Alle_Lampen_im_Haus","mode","ein"))}> <{appendTrigger($DEVICE,"alle","Alle anzeigen");;}>,<{appendTrigger($DEVICE,"ein","nur eingeschaltete");;}>,<{appendTrigger($DEVICE,"aus","nur ausgeschaltete");;}>
attr Alle_Lampen_im_Haus alias Alle eingeschalteten Lampen
attr Alle_Lampen_im_Haus eventMap /on:ein/off:aus/
attr Alle_Lampen_im_Haus group Beleuchtung
attr Alle_Lampen_im_Haus mapping %ROOM %ALIAS
attr Alle_Lampen_im_Haus noheading 1
attr Alle_Lampen_im_Haus nolinks 1
attr Alle_Lampen_im_Haus notime 1
attr Alle_Lampen_im_Haus room Haus
attr Alle_Lampen_im_Haus userReadings mode
attr Alle_Lampen_im_Haus valueFormat {($VALUE=~m/on.*/)?"":undef}
attr Alle_Lampen_im_Haus valueIcon {state => '%devStateIcon'}

Die Triggerfunktion für die Knöpfe:
sub
appendTrigger($$$)
{
  my ($name,$trigger,$label) = @_;

  my $ret .= "</table></td></tr>";

  my $link = "cmd=trigger $name $trigger";
   my $txt = "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$label</a>";
   $ret .= "<td colspan=\"99\"><div style=\"cursor:pointer;color:#888888;text-align:right\">$txt</div></td>";

  return ($ret,0);
} # end appendTrigger
Ich habe insgesamt drei Gruppen mit drei Knöpfen, für Lampen, Geräte und Fenster.
Der Effekt, dass sich in der Zeiten Spalte drei Knöpfe befinden, tritt nur bei Lampen und Geräte auf, bei Fenster nicht.
Strange....
Ich dachte ev., dass das "eingeschaltete" sich ev. auf das valueFormat auswirken könnte und habe probeweise mal "nur eingeschaltete" hingeschieben, hat aber keinen Effekt.

Gruß

Elektrolurch

configDB und Windows befreite Zone!

justme1968

der screenshot ist leider so gescrollt das man die links zum klicken nicht sehen kann.

ich vermute aber das problem ist appendTrigger drei mal aufzurufen. was du tun musst ist in einem appendTrigger alle drei links nebeneinander zu erzeugen. der aktuelle code fügt eine zeile über die ganze breite der tabelle ein und macht den text rechtsbündig. wenn das mehrfach aufgerufen wird passt es vermutlich nicht mehr.

änder mal die zeile my $txt = "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$label</a>"; so das es drei zeilen in der art sind:my $txt = "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$label</a>";
$txt .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link2')\">$label2</a>";
$txt .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link3')\">$label3</a>";


du musst dann natürlich label2 und 3 und link2 und 3 gleich mit übergeben. oder einfach erst mal hart in die funktion rein schreiben.

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

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

Elektrolurch

Hallo Andre,

perfekt, fast. Jetzt kommen nur noch drei Knöpfe.
Allerdings stehen die direkt hintereinander. Wo muss ich da einen Spaltenvorschub einfügen? Mit dem html hab ichs noch nicht so.

Die Funktion sieht jetzt bei mir so aus (geht für beliebig viele Knöpfe)

sub
appendTrigger
{
  my ($name, @liste) = @_;
my ($trigger,$label,$link,$txt) ;

  my $ret .= "</table></td></tr>";

$trigger = shift @liste;
$label = shift @liste;

  $link = "cmd=trigger $name $trigger";
$txt = "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$label</a>";
while (@liste)
{
$trigger = shift @liste;
$label = shift @liste;
  $link = "cmd=trigger $name $trigger";
$txt .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$label</a>";

} # end while

   $ret .= "<td colspan=\"99\"><div style=\"cursor:pointer;color:#888888;text-align:right\">$txt</div></td>";

  return ($ret,0);
} # end appendTrigger

Dann ist noch eins: Wenn fhem neu startet, werden immer "Alle Lampen" angezeigt, obwohl der "mode" ja als reading an der readingsGroup hängt und doch eigentlich mit abgespeichert werden sollte?

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

das einfachst auf die schnelle ist vermutlich mit &nbsp; jeweils so viele leerzeichen einzufügen wie du magst.

ja. eigentlich sollte nach dem start alles richtig gesetzt sein. vorausgesetz es war ein normales shutdown bei dem alles auch gesichert wurde. du solltest dann das mode reading in der detail ansicht auch sehen.

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

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

cwagner

Guten Tag,
mir gelingt einfach kein Trick, mit dem ich verhindern kann, dass im Spaltenmodus des WEB-Moduls in einer Readingsgroup die Datumsanzeige direkt klatsch am Readingswert und seiner über valueFormat definierten Einheit hängt. Dabei habe ich da schon ein/zwei Leerzeichen hinter.


Danke für sachdienliche Hinweise im Voraus!

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

justme1968

leerzeichen werden in html 'wegoptimiert'. du kannst jeweils &nbsp; (non-breaking-space) verwenden um ein (oder mehrere) leerzeichen zu erzwingen.

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

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

cwagner

Hallo Andre,
vielen Dank - es klappt. Und wieder was dazugelernt.

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

cwagner

Hallo,
heute habe ich gelernt, dass Leerzeichen (zum Beispiel im ValueFormat) beim Ausführen der readingGroup vom Browser wegoptimiert werden. Das Heilmittel ist (bei mir in nahezu allen Fällen) nun das empfohlene Einfügen von &nbsp nach Device-Namen und Reading.
Meine Beobachtung ist: ReadingGroup macht sehr schöne Darstellungen auf dem Weboberfläche und fügt seinerseits auch Leerräume ein. Erst wenn - zum Beispiel durch den Spaltenmodus des Moduls WEB - die ReadingsGroup in Enge gerät, wird gepresst. Wäre es nicht schön, wenn ReadingsGroup grundsätzlich beim Spaltentrennen wenigstens ein &nbsp einfügt? Dann würde auch ohne Eingriffe die Darstellung nicht wie hier http://forum.fhem.de/index.php/topic,14425.msg129155.html#msg129155 beschrieben aussehen, oder?

Danke an den Autoren für die wunderbare Möglichkeit von ReadingGroups - sorgen echt für Gliederung und helfen Multidevices (z.B. 1-Wire) differenziert und informativ dazustellen. Füge noch ein Beispiel an.

Christian

PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Svenson

@cwagner

Wie bekommst Du die Temperaturstatistik zusammen?

Grüße
Sven

cwagner

Hallo, das geht mit readingsGroup ziemlich cool. Dort kann man praktisch eine Ausgabeliste über mehrere Geräte hinweg machen. Hier als Beispiel das Listing meiner Temp_Statistik:
Internals:
   DEF        Wetterstation:(T_a.*|T_m.*|temperature|Taupunkt|Windchill)
   NAME       Temp_Statistik
   NR         233
   NTFY_ORDER 50-Temp_Statistik
   STATE      Initialized
   TYPE       readingsGroup
   Content:
     Wetterstation 1
   DEVICES:
     ARRAY(0x14cc720)
   Readings:
     2013-11-30 23:00:19   Wetterstation_avg_day 3.9
     2013-11-30 23:00:19   Wetterstation_avg_month 3.9
     2013-11-30 23:00:19   Wetterstation_cum_day 323343.2
     2013-11-30 23:00:19   Wetterstation_cum_month 10432143.2
     2013-11-30 22:47:24   Wetterstation_max_day 4.3
     2013-11-30 22:47:24   Wetterstation_max_month 4.3
     2013-11-30 23:45:30   Wetterstation_min_day 3.9
     2013-11-30 23:45:30   Wetterstation_min_month 3.9
   Helper:
Attributes:
   group      Temp_Statistik
   mapping    {temperature => "akt. Temperatur",T_min_day => "bish. Tages-Min",T_avg_day => "bish. Tagesschnitt",T_max_day => "bish. Tages-Max",T_max_month => "bish. Monats-Max",T_avg_month => "bish. Monats-Schnitt",T_min_month => "bish. Monats-Min",state => "%DEVICE",Taupunkt => "Taupunkt",rain_calc_d_last => 'Regen gestern',Windchill => "gefühlte Temperatur"}
   noheading  1
   room       Aktuell
   valueFormat %.1f °C
   valueStyle style="text-align:right"


Du machts ein Define einer readingsGroup und im DEF-Teil kombinierst Du alle in dieser Liste gemeinsam gewünschten readings aus Deinen Geräten. Über das Mapping legst Du die Namen der Readings fest.

Man kann auch mehrere Spalten definieren und noch richtig tolle Sachen machen. Schau mal: http://forum.fhem.de/index.php/topic,19126.msg129214.html#msg129214   Was hier Forenmitglieder im Dialog zusammengebaut haben, ist beeindruckend.

Herzliche Grüße

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Adam

Hallo eine Frage,

es ist bei dem Define ja möglich zwischen zwei <> einen Text einzutragen,
kann man da auch einen style zu angeben? Ich habe es bisher mit keiner Syntax geschafft!?

Also in der Art

<{style="color:red"}Beispieltext>

Fragt
Adam

justme1968

#209
mit nameStyle. oder du machst aus dem string ein komplettes <div>...</div>. dann musst du es aber in eine sub auslagern und zurückgeben weil im define keine leerzeichen erlaubt sind.

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

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