Seite 1 von 1
Hilfe bei Rules mit executeCommandLine
Verfasst: 28. Dez 2019 17:47
von leupy
Hallo,
ich brauche Hilfe bei meiner erstellten Regel für eine Neustart bzw Backup über die Basic Oberfläche.
Ich habe folgende Switch in der Sitemap erstellt.
Code: Alles auswählen
Switch item=OH2_Service mappings=[1="Neustart",2="Backup"] icon="openhab"
Switch item=PI_Service mappings=[1="Neustart",2="Herunterfahren"] icon="pi"
Item
Code: Alles auswählen
// Schalter für den openHab und PI Restart
Number OH2_Service "openHAB "
Number PI_Service "Pi"
und die Regel dazu
Code: Alles auswählen
//System Service
//--------------
rule "Init Service"
when
System started // Wenn System startet
then
OH2_Service.postUpdate(0)
PI_Service.postUpdate(0)
end
rule "Service_OH2"
when
Item OH2_Service changed
then
if (OH2_Service == 1)
{
executeCommandLine ("sudo /bin/systemctl restart openhab2.service")
}
if (OH2_Service == 2)
{
executeCommandLine ("sudo $OPENHAB_RUNTIME/bin/backup")
}
end
Wenn ich den Befehl von der ersten Bedingung (OH2_Service ==1) ohne die Regel ausführe startet OpenHab neu aber in der Regel läuft das ganze nicht.
Das "OH_Service" Item wechselt beim Test auf 1 aber der Befehl wird nicht ausgeführt

Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 28. Dez 2019 20:41
von heiko74
Hallo,
Um zu sehen, ob die Regel durchgeführt wird oder nicht, kannst du ein "logInfo" einfügen. In der "openhab.log" kannst du dann sehen, welche Punkte durchlaufen wurden. Mein Vorschlag wäre einen Log-Eintrag für Start, Ende und Verzweigung einzufügen.
Auch versuchst du Befehle mit "sudo" auszuführen.
Kläre bitte ab, ob:
1. Der Benutzer, der OH ausführt in der Gruppe sudo ist.
2. "sudo" verlangt ein Passwort. (sudo ohne Passwort ist ein Sicherheitsrisiko !!) Ich sehe aber nicht, daß eines übergeben wird.
Ich verstehe, was du erreichen willst, aber überlege, ob es wirklich notwendig ist:
a) OH per Oberfläche neu starten zu können. Jemand, der rumspielt kann dir OH neu starten.
b) Dein Skript "backup" könnte man auch per cron regelmäßig starten. Aber reicht es nicht auch nach Änderungen eine Sicherung per Hand zu starten?
Heiko
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 29. Dez 2019 12:06
von leupy
Hallo Heiko,
die Rechte für den Befehl sind gesetzt er funktioniert wenn ich ihn über eine Switch aktiviere.
Durch einfügen von Logs hab ich gesehen das die Regel beim Trigger "Item OH2_Service changed" auf
ende springt obwohl die Bedingung des ersten If erfüllt ist.
Könnte das ein Zeitproblem vom Trigger sein das das ganze zu schnell ist ?
gruß leupy
Code: Alles auswählen
rule "Service_OH2"
when
Item OH2_Service changed
then
if (OH2_Service == 1)
{
logInfo("OH2", "Restart")
executeCommandLine ("sudo /bin/systemctl restart openhab2.service")
}
if (OH2_Service == 2)
{
logInfo("OH2", "Backup")
executeCommandLine ("sudo $OPENHAB_RUNTIME/bin/backup")
}
logInfo("OH2", "Regel Ende")
end
[code]
[/code]
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 29. Dez 2019 17:51
von leupy
Ich hab´s gefunden

>> beim If hab ich den Status vergessen
if(OH2_Service.state == 1) 
Restart funst jetzt, aber wenn der Backup Befehl ausgeführt wird kein Backup gemacht.?
INFO ] [lipse.smarthome.io.net.exec.ExecUtil] - executed commandLine 'sudo $OPENHAB_RUNTIME/bin/backup'
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 29. Dez 2019 19:37
von peter-pan
Hast du schon mal versucht "sudo /bin/bash $OPENHAB_RUNTIME/bin/backup" zu benutzen ? (oder /bin/sh)
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 29. Dez 2019 19:38
von heiko74
Hallo,
ups, das mit dem ".state habe ich übersehen.
Dann mal zur Fehlersuche. Die Rule scheint so weit zu laufen:
a) Wird die Backup-LogInfo geloggt?
b) Was passiert wenn du "sudo $OPENHAB_RUNTIME/bin/backup" im Terminal ausführst?
c) Poste mal den Inhalt von "backup".
Heiko
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 29. Dez 2019 21:48
von udo1toni
Ich bin mir nicht sicher, ob die Umgebungsvariable $OPENHAB_RUNTIME für den user openhab gesetzt ist.
Es gibt auch keinen Grund, unbedingt die Variable für den Aufruf zu nutzen.
Im Normalfall zeigt die Variable auf /usr/share/openhab2/runtime, Du könntest also den Aufruf entsprechend ändern.
Falls Du nicht sicher bist, kannst Du vorher feststellen, auf welchen Pfad die Variable tatsächlich zeigt, mittels openhab-cli info.
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 30. Dez 2019 15:40
von leupy
Hallo,
hier die info mittels cli
Version: 2.4.0 (Build)
User: openhab (Active Process 30007)
User Groups: openhab tty dialout audio bluetooth gpio
Directories: Folder Name | Path | User:Group
----------- | ---- | ----------
OPENHAB_HOME | /usr/share/openhab2 | openhab:openhab
OPENHAB_RUNTIME | /usr/share/openhab2/runtime | openhab:openhab
OPENHAB_USERDATA | /var/lib/openhab2 | openhab:openhabian
OPENHAB_CONF | /etc/openhab2 | openhab:openhabian
OPENHAB_LOGDIR | /var/log/openhab2 | openhab:openhabian
OPENHAB_BACKUPS | /var/lib/openhab2/backups | root:root
Wie ändere ich den Aufruf oder besser wie sieht der dann aus?
Oder kann ich noch mit einer anderen Methode das Backupscipt aufrufen, ich bin da ein bisschen überfordert.
Wenn ich die Befehl über Putty ausführe wird ein Backup erstellt
@Heiko Noch zu deiner Frage warum mann das braucht > Da ich viel an meiner Haussteuerung ändere und ich viel probieren muß (da mir das Wissen fehlt) ist es für mich aufwändig mich jedes mal über Putty wieder einzuloggen und einen Neustart durchzuführen. Das geht dann schneller über die Oberfläche genau so für ein Backup.
gruß leupy
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 30. Dez 2019 23:08
von udo1toni
Na ja, statt
Code: Alles auswählen
executeCommandLine ("sudo $OPENHAB_RUNTIME/bin/backup")
schreibst Du halt
Code: Alles auswählen
executeCommandLine ("sudo /usr/share/openhab2/runtime/bin/backup")
Re: Hilfe bei Rules mit executeCommandLine
Verfasst: 31. Dez 2019 09:02
von leupy
udo1toni hat geschrieben: ↑30. Dez 2019 23:08
Na ja, statt
Code: Alles auswählen
executeCommandLine ("sudo $OPENHAB_RUNTIME/bin/backup")
schreibst Du halt
Code: Alles auswählen
executeCommandLine ("sudo /usr/share/openhab2/runtime/bin/backup")
Hallo udo1toni,
ja das war der Richtige Tipp läuft jetzt.
gruß leupy