Opennet Homematic: Unterschied zwischen den Versionen
(→Allgemeines) |
|||
(28 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | Verwendung zur Steuerung der Tür und Heizung in der [[Frieda23]]. Erfahrungen bestehen auch im https://hacklabor.de (Danke für die Starthilfe). | ||
+ | |||
+ | === 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), Wand-Thermostat (HM-TC-IT-WM-W-EU), Heizkörper-Thermostat (HM-CC-RT-DN), Fernbedienung (HM-RC-Key4-3) | ||
+ | |||
+ | Das Türschloss mit integriertem Motor benötigt 3x AA Batterien. Tausch ca. alle 1,5 Jahre notwendig (Stand Oktober 2020). | ||
+ | |||
+ | === Homematic API === | ||
+ | |||
Komponenten: Homematic CCU3 Zentrale, Keymatic Türschloss (HM-Sec-Key); Stand 03/2019 | Komponenten: Homematic CCU3 Zentrale, Keymatic Türschloss (HM-Sec-Key); Stand 03/2019 | ||
JSON-RPC API: /api/homematic.cgi (via POST) | JSON-RPC API: /api/homematic.cgi (via POST) | ||
− | |||
− | |||
Vorbereitung: | Vorbereitung: | ||
− | * Benutzer anlegen (hier: | + | * Benutzer anlegen (hier: api) |
* Programme anlegen (hier: door_open, door_close) | * 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" | ** door_open - Kanalzustand: HM-Sec-Key "bei Sperrung aktiv, nur prüfen", Kanalauswahl: HM-Sec-Key "sofort Schloss entriegelt" | ||
Zeile 13: | Zeile 28: | ||
Ablauf: | Ablauf: | ||
# '''Session.login''' (username password) - Anmeldung vornehmen, Session-ID erhalten | # '''Session.login''' (username password) - Anmeldung vornehmen, Session-ID erhalten | ||
− | # '''Program.getAll''' (_session_id_) - Liste der Programme ausgeben; | + | # '''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 | # '''Program.execute''' (_session_id_ id) - gewünschtes Programm ''id'' ausführen | ||
# '''Session.logout''' (_session_id_) - Abmeldung vornehmen, auch bei vorzeitigem Programmabbruch | # '''Session.logout''' (_session_id_) - Abmeldung vornehmen, auch bei vorzeitigem Programmabbruch | ||
Zeile 23: | Zeile 38: | ||
Sonstiges: | Sonstiges: | ||
− | |||
* Verschlusszustand der Tür prüfen und/oder nachts automatisch schließen? (Kann jeder Zeit von innen mechanisch geöffnet werden) | * 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: | * Login: | ||
! Request | ! Request | ||
+ | ! http POST <ccu>/api/homematic.cgi method=Session.login params:='{"username"\:"api","password"\:"XXX"}' | ||
{ | { | ||
"method": "Session.login", | "method": "Session.login", | ||
"id": 1, | "id": 1, | ||
"params": { | "params": { | ||
− | "username": " | + | "username": "api", |
"password": "XXX" | "password": "XXX" | ||
} | } | ||
Zeile 52: | Zeile 69: | ||
* Program-List | * Program-List | ||
! Request | ! Request | ||
− | ! http POST | + | ! http POST <ccu>/api/homematic.cgi method=Program.getAll params:='{"_session_id_"\:"abcd123xyz"}' |
{ | { | ||
"method": "Program.getAll", | "method": "Program.getAll", | ||
Zeile 94: | Zeile 111: | ||
} | } | ||
} | } | ||
− | ! Response ( | + | ! Response (CCU Firmware v3.43.15 -> invalides JSON, abschließendes Komma zu viel! Hier mit Korrektur) |
HTTP/1.1 200 OK | HTTP/1.1 200 OK | ||
... | ... | ||
Zeile 130: | Zeile 147: | ||
* Logout | * Logout | ||
! Request | ! Request | ||
+ | ! http POST <ccu>/api/homematic.cgi method=Session.logout params:='{"_session_id_"\:"abcd123xyz"}' | ||
{ | { | ||
"method": "Session.logout", | "method": "Session.logout", | ||
Zeile 146: | Zeile 164: | ||
"version": "1.1" | "version": "1.1" | ||
} | } | ||
+ | |||
+ | === 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 | ||
+ | |||
+ | [[Kategorie:Dienste]] |
Version vom 22. Oktober 2020, 09:18 Uhr
Verwendung zur Steuerung der Tür und Heizung in der Frieda23. Erfahrungen bestehen auch im https://hacklabor.de (Danke für die Starthilfe).
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), Wand-Thermostat (HM-TC-IT-WM-W-EU), Heizkörper-Thermostat (HM-CC-RT-DN), Fernbedienung (HM-RC-Key4-3)
Das Türschloss mit integriertem Motor benötigt 3x AA Batterien. Tausch ca. alle 1,5 Jahre notwendig (Stand Oktober 2020).
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"
- door_close - Kanalzustand: HM-Sec-Key "bei Sperrung inaktiv, nur prüfen", Kanalauswahl: HM-Sec-Key "sofort Schloss verriegelt"
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 erlauben? (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" }
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