FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Nobby1805 am 29 März 2018, 13:24:11

Titel: Readings verschiedener Geräte addieren
Beitrag von: Nobby1805 am 29 März 2018, 13:24:11
Hallo,
es ist zwar kein spezifisches HM-Problem aber ich frage es mal hier ...

wie kann ich ein Reading (power) verschiedener Devices (HM-ES-PMSw1-Pl) addieren und als Reading in einem Dummy-Device darstellen?
Ich habe jetzt alles mögliche durchsucht hat aber nichts gefunden

Alternativ zur Berechnung im FHEM wäre die Summation auch im FTUI möglich, da ich die Werte auf einer FTUI-Seite darstelle

Danke für jeden Tipp, Nobby
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: CoolTux am 29 März 2018, 13:37:46
Notify erstellen. Alle Devices mit Reading power als Regex im Trigger benennen und dann im Notify die Berechnung ausführen in dem man alle Devices mit ReadingsVal ab fragt.

Wäre meine erste Idee.
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Otto123 am 29 März 2018, 13:39:24
Hi,

set dummy {([dev1:power]+[dev2:power])}

Gruß Otto
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: eisman am 29 März 2018, 13:40:01
hi,

ich glaube mit perl?

$WLicht = ($SLicht+$HLicht)/2;

SLicht  = Lichtsensor          => Straße
HLicht  = Lichtsensor          => Hof
WLicht = gesamt wert /2    => wird ins dummy geschrieben

gruss
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Pfriemler am 29 März 2018, 15:38:15
Zitat von: eisman am 29 März 2018, 13:40:01
SLicht  = Lichtsensor          => Straße
HLicht  = Lichtsensor          => Hof
WLicht = gesamt wert /2    => wird ins dummy geschrieben

Falsche Baustelle? Die Addition zweiter power-Readings war gefragt.
Ansonsten bin ich ganz bei CoolTux und Otto: Während innerhalb eines Gerätes die Zusammenfassung mehrerer Readings in ein Userreading ideal ist, empfiehlt sich hier ganz klar, auf die Änderungen aller drei Werte entsprechend mit Notify zu reagieren und das abzuspeichern - entweder als State wie Otto schreibt, alternativ mit setreading in ein spezielles Reading des Dummys (etwa falls man mehrere Werte dort bunkern möchte).

Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: eisman am 29 März 2018, 17:50:57
Zitat von: Pfriemler am 29 März 2018, 15:38:15
Falsche Baustelle? Die Addition zweiter power-Readings war gefragt.
Ansonsten bin ich ganz bei CoolTux und Otto: Während innerhalb eines Gerätes die Zusammenfassung mehrerer Readings in ein Userreading ideal ist, empfiehlt sich hier ganz klar, auf die Änderungen aller drei Werte entsprechend mit Notify zu reagieren und das abzuspeichern - entweder als State wie Otto schreibt, alternativ mit setreading in ein spezielles Reading des Dummys (etwa falls man mehrere Werte dort bunkern möchte).

hi, nicht ganz
op licht oder power, es ging um Readings

da ich es früher mal als Userreading hatte (öfter mal Probleme mit der Aktualisierung)

habe ich mir erlaubt, die meisten Sachen in einer sub() auszulagern.
da hat man mehr Möglichkeiten und weniger Probleme.
(oben war nur ein beispiel)

gruss
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Nobby1805 am 29 März 2018, 18:09:28
Ich habe mir mal das Thema notify im Wiki angesehen und teste jetzt schon eine ganze Zeit rum ... aber irgendwie scheint auch in der jetzt reduzierten Version mit nur 2 Eingängen kein notify erzeugt zu werden
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Otto123 am 29 März 2018, 18:18:15
Zitat von: Nobby1805 am 29 März 2018, 18:09:28
Ich habe mir mal das Thema notify im Wiki angesehen und teste jetzt schon eine ganze Zeit rum ... aber irgendwie scheint auch in der jetzt reduzierten Version mit nur 2 Eingängen kein notify erzeugt zu werden
Was genau meinst Du?  :o :o :o
Warum triggerst Du auf powerwerte und setzt den ActionDetector auf update?

Wolltest Du nicht addieren?

Von mir aus schreib doch jetzt in den Ausführungsteil an statt set ActionDetector
setreading PowerNotify SummPower {([Aqua_Pwr:power]+[Buero_Pwr:power])}

Und poste bitte keine Screenshots sonders list ....

Gruß Otto
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: CoolTux am 29 März 2018, 18:23:01
Auf jeden Fall hat das Notify angeschlagen.
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Nobby1805 am 29 März 2018, 18:34:59
Zitat von: CoolTux am 29 März 2018, 18:23:01
Auf jeden Fall hat das Notify angeschlagen.
Woran siehst du das? Im Event-Monitor wird nichts angezeigt
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Nobby1805 am 29 März 2018, 18:38:15
Zitat von: Otto123 am 29 März 2018, 18:18:15
Was genau meinst Du?  :o :o :o
Warum triggerst Du auf powerwerte und setzt den ActionDetector auf update?

Wolltest Du nicht addieren?

Von mir aus schreib doch jetzt in den Ausführungsteil an statt set ActionDetector
setreading PowerNotify SummPower {([Aqua_Pwr:power]+[Buero_Pwr:power])}

Und poste bitte keine Screenshots sonders list ....

Gruß Otto
Den Actiondetector auf Update  habe ich dann wieder gesetzt nachdem die Summation nicht geklappt hat ... Ch versuche es jetzt später nochmal mit deinem setreading
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: CoolTux am 29 März 2018, 18:42:11
Zitat von: Nobby1805 am 29 März 2018, 18:34:59
Woran siehst du das? Im Event-Monitor wird nichts angezeigt

Dein STATE hat ein Timestamp
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Nobby1805 am 29 März 2018, 18:50:46
Zitat von: CoolTux am 29 März 2018, 18:42:11
Dein STATE hat ein Timestamp
Den hat er m.E. Bei der Letzten Änderung der Einstellung erhalten und danach auch bei einer Veränderung der Eingangswerte nicht mehr verändert
Steht jetzt um 18:51 immer noch auf 18:00
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Otto123 am 29 März 2018, 18:55:08
Probier den Ausführungsteil auch gerne ohne notify einfach in der FHEM Kommandozeile.
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: CoolTux am 29 März 2018, 19:06:44
Zitat von: Nobby1805 am 29 März 2018, 18:50:46
Den hat er m.E. Bei der Letzten Änderung der Einstellung erhalten und danach auch bei einer Veränderung der Eingangswerte nicht mehr verändert
Steht jetzt um 18:51 immer noch auf 18:00

Dann bitte ein list vom Notify
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: eisman am 29 März 2018, 19:26:38
hi,


userReadings powersume {ReadingsVal("ST01C2","power",0) + ReadingsVal("ST01C2","power",0)}


oder notify


defmod nPower notify ST01C2:power:.*|ST01C2:power:.* {\
   my $power1 = ReadingsVal("ST01C2","power",0);;\
   my $power2 = ReadingsVal("ST01C2","power",0);;\
   my $power  = 0;;\
   $power = $power1 + $power2;;\
   fhem("set Power " . $power . ";;");;\


ST01C2 device
Power dummy

bei mir gehts (aufwand 1min)

gruss
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: Nobby1805 am 29 März 2018, 19:49:59
Zitat von: Otto123 am 29 März 2018, 18:18:15
Von mir aus schreib doch jetzt in den Ausführungsteil an statt set ActionDetector
setreading PowerNotify SummPower {([Aqua_Pwr:power]+[Buero_Pwr:power])}

Und poste bitte keine Screenshots sonders list ....
Ich meine zwar, dass mein 2. oder 3. Versuch genau so aussah ... aber jetzt klappt es

Danke an alle Helferlein  ;D
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: stefan.apetz am 22 November 2022, 09:35:24
Moin,

schon ein älteres Thema, aber ich greife es nochmal auf.

Folgende Definition:

defmod SolarPower notify Shelly_Gartenhaus:power:.*|Shelly_Solar_Garage:power:.*|solax:pv_total_power:.*|solax:home_power:.*|solax:battery_remain_capacity:.*|solax:grid_feed_in_power:.* {

   my $power1 = ReadingsVal("Shelly_Gartenhaus","power",0);;
   my $power2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
   my $power3 = ReadingsVal("solax","pv_total_power",0);;
   my $power  = 0;;
   $power = $power1 + $power2 + $power3;;

   my $consumption1 = ReadingsVal("solax","home_power",0);;
   my $consumption2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
   my $consumption3 = ReadingsVal("Shelly_Gartenhaus","power",0);;
   
   my $houseConsumption = 0;;
   $houseConsumption =  $consumption1 + $consumption2 + $consumption3;;

   my $batteryPower = ReadingsVal("solax","battery_power",0);;
   my $battery_remain_capacity = ReadingsVal("solax","battery_remain_capacity",0);;
   my $inverter_powerexported = ReadingsVal("solax","grid_feed_in_power",0);;
   
   $consumption1 = "Test";;
   
   fhem("setreading virtualSolar home_power" . "$consumption1");;
   fhem("setreading virtualSolar pv_total_power" . $power . ";;");;
   fhem("setreading virtualSolar battery_remain_capacity" . $battery_remain_capacity . ";;");;
   fhem("setreading virtualSolar battery_power" . $batteryPower . ";;");;
   fhem("setreading virtualSolar grid_feed_in_power" . $inverter_powerexported . ";;");;
   fhem("setreading virtualSolar test 12345678");;
   }


In meinem Zieldevice wird das Reading test mit 12345678 richtig geschrieben. Das auch bei jedem Notify. Aber: alle andere kommt nicht an. Sprich: das setreading wird nicht ausgeführt.

Das Log schmeisst zudem folgendes:

2022.11.22 09:21:46 1: PERL WARNING: "my" variable $consumption1 masks earlier declaration in same scope at (eval 478) line 1.
2022.11.22 09:21:46 1: PERL WARNING: Use of uninitialized value $consumption1 in concatenation (.) or string at (eval 478) line 1.


Wo ist mein (Denk-) Fehler?

Danke :-)
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: frank am 22 November 2022, 10:00:11
da fehlen leerzeichen zwischen readingname und value.
bsp:
fhem("setreading virtualSolar pv_total_power $power");;
Titel: Antw:Readings verschiedener Geräte addieren
Beitrag von: stefan.apetz am 22 November 2022, 11:19:04
Danke, hat geklappt. Lässt sich ja auch einfacher / schöner darstellen:

defmod SolarPower notify Shelly_Gartenhaus:power:.*|Shelly_Solar_Garage:power:.*|solax:pv_total_power:.*|solax:home_power:.*|solax:battery_remain_capacity:.*|solax:grid_feed_in_power:.* {

   my $power1 = ReadingsVal("Shelly_Gartenhaus","power",0);;
   my $power2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
   my $power3 = ReadingsVal("solax","pv_total_power",0);;
   my $power  = 0;;
   $power = $power1 + $power2 + $power3;;

   my $hausverbrauch1 = ReadingsVal("solax","home_power",0);;
   my $hausverbrauch2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
   my $hausverbrauch3 = ReadingsVal("Shelly_Gartenhaus","power",0);;
   
   my $houseConsumption = 0;;
   
   $houseConsumption = $hausverbrauch1 + $hausverbrauch2 + $hausverbrauch3;;

   my $batteryPower = ReadingsVal("solax","battery_power",0);;
   my $battery_remain_capacity = ReadingsVal("solax","battery_remain_capacity",0);;
   my $inverter_powerexported = ReadingsVal("solax","grid_feed_in_power",0);;
   
   
   
   fhem("setreading virtualSolar home_power $houseConsumption");;
   fhem("setreading virtualSolar pv_total_power $power");;
   fhem("setreading virtualSolar battery_remain_capacity $battery_remain_capacity");;
   fhem("setreading virtualSolar battery_power $batteryPower");;
   fhem("setreading virtualSolar grid_feed_in_power $inverter_powerexported ");;
   }


Jetzt hab ich alles korrekt in meinem Dummy Device :-)
Titel: Aw: Readings verschiedener Geräte addieren
Beitrag von: NewbieNew am 24 März 2023, 08:57:11
Guten Morgen,
ich hoffe, es ist ok, wenn ich hier frage:

Zitat von: Otto123 am 29 März 2018, 13:39:24Hi,

set dummy {([dev1:power]+[dev2:power])}
Gruß Otto

Wie kann ich die Summe des dummy aktuell halten? Einmal erstellt, bleibt sie Summe so und aktualisiert sich nicht.

Besten Dank
Titel: Aw: Readings verschiedener Geräte addieren
Beitrag von: Otto123 am 24 März 2023, 09:15:46
Guten Morgen,

diesen Befehl immer wieder ausführen: ein at Zeitgesteuert, ein notify Event gesteuert.

Gruß Otto
Titel: Aw: Readings verschiedener Geräte addieren
Beitrag von: juemuc am 24 März 2023, 14:36:37
Anbei eine weitere Alternative:

https://fhem.de/commandref_DE.html#DOIF_aggregation

Viele Grüße
Jürgen