Opennet Homematic: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(Homematic API)
(39 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
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.
 +
 +
=== Allgemeines  ===
 +
[[Datei:Frieda23-Lichtsteuerung2022.png|right|200px]]
 +
* 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), 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 [[Benutzer:MathiasMahnke|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
 
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)
 
Verwendung zur Steuerung der Tür in der [[Frieda23]]. Erfahrungen bestehen auch im https://hacklabor.de (Danke für die Starthilfe).
 
  
 
Vorbereitung:
 
Vorbereitung:
* Benutzer anlegen (hier: opennet)
+
* 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" + 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"
+
** 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:
 
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; Liste durchsuchen nach den relevanten Programmen durchsuchen und jeweilige aktuelle Programm-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
 
# '''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 20: Zeile 43:
 
* Login, denkbar via Opennet CA Client Login oder Nutzername/Passwort auf jeweils Basis Apache
 
* Login, denkbar via Opennet CA Client Login oder Nutzername/Passwort auf jeweils Basis Apache
 
* Tür Öffnen, Ausführung nur mit Login
 
* 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"?)
+
* Tür Schließen, auch ohne Login erlaubt (Aka, "der letzte der geht macht die Tür zu")
  
 
Sonstiges:
 
Sonstiges:
* Welche Softwareumgebung soll zum Einsatz kommen? Typisch wäre Bash, PHP, Python und HTML? (SN nutzt PHP-GuzzleHttpClient als Backend und Postman)
 
 
* 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)
* Hosting in der Frieda23 um lokalen Zugriff sicher zu stellen?
+
* 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 ===
  
JSON Beispiele (Client https://httpie.org):
 
 
* Login:
 
* Login:
 
  ! Request
 
  ! Request
  ! http POST <ccu>/api/homematic.cgi method=Session.login params:='{"username"\:"opennet","password"\:"XXX"}'
+
  ! 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": "opennet",
+
     "username": "api",
 
     "password": "XXX"
 
     "password": "XXX"
 
   }
 
   }
Zeile 148: Zeile 172:
 
     "version": "1.1"
 
     "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:
 +
<gallery>
 +
Datei:ONI Frieda23 HomematicDoorOpen.png|"door_open"
 +
Datei:ONI Frieda23 HomematicDoorClose.png|"door_close"
 +
Datei:ONI Frieda23 HomematicDailyEcoTemp.png|"daily_eco_temp"
 +
Datei:Frieda23-Lichtsteuerung2022.png|Webinterface
 +
</gallery>
 +
 +
=== 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 18. Januar 2023, 19:43 Uhr

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

Frieda23-Lichtsteuerung2022.png

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), 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:

  1. Session.login (username password) - Anmeldung vornehmen, Session-ID erhalten
  2. Program.getAll (_session_id_) - Liste der Programme ausgeben; nach Programmnamen suchen, Programm-ID erhalten
  3. Program.execute (_session_id_ id) - gewünschtes Programm id ausführen
  4. 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
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge