Hi zusammen,
da in der guten openWB eine SD-Karte werkelt, sollten zumindest die Settings und Historie regelmäßig gesichert werden. Das geht händisch über die URL http://openwb/openWB/web/settings/backup.php oder automatisch mit FHEM, hier jeden 1. im Monat:
Die Verzeichnisse und URLs sollten angepasst werden im DOIF:
defmod doif.openWB.Backup DOIF ([02:30] and $mday == 1)({\
fhem("setreading $SELF backup running");;\
my $openwbBackupURL = AttrVal("$SELF", "openWbUrl", "http://openwb") . "/openWB/web/settings/backup.php";;\
HttpUtils_NonblockingGet( { \
url=>$openwbBackupURL, timeout=>120, callback=>sub() {\
my ($hash, $err, $ret) = @_;;\
if ($err || ($ret !~ "Backup-Datei backup.tar.gz erfolgreich erstellt.")) {\
fhem("setreading $SELF backup error creating backup: $err $ret");;\
} else {\
fhem("setreading $SELF backup downloading");; \
my $openwbDownloadURL = AttrVal("$SELF", "openWbUrl", "http://openwb") . "/openWB/web/backup/backup.tar.gz";;\
my $BackupDir = AttrVal("$SELF", "backupDir", "././www");;\
HttpUtils_NonblockingGet({ \
url=>$openwbDownloadURL, timeout=>120, callback=>sub() {\
my ($hash, $err, $data) = @_;;\
my $filename = "$BackupDir/".$month.$mday."_openwb_backup.tar.gz";;\
if(open(FH, ">$filename")) {\
print FH $data;;\
close(FH);; \
fhem("setreading $SELF backup $filename");;\
} else {\
fhem("setreading $SELF backup error downloading $filename");;\
}\
} \
}) \
\
}\
} \
})\
})
attr doif.openWB.Backup userattr openWbUrl backupDir
attr doif.openWB.Backup backupDir ././backup
attr doif.openWB.Backup do always
attr doif.openWB.Backup openWbUrl http://openwb
Viel Spaß damit
Ronny
So eine Menge Code ist m.E. in einer Funktion der 99_myUtils.pm besser aufgehoben als im DEF irgendeines FHEM devices.
Zitat von: betateilchen am 16 Mai 2023, 18:28:39So eine Menge Code ist m.E. in einer Funktion der 99_myUtils.pm besser aufgehoben als im DEF irgendeines FHEM devices.
Warum?
Zitat von: FHEMAN am 16 Mai 2023, 22:01:36Zitat von: betateilchen am 16 Mai 2023, 18:28:39So eine Menge Code ist m.E. in einer Funktion der 99_myUtils.pm besser aufgehoben als im DEF irgendeines FHEM devices.
Warum?
Den Code im DEF einzugeben hat in diesem Fall sogar einen Vorteil, denn das Modul macht unmittelbar einen einfachen Syntax-Check und gibt dem User ein Feedback. Wenn der Syntaxcheck nicht erfolgreich ist, lässt sich die Definition erst gar nicht erstellen und muss angepasst werden. Und das Editieren mit codemirror ist fast genauso komfortabel wie mit einem Programmeditor.
Dazu kommt noch der Vorteil, dass der Code nicht auf eine 99_myUtils.pm und das DOIF-Device verteilt ist, sondern alles an einem Ort zu finden ist. Das Gute ist ja, dass man es sich aussuchen kann. Als Snippet ist es so schön kompakt und leicht zu kopieren.