Triggerung neuer Messwert/Deltaprüfung

Begonnen von PeterS, 06 Mai 2013, 12:58:46

Vorheriges Thema - Nächstes Thema

PeterS

Hallo Zusammen

ich bitte um Unterstützung bei folgenden Problematiken:

a)Triggerung neuer Messwert:

Wenn ein neuer Messwert (Zeitstempel) übermittelt wurde, sollen diverse Aktionen wie Berechungen, Loggen, etc. durchgeführt werden, unabhängig ob der Messwert gleich geblieben ist.
Wie kann ich das über ein Ereignis (ReadingsTimestamp("Messung_Zisterne","state",0)) und nicht wie bisher über eine periodische Aktion (AT-Befehl) realisieren ?

Beispiel bisher:
define At_Notify_Messung_Zisterne at +*00:00:15 {\
my $var1 = $value{Messung_Zisterne};;\
my @value1 = split("%", $var1);;\
my $wert=$value1[0];;\
fhem "set Prozent_Zisterne $wert";;\
my $var2 = ($wert*4800/100);;\
fhem "set Inhalt_Zisterne $var2";;\
fhem "set Refresh_Zisterne ".ReadingsTimestamp("Messung_Zisterne","state",0);;\
}

Logeintrag:
2013-05-05_10:30:00 Messung_Zisterne 100%
2013-05-05_10:30:00 Messung_Zisterne battery: ok

b) Deltaprüfung:
Wenn der vorherigen Wert z.B. +/- 2% abweicht, soll ein Ereignis getriggert werden.
Wie realisiere ich das ?


Gruss Peter

PeterS

Hallo Zusammen

Hat keiner einen Tip oder Codeschnipsel für mich ?

Gruss Peter

MisterEltako

Wäre das ein Anstoss?

 define At_Notify_Messung_Zisterne notify  Messung_Zisterne:state.* {\
        my $Stemp = (ReadingsTimestamp("Messung_Zisterne","state",0));
....usw.
}

und:

device Messung_Zisterne ....
attr Messung_Zisterne event-on-change-reading-update state.*

und den Messwert in einem dummy zwischenspeichern und bei nächstem Event vergleichen.

MfG,MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

ritchie

Hallo Zusammen,

habe Ihr nicht ein komplettes Beispiel für einen Anfänger in FHEM.

Ich würde gerne anhand der Durchaussentemperatur meine Thermostate
auf "auto" oder off stellen.

Mir ist das mit den "event-on-change-reading-update" nicht ganz klar.

Wie verlinke ich eine Einlesen eines Wertes auf eine zusätzliche Routine
für weitere Auswertungen.

Gruss R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

PeterS

Hallo Zusammen

Folgendes Coding wird nun aber nicht mehr ausgeführt ?!

define Notify_Messung_Zisterne notify Messung_Zisterne:state.* {\
my $var1 = $value{Messung_Zisterne};;\
my @value1 = split("%", $var1);;\
my $wert=$value1[0];;\
fhem "set Prozent_Zisterne $wert";;\
my $var2 = ($wert*4800/100);;\
fhem "set Inhalt_Zisterne $var2";;\
fhem "set Refresh_Zisterne ".ReadingsTimestamp("Messung_Zisterne","state",0);;\
}

Warumw wird die Befehlskette nun icht mehr ausgeführt ?

Gruss Peter

PeterS

Hallo Zusammen

Ich habe mal testweise folgendes Coding probiert:

1. Triggerung Füllstand (model HM-Sen-Wa-Od)
define Test_Zisterne dummy
define Notify_Messung_Zisterne notify Messung_Zisterne:state.* set Test_Zisterne ABC
2. Triggerung Temperatur (model HM-WDS10-TH-O)
define Test_Zisterne dummy
define Notify_Messung_Zisterne notify Temp_Aussen:state.* set Test_Zisterne ABC
3. Triggerung Temperatur (model HM-WDS10-TH-O)
define Test_Zisterne dummy
define Notify_Messung_Zisterne notify Temp_Aussen:temperature.* set Test_Zisterne ABC


Nur die Variante 3 wird bei State-Änderung ausgeführt. Die beiden anderen Varianten mit der Triggerung state funktionieren nicht (auch keine Fehlermeldung)?
Kann State keine Ereignisse triggern ?

Gruss Peter

PeterS

Hi

State löst kein Notify aus !
Bei level, temperature, etc. funktioniert dies perfekt ?

Ist das so irgendwo dokumentiert ?

Gruss Peter

rudolfkoenig

Das state kein notify ausloest, kann man so generisch nicht sagen.

Kurz: es mag sein, dass das bei manchen Modulen der Fall ist, die meisten Module loesen beim Statusaenderung aber ein Event aus, worauf man mit notify reagieren kann.

Lang:
1. In FHEM gibt es ein state Reading, und ein STATE Hash Eintrag. Das Reading sollte vom Modul gesetzt werden, Der Hash Eintrag wird in list bzw. Frontend Raumansich angezeigt, und steht mit Value() zur Verfuegung. Der Wert wird aus dem state Reading uebernommen, es sei denn der Benutzer hat das Attribut stateFormat gesetzt.
2. Diese Methode funktioniert dann, falls das Modul auf die etwas neuere readings*Update Funktionen verwenden. Dabei wird normalerweise ein Event ausgeloest, es sei denn der Benutzer hat das mit den event-* Attribute unterbunden. Diese Funktionen werden in den meisten aktuellen Modulen verwendet.
3. Module, die die readings*Update Funktionen nicht verwenden, muessen selbst fuer das Ausloesen der Events per DoTrigger/etc. sorgen.

Wie man prinzipiell solche Probleme loest, ist z.Bsp. in http://fhem.de/HOWTO.html#at beschrieben, telnet-unkundige koennen statt inform auch den FHEMWEB Event-Monitor verwenden.