FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: xerion am 17 November 2019, 14:13:54

Titel: Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 14:13:54
Hallo zusammen,

ich habe den og. AccesPoint der m.E. zu Homematic Serie gehört. Damit ich die vorhandenen Sensoren und Aktoren in Fhem nutzen kann bin ich auf folgenden Beitrag gestoßen:
https://forum.fhem.de/index.php?topic=83115.0.

Dort kann man mittels Python Skript über einer REST-API Schnittstelle über die Cloud die Werte abfragen.
Die Einrichtung und Erzeugung der Zugnagsdaten hat problemlos geklappt und auch der Abruf der Daten klappt vom Raspi aus ohne Fehler.
Jetzt wollte ich aber das Python Skript in Fhem einbinden und wenn ich das Skript über die Befehlszeile starte bekomme ich folgenden Logeintrag:
ModuleNotFoundError: No module named 'homematicip

Mein Vermutung ist, dass es wohl ein Rechte Problem gibt. Habe dann auch versucht nach besten Wissen und Gewissen die Fhem Rechte zu erteilen und habe vorsichtshalber die Skripte unter /opt/fhem/FHEM/ abgelegt, aber leider erfolglos.

Ein ls -al gibt folgende Werte zurück (habe nur die betroffen Dateien eingefügt)

-rwxr-xr-x  1 fhem root   1592 Nov 16 15:03  api.py

-rwxr-xr-x  1 fhem root    162 Nov 15 22:31  config.ini


Ich hoffe das die Infos für eine grobe Einschätzung des Problem reichen und würde mich über Tipps und Ideen freuen.
Danke.
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 17 November 2019, 17:08:03
Was gibtst Du genau in die Befehlezeile ein?
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 17:15:54
Zitat von: amenomade am 17 November 2019, 17:08:03
Was gibtst Du genau in die Befehlezeile ein?
"python3 /opt/fhem/FHEM/api.py"

Gesendet von meinem JSN-L21 mit Tapatalk

Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 17 November 2019, 17:24:56
Was ist api.py? Ich kann das mit der verlinkte Anleitung nicht verknüpfen.

Ein Berechtigungsproblem ist es nicht, zumindest nicht direkt, sonst würde er wegen api.py meckern. Aber was api.py im hinten aufruft...?
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 17:28:13
Zitat von: amenomade am 17 November 2019, 17:24:56
Was ist api.py? Ich kann das mit der verlinkte Anleitung nicht verknüpfen.
Das ist ein Beispiel Skript von der GitHub Seite.
https://github.com/coreGreenberet/homematicip-samples/blob/master/SampleTemplate/empty.py

Gesendet von meinem JSN-L21 mit Tapatalk

Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 17:34:16
Das hatte ich genommen um erstmal ohne fhem sicher eine Verbindung herstellen zu können. Bevor ich an zwei Stellen suchen muss.

Gesendet von meinem JSN-L21 mit Tapatalk

Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 17 November 2019, 17:35:11
Okay... dann findet er bei "import homematicip" die Quelle nicht.
Wo liegt bei dir das Python-Modul homematicip?
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 17 November 2019, 17:41:05
Was sagt
"python3 -c 'import homematicip'"in der Befehlzeile? Vermutlich auch "no module named homematicip"?
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 17:44:59
Ich habe gerade Mal was versucht. Erst hatte ich den Befehl "pip3 Install homematicip" vom Pi aus installiert so wie in der Anleitung beschrieben. Jetzt habe ich den Aufruf nochmal über fhem ausgeführt und jetzt ist der Fehler mir dem fehlenden Modul weg aber dafür kommt jetzt das:

Traceback (most recent call last): File "/opt/fhem/FHEM/api.py", line 8, in <module> home.set_auth_token(config.auth_token) AttributeError: 'NoneType' object has no attribute 'auth_token' Traceback (most recent call last): File "/opt/fhem/FHEM/api.py", line 8, in <module> home.set_auth_token(config.auth_token) AttributeError: 'NoneType' object has no attribute 'auth_token' sh: 1: python3 /opt/fhem/FHEM/api.py: not found sh: 1: python3 /opt/fhem/FHEM/api.py: not found

Gesendet von meinem JSN-L21 mit Tapatalk

Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 17 November 2019, 18:00:23
Naja... es wird schwierig. Jetzt ist er in homematicip, ladet abernicht ordentlich das Submodul home...
Es ist wahrscheinlich die gleiche Ursache: irgendwie mit sys.modules und sys.path verbunden: der User fhem sucht die Sachen nicht an der gleiche Stelle wie der User pi
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 18:19:15
Zitat von: amenomade am 17 November 2019, 18:00:23
Naja... es wird schwierig. Jetzt ist er in homematicip, ladet abernicht ordentlich das Submodul home...
Es ist wahrscheinlich die gleiche Ursache: irgendwie mit sys.modules und sys.path verbunden: der User fhem sucht die Sachen nicht an der gleiche Stelle wie der User pi
Ja das vermute ich auch. Zu dem Python Skript wird auch noch eine config.ini benötigt, dort stehen die Client ID usw. drin. Die habe ich auch im gleichen Pfad wo das Python Skript liegt. Denn laut der Doku kann es im gleichen Pfad sein aber vielleicht liegt das am fhem Aufruf. Hast du denn eine Idee wo fhem danach suchen könnte?

https://github.com/coreGreenberet/homematicip-rest-api

Gesendet von meinem JSN-L21 mit Tapatalk
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 17 November 2019, 18:49:45
Was sagt
"python3 -c 'import sys;;print(sys.path)'"
"python3 -c 'import sys;;print(sys.modules)'"
in Befehlzeile?
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 19:01:00
Zitat von: amenomade am 17 November 2019, 18:49:45
Was sagt
"python3 -c 'import sys;;print(sys.path)'"
"python3 -c 'import sys;;print(sys.modules)'"
in Befehlzeile?

Zitat von: amenomade am 17 November 2019, 18:49:45
Was sagt
"python3 -c 'import sys;;print(sys.path)'"
"python3 -c 'import sys;;print(sys.modules)'"
in Befehlzeile?


python3 -c 'import sys;;print(sys.path):
['', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/opt/fhem/.local/lib/python3.7/site-packages', '/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']


"python3 -c 'import sys;;print(sys.modules)':

{'sys': , 'builtins': , '_frozen_importlib': , '_imp': , '_thread': , '_warnings': , '_weakref': , 'zipimport': , '_frozen_importlib_external': , '_io': , 'marshal': , 'posix': , 'encodings': , 'codecs': , '_codecs': , 'encodings.aliases': , 'encodings.utf_8': , '_signal': , '__main__': , 'encodings.latin_1': , 'io': , 'abc': , '_abc': , '_bootlocale': , '_locale': , 'site': , 'os': , 'stat': , '_stat': , 'posixpath': , 'genericpath': , 'os.path': , '_collections_abc': , '_sitebuiltins': , 'types': , 'importlib': , 'importlib._bootstrap': , 'importlib._bootstrap_external': , 'warnings': , 'importlib.util': , 'importlib.abc': , 'importlib.machinery': , 'contextlib': , 'collections': , 'operator': , '_operator': , 'keyword': , 'heapq': , '_heapq': , 'itertools': , 'reprlib': , '_collections': , 'functools': , '_functools': , 'logilab': , 'mpl_toolkits': , 'sitecustomize': }



Gesendet von meinem JSN-L21 mit Tapatalk

Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 17 November 2019, 20:13:54
Ich bin ein Schritt weiter.
Es reicht nicht aus, dass die config.ini im auszuführenden Verzeichnis liegt. Ich habe den nun nach /etc/homematicip-rest-api/ kopiert und bekomme einen Antwort die auch im Fhem Log geschrieben wird. Jetzt muss ich nur versuchen das in einzelne Readings zu packen.
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 18 November 2019, 16:32:49
Ich kann mein Skript soweit nutzen und auch weiter verarbeiten.
Habe aber jetzt das Problem das fhem während der Ausführung blockiert obwohl ich das mit qx ausführe.

Gesendet von meinem JSN-L21 mit Tapatalk

Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 18 November 2019, 21:09:26
qx(befehl) ist immer blockierend.
qx(befehl &) ist nicht blockierend da ein Subprozess gestartet wird und die Kontrolle wieder dem Hauptprogramm zurückgegeben wird.

"befehl" ist nicht blockierend.

Die Frage ist: brauchst Du den Rückgabewert von python? Dann wird es schwieriger: um es non-blocking zu machen, muss man eine return-funktion programmieren.
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 18 November 2019, 21:45:46
Zitat von: amenomade am 18 November 2019, 21:09:26
qx(befehl) ist immer blockierend.
qx(befehl &) ist nicht blockierend da ein Subprozess gestartet wird und die Kontrolle wieder dem Hauptprogramm zurückgegeben wird.

"befehl" ist nicht blockierend.

Die Frage ist: brauchst Du den Rückgabewert von python? Dann wird es schwieriger: um es non-blocking zu machen, muss man eine return-funktion programmieren.
qx(befehl &) habe ich getestet, das blockiert immer noch. Ich brauche die Werte aus dem Python Skript, da die mir z.B. den Status der Fensterkontakte sendet.

So sieht die subroutine aus:
#---------------------------------------
# Homematic-Funktion
#---------------------------------------
sub homematicip(){
  my $returnCode = qx(python3 /opt/fhem/www/homematicip-rest-api/api1.py &);
  fhem("setReading fenster_badezimmer  fenster_badezimmer $returnCode");
}}
Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: amenomade am 18 November 2019, 22:01:10
Wenn Du die Werte brauchst, dann muss es blockierend sein, da Du doch auf dem Wert warten willst.
Und & wird auch nicht funktionieren.

Dann bleibt nur z.B. https://wiki.fhem.de/wiki/Blocking_Call

Alternativ: dein Skript läuft mit cronjob, und übergibt selbst die Werte an Fhem.

Titel: Antw:Möhlenhoff Alpha IP Acces Point mit REST-Api auslesen
Beitrag von: xerion am 20 November 2019, 20:50:42
Zitat von: amenomade am 18 November 2019, 22:01:10
Wenn Du die Werte brauchst, dann muss es blockierend sein, da Du doch auf dem Wert warten willst.
Und & wird auch nicht funktionieren.

Dann bleibt nur z.B. https://wiki.fhem.de/wiki/Blocking_Call

Alternativ: dein Skript läuft mit cronjob, und übergibt selbst die Werte an Fhem.

Habe das Problem jetzt gelöst. Ich lasse das Python Skript in einer 5 Sekunden Dauerschleife laufen und sende die Werte mit dem Python FHEM API-Modul direkt als Reading in das Dummy Device. Dadurch blockiert FHEM nicht mehr.