[gelöst] Differenz von zwei userreadings in dummy schreiben

Begonnen von Mazz78, 25 Januar 2017, 07:16:28

Vorheriges Thema - Nächstes Thema

Mazz78

Hallo zusammen,

ich bräuchte hier eure (Programmier-)Unterstützung.

Vorab... ja ich habe die Suchfunktion verwendet und mir auch schon den Wolf gegoogled.  ;D

Kurz beschrieben was ich möchte:
Die beiden angelegten userreadings VentSpeed stellen die Lüftergeschwindigkeit der Lüftungsanlage dar.
Wobei VentSpeed_Zuluft ist immer höher ist.
Wenn im Sommer der Grobfilter oder im Winter die Lüftungsgitter vereist sind, driften die beiden Zahlenwerte auseinander.
Wenn die Differenz der beiden Werte eine bestimmte Grenze überschreitet, soll eine PushMeaage abgesetzt werden.

Für das Device LWZ403 (Modul THZ) habe ich die zwei userreadings:

   VentSpeed_Zuluft
   VentSpeed_Abluft

Beide sind mit Zahlenwerte ohne Einheit beschrieben.
Die Differenz der beiden userreadings möchte ich nun in ein Dummy übergeben.
Später möchte ich den Dummy für eine Push Message verwenden.

Wenn ich ehrlich bin hab ich grad kein Plan wie ich das darstellen kann/soll.
Ich hab mal damit angefangen...


define delta_VentSpeed dummy

define LWZ403_VentSpeed_anDummy at +*01:00:00 {\
my $VSA = "VentSpeed_Abluft ".ReadingsVal("LWZ403","VentSpeed_Abluft","");;\
my $VSZ = "VentSpeed_Zuluft ".ReadingsVal("LWZ403","VentSpeed_Zuluft","");;\
$delta = $VSZ-$VSA;;\
fhem ("set delta_VentSpeed $delta");;\
}

define Push_VentSpeed notify dummy_VentSpeed { if ( Value ("delta_VentSpeed") > 15) && ( ReadingsVal ("LWZ403","Aussentemperatur") < 0)) { fhem ("set Push message Lüftungsgitter auf Vereisung prüfen");


Hier habe ich jetzt die VSA von der VSZ abgezogen, weil ich nicht weiß wie man die Differenz sonst noch darstellen könnte.
Auch mit den Klammern bin ich mir total unsicher.

Könntet ihr das mal anschauen ?

Gibt es außer mit dem at-Befehl, vielleicht noch eine bessere/praktischere Weise den Dummy zu befüllen ?

Schon mal Danke vorab

RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA

marvin78

#1
Warum denn ein Dummy und nicht ein weiteres userReading im Device? Bei richtiger Config kannst du auch das als Grundlage für push-Nachrichten verwenden und sparst das at.

Bitte nicht die config direkt editieren. Das nimmt bei vielen Dingen die Unsicherheit!

+*01:00:00 {
my $VSA = ReadingsNum("LWZ403","VentSpeed_Abluft",0);
my $VSZ = ReadingsNum("LWZ403","VentSpeed_Zuluft",0);
$delta = $VSZ-$VSA;
fhem ("set delta_VentSpeed $delta");
}


Code für den DEF Bereich des ats.

Omega

Such mal in der Commandref nach difference. Damit hast du die Differenz bereits im Device und benötigst kein extra Dummy.
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

Mazz78

#3
Hallo,

erst mal danke euch beiden für die schnellen Antworten.

Den Code von Marvin hab ich gestern probiert, obwohl er recht plausibel aussieht, wird mir aber folgende Fehlermeldung ausgegeben

Bad regexp: Nested quantifiers in regex; marked by <-- HERE in m/^+* <-- HERE 01:00:00$/ at ./FHEM/91_notify.pm line 44.


Kann jemand damit was anfangen? In der Commandref für at, steht es ja auch so beschrieben  ???


+*01:00:00


Falls das nicht klappt probier ich den Vorschlag mit dem difference.
RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA

marvin78

Es ist Code für das DEF in der Detailansicht nicht für das Einfügen in die Config.

Am besten lagerst du das aber ohnehin in eine myUtils aus.

Mazz78

#5
Hier die (vorläufige) Lösung...


define delta_VentSpeed dummy

define VentSpeed_anDummy at +*01:00:00 {\
my $VSA = ReadingsNum("LWZ403","VentSpeed_Abluft",);;\
my $VSZ = ReadingsNum("LWZ403","VentSpeed_Zuluft",);;\
my $delta = $VSZ-$VSA;;\
fhem ("set delta_VentSpeed $delta");;\
}



Den Modifier difference für userreadings hab ich in der Commenref angeschaut, aber ich komm ehrlich gesagt nicht klar damit.
Und ich möchte auch daran zweifeln dass es für diesen Zweck geeignet ist.  ???
Das difference ist doch ein modifier, was dann die Differenz zum vorhergehenden Wert des jeweiligen userreadings ausrechnet.
Zitat
"Es gibt auch noch den Modifier difference, der die Wertänderung zwischen zwei aufeinanderfolgenden Messungen ermittelt."

attr myPowerMeter userReadings power differential { ReadingsVal("myPowerMeter","counters.A",0)/1250.0;; }

RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA