Opennet Homematic
Verwendung zur Steuerung der Licht, Tür und Heizung in der Frieda23. Erfahrungen bestehen auch im https://hacklabor.de (Danke für die Starthilfe). Die Lichtsteuerung basiert auf der LIFX HTTP API.
Inhaltsverzeichnis |
Allgemeines
- Steuerung: https://frieda23.opennet-initiative.de/
- Zentrale/Backend: http://1.50.aps.on:254/
Bedienungsanleitung für Vereinsmitglieder: Frieda23/Zugang zum Vereinsraum
Die Software ist per Opennet ansible auf dem Server/kinjo installiert. Der Zugang wird über Opennet CA Client Zertifikate geschützt. Die Homematic Zentrale (CCU) ist am LAN Port von AP1.50 angeschlossen. Eine dortige Port-Weiterleitung ermöglicht den Zugang vom Opennet-Mesh.
Komponenten:
- CCU3 Zentrale
- Keymatic Türschloss (HM-Sec-Key, Bedienungsnaleitung)
- Wand-Thermostat (HM-TC-IT-WM-W-EU, Bedienungsanleitung)
- Heizkörper-Thermostat (HM-CC-RT-DN, Bedienungsnaleitung)
- Fernbedienung (HM-RC-Key4-3)
- Schaltsteckdose (HmIP-PS-2)
Das Türschloss mit integriertem Motor benötigt 3x AA Batterien. Tausch ca. alle 1,5 Jahre notwendig (Stand Oktober 2020).
Die Lichtsteuerung erfolgt über die LIFX HTTP API und einem Konto von Mathias. Dort ist ein API-Token generiert und hinterlegt. Es werden alle Lichter dem Raum "Versionsraum" zugeordnet an bzw. ausgeschaltet. Beim Verschließen der Tür wird das Licht automatisch mit abgeschaltet (Stand Oktober 2022).
Homematic API
Komponenten: Homematic CCU3 Zentrale, Keymatic Türschloss (HM-Sec-Key); Stand 03/2019
JSON-RPC API: /api/homematic.cgi (via POST)
Vorbereitung:
- Benutzer anlegen (hier: api)
- Programme anlegen (hier: door_open, door_close)
- door_open - Kanalzustand: HM-Sec-Key "bei Sperrung aktiv, nur prüfen", Kanalauswahl: HM-Sec-Key "sofort Schloss entriegelt" + Verknüpfung Heizung/Thermostat "Comfort-Temperatur"
- door_close - Kanalzustand: HM-Sec-Key "bei Sperrung inaktiv, nur prüfen", Kanalauswahl: HM-Sec-Key "sofort Schloss verriegelt" + Verknüpfung Heizung/Thermostat "Eco-Temperatur" + Kanalauswahl: HmIP-PS-2 :3 "sofort Schaltzustand: Aus"
- temp_confort - Kanalauswahl: Verknüpfung Heizung/Thermostat "Comfort-Temperatur"
- temp_eco - Kanalauswahl: Verknüpfung Heizung/Thermostat "Eco-Temperatur"
- power_on - Kanalauswahl: HmIP-PS-2 :3 "sofort Schaltzustand: Ein"
- power_off - Kanalauswahl: HmIP-PS-2 :3 "sofort Schaltzustand: Aus"
- daily_eco_temp - Zeit: Täglich um 03:30 Uhr, Kanalauswahl: Verknüpfung Heizung/Thermostat "Eco-Temperatur"
- daily_power_off - Zeit: Täglich um 03:30 Uhr, Kanalauswahl: HmIP-PS-2 :3 "sofort Schaltzustand: Aus"
Ablauf:
- Session.login (username password) - Anmeldung vornehmen, Session-ID erhalten
- Program.getAll (_session_id_) - Liste der Programme ausgeben; nach Programmnamen suchen, Programm-ID erhalten
- Program.execute (_session_id_ id) - gewünschtes Programm id ausführen
- Session.logout (_session_id_) - Abmeldung vornehmen, auch bei vorzeitigem Programmabbruch
Webinterface:
- Login, denkbar via Opennet CA Client Login oder Nutzername/Passwort auf jeweils Basis Apache
- Tür Öffnen, Ausführung nur mit Login
- Tür Schließen, auch ohne Login erlaubt (Aka, "der letzte der geht macht die Tür zu")
Sonstiges:
- Verschlusszustand der Tür prüfen und/oder nachts automatisch schließen? (Kann jeder Zeit von innen mechanisch geöffnet werden)
- Ereignisprotokoll des Türschlosses aktivieren, ggf. Syslog-Export nach "monitor.on"
- API-Zugriff per CCU Firewall schützen, Zugriff nur mit Authentifizierung erlauben
JSON Beispiele
- Login:
! Request ! http POST <ccu>/api/homematic.cgi method=Session.login params:='{"username"\:"api","password"\:"XXX"}' { "method": "Session.login", "id": 1, "params": { "username": "api", "password": "XXX" } } ! Response HTTP/1.1 200 OK CONTENT-TYPE: application/json; charset=utf-8 Content-Length: 63 Date: ... Server: lighttpd/1.4.50 { "error": null, "id": 1, "result": "abcd123xyz", "version": "1.1" }
- Program-List
! Request ! http POST <ccu>/api/homematic.cgi method=Program.getAll params:='{"_session_id_"\:"abcd123xyz"}' { "method": "Program.getAll", "id": 2, "params": { "_session_id_": "abcd123xyz" } } ! Response HTTP/1.1 200 OK .. { "error": null, "id": 2, "result": [ { "id": "1234", "isActive": true, "isInternal": false, "lastExecuteTime": "2019-03-15 07:39:07", "name": "door_close" }, { "id": "5678", "isActive": true, "isInternal": false, "lastExecuteTime": "1970-01-01 01:00:00", "name": "door_open" } ], "version": "1.1" }
- Program-Info (zur Info, nicht notwendig)
! Request { "method": "Program.get", "id": 3, "params": { "_session_id_": "abcd123xyz", "id": "1234" } } ! Response (CCU Firmware v3.43.15 -> invalides JSON, abschließendes Komma zu viel! Hier mit Korrektur) HTTP/1.1 200 OK ... { "id": 3, "version": "1.1", "result": { "id": "1234", "name": "door_close", "isActive": true, "isInternal": false, "lastExecuteTime": "2019-03-15 07:39:07" }, "error": null }
- Program-Excecute
! Request { "method": "Program.execute", "id": 3, "params": { "_session_id_": "abcd123xyz", "id": "1234" } } ! Result HTTP/1.1 200 OK ... { "error": null, "id": 3, "result": true, "version": "1.1" }
- Logout
! Request ! http POST <ccu>/api/homematic.cgi method=Session.logout params:='{"_session_id_"\:"abcd123xyz"}' { "method": "Session.logout", "id": 4, "params": { "_session_id_": "abcd123xyz" } } ! Response HTTP/1.1 200 OK ... { "error": null, "id": 4, "result": true, "version": "1.1" }
Programme (Homematic + LIFX)
Es sind drei interne Homematic Programme/Automatisierungen angelegt:
- door_open - Öffnet die Türverriegelung, schaltet die Schaltsteckdose aus und setzt die Temperatursteuerung auf den Comfort-Modus
- door_close - Schließt die Türverriegelung und setzt die Temperatursteuerung auf den Eco-Modus
- temp_eco - Setzt die Temperatursteuerung auf den Eco-Modus
- temp_comfort - Setzt die Temperatursteuerung auf den Comfort-Modus
- power_on - Schaltet die Schaltsteckdose an
- power_off - Schaltet die Schaltsteckdose aus
- daily_eco_temp - Setzt täglich um 3:30 die Temperatursteuerung auf den Eco-Modus
- daily_power_off - Schaltet täglich um 3:30 die Schaltsteckdose aus
Im Frieda23-Webinterface haben wir für die Nutzer bereit gestellt:
- Tür Öffnen - ruft das Homematic-Programm "door_open" auf
- Tür Schließen - ruft das Homematic-Programm "door_close" auf und schaltet die LIFX Lichter an
- Licht an - schaltet die LIFX Lichter an
- Licht aus - schaltet die LIFX Lichter aus
Bildschirmfotos der Homematic-Programme und Webinterface:
Türsteuerung (Bash Script)
Unsere Skripte sind angelegt in Opennet ansible auf Opennet DEV.
- Ohne Debugging
$ ./homematic.sh --close-door Action CLOSE DOOR Login... done (Session ID Ajx32AXDwx) Find program... done (Program ID 1682) Run program... done (Status true) Logout... done (Status true)
- Mit Debugging
$ ./homematic.sh --close-close Debugging = true Action CLOSE DOOR Login... Response: {"version": "1.1","result": "Ba7sY0iz1S","error": null} - done (Session ID Ba7sY0iz1S) Find program... Response: {"version": "1.1","result": [{"id":"1682","name":"door_close","isActive":true,"isInternal":false, \ "lastExecuteTime":"2019-03-16 19:36:17"},{"id":"1727","name":"door_open","isActive":true,"isInternal":false, \ "lastExecuteTime":"2019-03-16 19:36:09"}],"error": null} - done (Program ID 1682) Run program... Response: {"version": "1.1","result": true,"error": null} - done (Status true) Logout... Response: {"version": "1.1","result": true,"error": null} - done (Status true)
Heizungssteuerung (Homematic Gruppe)
- In der CCU Einstellungen > Gruppen > "Vereinsraum", Gruppentyp "Heizungssteuerung" - es entsteht ein virtuelles Gerät für den Raum "Vereinsraum"
- als Gruppengeräte "Funk-Heizkörperthermostat" und "Funk-Wandthermostat" hinzufügen
- anschließend kann über "Bedienen" des virtuellen Geräte die Konfiguration für die Heizungssteuerung vorgenommen werden
- gleichzeitig erfolgt die Bedienung vor Ort an den Geräten als Gruppenschaltung