DOIF zur Steuerung von MAX Thermostaten

Begonnen von lukeman11, 04 Oktober 2018, 12:11:19

Vorheriges Thema - Nächstes Thema

lukeman11

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!

Mitch

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")...
FHEM im Proxmox Container

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Mitch

Jepp, hab selber nicht richrig gelesen  :-[
Du hast natürlich recht
FHEM im Proxmox Container

Per

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.