Hi zusammen,
vielleicht möchte noch jemand anders die Konfiguration wie fhem.cfg und fhem.save beim speichern direkt in ein GIT (gitlab / github etc) einchecken um sie dort zu Sichern und eine Versionierung zu haben.
Howto:
1) Installieren von git tools auf dem Gerät wo das FHEM läuft.
Beispiel für ubuntu:
$ apt install git
2) unter dem Benutzer welcher der FHEM Prozess gestartet (im Beispiel der User: fhem) ist die globale Einstellung machen.
su fhem
$ git config --global user.name FHEM
$ git config --global user.email fhem@fhem.fhem
3) FHEM "trigger" anlegen. Hierbei die Attribute anpassen.
defmod conifgBackup2GIT DOIF ([global:"SAVE"]) \
{ \
my $now = TimeNow();; \
system("git add $attr{global}{configfile}");;\
system("git add $attr{global}{statefile}");;\
system("git commit -m 'triggert by FHEM config save ($now)'");;\
system("sh -c 'git push http://".AttrVal('$SELF','git_username','').":".AttrVal('$SELF','git_password','')."@".AttrVal('$SELF','git_host','')."/".AttrVal('$SELF','git_git','')." ".AttrVal('$SELF','git_repo','')."'" );;\
}
attr conifgBackup2GIT userattr git_username git_password git_host git_git git_repo
attr conifgBackup2GIT git_git fhem/fhem.git
attr conifgBackup2GIT git_host 192.168.1.11
attr conifgBackup2GIT git_password GITPasswort
attr conifgBackup2GIT git_repo master
attr conifgBackup2GIT git_username GitUser
attr conifgBackup2GIT wait 3
Wichtig ist der Wait Timer, da ansonsten die Datei noch nicht geschrieben ist und die "alte" Version gesichert wird.
Danke, super Anleitung!
Für alle, die keine Passwörter in Git/FHEM speichern wollen, hier eine Abwandlung mit SSH-Keys:
1.) SSH-Keys auf FHEM-System erstellen
# sudo -u fhem ssh-keygen -t rsa
2.) SSH-Key auf dem GitServer ablegen (je nach Server verschiedene Vorgehensweise)
# sudo -u fhem cat /opt/fhem/.ssh/id_rsa
3.) Repository auf dem Remote-Git-Server erstellen.
4.) Git-Instanz unter FHEM erstellen
# cd /opt/fhem
# git init
# git config --global user.name FHEM
# git config --global user.email fhem@fhem.fhem
# git remote add origin http://IP_UND_PORT/fhem/fhem.git
# chown -R fhem /opt/fhem
5.) Git-Verbidnung testen - ist alles korrekt eingerichtet, sollte alles ohne Passwortabfrage funktionieren
# cd /opt/fhem
# sudo -u fhem git pull
6a.) FHEM definition erstellen
defmod System.SaveConfig DOIF ([global:"SAVE"]) \
{ \
my $now = TimeNow();; \
system("git add $attr{global}{configfile}");;\
system("git add $attr{global}{statefile}");;\
system("git commit -m 'Triggered by FHEM config save ($now)'");;\
system("git push");;\
}
attr System.SaveConfig wait 3
6b) Alternative, wenn das Kommando FHEM nicht blocken und im Hintergrund laufen soll
define System.SaveConfig DOIF ([global:"SAVE"]) \
{ \
my $now = TimeNow();; \
my $command = "git add $attr{global}{configfile};; " \
. "git add $attr{global}{statefile};; " \
. "git commit -m 'Triggered by FHEM config save ($now)';; " \
. "git push";; \
system("/bin/sh -c \"$command\" &");;\
}
attr System.SaveConfig wait 3
Gruß,
Mirko
Ich habe Methode 1 (über Ben/PW) ausprobiert. Leider ohne Erfolg. Mit DOIF Variablen definieren funktioniert irgendwie nicht. Schon mit der ersten Zeile (my $now = TimeNow();; \" gibt es einen Fehler.
Wie bindet man das defmod ein? Ich habe es in ein define ersetzt und in die fhem.cfg geschrieben.
War das so richtig?
Hallo,
wie lautet die Fehlermeldung? Du kannst die Kommandos entweder per Telnet oder in GUI von FHEM absetzen. Bei Telnet musst du natürlich den Dienst einschalten. Wie es geht, wird hier beschrieben: https://wiki.fhem.de/wiki/Telnet
Gruß,
Mirko
Hallo Zusammen,
auch wenn dieses Thema nicht aktuell diskutiert wird: mir hat der Thread sehr geholfen. Vielen Dank
@th0nix: für die Idee und iniiale Umsetzung
@pldemon (Mirko): für die Ergänzung um ssh
Da ich mich aktuell auch in anderen Projekten in GIT / GTHUB bzw GITEA einarbeiten muss und tatsächlich ein wenig verliebt bin,
lag der Gedanke auch die FHEM Config darüber zu verwalten und gleichzeitig auch zu sichern nahe. Hier im Forum bin ich schnell bei Euch fündig geworden.
Ein Anmerkung zur Anleitung von Mirko
Zitat
2.) SSH-Key auf dem GitServer ablegen (je nach Server verschiedene Vorgehensweise)
Code:
# sudo -u fhem cat /opt/fhem/.ssh/id_rsa
Bei meinen "Standard" Installationen liegt in "id_rsa" der private Key.
Sollte es dort nicht besser
# sudo -u fhem cat /opt/fhem/.ssh/id_rsa.pub
heißen um eindeutig zu sein?
Ich nutze die non-blocking Variante. Sie funktioniert, aber aber zeigt sich danach mit einem Fehlercode "-1" (Ende vorletzte Zeile) im FHEM-Log. Wisst Ihr ob dies die normale Rückgabe eines git-Push mit Changes ist oder eine ernst zunehmende Warnung?
2022.03.13 19:35:42 2: System.SaveConfig: { my $now = TimeNow(); my $command = "git add $attr{global}{configfile}; " . "git add $attr{global}{statefile}; " . "git add README.md; " . "git commit -m 'Triggered by FHEM config save ($now)'; " . "git push"; system("/bin/sh -c \"$command\" &"); }: -1
[master ######] Triggered by FHEM config save (2022-03-13 19:35:42)
PS und ein persönliche Empfehlung: Ich habe zusätzlich eine README.md in /opt/fhem/ erstellt und ins Repo aufgenommen. Das ist Standard-Doku Vorgehen bei mir, da ich sonst nach kurzer Zeit nicht mehr weiß, was da eigentlich vor sich geht. Zudem eine Möglichkeit die FHEM Instanz inkl Backup/Recovery (aber ohne Passworte!!!) vergleichsweise einfach und an einem logischen Ort zu dokumentieren.
Viele Grüße,
Andreas
Sehr schön, das ganze gefällt mir!
Es läuft auch mittlerweile nach einigen Hürden mit der key authorization auf der Synology NAS.
Kann man nun auch von FHEM aus einige Stati vom Git-Server abfragen? Wäre toll eine Liste zu haben welche commits gepusht wurden, wäre auch toll die commit message selbst schreiben zu können.
sowas wie
save "Änderungen am DOIF xxx & globales update"
in die FHEM cmd-line eintippen wäre klasse.
die -1 Rückgabe des System wird auch offenbar noch als error eingestuft, oder ist doch noch was falsch bei mir? Die Sicherung funktioniert...
error
{ my $now = TimeNow(); my $command = "git add $attr{global}{configfile}; " . "git add $attr{global}{statefile}; " . "git commit -m 'Triggered by FHEM config save ($now)'; " . "git push"; system("/bin/sh -c \"$command\" &"); }: -1
2022.06.05 20:51:48 2: System.SaveConfig: { my $now = TimeNow(); my $command = "git add $attr{global}{configfile}; " . "git add $attr{global}{statefile}; " . "git commit -m 'Triggered by FHEM config save ($now)'; " . "git push"; system("/bin/sh -c \"$command\" &"); }: -1
[master 8174902] Triggered by FHEM config save (2022-06-05 20:51:48)
2 files changed, 8 insertions(+), 9 deletions(-)
To ssh://192.168.1.5/volume1/**/fhem.git
d7a2c9b..8174902 master -> master
Hallo th0nix,
Hallo pldemon (Mirko),
sehr interessanter Ansatz, den ich gerne aufgreifen möchte.
Ich habe ein Konto bei Github, bisher um dort ausschließlich zu lesen. Kann ich als einfacher (nicht zahlender) User dort etwas speichern? Ich möchte nicht, dass alle meine Definitionen öffentlich verfügbar sind. Kann man bei Github es so einstellen, dass dort gespeicherte Daten privat gehalten werden?
Viele Grüße Gisbert
Ich habe die Tage ein fhempy Modul für das Backup in ein privates Github Repository erstellt.
Ist vielleicht für ein paar hier interessant:
https://forum.fhem.de/index.php/topic,128873.0.html
Ja vielleicht - das hier funktioniert schon sehr gut, aber fhempy wollte ich mir eh genauer anschauen um "exoten" zu integrieren...