Ein bewegungsgesteuerter Heizkörper mit Homematik und Openhab

Ich möchte es erreichen das in meinem Büro in dem dieser Bewegungsmelder arbeitet das Homematik Heizungsthermostat solange auf einem definierten Komfortlevel eingestellt bleibt wie innerhalb eines Zeitraumes von x (20) Minuten Bewegungen erkannt werden. Dazu habe ich in Openhab einen “Status” mit dem Namen “Buero_Besetzt” eingefügt.

vi items/demo.items 
     Switch Buero_Besetzt "Büro" (DG_Buero) {ON,OFF}

Dieser Schalter wir von dem Bewegungsmelder Script über die REST API auf ON gesetzt wenn eine Bewegung erkannt worden ist.

vi pir_1.py 
 ...
 ...
 # PIR is triggered
  print "  Motion detected!"
  subprocess.call("/root/DG_B_motion.sh")
  # Record previous state

Das aufgerufene Script macht dann:

  vi DG_B_motion.sh 
#!/bin/sh
    /usr/bin/curl --header "Content-Type: text/plain" --request PUT --data "ON" http://deine.openhab-addres.se:8080/rest/items/Buero_Besetzt/state

So jetzt haben wir einen Mechanismus der regelmäßig eine Openhab Variable auf ON setzt wenn eine Bewegung gemeldet worden ist. Jetzt möchte ich aber nicht “minütlich” meine Heizung neu einstellen, sondern es soll nur die Temperatur geändert werden wenn sich über einen längeren Zeitraum (20 oder 30 Minuten) nichts bewegt hat. Dazu habe ich diese Openhab Regel etwas angepasst

vi rules/DB_Buero_Motion.rules 
var Number DG_B_counter = 0
var Number DG_B_lastCheck = 0
rule "Dachgeschoss_Buero_Heizung_On"
when
    Item Buero_Besetzt changed from OFF to ON or
then
    DG_B_counter = DG_B_counter + 1
    sendCommand(DG_Buero_Mode_Low,OFF)
    sendCommand(DG_Buero_Mode_Comfort, ON)
end

rule "Dachgeschoss_Buero_Heizung_Off"
when
    Time cron "0 */20 * * * ?"
then
    if(DG_B_lastCheck == DG_B_counter) {
            DG_B_counter = 0
            DG_B_lastCheck = -1;
            sendCommand(Buero_Besetzt, OFF)
sendCommand(DG_Buero_Mode_Comfort, OFF)
sendCommand(DG_Buero_Mode_Low,ON)
    } else {
            DG_B_lastCheck = DG_B_counter
    }
end

Jetzt fehlen noch die “Schalter” für Wohlfühl- und Niedrigtemperatug

vi items/demo.items
  Switch DG_Buero_Mode_Comfort "Comfort" <temperature>  {homematic="address=LEQ1287169, channel=4, parameter=COMFORT_MODE"}
  Switch DG_Buero_Mode_Low "Niedrig" <temperature>  {homematic="address=LEQ1287169, channel=4, parameter=LOWERING_MODE"}

Fertig. Das ganze hätte man natürlich auch mit einem fertigen Funkmodul von Homematik machen können. Der kostet aber fast das doppelte wie die Lösung mit dem Pi und wahrscheinlich kann ich an einem Pi auch mehrere naheliegende Räume überwachen und noch weitere Sensoren anschließen.