FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Ephes am 05 Januar 2017, 11:17:18

Titel: Sollwert bei bestimmtem Reading verringert und später wieder zurücksetzen
Beitrag von: Ephes am 05 Januar 2017, 11:17:18
Hallo zusammen,

ich würde gerne bei einem bestimmten Wert eines Readings (hier ValvePosition = 20) den eingestellten Sollwert (hier desired-temp) um eins verringern. Nach einer gewissen Zeit (z.B. 10 min) soll der vorherige Sollwert wieder zurück gesetzt werden. 

Kann mir jemand sagen wie ich das am einfachsten anstelle?

(kurz zum Hintergrund: einer meiner Heizkörper macht bei einer bestimmten Ventilstellung des HomeMatic Thermostats Knattergeräusche. Da ich das Knattern nicht durch andere Maßnahmen beseitigen kann will ich diese Ventilstellung meiden. Das Thermostat soll dort also nicht verweilen. Wenn ich per Solltemperatur den Raum heizen will, geht das Ventil zunächst relativ weit auf, regelt nach einiger Zeit aber in Stufen wieder zu. Und in dem Moment wo es bei 20% angekommen ist soll das Thermostat den Befehl bekommen, dass es eine neue, niedrigere Solltemperatur gibt,  sodass es sofort weiter zu dreht.)

Ich hatte schon an ein DOIF gedacht, aber wie nehme ich den alten Sollwert und verringere ihn um einen festen Wert und kann ihn anschließend wieder zurücksetzen?
Danke für die Hilfe!
Titel: Antw:Sollwert bei bestimmtem Reading verringert und später wieder zurücksetzen
Beitrag von: Otto123 am 05 Januar 2017, 11:26:29
Hi,

ich "rede" jetzt mal in Logik  8)
DOIF (ValvePosition = 20) (set desired-temp (desired-temp -1))(set desired-temp (desired-temp + 1))
wait 0,6000

Oder so ähnlich.
Du musst Dir ja die desired-temp nicht merken, Du weißt ja Du hast sie um eins verringert also liest Du sie neu und legst einen wieder drauf.

Du kannst auch ein notify nehmen.
Du triggerst auf "ValvePosition 20" und machst dann set desired-temp (desired-temp -1);sleep 6000;set desired-temp (desired-temp + 1)

Wie der Event aussieht siehst Du im Eventmonitor

Gruß Otto
Titel: Antw:Sollwert bei bestimmtem Reading verringert und später wieder zurücksetzen
Beitrag von: Ephes am 05 Januar 2017, 11:45:39
danke für die Antwort.

d.h. mein Notify könnte so aussehen?:

define denoise notify Thermostat:ValvePosition:.20   set Thermostat:desired-temp (Thermostat:desired-temp -1);sleep 6000;set Thermostat:desired-temp (Thermostat:desired-temp + 1)

Oder ist die FHEM Syntax da anders?
Danke!
Titel: Antw:Sollwert bei bestimmtem Reading verringert und später wieder zurücksetzen
Beitrag von: Otto123 am 05 Januar 2017, 12:27:34
Der Syntax für die Readings stimmt nicht. Ich muss mal kurz überlegen...
Bei DOIF geht [Thermostat:desired-temp]

Was auf alle Fälle geht ist ReadingsVal

{ ReadingsVal("Thermostat", "desired-temp", "0")}

define denoise notify Thermostat:ValvePosition:.20   {fhem("set Thermostat desired-temp ".(ReadingsVal("Thermostat ","desired-temp","")-1)."")};;sleep 6000;;{fhem("set Thermostat desired-temp ".(ReadingsVal("Thermostat ","desired-temp","")+1)."")}


so gehts - sieht jetzt etwas komplizierter aus. Weil wir auf Perl Ebene rechnen wollen. Damit könnte man den Wert auch erst zwischenspeichern. Gibt es sicher noch viele Varianten...

Ich weiß nicht ob man es einfacher codieren kann.  ;)


Gruß Otto
Titel: Antw:Sollwert bei bestimmtem Reading verringert und später wieder zurücksetzen
Beitrag von: Wuppi68 am 05 Januar 2017, 12:39:18
die Idee finde ich gut :-)

Aber wie lange ist der Thermostat bei 20%?

Es kann bis zu mehreren Minuten dauern, bis Dein Befehl real umgesetzt wird (Funkempfang - kann mit Burst verkürzt werden und dann noch die Zeit wann der Regler dieses entsprechend umsetzt).

Meiner Meinung nach wäre es sinnvoller ein Fenster von z.B. +-5% zu definieren und vermutlich kann der Regler auch wunderbar schwingen