Neues Modul readingsGroup

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

Vorheriges Thema - Nächstes Thema

UliM

Hiho,
könnt ihr bitte mal mit der angehängten floorplan-Version testen?
Ins FHEM-Verzeichnis kopieren, danach reload oder restart nicht vergessen.

Falls es nicht funktioniert, bitte in den Zeilen 231-237 das Kommentarzeichen am Zeilenanfang entfernen, nochmal reload, dann Fehler produzieren und den Log-Auszug posten.

Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

stromer-12

Mit dem neuen Floorplan kann ich jetzt meine Werte schalten.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

UliM

Zitat von: stromer-12 am 07 April 2014, 22:53:17
Mit dem neuen Floorplan kann ich jetzt meine Werte schalten.
D.h. aus Deiner Sicht sind damit alle Probleme behoben und ich kann's so einchecken?
Hab den Fred hier nicht verfolgt - hatte ausser Dir noch jemand Probleme und müsste bestätigen?
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

stromer-12

Ich habe jetzt nur das von mir geschilderte Problem getestet, weitere Test habe ich nicht durchgeführt.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

micomat

hi,

ich hab einen fehler und komm leider nicht ganz dahinter...
ich hab in der readingsgroup werte verschiedener typen.
wenn ich nun bei einigen ein icon und bei anderen den wert anzeigen will funktioniert das auch.
allerdings mit folgendem fehler im log:
Useless use of a constant (%1.f °C) in void context at (eval 24928) line 1.
Useless use of a constant (KollektorTemp) in void context at (eval 24928) line 1.

mein code fuer valueFormat:
{if($VALUE eq 'summer' || $VALUE eq 'winter') {($VALUE eq 'summer')?"weather_sun":"weather_frost"} else{AussenTemp => '%1.f °C', VorlaufTemp => '%1.f °C', AussenTemp=> '%1.f °C', RuecklaufTemp=> '%1.f °C', WWTemp=> '%1.f °C', KollektorTemp=> '%1.f °C'}}


help? =)

danke,
markus
Synology DS218+ with fhem+iobroker in docker, 2x RasPi w. ser2net, CUL433+868, IT, EGPM2LAN, THZ/LWZ, FB_Callmonitor, HMS100TF, Homematic, 2x TX3-TH, Pushover, USB-IR-SML-Head, SONOS, GHoma, MBus, KLF200

Elektrolurch

Hallo Andre,

noch Mal zum Thema "mapping":
Folgendes kann ich derzeit nicht abbilden:
In der ersten Spalte soll eine fortlaufende Nummer stehen, wie z.B. 1 ... 31. Sind die Readings für den entsprechenden Tag nicht gesetzt, soll die Zeile auch nicht angezeigt werden, d.h. so was geht nicht:
define myrg readingsGroup <Monatsstatistik>  Solardaten,<1.>,1-Solarenergie,1-Laufzeit ... Solardaten,<31>,31-Solarenergie,31-Laufzeit
Sind für den entsprechenden Tag die Readings nicht gesetzt, so erscheint trotzdem die leere Zeile mit der Tagesnummer.

Was hilfreich wäre, wäre eine Variable (wie z.B. %ROOM oder %DEVICE), die die Zeilennumer beinhaltet, z.B. %ROW,
dann könnte man das Mappping leicht vereinfachen, so z.B.
attr myrg mapping {'Solardaten' => "%ROW."}
oder
attr myrg mapping %ROW.  ?
dann würde in der ersten Spalte "1." .. "31." erscheinen, wenn dafür Readings bestehen.
Wäre das eine sinnvolle Ergänzung?
Ich habe 5 readingsGroup, bei denen ich das brauchen könnte und dies bislang unter Ausnutzung des Bugs realisiert.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Hallo Andre,

warum dürfen in <> - Ausdrücken keine Leerzeichen vorkommen?
Beispiel:
HzAnlage:<Aktualisiert um>,UpdateTime-SOL_P
Die ganze Zeile wird nicht ausgegeben.
So geht's, ist aber nicht schön:
HzAnlage:<Aktualisiert-um>,UpdateTime-SOL_P
Den Text in " " oder ' ' setzen, bringt auch nichts, da dann diese Zeichen in der Ausgabe erscheinen.
Und hier noch ein Problem:
Dieser Ausdruck bringt fhem zum Absturz mit der Meldung: unmatched () in regex:
HzAnlage:<Leistung-(akt,max,um>,Leistung,Max-Leistung,Max-Leistung-Zeit

Ich hatte hinter dem "um" die ) vergessen.
Aber warum wird der Text als regex interpretiert? Könnte man zumindest für die <> - Ausdrücke noch '' oder "" auswerten, um zu verhindern, dass der Ausdruck geparst wird?

Und noch eine Frage?
Wie kann ich die Ausgabe in der ersten Spalte unterdrücken, so dass der statische Text von HzAnlage:<text> in der ersten Spalte ausgegeben wird?
Wenn ich kein mapping definiere, erscheint in der ersten Spalte das alias von HzAnlage, wenn ich
attr HzAnlage_SOL_P_rg mapping {'HzAnlage' => ''}
erscheint zwar kein Text in der ersten Spalte...
Welche Möglichkeit besteht also die erste Spalte ganz auszublenden?

Gruß

Elektrolurch

configDB und Windows befreite Zone!

justme1968

das mit der zeilennummer kann ich einbauen. kein problem.

zwischen den < > dürfen kein leerzeichen sein weil das parsen sonst zu unhandlich wird und ich bis jetzt zu faul war das richtig zu bauen. du kannst aber statt dem leerzeichen en &nbsp; verwenden.

ich schau mal woher die meldung und der absturz kommt. ich dachte ich hatte inzwischen alle stellen abgefangen. alles zwischen den <> wird interpretiert um dort für die <{...}> variante den perl code ausführen zu könne.

du kannst zur zeit die erste spalte nicht ganz weg lassen sondern nur mit etwas leerem füllen. z.b. &nbsp;

ich schau mal ob mir da was einfällt.

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

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

Elektrolurch

Ok. Das wäre super. Wie wärs, wenn in den <> - Ausdrücken der TEil nicht geparst wird, der in "" oder '' steht?
configDB und Windows befreite Zone!

justme1968

das ist leider nicht so einfach weil das leerzeichen schon der trenner viel weiter oben auf device ebene ist.

aber mit dem &nbsp; solltest du alles machen können was du im hinblick auf leerzeichen möchtest.

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

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

Elektrolurch

Hallo Andre,
leider noch Mal zum Thema mapping. Es betrifft aber nur die Variante, in der ein Hash für das mapping verwendet wird.
define myrg def1:wert1
führt ohne mapping zur Ausage von
1. Spalte dev.ert1
2. Spalte <wert1>
define myrg readingsGroup dev1:wert1,wert2
führt zur Ausgabe von
1. Spalte dev1
2. Spalte <Wert1>
3. Spalte <wert2>
In der Version mit "Bug" führte das zur Ausgabe von
1. Spalte: dev1.wert1

Also ist der "Bug" noch immer zum Teil vorhanden, immer wenn nur ein Wert für eine Ausgabe definiert wurde.

Allerdings habe ich den "Bug" als ganz nützlich empfunden, da ich von ein und demselben Device Gruppen von Werten ausgeben möchte und die Gruppe dadurch gekennzeichnet wird, dass der erste Wert die Beschriftung der Zeile bestimmt (wie z.B. akt,min,max).

define myrg readingsGroup dev1:wert1 dev1:wert2,wert3
liefert jetzt in der Ausgabe:
Zeile1
Spalte 1: dev1.wert1
Spalte2: <wert1>
Zeile2:
Spalte1: dev
Spalte2: <wert2>
Spalte3: <Wert3>

Ich fand es eigentlich ganz nützlich, dass der Name des Readings "Wert2" über das mapping den Text in der Spalte 1 definierte, was jetzt durch die Beseitigung des "Bugs" bei mehr als  einem Wert für eine Zeile nicht mehr gegeben ist.

Die Möglichkeit, über <> einen statischen Text für den "Gruppenbezeichner" zu verwenden und über mapping den device-Namen verschwinden zu lassen, blendet leider derzeit die erste Spalte nicht aus. Außerdem wird auch die leere Zeile ausgegeben, wenn keine Werte vorhanden sind (<> erscheint trotztdem)

Ich habe den "Bug", wie schon oben gesagt, dazu benutzt, über den ersten Wert den Text in der 1. Spalte zu bestimmen und habe den Text vor den einzelnen Werten über valueFormat dann gesetzt, wie z.B.:
valueFormat {'wert2' => 'min %s', 'wert3' => 'max %s'}

Mit mapping kann man für jedes Reading einen Text vor die Ausgabe stellen oder mit valueFormat ausgeben, aber wenn es für die erste Spalte nur ein mapping des device-Namens gibt, so sollte per Attribut die erste Spalte auch unterdrückt werden können.

Alternativ könnte man den "But" auch rückgängig machen. Vielleicht kann man das auch in der endgültigen Version in der CommandRef noch Mal etwas ausführlicher beschreiben.

Wie ist denn ansonsten die Resonanz zu dieser Fragestelung?

Die readingsGroup, insbesondere jetzt auch mit der command-Option, sind ein Super-Modul. Also herzlichen Dank für Deine Arbeit. Wie Du an meinem regen Kontakt siehst, setze ich das Modul intensiv ein. Ich lasse mir gerade zur Steuerungsübernahme meiner Heizungsanlage über die rgs viele Werte anzeigen und das ist ganz nützlich, um ein eigenes Heizungsverhalten für die Anlage zu entwickeln.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

define myrg def1:wert1

das ist pro zeile ein reading. der zeilentitel enthält per default den namen des device und des readings. du kannst es ummappen wie du möchtest und hast dabei unter anderem zugriff auf das device und den reading namen.


define myrg readingsGroup dev1:wert1,wert2

das sind pro zeile mehrere readings. der zeilentitel enhält per default nur den namen des devices. du kannst es ummappen wie du möchtest hast aber keinen zugriff auf einen reading namen weil der titel sich auf mehr als ein reading bezieht.

der bug hatte zur folge das für den zeilentitel der name des ersten readings beim mappen verwendet wurde. das hat dann aber zur folge das du den zeilentitel und das eigentliche reading nicht mehr unterschiedlich nennen kannst.


define myrg readingsGroup dev1:wert1 dev1:wert2,wert3

hier mischst du beide formen. das ist vermutlich meist nicht sinnvoll.
 


ich schaue mal ob mir für deinen anwenungsfall noch etwas besseres einfällt. den bug wieder einzubauen ist keine gute idee weil dann einiges inkonsitent wird und zum anderen du dein altes problem das der reading name doppelt auftaucht wieder hast.

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

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

Elektrolurch

Hallo Andre,

habe jetzt mal ein textField in einer readingsGroup mit eingebaut. Bisher hatte ich nur Menüs.
Dabei ist mir folgendes aufgefallen:
1. Vor dem textField gibt es eine leere Spalte
2. im Logfile steht folgendes:
Use of uninitialized value $values in pattern match (m//) at ./FHEM/01_FHEMWEB.pm line 2305.
Use of uninitialized value $values in pattern match (m//) at ./FHEM/01_FHEMWEB.pm line 2394.
Use of uninitialized value $values in string ne at ./FHEM/01_FHEMWEB.pm line 2339.
Use of uninitialized value $values in split at ./FHEM/01_FHEMWEB.pm line 2357.
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.

immer dann wenn sich die Seite mit der rg aufbaut.
Wenn ich richtig gezählt habe, wiederholt sich das log bis zum rg 4 mal, für jedes Textfeld einmal.
Definition: zwei dummy; Strom und Gas
define Strom dummy
define Gas dummy
define Verbrauch_rg readingsGroup Strom:Datum,Art,Verbrauch,speichern Gas:Datum,Art,Verbrauch,speichern
attr Verbrauch_rg alias Verbrauchsdaten
attr Verbrauch_rg commands {'Datum' => 'Datum:textField','Art' => 'Art:Ablesung,Abrechnung','Verbrauch' => 'Verbrauch:textField','Strom.speichern' => 'speichern:'}
attr Verbrauch_rg nolinks 0
attr Verbrauch_rg notime 1
attr Verbrauch_rg room Energie

Also nix spannendes. Die Readings haben auch alle Werte und werden angezeigt, trotzdem die leere Spalte vor den textField und die Warnungen im log.

Mal eine andere Frage: Leider sehen jetzt einige der rgs bei mir nach der Beseitigung des Bugs "etwas zerzaust" in den Zeilen aus, in denen mehrere Werte ausgegeben werden.
Die Probleme könnte ich ja umgehen, wenn es
a) eine Variable  $ROW bzw %ROW geben würde, damit könnte ich dann in der ersten Spalte schon mal was bei Statistiken hineinmappen
(z.B. mit mapping %ROW. oder bei der Definition mit <{GetMonth($ROW);;}>

und
b) ein Attribut, mit der die erste Spalte komplett unterdrückt werden kann.
Ich würde dann den "gesammlten" Text für die Zeile über das mapping des ersten Readingts in der Zeile ausgeben.

Ginge das noch "nachzurüsten?
Wäre super!

Gruß

Elektrolurch
 
configDB und Windows befreite Zone!

justme1968

#418
ich hab dich nicht vergessen. kommt fast alles. aber das modul kann inzwischen so viel und wird von einigen benutz. ich muss also testen und ich möchte gerne ein paar interne dinge vereinfachen.

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

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

strauch

#419
Neuer Monat und bei mir hagelts wieder Fehlermeldung. Das schon komisch. Ein Neustart und der Spuck ist vorbei. Mein Log ist voll mit folgenden Zeilen:
Argument "off" isn't numeric in sprintf at ./FHEM/33_readingsGroup.pm line 517.
Use of uninitialized value in string ne at ./FHEM/33_readingsGroup.pm line 730.
Argument "off" isn't numeric in sprintf at ./FHEM/33_readingsGroup.pm line 791.


Ich vermute das off kommt von der Heizung.

Die definitin sieht so aus:
define reading_HM_Heizung readingsGroup <>,<Temp>,<Soll>,<Ventil>,<Fenster>,<Mode> .*Heizung:measured-temp,desired-temp,actuator,window,mode
attr reading_HM_Heizung alias Status
attr reading_HM_Heizung mapping %ROOM
attr reading_HM_Heizung room Haus
attr reading_HM_Heizung valueFormat {"measured-temp" => "%.1f°C", "desired-temp" => "%.1f°C"}


Ich vermute das das "desired-temp" => "%.1f°C" diesen Fehler verursacht, wenn dann keine Zahl sondern off dort steht? Warum taucht das aber nur am Monatsanfang auf, bis ich einmal neu gestartet hab.

@andre kannst du da was machen, oder soll ich das rausnehmen?
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.