98_CustomReadings.pm

Begonnen von P.A.Trick, 31 August 2014, 16:30:11

Vorheriges Thema - Nächstes Thema

marvin78

Na so, wie man auch per notify auf andere Devices und readings reagiert. Das steht nun wirklich alles in der commandref.


dancatt

Zitat von: marvin78 am 12 November 2014, 07:25:19
Na so, wie man auch per notify auf andere Devices und readings reagiert. Das steht nun wirklich alles in der commandref.
:-) da hast du wohl recht.

Gibt es denn eigentlich eine einfache Möglichkeit um Readings anderer Devices mit einem Verweis in ein CustomReading einzutragen?
z.B.:
attr myReadings readingDefinitions RT1-desired-temp:HM-CC-RT-DN:desired-temp

Was eventuell auch nett wäre, wenn man jeder readingDefinitions sagen könnte wie das Intervall zum aktualisieren ist.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

HCS

Zitat von: dancatt am 12 November 2014, 08:24:36Gibt es denn eigentlich eine einfache Möglichkeit um Readings anderer Devices mit einem Verweis in ein CustomReading einzutragen?
Das würde eigentlich damit gehen, wenn das Komma nicht wäre.
attr myDeviceName readingDefinitions tempReading:{ReadingsVal ("TX29DTH_Outside","temperature",0)}
Muss mal überlegen, mit was man das Komma escapen sollte
Also so z.B.:
attr myDeviceName readingDefinitions tempReading:{ReadingsVal ("TX29DTH_Outside"^,"temperature"^,0)}
Oder so:
attr myDeviceName readingDefinitions tempReading:{ReadingsVal ("TX29DTH_Outside",,"temperature",,0)}


Zitat von: dancatt am 12 November 2014, 08:24:36p[/code]
Was eventuell auch nett wäre, wenn man jeder readingDefinitions sagen könnte wie das Intervall zum aktualisieren ist.
Den Wunsch zu erfüllen wird dann schon einiges aufwändiger. Das würde pro reading einen Timer bedeuten.

justme1968

abgesehen davon das ich nicht so ganz genau weiss warum man readings hin und her kopieren muss :):
wenn das problem das splitten am komm ist dann denke es ist besser nicht zu escapen sondern den parser so intelligent zu machen das er nach einer öffnenden { klammer so lange alle  teile inklusive der normalen nicht escapeden kommas zusammenbaut bis er die schliessende } klammer gefunden hat. das geht mit einem einfachen shift und .= auf die gesplittete liste.

schöner wäre es in fhem einen richtigen parser für so etwas zu haben aber so lange nur auf einer ebene gesplittet wird funktioniert das wieder zusammensuchen eigentlich recht gut.

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

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

HCS

Zitat von: justme1968 am 12 November 2014, 22:30:57
... das geht mit einem einfachen shift und .= auf die gesplittete liste ...

gruss
  andre
Würdest Du mir das ganz grob schreiben?
Einbauen und testen mache ich dann.
Sonst muss ich doch noch perl lernen  ;D ;D ;D

justme1968

das ist aber hilfreich wenn man fhem module baut :)

ich vermute dein problem ist das du das du selber das komma als trennzeichen verwendest und irgendwo etwas in der art hast:my @params = split(",", $def);
foreach $param (@params){
...
}


und das geht dann schief wenn das komma auch innerhalb eines parameters verwendet wird.

das kann man z.b. so 'fixen'

my @params = split(",", $def);
while (@params) {
  my $param = shift(@params);

  while ($param && $param =~ m/^:{/ && $param !~ m/}$/ ) {
     my $next = shift(@params);
     last if( !defined($next) );
    $param .= ",". $next;
  }
}


d.h es wird wie gehabt am , gesplittet aber dann wird geschaut ob der aktuelle teil ein :{ ohne zugehöriges } am ende enthält. wenn das so ist wird so lange das nächste element aus der gesplitteten liste noch mit dran gehängt bis es zum :{ das ein } am ende gefunden ist.

das ganze ist nicht idiotensicher aber für die aller meisten normalen fälle funktioniert es so gut das ich in readingGroup noch kein problem damit hatte.

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

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

HCS

Super, danke!
Jetzt muss es nur noch am Wochenende regnen, dann wird das was.

Zitat von: justme1968 am 20 November 2014, 16:25:09das ist aber hilfreich wenn man fhem module baut :)
Ja, kann man nicht wegdiskutieren  :)

HCS

Eingebaut und committed.
Komma innerhalb geschweifer Klammer geht nun.
Damit ist nun z.B folgende Definition möglich:

define myReadings CustomReadings
tempReading:{ReadingsVal ("TX29DTH_Outside","temperature",0)}

dancatt

Moin,

erstmal vielen Dank für die Umsetzung.
Es müsste nur noch die Commandref und das Wiki angepasst werden :-)

Vielen Dank.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

HCS

Eventuell erbarmt sich ja P.A.Trick wegen dem wiki  ;)

Fuchks

#55
Besten Dank für das tolle Modul, war aus meiner Sicht überfällig so ein Modul zu haben!

Wenn man ein Reading auf mehrere Readings aufteilen möchte, geht das aus meiner Sicht derzeit nur recht umständlich.
Das wäre vielleicht noch was für die Weiterentwicklung...

Beispiel dazu:
rawreading: "TempIn 21,2 °C TempOut -2,3 °C Wind 5,3 km/h"
soll in diese Readings aufgeteilt werden:
Innentemp: 21,2
Aussentemp: -2,3
Windgeschwindigkeit: 5,3

Meine derzeitige Lösung sieht so aus (das Modul ist definiert als WetterReading):
readingDefinitions: rawreading:qx(Wetter), Innentemp:{[split (/ /, ReadingsVal("WetterReading", "rawreading", ""))->[1]}, Aussentemp:{[split (/ /, ReadingsVal("WetterReading", "rawreading", ""))->[4]}, Windgeschwindigkeit:{[split (/ /, ReadingsVal("WetterReading", "rawreading", ""))->[7]}

Aus meiner Sicht ganz schön umständlich und es wird ein Hilfsreading benötigt, das man eigentlich gar nicht braucht...
Vielleicht geht das ja auch eleganter mit den derzeitigen Mitteln zu lösen?

EDIT: Gerade dazu einen Beitrag gefunden, Änderung muss wohl noch eingecheckt werden

Holgi0815

Hi Ihr,

ich nutze schon seit einiger Zeit das CustomReadings um z.B. meine Plattenbelegung via "df -h" einmal Nachts abzufragen um ggf.eingreifen zukönnen!! Danke für das Modul.

Nun habe ich mir noch mal was "zusammengereimt" was Euch vieleicht auch interessieren könnte und in diese Disskussion passen könnte:
Ich habe fhem auf einem debian und eine FritzBox ohne fhem.

- "curl" muß installiert sein

dann über die FHEM WebObefläche:
define CR_FritzBox CustomReadings
attr CR_FritzBox readingDefinitions IP:qx(curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" 2>&1)

ergibt:
Zitat
IP
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 657 100 377 100 280 45317 33657 --:--:-- --:--:-- --:--:-- 75400 77.6.51.196
da ist schonmal die externe IP abzulesen und die Zahlen sollten die aktuellen Up/Down load Statistiken sein.....

mit einem "vernünftigen" Split in unterschiedliche Readings habe ich mich auch noch nicht weiter auseinandergesetzt
und eine saubere Speicherung in die fhem.cfg ist mir auch noch nicht gelungen (das ist das Zeilenumbruch problem denke ich)

Nur mal so als Info
Viele Grüße
Holger

PS: solche Dinge lassen sich sicherlich auch in einem .sh Script oder via 99_Utils.pm "auseinanderbröseln", aber wenn´s auch Zentral geht warum nicht...

HCS


P.A.Trick

Ich glaube ich habe noch einen kleinen Bug gefunden. Wenn ich das Intervall z.B. auf eine Stunde setze und danach
wieder auf 10 Sekunden wird das neue Intervall nicht mehr aktualisiert.
@HCS: Kannst du das bei der nächsten Version vielleicht fixen?
Danke im Voraus!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

HCS

Ist eigentlich kein Bug. Wenn die Stunde rum ist, geht es im 10 Sekunden Takt weiter.
Muss mal schauen, ob ich, wenn man das Atribut setzt, den aktuellen Timer sofort abbrechen kann und mit dem neuen Interval wieder starte.