Neues Modul readingsGroup

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

Vorheriges Thema - Nächstes Thema

justme1968

schau noch mal oben. ich hatte es noch mal geändert. der name muss anders zusammen gebaut werden.

ansonsten musst du zu auf jeden fall den device teil ganz am anfang der definition so spezifisch machen das dir devices bzw. channel die du nicht dabei haben willst auch nicht mit matchen

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

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

stromer-12

Zitat von: chris1284 am 16 Februar 2014, 11:16:48
<%sani_heating>,<Act>,<Soll>,<Ist>,<Modus>,<Batterie> hz.*:battery,<{ReadingsVal("$DEVICE_Clima",'ValvePosition','')}>


Trenne "$DEVICE_Clima", da es als ein Variable betrachtet wird, welche nicht existiert.
Mit "$DEVICE"."_Clima" sollte es funktionieren.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

chris1284

#302
Jetzt muss ich es nur noch schaffen die leeren Devices auszublenden.
Zitat
ansonsten musst du zu auf jeden fall den device teil ganz am anfang der definition so spezifisch machen das dir devices bzw. channel die du nicht dabei haben willst auch nicht mit matchen

Das wird denke ich nicht gehen bei den RTs. Der Aufbau ist aber auch schlecht! Das Device [bla] ohne Channels hält fasst alle Readings als Zusammenfassung, aber leider nur fast.

Ich habe das ganze auch schon anderst herum probiert, aber da wird natürlich der Baterie-Level nicht angezeigt da $DEVICE = hz.[device]_Clima.

Kann ich statt $DEVICE auch sowas wie nur den string device minus 6 zeichen von rechts angeben? So eine Art trim (was perl scheinbar so nicht kennt)

EDIT:


substr("$DEVICE",0,length("$DEVICE")-6) liefert mir genua den device-String den ih brauche, allerdings nimmt fhem es nicht / stürtzt ab  ;D
In der Padre IDE funktioniert es :

Zitat$DEVICE = "hz.Bad_Clima";
$test = substr("$DEVICE",0,length("$DEVICE")-6);

print $test;
Ausgabe ist "hz.Bad"

Wenn ich das in das Redingsval mit hineinbekomme wäre es super:

<%sani_heating>,<Act>,<Soll>,<Ist>,<Modus>,<Batterie> hz.*_Clima:ValvePosition,desired-temp,measured-temp,mode,<{ReadingsVal('substr("$DEVICE",0,length("$DEVICE")-6)','Baterie','n.A.')}>
geht schonmal nicht.

erwin

Hi Andre,

erstmal von mir ein großes DANKE für das super Modul!
ich hab aber auch eine Frage:

attr valueIcon {"state.off" => "fts_shutter_" . ReadingsVal("Jalousie_Balkon_posstatus","state","0")}  #funktioniert
attr valueIcon {"state.off" => "fts_shutter_" . "%DEVICE"}  #funktioniert
attr valueIcon {"state.off" => "fts_shutter_" . ReadingsVal("%DEVICE","state","0")}  #funktioniert nicht, egal ob in single oder dquotes, ich vermute weil zuerst eval und dann substitution gemacht wird.


und zweitens auch eine Bitte:
ich wünsch mir folgenden Konstruktion:
define myRG readingsGroup Jalousie_.+_movestatus:state, usw.....
und möchte dann in der weitern definition (und auch in den attributen den match-string als variable verwenden. (analog zu %DEVICE, %ALIAS, usw....
das würde die Definitonen und auch die attribute wesentlich übersichtlicher gestalten.

l.g. erwin

FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

die ganzen => hash Konfigurationen werden nur ein mal am anfang durch eval geschickt und dürfen aktuell nur einen string zurück geben und nicht noch device abhängigen perl code aufrufen. ich bin gerade dabei das zu erweitern. dann wird es so funktionieren:attr valueIcon {"state.off" => {"fts_shutter_" . ReadingsVal("$DEVICE","state","0")} } was aber jetzt schon gehen sollte ist das hier:attr valueIcon {"state.off" => "fts_shutter_%VALUE"}

deinen zweiten punkt habe ich noch nicht ganz verstanden. du hast doch in %DEVICE den kompletten namen. was genau möchtest du mit dem match-string tun?

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

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

erwin

Hi Andre,

danke für die Antwort, ich hab mein Problem möglichweis zu sehr verkürzt dargestellt.....
attr valueIcon {"state.off" => "fts_shutter_%VALUE"}
funktioniert bestens, hilft mir aber nicht, weil ich den value eines anderen devices für das brauche. Den hab ich mit Readingsvalue("anderesdevice","state",0) zu holen versucht.
Hintergrund: ich versuche EIB devices (genauer Jalousien) zu steuern, und beim EIB Module gibts ausschließlich ein state attr, dafür brauche ich pro Jalousie mehrere FHEM devices (z.b. eins für Auf/Ab ein für Stop, eins für Absoltue Position setzen, eins für Rückmeldung absolute Position, usw....
Und dann ist auch noch entscheidend, mit welchem "Device" ich die Readingsgroup triggere, z.B.: Ein Absoluter Positionsstatus ist nur dann gültig, wenn das "Jalousie_xxx_movestatus" device auf aus steht....

Das war dann meine Idee, per namenskonvention die Devices zu gruppieren:

z.B:
Jalousie_<Raum1>_movestatus # Status: Jal in Bewegung
Jalousie_<Raum1>_posstatus # Status: Absolute Position der Jal (0-100%)
Jalousie_<Raum1>_AufAb # CMD: Auf=0 Ab=1
Jalousie_<Raum1>_Stop # CMD: Stop=1
Jalousie_<Raum1>_Absposition #Cmd: absolute Position setzen (0-100%)
usw...

daher kommt die Bitte nach dem match string. Damit könnte ich in der Readingsgroup eine Jalousie pro Zeile darstellen und undercover die EIB-Devicenamen modifizieren.
Beispiel:

define myRG readingsGroup Jalousie_.+_movestatus:state, <{sprintf("%3d %%",ReadingsValStrip("Jalousie_$DEVMATCH_posstatus","state","0"))}@state>, ,usw...

Das define matched auf alle meine Jalousien - das funktioniert ja bestens und liefert mir pro Jalousie EINE zeile.
Der match-string würde mir die Möglichkeit schaffen,  ein "weiteres EIB-Device abzufragen.. (im Beispiel mit $DEVMATCH markiert). Selbiges auch für attr valueIcon...
ich hoffe das war verständlich.

danke erwin
PS: Das wirkliche Problem ist, das EIB.pm den readingsupdate mechanismus nicht implementiert hat und damit auch keine userreadings funktionieren.
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

jetzt hab ich es verstanden. ich fürchte aber das ist nicht ganz einfach. ich muss mal überlegen.

wäre es nicht auch ein weg mit dummy oder readingsProxy jeweils ein device pro jalousie zu bauen das dann intern das verteilen macht und die readingsGroup nur noch auf diese kombinierten devices los zu lassen?

ich schau aber mal ob man die teile aus der regex durchreichen kann.

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

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

erwin

#307
Hi Andre,

nochmals Danke für die Antwort,
falls das mit dem match-string zu viel Kopfzerbrechen macht, ist das auch kein Problem.
Für meinen speziell Fall hab ich mir eine kleine sub geschrieben, das den namen extrahiert und das funktioniert auch im define nicht jedoch beim attr valueIcon.
ich habs auch mit %ALIAS versucht, aber selbes Ergebnis beim attr valueIcon.
ich formuliere nochmal anders:

attr valueIcon {"state" => "myfunct('%DEVICE')"}

liefert %DEVICE in die funktion.
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

chris1284

Hi Andre,

hats du evtl noch eine Idee wie ich die Funktion substr("$DEVICE",0,length("$DEVICE")-6) sauber in ein
<{ReadingsVal([HIER MUSS SIE REIN],'Baterie','n.A.')}> hineinbekomme bzw ist sowas überhaupt möglich? Substr an sich und auch length funktionieren zusammen wenn ich sie hinten als default -Wert angebe, nur nicht vorn als device.

Gruß

Christiab

justme1968

ich habe gerade eben einen bug repariert der zugeschlagen hat wenn eine 0 in der parameterliste aufgetaucht ist.

das sollte an morgen gehen.

als workaround müsste 1-1 gehen.

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

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

justme1968

@erwin: ich hab gerade mal geschaut wie ich die capture groups/match variablen bereut stellen kann und es geht nicht wirklich. das matchen der devices passiert nur zur definitions zeit (bzw. wenn in fhem neue devices angelegt werden).

wenn später die web seite aufgebaut wird habe ich  nur noch die liste der devices die tatsächlich relevant sind.

das würde ich auch ungern ändern weil ich dann nicht mehr optimieren kann.

wenn es wirklich nicht so wichtig ist würde ich es erst mal ruhen lassen bis mindestens noch jemand damit kommt :)

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

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

erwin

Hi Andre,
Zitatwenn es wirklich nicht so wichtig ist ...
Wie schon geschrieben, dieses Problem kann ich anders lösen.

Wenn du das implementieren könntest, wäre mein Problem schon gelöst:
Zitatich bin gerade dabei das zu erweitern. dann wird es so funktionieren:
attr valueIcon {"state.off" => {"fts_shutter_" . ReadingsVal("$DEVICE","state","0")} }

Danke erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

chris1284

Hi Andre, funktioniert mit dem substring nach dem Update, bekomme nun die Batterie-Werte.

Allerdings scheint ein einfaches valueIcon {'battery.ok' => 'batterie@lightgreen', 'battery.low' => 'batterie@red'} nicht mehr auf die Werte der Batterie zu greifen.
Iconpfad usw alles i.O. valueIcon {'mode.auto' => 'sani_heating_automatic','battery.ok' => 'batterie@lightgreen', 'battery.low' => 'batterie@red'} grift zumindest bei mode und in einer 2 Readingsgroup nur mit battery greift das icon auch.

justme1968

das mappen der der readings werte auf ein icon mit valueIcon geht nur mit 'echten' readings. nicht mit den strings die mit <{...}> eingefügt werden.

dazu gibt es zwei mögliche Lösungen:
- du verwendest valueFormat um den reading wert durch den wert zu ersetzen den du brauchst. etwas so:attr <rg> valueFormat {battery =>{ReadingsVal(substr($DEVICE,0,length("$DEVICE")-6),'Baterie','n.A.')} }

- deine <{...}> routine liefert direkt den namen des icons mit vorangestelltem % zurück. am besten über eine eigene rouinte in 99_myUtils.pm die du dann in etwas so aufrufst ...,<{myBat2Icon($DEVICE)}>,...


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

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

chris1284

#314
Danke für die schnelle Rückmeldung

Zitat von: justme1968
- du verwendest valueFormat um den reading wert durch den wert zu ersetzen den du brauchst. etwas so:attr <rg> valueFormat {battery =>{ReadingsVal(substr($DEVICE,0,length("$DEVICE")-6),'Baterie','n.A.')} }
Das haut in alle anderen Werte
ZitatHASH(0x14e64a8)
rein statt der gelesenen Werte.

Zitat von: justme1968
- deine <{...}> routine liefert direkt den namen des icons mit vorangestelltem % zurück. am besten über eine eigene rouinte in 99_myUtils.pm die du dann in etwas so aufrufst ...,<{myBat2Icon($DEVICE)}>,...
http://forum.fhem.de/Themes/fhem-curve-green/images/bbc/quote.gif

Funktioniert, direkt in der ReadingsGroup 
Zitat<%sani_heating>,<Act>,<Soll>,<Ist>,<Modus>,<Batterie> hz.*_Clima:ValvePosition,desired-temp,measured-temp,mode,<{if(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"battery","n.A.")eq"ok"){"%batterie\@green"}else{"%batterie\@red"}}>

Danke und Gruß

Christian