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 :idea: >> beim If hab ich den Status vergessen if(OH2_Service.state == 1) :shock:
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