Virtuelle Python Umgebung für Openhab2

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
HABSeb
Beiträge: 4
Registriert: 6. Okt 2019 19:07
Answers: 0

Virtuelle Python Umgebung für Openhab2

Beitrag von HABSeb »

Hallo zusammen,

ich möchte ein Item berechnen, für welches ich auf die persistierte Historie (in meinem Fall eine MariaDB/MySql DB Tabelle) eines anderen Items zugreifen muss. Und zwar auf mehrere Werte der letzten Tage.

Hierfür habe ich mir ein Python Script geschrieben, welches die benötigten Daten aus der DB-Tabelle liest und die Berechnung zurückgibt. Das Script funktioniert soweit fehlerfrei (Aufruf via command line / ssh).
Das Script wird eingebunden als "Thing" über

Code: Alles auswählen

 { channel="exec:command: ..." 
Der Aufruf funktioniert auch soweit, aber ich erhalte Python Fehlermeldungen, weil importierte Pakete nicht gefunden werden. Ich musste Python-seitig noch Pakete installieren (mysql connector). Das wollte ich, weil meine Synology noch andersweitig genutzt wird, in einer virtuellem Umgebung machen.

Habe mir also eine virtuelle Umgebung eingerichtet:

Code: Alles auswählen

sudo -u openhab python3 -m venv  openHAB_virtual_env
Jetzt muss ich die virtuelle Umgebung aber noch für den openhab daemon user aktivieren, damit meine in der openHAB_virtual_env installierten Python Pakete gefunden werden.

Das Aktivieren funktioniert via ssh fehlerfrei und die virtuelle Umgebung wird via ssh aktiviert. Aber nicht unter dem opehab daemon user.
Ich dachte, ich kann das einfach in einer Startup Rule unterbirngen:

Code: Alles auswählen

rule "Activate virtual python environment"
when
System started
then
 var String info
  info = executeCommandLine(". /volume1/public/openHAB/conf/scripts/python/openHAB_virtual_env/bin/activate",100000)
  logInfo("Python venv",info)
end
Leider scheint das an Berechtigungen zu scheitern:

Code: Alles auswählen

2019-11-10 22:23:14.525 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'general.rules'
2019-11-10 22:23:19.608 [WARN ] [lipse.smarthome.io.net.exec.ExecUtil] - Execution failed (Exit value: -559038737. Caused by java.io.IOException: Cannot run program "." (in directory "."): error=13, Permission denied)
2019-11-10 22:23:19.609 [INFO ] [e.smarthome.model.script.Python venv] - 
Ich muss das Aktivieren der openHAB_virtual_env im "current shell process" ausführen, wenn ich den "." operator weglasse, würde die openHAB_virtual_env in einem neuen shell Prozess starten und nicht in dem, in welchem das python Script ausgeführt wird.

Hier fehlt mir jetzt Erfahrung mit openhab und/oder linux. Ich komme an dieser Stelle nicht mehr weiter. Hat jemand eine Idee?

Viele Grüße
HABSeb

HABSeb
Beiträge: 4
Registriert: 6. Okt 2019 19:07
Answers: 0

Re: Virtuelle Python Umgebung für Openhab2

Beitrag von HABSeb »

Habe das Problem jetzt umgangen. Ich rufe nicht mehr direkt das Python Skript auf, sondern ein Shell Skript, welches bei jedem Aufruf in die virtuelle Pythonumgebung wechselt und anschließend das Python-Skript aufruft. So wird die Berechtigungsproblematik umgangen, weil innerhalb des Shell Skripts der Aufruf erlaubt ist. Die Startup Rule benötige ich dann gar nicht mehr.

Falls es jemanden interessiert, hier ist das Zusammenspiel:

Im Exec command übergebe ich noch zwei Parameter, welche vom Shell Skript an das Python Script weitergegeben werden.

Code: Alles auswählen

Thing exec:command:stromverbrauch_1M "Stromverbrauch 30 Tage kumuliert" [command="bash /volume1/public/openHAB/conf/scripts/python/stromverbrauch.sh Stromzaehler_kWh 720", transform="REGEX((.*?))"]
Das Shell Skript:

Code: Alles auswählen

#!/bin/bash
. /volume1/public/openHAB/conf/scripts/python/openHAB_virtual_env/bin/activate
echo $(python3 /volume1/public/openHAB/conf/scripts/python/stromverbrauch.py $1 $2)

Antworten