Ankündigung

Einklappen
Keine Ankündigung bisher.

Heizungssteuerung per GCal, TFK, Wochenprogramm - ich finde keinen Weg.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Heizungssteuerung per GCal, TFK, Wochenprogramm - ich finde keinen Weg.

    Ich weiß ich habe schon was zu diesem Thema geschrieben und eigentlich meinem Frust rausgelassen - hier nun der Versuch das Problem ernsthaft zu lösen.
    Ich habe viel recherchiert und probiert komme aber der Lösung einfach nicht näher. Obwohl dies doch eine gängige Konstellation sein dürfte finde ich keine konkreten Informationen zur sauberen Umsetzung - vielleicht bin ich auch nur zu blöd zur Suche oder erwarte einfach zu viel.

    Ich habe leider ein kleines Verständnisproblem zum internen Ablauf bei Rules. Mir geht es lediglich darum eine Änderung per rule zu verhindern - was nur bedingt klappt.

    Folgende Konfiguration habe ich (openHAB 1.6.2 auf Raspberry Pi 2, Homematic CCU2 V. 2.13.7, HM-CC-RT-DN V 1.4, ZEL STG RM FFK V 2.0 bzw. HM-Sec-SC-2 V 2.4

    items
    • Number AZHeizung "Arbeitszimmer [%.1f °C]" {homematic="address=KEQ0431465, channel=4, parameter=SET_TEMPERATURE"}
    • Contact A_TFK1 "Arbeitszimmer [MAP(de.map):%s]" <contact> (Fenster) { homematic="address=JRT0004287, channel=1, parameter=STATE" }
    sitemap
    • Setpoint item=AZHeizung label="Einzelwert [%.1f °C]" icon="heating" step=0.5 minValue=0 maxValue=24
    Soweit klappt auch alles, + erhöht die Temperatur um 0.5° und - senkt sie um 0.5°.
    Abhängig vom Status eines Fensterkontaktes möchte ich die Änderung erlauben oder schlicht verhindern.
    Dazu habe ich folgende Testrule erzeugt

    rule "AZHeizung"
    when Item AZHeizung changed
    then
    if (A_TFK1.state.toString == "OPEN") {postUpdate(AZHeizung,10)}
    if (A_TFK1.state.toString != "OPEN") {postUpdate(AZHeizung,15)}
    end

    Dabei übernimmt das Thermostat jedoch die gesetzte Temperatur und zusätzlich einen Schaltvorgang, + ergibt also 10.5° und - 9.5°.
    Wird die Temperatur am Thermostat geregelt passiert gar nichts.

    Vielleicht kann mir jemand auf die Sprünge helfen:
    - Wie ist der Ablauf in der Ereigniskette, Kommando - Rule changed - Thermostat - d.h. wann greifen die Rules überhaupt
    - Kann man ein Kommando abbrechen a la cancelEvent bevor es sich auswirkt
    - Wie verhält sich das mit dem GCal-Addon bei z.B. folgendem Ablauf
    • per Wochenprogramm werden 16° gesetzt
    • um 14:30 wird das Fenster geöffnet (Temp geht auf 5° durch direkte Verknüpfung)
    • um 15:00 sagt der Kalender Temp auf 20°
    • um 15:30 wird das Fenster geschlossen
    Ohne Anpassungen ändert sich die Temperatur um 15:00 auf 20° - ganz schlecht
    Wie kann man nun den TFK in openHAB so integrieren das die Temperatur nicht verändert wird. Wie erstellt man eine Rule bei Änderung, wenn TFK offen ignorieren sonst ausführen.
    Wie würde sich eine entsprechende Rule später auswirken, denn um 15:30 soll ja der letzte gültige Wert genommen werden - in diesem Fall die 20° aus dem Kalender.

    Trotz langer Recherche und vielen Versuchen komme ich hier einfach nicht weiter, es ist ziemlich schwierig hier einen Einstieg zu finden.

    Daher hoffe ich auf eure Hilfe - vielen Dank.
    Frohe Ostern
    Schefti

    #2
    Zuerst einmal bewirkt postUpdate nur eine Änderung der Anzeige in der UI, das heißt, der Wert wird in openHAB geändert, aber nicht auf den Bus geschickt. das Schreiben auf den Bus geht mit sendCommand. Wenn die Temperatur bei offenem Fenster fix 10 Grad sein soll, musst Du also schreiben:
    Code:
    rule "AZHeizung"
    when
        Item AZHeizung changed
    then
        if (A_TFK1.state==OPEN)
            AZHeizung.sendCommand(10)
    end
    Die Formatierung habe ich der besseren Lesbarkeit halber gesetzt. Item.sendCommand(Wert) ist synonym zu sendCommand(Item,Wert), ist letztlich Geschmackssache und der State sollte ohne Konvertierung erreichbar sein (dann muss aber natürlich auch ein State zum Vergleich benutzt werden, kein String, deshalb keine Anführungszeichen um das OPEN).

    Wenn Du per UI oder gcal-Binding AZHeizung änderst (oder am Thermostaten selbst!), löst anschließend die Rule aus, denn sie triggert auf Änderung (changed). Dass bei Einstellung am Thermostaten nichts passiert, liegt einfach daran, dass der Thermostat den Fensterkontakt selbst abfragt und deshalb auch keine Änderung vornimmt (oder vielleicht erst dann, wenn der Kontakt wieder closed ist? Keine Ahnung, wie sich Homematic-Thermostaten da verhalten.)
    Da die Rule erst dadurch ausgelöst wird, dass es eine Änderung gab, kann man hier leider auch nichts aufhalten oder rückgängig machen.
    Besser (oder genauer) wäre wahrscheinlich, das Item AZHeizung zu persistieren. Dann kannst Du in der Rule mit AZHeizung.previousState auf den vorigen Wert zurück schalten (könnte ja sein, dass Du die 5 Grad im Thermostaten mal anpasst, dann müsstest Du den korrespondierenden Wert in der Rule auch anpassen. Mit previousState ist das dann nicht nötig.)
    Die entsprechende Zeile müsste dann also AZHeizung.sendCommand(AZHeizung.previousState) heißen, aber die Voraussetzung ist, dass AZHeizung persistitiert wird, und zwar mindestens mit everyChange als Strategie.
    Zuletzt geändert von udo1toni; 05.04.2015, 14:18.

    Kommentar


      #3
      Ich würde da ein zusätzliches Item ohne Binding für nutzen:
      Code:
      Number AZHeizungSteuer
      Und dieses da über Visu/GCal usw. ändern, dadurch kannst Du die Befehle "abfangen" z.B.
      Code:
      rule "AZHeizung"
      when Item AZHeizungSteuer changed
      then
      if (A_TFK1.state == OPEN) {
        sendCommand(AZHeizung,AZHeizungSteuer.toString)
      }
      end
      
      rule "Fenster"
      when Item A_TFK1 changed from OPEN to CLOSED
      then
      sendCommand(AZHeizung,AZHeizungSteuer.toString)
      end
      Etwa so (ist ungetestet).
      Gruß
      Tobias

      Kommentar

      Lädt...
      X