Neues Modul readingsGroup

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

Vorheriges Thema - Nächstes Thema

Niko

Hallo,

vielen Dank für das neue Modul. Ich kann es (wahrscheinlich) gut gebrauchen.

Eine Anmerkung, eine Frage und eine Anregung dazu:

Wenn ich es richtig verstehe muss das Modul am Ende der "fhem.cfg" aufgerufen werden. Zumindest bei mir erkennt es sonst andere Module, die vor (!) ihm selber in der fhem.cfg stehen nicht. Ist das so richtig?

Mit dem Attribut "mapping" kann man die Namen der Readings ändern. Dies funktioniert bei mir aber nur wenn ich aus der Liste ausschließlich den Reading Namen (z.B. temperature) und nicht zusätzlich den Modulnamen verwende (z.B. Max_Ht_01.temperature). Wenn ich nun mehrere "temperature" Einträge von verschiedenen Modulen habe (also im Beispiel mehrere Max Heizungs Thermostate) wie kann ich diesen jeweils einen eigenen Namen (z.B. Bad, Wohnzimmer etc.) zuweisen? Oder mahe ich hier noch etwas falsch?

Abschließend noch die Anregung (ich hoffe es wird nicht unverschämt :-) Wenn man Zugriff auf die Alias Namen der einzelnen Module hätte und diese statt des Modul Namens in der Liste anzeigen könnte, hätte ich gleich die richtige Benennung (Bad, etc.) ohne mapping verwenden zu müssen.

Nachmals vielen Dank für das neue Modul!

VG Niko

justme1968

- die interne device liste wird immer aktualisiert wenn devices hinzugefügt oder gelöscht werden. scheinbar funktioniert das nicht richtig wärend des startens von fhem. ich baue die liste jetzt auch ein mal auf wenn ich das INITIALIZED von fhem bekomme. damit solle es keine rolle mehr spielen wo die readingsGroup innerhalb von fhem.pl steht.

- das schaue mir mir an das sollte eigentlich gehen.

- der vorschlag mit dem alias ist gut.


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

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

justme1968

ich habe das mapping eben gerade mit <device>.<reading> probiert und es geht ohne probleme.

bitte poste mal ein list deiner readingsGroup und des devices bei dem es nicht geht.

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

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

justme1968

ab morgen wird der alias statt dem namen in der default ansicht verwendet.

zusätzlich zu %DEVICE und %READING kann dann auch %ALIAS im mapping verwendet werden.

das mapping kann ausser dem perl ausdruck das einen hash zurück liefert jetzt auch ein einfacher string sein z.b.:attr <device> mapping %READING im %ALIAS

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

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

Niko

Hallo Andre,

vielen Dank für Deine schnelle Reaktion und die konstruktive Antwort! Ich bin immer wieder begeistert wie schnell und gut einem hier geholfen wird.

Betreff des mapping habe ich mir das Beispiel aus der Commandref zum Vorbild genommen: attr temperatures mapping {temperature => "%DEVICE Temperatur"}. Ich habe dies dann mit dem Modul Sysstat probiert. Dieses heißt bei mir "RPiDB_Util_SysStat00" und das reading "temperature". In readingsGroup erscheint also "RPiDB_Util_SysStat00:temperature". Ich habe dann eingegeben:

{RPiDB_Util_SysStat00:temperature => "temp"}

Aufgrund Deines Posts habe ich es dann nochmal mit einem"." versucht, also:

{RPiDB_Util_SysStat00.temperature => "temp"}

Ebenfalls keine Änderung.


(siehe Anhang / see attachement)


Ein {temperature => "temp"} funktioniert hingegen einwandfrei.

Da es aber bei Dir funktioniert sitzt des Problem wohl vor (meiner) Tastatur, sprich ich mache etwas bei dem mapping falsch.

Abermals vielen Dank im Voraus und ich freue mich schon auf die Version mit dem "alias".

VG Niko

 

justme1968

der punkt ist richtig.

sobald es den punkt im key gibt musst du ihn in anführungszeichen setzen. also { "<device>.<reading>" => ...

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

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

Niko


Elektrolurch

Zitat von: Niko schrieb am So, 25 August 2013 18:43Danke, das war es.

VG Niko
Hallo,

habe auch von weblink auf readingsGroup umgestellt. War ja nicht so schwer.
Aber jetzt wollte ich verschidene _Variablen mischen, unter anderem auch zwei dummys. Die haben ja keine readings, sondern nur "state". Ich bekomme auch die mit in die Anzeige, aber das mapping für das Label klappt irgendwie nicht. Was mache ich da falsch?
Code
define ts2 readingsGroup ts:voltage ts:energy ts:power EnergieGestern:state Energie24:state
attr ts2 alias Teststeckdose
attr ts2 group Geräte
attr ts2 mapping {{ 'ts.voltage' => 'Spannung: ', 'ts.energy' => 'Energieverbrauch gesamt: ', 'ts.power' => 'Aktueller Verbrauch: ', 'EnergieGestern.*' => 'Verbrauch bis Gestern: ', 'Energie24.*' => 'Verbrauch in den letzten 24 h: '}}

EnergieGestern und Energie24 sind die zwei dummys, die einmal in der Nacht berechnet werden. Könnte man zwar ev. auch mit "userattr"s machen, aber da sind die 24 h nach meinem jetzigen Kenntnisstand ein Problem.
In den mappings habe ich auch schon Energie24.* und nur Energie24 usw. aber der Ersatztext für die zwei dummys will einfach nicht erscheinen....


Elektrolurch
configDB und Windows befreite Zone!

stromer-12

mach doch aus dein 'EnergieGestern.*' ein 'EnergieGestern.state' usw.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

justme1968

du kannst bei den keys keine regex verwenden. es muss wirklich zwei mal <device>.state heißen. oder ein mal allgemein 'state => "%DEVICE state"'

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

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

Elektrolurch

Hallo Andre,

klappt. Danke.
Aber jetzt habe ich einige Fragen:
1. Mit dem Modul kann man zeilenweise "Name" -> Wert darstellen. Wäre es denkbar, dass man auch mehrere Werte in einer Zeile darstellen kann, wie z.B.:
"Temperatur" "Min" "Max".
Man bräuchte dann noch einen optionalen Parameter für die Zahl der Spalten.
2. Kann man den darzustellenden Wert ev. über ein Perl-Skript modifizieren? Zum Beispiel würde ich gerne das Datum (yyyy-mm-dd_hh:mm:ss) über eine Perlfunktion in "lesbare" Form umwandeln.
3. Gibt es ein Modul / Möglichkeit mehrere Datensätze gesammelt auszugeben? Beispiel: Derzeit zeige ich aus dem FB-Call-Monitor den letzten entgangenen Telefonanruf und den letzten geführten Anruf an. Würde aber gerne die letzten (max.) 5 Anrufe anzeigen lassen. Sammeln könnte man die ja über ein notify. Und dann müsste man die etwas umständlich nacheinander in fünf dummys sammeln und ein Rollieren der Daten noch programmieren. Andere Anwendung wäre die Anzeige der letzten gemessenen Temperaturwerte. Das würde doch für ein Modul sprechen. Ev. gibt es das ja schon und der Name ist nicht so sprechend, dass ich es gefunden hätte.
4. Habe das ganze Forum durchsucht. Dabei auch Deine Diskussion mit Rudolf über webCMD und defstateIcons mit großem Interesse gelesen. Für webCmd gibt es ja nur den Slider und den time-Picker. Ich vermisse ein einfaches Textfeld.
Da gibt es genügend Anwendungsfälle: Ich habe für alle Steuerparameter eine zentrale Seite "Automation", da stelle ich über setlist eine ganze Menge Parameter ein. Das geht aber nur bedingt. Zum Beispiel möchte ich die Telefonnumer (für Alarmierungen) oder die Mailadresse frei definieren können und nicht im Perl-Code festlegen. Dazu ein dummy nutzen. Aber wie bekomme ich ein Textfeld an das dummy?
Danke.

Elektrolurch
configDB und Windows befreite Zone!

justme1968

1. würde ich anders lösen und nicht die readingsGroup erweitern: bau dir im original device mit stateFormat eine anzeige die min max und current enthält oder ein userReading das das ein neues reading mit allen dreien enthält. bei letzterem kannst du es dann auch wieder über eine readingsGroup aus mehreren devices gemeinsam darstellen.

2. das steht noch auf der todo liste. valueFormat als %xx string um die werte z.b. einheitlich zu runden und als {} perl ausdruck um mehr zu machen.

3. auch das würde ich im original device mit notifys oder userReading machen. nur um ein paar werte aufzuheben braucht es keinen dummy. viel besser finde ich es die werte als zusätzliches readings im oringinal device zu speichern. das neue setreading sollte hier hilfreich sein.

4. wenn ich das richtig sehe gibt es noch kein text feld für die webCmds. aufgrund der diskussion gibt es aber inzwischen eine methode die möglichen widgets selbst zu erweitern. ich habe das schon verwendet um dein colorpicker für die farbigen lampen dort einzubauen. wie das geht ist im wiki und unter hier beschrieben:Link. du findest noch en paar stellen wenn du nach webCmdFn suchst.

die idee hinter der readingGroup ist das es sich nur um die reine anzeige handelt. intern werden keinerlei readings gespeichert und nichts dupliziert. d.h. alles was formatierung angeht ist dort richtig aufgehoben. alles was speichern angeht gehört ins original device.

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

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

justme1968

ich habe eben eine neue version eingecheckt. damit gibt es ein neues attribut valueFormat. das ist auf drei unterschiedliche arten verwendbar:attr temperatures valueFormat %.1f &deg;C
attr temperatures valueFormat { temperature => "%.1f &deg;C", humidity => "%.1f%" }
attr temperatures valueFormat { ($READING eq 'temperature')?"%.1f &deg;C":undef }

gruss
  andre

edit: valueFormat geht jetzt auch bei longpoll updates.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Elektrolurch

Hallo Andre,

danke für die Tipps.
Die Erweiterung mit der Formatierung und Perl-Code werde ich mal in den nächsten Tagen ausprobieren.
Allerdings würde ich die Möglichkeit, eine mehrspaltige Ausgabe in readingsGroup dochz favorisieren, da ansonsten doch immer ein ziemliches Herumgefrickel notwendig ist.
Zitat:
1. würde ich anders lösen und nicht die readingsGroup erweitern: bau dir im original device mit stateFormat eine anzeige die min max und current enthält oder ein userReading das das ein neues reading mit allen dreien enthält. bei letzterem kannst du es dann auch wieder über eine readingsGroup aus mehreren devices gemeinsam darstellen.
Könnte aber dann auch mit dem "normalen Ablauf" (schalten auf on oder off, stateformat) in Konflikt kommen.
Ich habe zwar noch kein Modul programmiert, aber ich denke, dass das "Umbrechen" in eine neue Zeile bzgl. der Werteliste auf Grund eines optionalen Parameters "Nr. Coloumns") nicht so schwierig sein sollte zu implementieren.
 Für viele Anwendungen, und das hatte ich ja schon geschrieben, liegt es nahe, bei einer tabellarischen Darstellung von mehreren Devices auch pro Device in einer Zeile gleich mehrere Werte anzuzeigen. Wie Du schon sagtest: readingsGroup ist für die Ausgabeformattierung und Anzeige gedacht. Ich denke, das wäre wirklich eine sinnvolle Erweiterung.

Gruß


Elektrolurch
configDB und Windows befreite Zone!

justme1968

du hast den zweiten vorschlag übersehen. nimm ein userReading im original device. das ist genau der mechanismus den du möchtest um mehrere readings zu einem zusammen zu fassen. angesehen davon das es doof wäre etwas was es schon gibt noch mal zu bauen wäre es in der readings group viel unhandlicher zu bedienen. es über irgendwelche umbrüche oder spalten zu machen kommt auch mit diversen interen annahmen des dreispaltigen aufbaus der tabellen in die quere und longpoll geht auch nicht mehr bzw. wird sehr ineffizient.

versuch es mal mit einem userReading im original device. es ist wirklich einfach und wird genau das tun was du willst.

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

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