FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: lukeman11 am 04 Oktober 2018, 12:11:19

Titel: DOIF zur Steuerung von MAX Thermostaten
Beitrag von: lukeman11 am 04 Oktober 2018, 12:11:19
Hallo Allerseits,

da ich es nun geschafft habe, eine brauchbare Steuerung meines Saugroboters mit DOIF zu gestalten, dachte ich, ich mache mich mal an meine Heizung..eher gesagt, Heizthermostate von MAX. Da ich vom Programmieren keinerlei Ahnung habe, fällt es mir schwer mich zurecht zu finden.

Ich möchte die Temperatur am Thermostat manuell einstellen, jedoch soll, wenn keiner zu Hause ist, die Temperatur abgesenkt und bei Wiederkehr zurück auf den alten Wert gestellt werden.
Mein Steuer-DOIF sieht aktuell, erstmal für ein Thermostat so aus:
([Bewohner] eq "zuhause" and [?WoZ_Thermostat:desiredTemperature] ne "off")
    (set WoZ_Thermostat desiredTemperature [WoZ_Thermostat:temp_backup])

DOELSEIF
    ([Bewohner] ne "zuhause" and [?WoZ_Thermostat:desiredTemperature] ne "off")
        (setreading WoZ_Thermostat temp_backup [WoZ_Thermostat:desiredTemperature],set WoZ_Thermostat desiredTemperature eco)


Dies funktioniert für das Wohnzimmerthermostat auch prima. Jetzt habe ich jedoch noch 5 weitere Thermostate. Ich könnte wohl den ganzen Kram für jedes Thermostat erneut schreiben, ist, finde ich jedoch nicht so sonderlich schön. Ich dachte da eher an "Wildcards", sodass das DOIF für alle Thermostate gilt.

Ich habe mich schon mehrfach durch die Commandref zu DOIF gequält und Dinge versucht wie:
.... ["_Thermostat$:desiredTemperature:$_ ne "off"] ...

Nur weiß ich nicht, ob es wirklich so klappt und im Folgenden, wie ich es als Readings in die jeweiligen Thermostate schreibe und die Werte von dort wieder zurückholen kann.
Je mehr ich im Forum und Commandref suche/lese, desto verwirrter bin ich. Vielleicht bin ich auch auf dem Holzweg?

Ich bin für jeden Tipp dankbar!
Titel: Antw:DOIF zur Steuerung von MAX Thermostaten
Beitrag von: Mitch am 04 Oktober 2018, 13:33:52
Dann hast wohl nicht richtig gelesen  ;)

ZitatBeispiele für Regex-Angaben:

Sollen Events verschiedener Devices ausgewertet werden, so lässt sich folgende Syntax anwenden: ["<device regex>:<event regex>"]

Im Gegensatz zum notify werden vom DOIF-Modul selbst keine Regex-Sonderzeichen hinzugefügt. Insb. wird kein ^ für Anfang vorangestellt, bzw. kein $ für Ende angehängt.

Beispiele für Regex-Angaben:

["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten
["^FS"] triggert auf alle Devices, die mit "FS" im Namen anfangen
["FS:temp"] triggert auf alle Devices, die "FS" im Namen und "temp" im Event beinhalten
([":^temp"]) triggert auf beliebige Devices, die im Event mit "temp" beginnen
(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
[""] triggert auf alles

Also z.B. so:

... (["Thermostat:desiredTemperature"] ne "off")...
Titel: Antw:DOIF zur Steuerung von MAX Thermostaten
Beitrag von: amenomade am 04 Oktober 2018, 13:42:12
Da nur [Bewohner] triggert, und die Backup-Werte pro Device unterschiedlich sind, sehe ich keine andere Möglichkeit als eine Schleife. Etwas in der Art (nicht getestet - siehe CommandREF/DOIF/aggregation)

([Bewohner] eq "zuhause"
     {foreach (AggrDoIf('@','Thermostat$','desiredTemperature','$_ ne "off"')) {fhem "set $_ desiredTemperature ".ReadingsVal("$_","temp_backup","12")}


Wenn es eine einzige Backup-Wert für alle Geräte gäbe, könntest Du es relativ einfach mit devspec lösen: nur den Test ?WoZ_Thermostat:desiredTemperature in einem FILTER= umwandeln.
Titel: Antw:DOIF zur Steuerung von MAX Thermostaten
Beitrag von: amenomade am 04 Oktober 2018, 13:48:28
Zitat von: Mitch am 04 Oktober 2018, 13:33:52
Dann hast wohl nicht richtig gelesen  ;)

Du hast selbst zu schnell gelesen ;) Sowas:

... (["Thermostat:desiredTemperature"] ne "off")... würde bei jeder Änderung einer desiredTemperature TRIGGERN.

Das ist nicht, was lukeman möchtet. Sowas triggert in seinem DOIF nicht:
[?WoZ_Thermostat:desiredTemperature] ne "off"

Mit deiner Lösung hätte er hier keine Chance:
ZitatIch möchte die Temperatur am Thermostat manuell einstellen
Titel: Antw:DOIF zur Steuerung von MAX Thermostaten
Beitrag von: Mitch am 04 Oktober 2018, 13:56:45
Jepp, hab selber nicht richrig gelesen  :-[
Du hast natürlich recht
Titel: Antw:DOIF zur Steuerung von MAX Thermostaten
Beitrag von: Per am 04 Oktober 2018, 14:42:19
Zitat von: amenomade am 04 Oktober 2018, 13:42:12Wenn es eine einzige Backup-Wert für alle Geräte gäbe
was zumindest bei der eco-Temperatur geht.
set *._Thermostat desiredTemperature eco

Für den Rest würde ich auch eine Aggregation verwenden oder (diesmal!) schauen, welche Variante das Perl-DOIF bietet.