ReadingsValue und $EVTPART3

Begonnen von cerberus, 05 August 2016, 08:45:36

Vorheriges Thema - Nächstes Thema

cerberus

Hallo, wie kann ich aus einem solchen Reading Wert


day    D04 E-EnergyB: 32.01 kWh E-EnergyBM: 60.84 kWh E-EnergyL: 12.22 kWh E-EnergyLM: 23.87 kWh

mit der Funktion ReadingsValue und $EVTPART3 eine bestimmten Wert dieses Readings extrahieren und für die Funktion userReadings nutzen um ein neues Reading zu berechnen?

Also angenommen ich möchte von dem Reading "E-EnergyB" den 3. Wert aus dem Reading "day" subtrahieren um z.B. ein userReading "E-EnergyBTD" zu erstellen?

Grüße
cerberus
   
Banana PI mit Bananian + Fhem 5.5, 2x SCC SlowRF/Homematic + RS485 LAN Gateway HMW-LGW-O-DR-GS-EU + RPI2 I2C to 1-Wire Host Adapter for Raspberry Pi

DeeSPe

#1
Zitat von: cerberus am 05 August 2016, 08:45:36
Hallo, wie kann ich aus einem solchen Reading Wert


day    D04 E-EnergyB: 32.01 kWh E-EnergyBM: 60.84 kWh E-EnergyL: 12.22 kWh E-EnergyLM: 23.87 kWh

mit der Funktion ReadingsValue und $EVTPART3 eine bestimmten Wert dieses Readings extrahieren und für die Funktion userReadings nutzen um ein neues Reading zu berechnen?

Also angenommen ich möchte von dem Reading "E-EnergyB" den 3. Wert aus dem Reading "day" subtrahieren um z.B. ein userReading "E-EnergyBTD" zu erstellen?

Grüße
cerberus

Probiere es doch einmal mit z.B.:
ReadingsNum(<devicename>,<reading>,<defaultvalue>)

Gruß
Dan

Edit: Sorry hatte die Schreibweise falsch.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

cerberus

Hallo Dan, danke für die Info, aber ich glaube das funktioniert nicht. Diese Funktion Filtert, so wie ich verstehe, nur die numerischen Werte. Wie kann ich damit definieren (wie z.B. mit $EVTPART), das ich eine bestimmte Stelle des Readings haben will?

so ähnlich wie hier

https://forum.fhem.de/index.php/topic,34914.msg272959.html#msg272959

Grüße cerberus
Banana PI mit Bananian + Fhem 5.5, 2x SCC SlowRF/Homematic + RS485 LAN Gateway HMW-LGW-O-DR-GS-EU + RPI2 I2C to 1-Wire Host Adapter for Raspberry Pi

JoWiemann

Hallo,

Du könntest es mit split() machen:


(split(" ", "D04 E-EnergyB: 32.01 kWh E-EnergyBM: 60.84 kWh E-EnergyL: 12.22 kWh E-EnergyLM: 23.87 kWh"))[n]


[n] ist durch den Index der Werteposition zu ersetzen.
  • für D04, [3] für kWh

    Für Dein Reading würde das dann so aussehen:

    (split(" ", ReadingsVal(<Dein Device>,"day",""))[n]


    Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

DeeSPe

Zitat von: JoWiemann am 05 August 2016, 10:27:55
Hallo,

Du könntest es mit split() machen:


(split(" ", "D04 E-EnergyB: 32.01 kWh E-EnergyBM: 60.84 kWh E-EnergyL: 12.22 kWh E-EnergyLM: 23.87 kWh"))[n]


[n] ist durch den Index der Werteposition zu ersetzen.
  • für D04, [3] für kWh

    Für Dein Reading würde das dann so aussehen:

    (split(" ", ReadingsVal(<Dein Device>,"day",""))[n]


    Grüße Jörg
Die split Funktion hatte ich extra nicht genannt weil es dazu etwas Erfahrung mit Perl braucht.
Du könntest aber $EVTPART einsetzen, zähle dazu einfach die einzelnen Wörter/Zahlen/Einheiten deines Readings die durch Leerzeichen getrennt sind und setze die ermittelte Zahl hinter $EVTPART.

Also wenn das Reading "day" bei Dir so aussieht:
D04 E-EnergyB: 32.01 kWh E-EnergyBM: 60.84 kWh E-EnergyL: 12.22 kWh E-EnergyLM: 23.87 kWh
dann sollte es $EVTPART3 = 32.01  sein, $EVTPART6 = 60.84, $EVTPART9 = 12.22 und $EVTPART12 = 23.87

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

cerberus

Zitat von: DeeSPe am 05 August 2016, 11:05:18
Die split Funktion hatte ich extra nicht genannt weil es dazu etwas Erfahrung mit Perl braucht.
Du könntest aber $EVTPART einsetzen, zähle dazu einfach die einzelnen Wörter/Zahlen/Einheiten deines Readings die durch Leerzeichen getrennt sind und setze die ermittelte Zahl hinter $EVTPART.

Also wenn das Reading "day" bei Dir so aussieht:
D04 E-EnergyB: 32.01 kWh E-EnergyBM: 60.84 kWh E-EnergyL: 12.22 kWh E-EnergyLM: 23.87 kWh
dann sollte es $EVTPART3 = 32.01  sein, $EVTPART6 = 60.84, $EVTPART9 = 12.22 und $EVTPART12 = 23.87

Gruß
Dan

Danke Dan, wie würde dann der String mit der Funktion readingsValue aussehen? ich weiß nicht genau wo ich dann $EVTPART3 mit Readingsvalue. Oder funktioniert das nur mit Notify?

Gruß
cerberus
Banana PI mit Bananian + Fhem 5.5, 2x SCC SlowRF/Homematic + RS485 LAN Gateway HMW-LGW-O-DR-GS-EU + RPI2 I2C to 1-Wire Host Adapter for Raspberry Pi

DeeSPe

Mit ReadingsVal musst Du die von Jörg vorgeschlagene Variante mit split nehmen:
(split(" ", ReadingsVal(<Dein Device>,"day",""))[n]

n ersetzen mit der n-ten Stelle beginnend bei 0 (Null).
Also:
(split(" ", ReadingsVal(<Dein Device>,"day",""))[2]
gleich 32.01

(split(" ", ReadingsVal(<Dein Device>,"day",""))[5]
gleich 60.84

(split(" ", ReadingsVal(<Dein Device>,"day",""))[8]
gleich 12.22

(split(" ", ReadingsVal(<Dein Device>,"day",""))[11]
gleich 23.87

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

cerberus

Danke Dan und Jörg, habe es mit euere Hilfe hin bekommen.

Wenn ich zu Hause bin schreibe noch nochmal hier rein wie genau.

Grüße
cerberus
Banana PI mit Bananian + Fhem 5.5, 2x SCC SlowRF/Homematic + RS485 LAN Gateway HMW-LGW-O-DR-GS-EU + RPI2 I2C to 1-Wire Host Adapter for Raspberry Pi

cerberus

So hier mal der Code wie ich es gemacht haben

E-EnergyBTD {ReadingsVal("OWC1", "E-EnergyB", 0) - (split ' ', ReadingsVal("OWC1","day","")) [2]}, E-EnergyLTD  {ReadingsVal("OWC1", "E-EnergyL", 0) - (split ' ', ReadingsVal("OWC1","day","")) [8]}

Ich berechne via userReading aus den Readings eines OWCOUNT den Energiebezug und die Energielieferung des Tages als Differenz zwischen dem letztem Zählerstand gestern und dem aktuellem von heute, so erhalte ich den Energie-Tagesbezug bzw. die Tageslieferung.

Grüße
cerberus
Banana PI mit Bananian + Fhem 5.5, 2x SCC SlowRF/Homematic + RS485 LAN Gateway HMW-LGW-O-DR-GS-EU + RPI2 I2C to 1-Wire Host Adapter for Raspberry Pi