FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: HB86 am 02 November 2016, 18:36:03

Titel: event-on-change-reading invertieren?
Beitrag von: HB86 am 02 November 2016, 18:36:03
Hallo,

ich hab eine Frage zu event-on-change-reading. Bei dem Attribut kann ich ja einen Bereich angeben, sodass nur ein neues Event erzeugt wird wenn der nächste Wert ausserhalb des Bereiches ist.
Kann man das auch irgendwie invertieren, sodass die Werte nur ein Event erzeugen wenn sie innerhalb eines angegebene Bereiches sind?

Wäre für Hilfe dankbar!
Titel: Antw:event-on-change-reading .. maximal Wert?
Beitrag von: Hollo am 02 November 2016, 19:19:01
Der Wert zu dem Attribut gibt keinen "Bereich", sondern mehr den "Abstand" an; z.B. Temperaturänderung um mehr als 0,5K.
Also um welche "Differenz" der neue Wert vom vorherigen abweichen muss (unabhängig ob positiv oder negativ), damit ein Event erzeugt wird.
Titel: Antw:event-on-change-reading .. maximal Wert?
Beitrag von: HB86 am 02 November 2016, 20:43:12
Danke für die Antwort. Aber die Funktion von event-on-change ist mir schon klar.
Hab mich vielleicht etwas missverständlich ausgedrückt.

Wenn ich dein Beispiel aufgreife, möchte ich nicht dass das Event erzeugt wird wenn sich der Wert mindestens um 0.5 ändert sondern nur wenn sich der Wert um maximal 0.5 ändert.

Hintergrund ist, dass meine Temperatursensoren öfter mal falsche Werte liefern, z.B. -20°C oder +60°C Innentemperatur.
Und ich möchte nicht das solche Werte ein Event auslösen.
Titel: Antw:event-on-change-reading .. maximal Wert?
Beitrag von: Hollo am 03 November 2016, 09:19:37
Verstehe, das macht Sinn. Habe aber leider keine direkte Idee zur Umsetzung.

Wenn Du das Event nicht "verhindern" kannst, könntest Du evtl. die Verarbeitung verhindern, indem Du diese von einer Bedingung "Differenz neuer Wert zu altem Wert ist max. x Kelvin" abhängig machst!?
Titel: Antw:event-on-change-reading .. maximal Wert?
Beitrag von: HB86 am 03 November 2016, 09:22:25
Ich weiß nicht genau ob das Sinn macht? Von der Raumtemperatur ist halt meine Heizungssteuerung abhängig.

Wie müsste denn sowas aussehen?

Gesendet von meinem D5803 mit Tapatalk

Titel: Antw:event-on-change-reading invertieren?
Beitrag von: EIB-Fan am 03 November 2016, 22:41:02
Hallo HB86,

du kannst mit OldValue +0.5 und -0.5 den alten Wert zu dem aktuellen Wert vergleichen.

Habe da aktuell kein Beispiel.

Such mal im Forum nach OldValue.

Viel Erfolg!

Gruß jens
Titel: Antw:event-on-change-reading invertieren?
Beitrag von: HB86 am 04 November 2016, 11:15:43
Ich find dazu nicht wirklich was passendes!  :(

Gibts nicht irgendwie eine Möglichkeit festzulegen in welchen Bereich sich Readings bewegen dürfen, z.B. Temperatur zw. 10 bis 40°C, und alles andere wird ignoriert.
Titel: Antw:event-on-change-reading invertieren?
Beitrag von: HB86 am 06 November 2016, 23:17:27
Niemand ne Idee?  :'(
Titel: Antw:event-on-change-reading invertieren?
Beitrag von: herrmannj am 06 November 2016, 23:20:51
da gehst Du am besten über ein userreading. Dort hinterlegst Du Deine Prüfung als perl code und regelst anschließend anhand des neu generierten readings,

vg
joerg
Titel: Antw:event-on-change-reading invertieren?
Beitrag von: HB86 am 07 November 2016, 08:14:18
Wie mach ich das genau? Hab leider nicht wirklich Ahnung von Perl.

Gesendet von meinem D5803 mit Tapatalk

Titel: Antw:event-on-change-reading invertieren?
Beitrag von: HB86 am 14 November 2016, 23:28:05
Wäre für Hilfe sehr dankbar!

Gesendet von meinem D5803 mit Tapatalk

Titel: Antw:event-on-change-reading invertieren?
Beitrag von: marvin78 am 15 November 2016, 08:47:06
In der Regel läuft das hier so, dass man die Stichworte, die einem gegeben werden nimmt, danach in der Doku sucht, die Doku verinnerlicht, es danach selbst versucht und wenn das nicht klappt, hier mit dem entsprechenden Code frage, was ggf. falsch ist. Du willst ja sicher lernen weil man schneller alleine vorwärts kommt. Fertige Lösungen geben ist kaum zielführend ;)
Titel: Antw:event-on-change-reading invertieren?
Beitrag von: HB86 am 15 November 2016, 09:03:51
Danke für die überaus hilfreiche Antwort  ;)

Die Doku habe ich mir schon angesehen. userReadings hab ich auch verstanden. Allerdings sind da ja nur Berechnung angegeben. Ich will meine Werte ja nicht wirklich weiterverarbeiten, sondern nur in einem Bereich eingrenzen.
Ich versteht halt nicht wie ich in Perl einen Wertebereich festlegen kann. Dazu habe ich leider nix passendes gefunden.

Habe schon ewig gesucht!
Titel: Antw:event-on-change-reading invertieren?
Beitrag von: marvin78 am 15 November 2016, 09:50:39
Vielleicht kommt jemand, der dir eine fertige Lösung liefert. Ich werde das nicht sein denn ich habe noch nichts gesehen, was du probiert hast. Ich gebe dir aber den wirklich hilfreichen Tipp, dich ein wenig mir Perl zu beschäftigen. Das wird dir nachhaltig sehr helfen. Du wirst um userReading einfach ein wenig mit if....else und Vergleichen arbeiten müssen um den Wertebereich abzustecken. Wirklich schwer ist das nicht.

Ein unkonkretes Beispiel:


attr DEVICE userReadings newReading:oldReading.* {ReadingsNum($name,"oldReading",-1)<20 && ReadingsNum($name,"oldReading",-1)>10?ReadingsNum($name,"oldReading",-1):ReadingsNum($name,"newReading",-1)}