FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rhoffm34 am 28 Oktober 2017, 18:04:40

Titel: Rechnen in FHEM
Beitrag von: rhoffm34 am 28 Oktober 2017, 18:04:40
Hallo zusammen,

ich würde gerne die Ventil Positionen meiner Homematic RTs aufaddieren und durch die Anzahl der RTs teilen um einen Mittelwert aller Ventil Positionen zu ermitteln.

Kann mir jemand weiter helfen wie das zu bewerkstelligen ist?

Danke im voraus...
Titel: Antw:Rechnen in FHEM
Beitrag von: amenomade am 28 Oktober 2017, 18:31:17
addieren mit "+" und teilen mit "/"

Ansonsten im CommandRef nach "average" suchen
z.B. https://fhem.de/commandref_DE.html#DOIF_aggregation
Titel: Antw:Rechnen in FHEM
Beitrag von: rhoffm34 am 28 Oktober 2017, 18:40:25
Das ganze dann in ein notify?
Titel: Antw:Rechnen in FHEM
Beitrag von: amenomade am 28 Oktober 2017, 18:49:56
Zum Beispiel. Oder ein userreading. Oder ein DOIF wenn Du den Link nach DOIF Aggregation folgst..; hast Du zumindest den Link geguckt? Es gibt ein Beispiel, das fast schon macht, was du machen möchtest

ZitatDurchschnittstemperatur aller Temperatursensoren in der Gruppe "rooms":
Titel: Antw:Rechnen in FHEM
Beitrag von: rhoffm34 am 04 November 2017, 11:05:46
Also folgendes habe ich in DOIF eingetragen:
   
([+10]) (set RT_Regler_Average {(
[HM_RT_xyz_Clima:ValvePosition]
+[HM_RT_BAD_ELTERN_Handtuch_Clima:ValvePosition]
+[HM_RT_BAD_ELTERN_Fussboden_Clima:ValvePosition]
+[HM_RT_Bad_Kinder_Clima:ValvePosition]
+[HM_RT_BueroGarten_Clima:ValvePosition]
+[HM_RT_BueroVorne_Clima:ValvePosition]
+[HM_RT_Einlieger_Bad_Clima:ValvePosition]
+[HM_RT_Einlieger_WZ_Garten_Clima:ValvePosition]
+[HM_RT_Einlieger_WZ_Vorne_Clima:ValvePosition]
+[HM_RT_abc_Clima:ValvePosition]
+[HM_RT_WZ_li_Clima:ValvePosition]
+[HM_RT_WZ_re_Clima:ValvePosition]
)/12})

Das wird auch ausgeführt, aber leider nur ein mal....  leider. Was kann ich machen das es kontinuierlich abgearbeitet wird?
Titel: Antw:Rechnen in FHEM
Beitrag von: Thorsten Pferdekaemper am 04 November 2017, 11:07:40
Zitat von: rhoffm34 am 04 November 2017, 11:05:46
Das wird auch ausgeführt, aber leider nur ein mal....  leider. Was kann ich machen das es kontinuierlich abgearbeitet wird?
"at" anstatt "DOIF" verwenden
Gruß,
   Thorsten
Titel: Antw:Rechnen in FHEM
Beitrag von: A13x am 04 November 2017, 11:15:00
nimm doch einfach das Valves Modul  ;)
Titel: Antw:Rechnen in FHEM
Beitrag von: Damian am 04 November 2017, 14:04:21
define
Zitat von: rhoffm34 am 04 November 2017, 11:05:46
Also folgendes habe ich in DOIF eingetragen:
   
([+10]) (set RT_Regler_Average {(
[HM_RT_xyz_Clima:ValvePosition]
+[HM_RT_BAD_ELTERN_Handtuch_Clima:ValvePosition]
+[HM_RT_BAD_ELTERN_Fussboden_Clima:ValvePosition]
+[HM_RT_Bad_Kinder_Clima:ValvePosition]
+[HM_RT_BueroGarten_Clima:ValvePosition]
+[HM_RT_BueroVorne_Clima:ValvePosition]
+[HM_RT_Einlieger_Bad_Clima:ValvePosition]
+[HM_RT_Einlieger_WZ_Garten_Clima:ValvePosition]
+[HM_RT_Einlieger_WZ_Vorne_Clima:ValvePosition]
+[HM_RT_abc_Clima:ValvePosition]
+[HM_RT_WZ_li_Clima:ValvePosition]
+[HM_RT_WZ_re_Clima:ValvePosition]
)/12})

Das wird auch ausgeführt, aber leider nur ein mal....  leider. Was kann ich machen das es kontinuierlich abgearbeitet wird?

Wozu so kompliziert und dann noch ständige  Timer-Trigger:

define RT_Regler_Average DOIF (1)
attr RT_Regler_Average state [#avarage:"Clima$:ValvePosition":ValvePosition]


hier brauchst du keinen Dummy, keine Timer, keinen set-Befehl und der Status wird nur aktualisiert, wenn sich was ändert  und es ist gerade mal ein Zweizeiler;)
Titel: Antw:Rechnen in FHEM
Beitrag von: rhoffm34 am 04 November 2017, 18:21:50
Hallo Thorsten,

wenn ich deinen Zweizeiler eingebe erhalte ich folgende Fehlermeldung...:

RT_Regler_Average DOIF: expected DOELSEIF or DOELSE: attr RT_Regler_Average state [#avarage:"Clima$:ValvePosition":ValvePosition]

Gruß Ralf
Titel: Antw:Rechnen in FHEM
Beitrag von: rhoffm34 am 04 November 2017, 18:54:29
Also....


.... ich habe das jetzt mal in zwei Schritten eingegeben und siehe da..

1. define RT_Regler_Average DOIF (1)

2. attr RT_Regler_Average state [#avarage:"Clima$:ValvePosition":ValvePosition]


... es klappt. Allerdings war noch ein Schreibfehler : average , nicht avarage. Dann hats geklappt.

Vielen Dank Thorsten.

Das war natürlich viel sauberer als meine Version.

Vielleicht kannst Du mir hier auch helfen...

Ich würde gerne Rücklauftemperatur von der Vorlauftemperatur (Zentralheizung) subtrahieren.

Vielen Dank schon mal im voraus.

Gruß. Ralf
Titel: Antw:Rechnen in FHEM
Beitrag von: amenomade am 04 November 2017, 19:24:00
ZitatDas war natürlich viel sauberer als meine Version.

Naja... hättest Du gesucht, wo ich dir hier https://forum.fhem.de/index.php/topic,78618.msg705875.html#msg705875 geschrieben hatte, hättest Du folgendes Beispiel gefunden:
Zitat von: CommandRefStatusanzeige: Durchschnittstemperatur aller Temperatursensoren in der Gruppe "rooms":
define di_average_temp DOIF
attr di_average_temp state [#average:d2:":temperature":temperature:$group eq "rooms"]
und wärest Du schon fast zum Ziel gewesen...

Für deine Differenz, musst Du ein bischen genauer sein... Woher Vorlauf und Rücklauftemperatur? Sind das eigene Devices? Readings von einem Device?
Wenn Zentralheizung ein Device ist, der zwei Readings Ruecklauftemperatur und Vorlauftemperatur hat, kannst Du ein userReading auf Zentralheizung bauen.
attr Zentralheizung userReadings diffVorRueck {ReadingsVal("Zentralheizung","Vorlauftemperatur ",0)-ReadingsVal("Zentralheizung","Ruecklauftemperatur",0)}


Sonst geht es auch mit:
define difftemp DOIF (1)
attr difftemp state Diff: {([Zentralheizung:Vorlauftemperatur]-[Zentralheizung:Ruecklauftemperatur])}
aber da hast Du dann ein zusätzliches DOIF, der nur für eine Differenz steht. M.A. ist es besser mit einem userReading, der an die Heizung auch hängt.
Titel: Antw:Rechnen in FHEM
Beitrag von: rhoffm34 am 08 November 2017, 23:04:32
Vielen Dank für Eure Informationen. Es passt jetzt so wie ich das haben wollte.... Danke

Eine Berechnung hätte ich aber noch gerne durchgeführt...

Ich bin ganz ehrlich, ich tue mir sehr schwer mit der Syntax. Ich komme zwar irgendwann auch alleine ans Ziel, dann ist es aber meistens ein Workaround und nicht so eine elegante Lösung wie von amenomade oder von Damian.

Also:

Ich möchte den mittleren Verbrauch über einen bestimmten Zeitraum, sagen wir mal 10 Minuten meiner Gasheizung errechnen:

Also...:

Jetzt Gaszählerstand = 7900,00

in 10 minuten Gaszählerstand = 7900,15

==> 7900,15 - 7900,00 = 0,15

Ergebnis= 0,15 m² Gas verbraucht innerhalb 10 Minuten.

Erstmal Danke