FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: DeusDeorum am 01 Oktober 2017, 13:56:58

Titel: Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: DeusDeorum am 01 Oktober 2017, 13:56:58
Hallo zusammen,
ich würde gerne die Möglichkeit haben, die Solltemperatur für eine gewissen Zeitraum (z.B. 1h) bzw. bis zu einer vorzugebenen Uhrzeit über das fhem-UI zu ändern. Nach Ablauf soll die Solltemperatur wieder vom Wochenprogramm automatisch bezogen werden.
Am liebsten wäre mir ein oder mehrere Felder neben der Solltemperatur, um einen Uhrzeit oder eine Zeitdauer in min/std anzugeben (siehe Screenshot).
Der Sinn ist, dass ich einen Raum nur sporadisch nutze und ein Steuern über Wochenprogramm deshalb nicht sinnvoll ist. Ich möchte allerdings vermeiden, dass die Heizung weiterläuft, weil ich beim Herausgehen vergessen habe, sie wieder auf Automatic zu stellen. So möchte ich die Möglichkeit bereits beim Einstellen des Thermostats haben, den Zeitpunkt festzulegen, bis wann geheizt werden soll.

Leider fehlen mir zurzeit noch die Anknüpfungspunkte, wie man so etwas am besten umsetzt.
Wie erstelle ich ein neues Inputfeld im fhem-ui, um die Uhrzeit/Zeitraum entgegen zu nehmen und wie reiche ich dies dann an ein notify? weiter, um die Solltemperatur zu setzen? Brauche ich dann zwei Notify, einmal zum Setzen der Temperatur und dann zum Reaktivieren des Wochenprogramms?

Gibt es vielleicht für das Problem bereits eine andere BestPractice-Lösung, die ich übernehmen könnte?

Vielen Dank.
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 01 Oktober 2017, 16:29:08
Also wenn ich es richtig verstehe möchtest Du qausi ein Bedienfeld haben bei dem Du sagen kannst - setze Solltemperatur für einen Thermostat für x Stunden auf Temperatur y.

Also willst Du
- bei Aktivierung den Thermostat auf die manuelle solltemperatur y stellen
- bei Aktivierung ein at Befehl erzeugen, der nach x Stunden den Thermostat auf automatic zurückstellt

Das Bedienfeld könnte ein Dummy sein, der ein Setting (setList) für die Stunden und eines für die Temperatur hat und einen Befehl um das zu aktivieren. Dazu gibt es einen Notify, der den Wert für x und y nimmt, wenn der Dummy aktiviert wurde und die zwei Befehle von oben ausführt (also temperatur einstellen und at anlegen)



Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: Wzut am 01 Oktober 2017, 17:28:07
Zitat von: viegener am 01 Oktober 2017, 16:29:08
- bei Aktivierung ein at Befehl erzeugen, der nach x Stunden den Thermostat auf automatic zurückstellt
Denke das ist nicht nötig MAX! Geräte haben dafür das Attribut keepAuto
Zitat von: commandrefkeepAuto
Default: 0. If set to 1, it will stay in the auto mode when you set a desiredTemperature while the auto (=weekly program) mode is active.
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 01 Oktober 2017, 22:07:03
Zitat von: Wzut am 01 Oktober 2017, 17:28:07
Denke das ist nicht nötig MAX! Geräte haben dafür das Attribut keepAuto

Wenn es reicht, beim nächsten Umschalten des Autoprogramms im Wochenprogramm wieder zu wechseln ja, dann wäre aber eine Einstellung für eine bestimmte Anzahl von Stunden nicht nötig.

Wenn es für eine definierte Zeit sein soll, dann muss wohl ein at her
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: DeusDeorum am 02 Oktober 2017, 07:37:12
Zitat von: viegener am 01 Oktober 2017, 16:29:08
Also wenn ich es richtig verstehe möchtest Du qausi ein Bedienfeld haben bei dem Du sagen kannst - setze Solltemperatur für einen Thermostat für x Stunden auf Temperatur y.

Also willst Du
- bei Aktivierung den Thermostat auf die manuelle solltemperatur y stellen
- bei Aktivierung ein at Befehl erzeugen, der nach x Stunden den Thermostat auf automatic zurückstellt

Das Bedienfeld könnte ein Dummy sein, der ein Setting (setList) für die Stunden und eines für die Temperatur hat und einen Befehl um das zu aktivieren. Dazu gibt es einen Notify, der den Wert für x und y nimmt, wenn der Dummy aktiviert wurde und die zwei Befehle von oben ausführt (also temperatur einstellen und at anlegen)

vielen Dank.
Ich habe jetzt ein Dummy erstellt mit zwei Inputfeldern. Leider scheinen diese nicht unabhängig zu sein, teilweise wird das Label auch mehrfach dupliziert. Was muss ich ändern, damit ich jeweils ein Inputfeld für T und Uhr erhalte?
Kann ich dann im Notify auf genau die Variablen, hier Uhr und T zugreifen?

Vielen Dank.

Ich denke ich brauche den Schalter auf auto trotzdem, es soll ja nicht erst beim nächsten Wochenpunkt zurückgeschaltet werden, sondern zum vorgegebenen Zeitpunkt.

edit: Bild vergessen
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 02 Oktober 2017, 09:35:29
Du solltest auch das Attribut readingList auf die beiden Werte setzen also (T Uhr), dann hast Du jedesmal wenn Du T oder Uhr setzt den Wert im Reading. Dann hast Du getrennte Readings, die Du ohne Umstände per ReadingsVal auslesen kannst und im notify verwenden.

Dann sollte in setList noch einen weitere Einstellung angeben also zum Beispiel "setzen" um die einstellung auszulösen nach Einstellung Temp und Uhr.

Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: DeusDeorum am 04 Oktober 2017, 21:34:00
Zitat von: viegener am 02 Oktober 2017, 09:35:29
Du solltest auch das Attribut readingList auf die beiden Werte setzen also (T Uhr), dann hast Du jedesmal wenn Du T oder Uhr setzt den Wert im Reading. Dann hast Du getrennte Readings, die Du ohne Umstände per ReadingsVal auslesen kannst und im notify verwenden.

Dann sollte in setList noch einen weitere Einstellung angeben also zum Beispiel "setzen" um die einstellung auszulösen nach Einstellung Temp und Uhr.

vielen Dank. Ich  bin wieder einen Schritt weiter.
Auch das Triggern des Hochsetzens der Temperatur mit Triggern des Notify DennisBueroBoost klappt. Nur wie trigger ich das zweite Notify DennisBueroAuto zu einer Uhrzeit? Und wie sieht dann die Variable zur Uhrzeit aus, wenn ich die hartcodierte rausnehme? [d_DennisBuero:Uhr] ?
Bisherige Definition: d_DennisBuero* trigger DennisBueroBoost; trigger DennisBueroAuto at 21:24
Mit variabler Uhrzeit?: d_DennisBuero* trigger DennisBueroBoost; trigger DennisBueroAuto at [d_DennisBuero:Uhr]

Vielen Dank für weitere Tipps
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 04 Oktober 2017, 23:51:14
Mach doch einmal ein list von dem dummy, den Du bisher erstellt hast, sonst ist das schwer weiter zu helfen.

Ansonsten nochmal zurück zum Anfang: Das Konzept ist im Dummy erst die Einstellungen vorzunehmen. Dann noch einen set-Befehl am Dummy vorzusehen, der die Aktivierung triggert. Das kann am einfachsten wohl über ein notify, das auf den state reagiert gemacht werden.

Im notify steht dann so etwas wie

define notify_boost notify DennisBueroBoost:.*active.* { fhem("set DennisBuero [DennisBueroBoost:temp]");; fhem("set DennisBueroBoost done");;  fhem("define dbbat at +".ReadingsVal('DennisBueroBoost','Uhr','1').":00:00 set DennisBuero automatic");; }


Das habe ich jetzt aber nur so runtergeschrieben und nicht geprüft.
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: Wzut am 05 Oktober 2017, 16:05:18
Also mich stört immernoch das temporäre at um so wieder in den Auto Modus zu kommen.
In der commandref seht doch
ZitatdesiredTemperature [manual] <value> [until <date>]
For devices of type HeatingThermostat only. <value> maybe one of

    degree celcius between 4.5 and 30.5 in 0.5 degree steps
    "on" or "off" set the thermostat to full or no heating, respectively
    "eco" or "comfort" using the eco/comfort temperature set on the device (just as the right-most physical button on the device itself does)

The optional "until" clause, with <data> in format "dd.mm.yyyy HH:MM" (minutes may only be "30" or "00"!), sets the temperature until that date/time. Make sure that the cube/device has a correct system time. If the keepAuto attribute is 1 and the device is currently in auto mode, 'desiredTemperature <value>' behaves as 'desiredTemperature auto <value>'. If the 'manual' keyword is used, the keepAuto attribute is ignored and the device goes into manual mode.

also ich mit meinem schlechten Englisch übersetze den Abschnitt
The optional "until" clause, with <data> in format "dd.mm.yyyy HH:MM" (minutes may only be "30" or "00"!), sets the temperature until that date/time
mit : verwendet man das Schlüsselwort "until" und einem passenden Datum/Zeit String benötigt man kein späteres Kommando um wieder in den normalen Auto Modus zu kommen.
Aber anyway , machen und zusammenbasteln kann mit FHEM viel ..... aber schön und elegant ist etwas anderes, vor allem wenn ich mir die simple Vorstellung desv TE im ersten Post anschaue.

@DeusDeorum, wenn du noch bis zum WE warten kannst:
Ich habe mir da was überlegt bzw. zusammenkopiert das deinem ursprünglichen Wunsch wesentlich näher kommt und keinen zusätzlichen Ballast in Form irgendwelcher Dummys, ats oder notifys erfordert. Da das jetzt hier OT wird habe die Tage ein Auge auf das MAX! Unterforum.   
 
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 05 Oktober 2017, 17:26:01
@Wzut: Ja das wäre wirklich ein Weg über die until Ergänzung, allerdings muss man dann noch Code hinzufügen um die Endezeit aus aktueller Uhrzeit und Offset im Format für das Kommando zu berechnen. Das fand ich jetzt wenig Anfängergeeignet, aber ich habe ja sowieso ein Faible dafür Dinge mit existierenden Meachnismen - Dummys etc zu lösen...
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: DeusDeorum am 06 Oktober 2017, 21:18:09
vielen Dank für die Anregungen. Ich steige so langsam durch und mache kleine Fortschritte.
Ich merke, dass ich hier am Beginn einer sehr steilen Lernkurve bin. Perl-Code lesen verhält sich wohl zu Python wie Latein zu Englisch.

Ich habe es mittlerweile geschafft die Readings für den Dummy zu definieren und auch das Setzen des States verstanden.
Meine Attribute am Dummy:

readingList T, Uhr
room Heizung
setList T:textField Uhr:textField state
webCmd T:Uhr:<button>Go</button>

Dazu habe ich folgendes Notify:
d_DennisBuero:.*Go.* { fhem("set DennisBuero desiredTemperature [d_DennisBuero:T]");; fhem("set d_DennisBuero done");;  fhem("define dbbat at +[d_DennisBuero:Uhr]:00 set DennisBuero desiredTemperature auto");; }

Bisher verstanden habe ich:
Sobald der Dummy einen State, der "Go" beinhaltet, erreicht, wird das Notify ausgeführt. Es setzt den fhem-Befehl für die Temperatur und den Status done. Danach definiert es dbbat, welches dann zum Zeitpunkt schaltet.

Allerdings erhalte ich hier noch eine Fehlermeldung "define dbbat at +[d_DennisBuero:Uhr]:00 set DennisBuero desiredTemperature auto: Wrong timespec [d_DennisBuero:Uhr]:00: either HH:MM:SS or {perlcode}".
Er scheint hier irgendwie die Variable nicht zu erkennen, hat jemand noch einen Tipp?
Vielen Dank.

@Wzut für eine elegante Lösung bin ich immer zu haben, bin also definitiv interessiert, wenn ich gleichzeitig auch lernen kann, was passiert.

Dazu habe ich auch das hier gefunden: https://wiki.fhem.de/wiki/FTUI_Beispiel_Datetimepicker_f%C3%BCr_Timer
Allerdings steige ich hier noch nicht wirklich durch, wie ich so etwas implementieren kann

Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: Wzut am 06 Oktober 2017, 22:01:15
Dein Wiki Beispiel ist aber für Tablet UI , für fhemweb gibt es auch ein date/time picker widget ( liegt unter contrib )
der Code für das untere Beispiel im Screenshot :
define desTemp.timepicker dummy
attr desTemp.timepicker readingList destemp,time
attr desTemp.timepicker room 0_test
attr desTemp.timepicker setList dev:uzsuSelect,300,600,1800,3600 destemp:knob,min:5,max:30,step:.5,linecap:round,angleOffset:-125,angleArc:250 time:datetime,inline:true,step:30
attr desTemp.timepicker stateFormat destemp °C bis time
attr desTemp.timepicker webCmd destemp:time

wird aber wenn das Datum dabei ist recht groß. Im Screenshot in der Mitte ein Beispiel wie ich es mir vorstelle mit zwei einfachen DropDown Listen
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 06 Oktober 2017, 22:07:13
Ich hatte es schon vermutet, der define untersstützt keine []-Logik zur Definition, deshalb hatte ich es in meinem Code als perl-Ausdruck geschrieben, der den define Befehl zusammensetzt,
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: DeusDeorum am 06 Oktober 2017, 22:34:18
Zitat von: viegener am 06 Oktober 2017, 22:07:13
Ich hatte es schon vermutet, der define untersstützt keine []-Logik zur Definition, deshalb hatte ich es in meinem Code als perl-Ausdruck geschrieben, der den define Befehl zusammensetzt,

Danke. ich habe es jetzt auf folgendes korrigiert:
d_DennisBuero:.*Go.* { fhem("set DennisBuero desiredTemperature [d_DennisBuero:T]");; fhem("set d_DennisBuero done");;  fhem("define dbbat at +".ReadingsVal('d_DennisBuero','Uhr','1').":00 set DennisBuero automatic");; }

Jetzt wird dbbat mit einer Zeit erzeugt, aber die scheint irgendwie nicht richtig zu sein. Jedenfalls wird es nicht ausgeführt und unter Next steht eine falsche Uhrzeit. Hat jemand noch einen Tipp für mich? Danke


@Wzut danke, das werde ich mal ausprobieren, wenn das andere läuft :)
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 06 Oktober 2017, 23:23:19
Mach doch mal ein list von d_DennisBuero bevor Du die Ausführung anstösst.

Es sieht so aus, also ob Du in Deinem Dummy nicht Stunden hast, sondern ein vollständiges Datum mit Uhrzeit -> das funktioniert so nicht.

Aber irgendwie ist das alles Raterei, es wäre besser keine Screenshots sondern lists der devices zu machen. Ich weiss ja nicht, was Du in Deinem Dummy einträgst ich hatte vorgeschlagen da einfach die Anzahl der Stunden einzutragen
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: DeusDeorum am 06 Oktober 2017, 23:48:10
Zitat von: viegener am 06 Oktober 2017, 23:23:19
Mach doch mal ein list von d_DennisBuero bevor Du die Ausführung anstösst.

Es sieht so aus, also ob Du in Deinem Dummy nicht Stunden hast, sondern ein vollständiges Datum mit Uhrzeit -> das funktioniert so nicht.

Aber irgendwie ist das alles Raterei, es wäre besser keine Screenshots sondern lists der devices zu machen. Ich weiss ja nicht, was Du in Deinem Dummy einträgst ich hatte vorgeschlagen da einfach die Anzahl der Stunden einzutragen
Ah, danke, ich habe mich schon gewundert, wie man solche Einträge am besten im Forum postet. Ich hoffe, es ist so richtig.
Internals:
   CFGFN
   NAME       d_DennisBuero
   NR         818
   STATE      done
   TYPE       dummy
   Readings:
     2017-10-06 22:26:37   T               24
     2017-10-06 22:26:37   Uhr             22:28
     2017-10-06 22:26:37   state           done
Attributes:
   readingList T, Uhr
   room       Heizung
   setList    T:textField Uhr:textField state
   webCmd     T:Uhr:<button>Go</button>


Internals:
   CFGFN
   DEF        d_DennisBuero:.*Go.* { fhem("set DennisBuero desiredTemperature [d_DennisBuero:T]");; fhem("set d_DennisBuero done");;  fhem("define dbbat at +".ReadingsVal('d_DennisBuero','Uhr','1').":00 set DennisBuero automatic");; }
   NAME       DennisBueroStart
   NOTIFYDEV  d_DennisBuero
   NR         1033
   NTFY_ORDER 50-DennisBueroStart
   REGEXP     d_DennisBuero:.*Go.*
   STATE      2017-10-06 22:26:37
   TYPE       notify
   Readings:
     2017-10-06 22:17:35   state           active
Attributes:
   room       Heizung

Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: viegener am 07 Oktober 2017, 10:44:12
Jetzt ist klar was passiert, Du legst ein relatives at an (+ vor der Zeitangabe) und gibst aber im dummy eine absolute Zeitangabe an (22:28).
Daraus wird dann von jetzt an in 22 Stunden und 28 Minuten wieder auf Automatik.

Mein Vorschlag war deshalb eine Anzahl Stunden auszuwählen und diese als relative Angabe zu füllen.

Ich kann aber nur den Ratschlag geben, dass Du dich mit mehr von den Grundlagen vertraut machst, denn momentan fühlt es sich etwas an, als ob ich eine Lösung entwickle und dann anfange die Fehler, die Du durch Veränderungen vorgenommen hast zu finden. Das ist irgendwie suboptimal
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: Wzut am 07 Oktober 2017, 18:38:38
Zitat von: DeusDeorum am 06 Oktober 2017, 21:18:09
@Wzut für eine elegante Lösung bin ich immer zu haben, bin also definitiv interessiert, wenn ich gleichzeitig auch lernen kann, was passiert.
schau dir doch mal https://forum.fhem.de/index.php/topic,77678.0.html an
Titel: Antw:Solltemperatur für Zeitraum/bis Uhrzeit setzen
Beitrag von: DeusDeorum am 08 Oktober 2017, 11:38:16
Zitat von: viegener am 07 Oktober 2017, 10:44:12
Jetzt ist klar was passiert, Du legst ein relatives at an (+ vor der Zeitangabe) und gibst aber im dummy eine absolute Zeitangabe an (22:28).
Daraus wird dann von jetzt an in 22 Stunden und 28 Minuten wieder auf Automatik.

Mein Vorschlag war deshalb eine Anzahl Stunden auszuwählen und diese als relative Angabe zu füllen.

Ich kann aber nur den Ratschlag geben, dass Du dich mit mehr von den Grundlagen vertraut machst, denn momentan fühlt es sich etwas an, als ob ich eine Lösung entwickle und dann anfange die Fehler, die Du durch Veränderungen vorgenommen hast zu finden. Das ist irgendwie suboptimal

vielen Dank für deine Unterstützung. Ich verstehe immer mehr und das ist auch mein Ziel - die Haussteuerung selbst nach meinen Bedürfnissen anpassen zu können.
Was bringt es bei neuen Sachen immer hier im Forum nachfragen zu müssen, dass es mir jemand nachprogrammiert? Insofern sehe ich deine Bemühungen alles andere als suboptimal an, danke dafür!
Insofern auch danke Wzut für das auf meine Bedürfnisse zugeschnittene Addon. Ich habe es installiert und es funktioniert einwandfrei :) Damit sehe ich mein ursprüngliches Problem als vollumfänglich gelöst an, danke :)