Zeitgesteuerte Datensicherung von der Homematic CCU2 Zentrale auf einen Google Drive Account.
Mit diesem Skript lassen sich Daten von einer CCU2 Zentrale des Smart-Home Systems Homematic der Firma eQ-3 auf einem Google Drive Account in der Cloud sichern. Dabei lässt sich das Skript entweder über die Homematic Weboberfläche mittels Programmverknüpfung und dem Zeitmodul steuern oder kann - unabhängig - direkt auch als Cronjob auf der CCU2 laufen. Das TCL-Skript kommt dabei ohne weitere Bibliotheken oder Abhängigkeiten aus. Dies ist insofern interessant, als das die Homematic Zentrale mit der TCL Version 8.2 ausgeliefert wird - das Release-Datum dieser TCL-Version war der 16.12.1999! In dieser Version gab es keinen Support für JSON und auch viele andere Sprachkonstrukte, die das Leben einfacher machen, waren noch nicht implementiert.
- Einrichten der Google Developer Console
- Einrichten von Google Drive
- Anpassungen im Skript
- Einrichten des Backups auf der CCU2
Folgende Voraussetzungen werden für das Projekt benötigt:
- Google Account
- Die Zentrale des Homematic Smart-Home Systems CCU2 der Firma eQ-3
- Auf der Homematic CCU2 muss das AddOn CUxD (CUx Daemon) installiert sein
- FTP Zugriff auf die Homematic CCU2 (bpsw. FileZilla)
- SSH Zugriff auf die Homematic CCU2 (bspw. PuTTY)
- In Google Developer Console (http:https://console.developers.google.com) die Google Drive API aktivieren und dazu einen OAuth 2.0 Client (Web-Applikation) anlegen um
client ID
undclient secret
Schlüssel zu bekommen - TCL-Skript öffnen und als Werte für die Parameter
google_client_id
undgoogle_client_secret
die Werte des OAuth 2.0 Clients setzen. - TCL-Skript in ein Verzeichnis auf die Homematic CCU2 hochladen (bspw.
/usr/local/gdrive
) und Verzeichnis + TCL-Skript mit folgenden Berechtigungen versehen (CHMOD
): 755 - Mit PuTTY auf die Homematic CCU2 einloggen, in das Verzeichnis (
/usr/local/gdrive
) des TCL-Skriptes wechseln und dann folgenden Befehl ausführen:
>tclsh ./gdrive_backup -r
muss mit diesen Schlüsseln ein Webservice der Google Drive API aufgerufen werden, welcher eine eindeutige Geräte-Id und einen Gerätecode zurückliefert. Mit dem Geräte-Code muss
Im Folgenden wird Schrittweise erklärt, welche Einstellungen vorgenommen und welche Parameter gesetzt werden müssen, damit das automatische Backup nach Google Drive funktioniert.
Text nochmal überarbeiten
Als erstes werden die Voraussetzungen geschaffen, dass man sich bei Google Drive authentifizieren kann um dessen API zu verwenden. Die Authentifizierung erfolgt über das OAuth Verfahren, bei dem man sich mit einer Client-Id und einem geheimen "Client-Secret" Schlüssel bei der Google Drive API anmelden muss. Hat man die Schlüssel erzeugt ist das weitere Vorgehen wie folgt: Von dem Gerät, von dem aus man den Zugang zur Google Drive API benötigt (in unserem Fall die Homematic CCU2), wird ein spezieller Webservice aufgerufen, als Parameter werden die OAuth Schlüssel übergeben. Die Antwort enthält wiederum einen eindeutigen Geräteschlüssel und einen Geräte-Code, mit dem man sich einmalig manuell bei Google das Gerät freischalten lassen muss. Danach erfolgt ein einmaliger Aufruf eines anderen Webservices, welcher einen s.g. Access-Token und - viel wichtiger - einen Refresh-Token mitliefert. Letzterer ist wichtig, da der Access-Token nur immer 60 Minuten (3600 Sekunden) gültig ist. Mit dem Refresh-Token lässt sich dann ein neuer Access-Token generieren.
Aber der Reihe nach!
Wir loggen uns mit dem User an der Google Developer Console an, bei dem später das Backup in Google Drive landen soll: http:https://console.developers.google.com
Nach dem Login landet man in der Dashboard-Ansicht. Diese ist entweder noch leer oder enthält bereits andere, existierende Projekte des Benutzers. Hier legen wir nun ein (weiteres) neues Projekt an, indem man oben im Menü auf Select a project
klickt und dann über Create
ein neues erstellt. Existiert bisher kein Projekt, bekommt man direkt auf der Dashboard Seite schon den Link Create Project
angezeigt.
Nun vergeben wir bei Project name
einen Projektnamen, bspw.: Homematic CCU2
Nachdem das Projekt erfolgreich angelegt wurde, landet man nun auf dessen Übersichtsseite. Da wir unsere Dateien von der CCU2 auf Google Drive sichern möchten, müssen wir uns im nächsten Schritt für die Google Drive API freischalten lassen.
Die Google Drive API lässt sich für das Projekt aktivieren, indem man auf der Dashboard-Seite des Projektes über einen der Library
Links die Google Drive API sucht:
Die API muss nun noch aktiviert werden, indem man auf Enable
klickt:
Der aktuelle Benutzer ist jetzt für die Google Drive API freigeschalten und kann sie verwenden.
Nun ist der Benutzer zwar für die Google Drive API freigeschalten, kann Sie aber noch nicht verwenden, da man sich bei der API authentifizieren muss. Dazu benötigen wir neue Credentials
, die sich auf der Übersichtsseite über die entsprechenden Links anlegen lassen.
Beim Anlegen der neuen Credentials
entscheiden wir uns für den Punkt OAuth client ID
:
Bevor wir nun aber eine neue client ID anlegen können, werden wir aufgefordert, den Consent screen
zu konfigurieren. Hierbei handelt es sich um einige Angaben, die für die OAuth Zertifizierung benötigt werden. Also klicken wir auf den entsprechenden Knopf Configure consent screen
:
Viele Felder sind optional und für unsere Zwecke auch nicht relevant, allerdings ist der Produktname obligatorisch. Da die Email-Adresse bereits voreingestellt ist, vergeben wir folgenden Namen bei Product name shown to users
: Homematic Backup
Nachdem wir unsere Einstellungen gespeichert haben, wird uns wieder die vorherige Ansicht angezeigt, allerdings können wir nun einen Application type
auswählen. Für unsere Zwecke selektieren wir hier den Wert Web application und vergeben noch einen Namen: Homematic CCU2 Zentrale
Sobald wir nun auf Create
klicken und uns die Anmeldeinformationen erzeugen lassen, werden diese danach in einem Popup angezeigt:
Die beiden Werte für client ID
und client secret
sind nun wichtig für uns. Diese müssen wir uns kopieren, da wir sie später in das TCL-Skript einfügen werden:
client ID: 346571031919-1ah7notaarq75dalaid32hceb226nl4p.apps.googleusercontent.com client secret: uXkYrz_oSE-Miptql89ue_8Y
Mit diesen Werten ist es nun möglich über einen Webservice bei Google Drive weitere Informationen anzufordern, die für das TCL-Skript benötigt werden.
Nachdem wir client ID
und client secret
verfügbar haben, müssen wir damit von unserer Homematic CCU2 einen Google Drive Webservice aufrufen, der uns für das Gerät (also unsere Homematic CCU2) eine eindeutige Geräte-Id und einen Gerätecode zurückliefert. Die Geräte-Id benötigen wir später wieder im TCL-Script und mit dem Geräte-Code muss man die Homematic CCU2 einmalig manuell über eine Webseite für die Google Drive API freischalten!
Dieses Kapitel dient hautpsächlich dazu, dass das später verwendete Beispiel nachvollziehbar ist/bleibt. Bei der Anpassung des eigentlichen TCL-Skriptes wird sich auf diesen Punkt bezogen. In Google Drive bekommt jeder Ordner eine eindeutige Id zugeordnet, diese wird im TCL-Skript benötigt, wenn man seine Daten in einem bestimmten Unterverzeichnis speichern möchte und nicht alles im Root-Verzeichnis seines Google Drive Accounts liegen haben möchte.
TODO