Modul für Netgear Arlo-Kameras (Python-Version)

Begonnen von maluk, 07 Mai 2018, 20:40:06

Vorheriges Thema - Nächstes Thema

Vampy20

Hi maluk,

kannst Du bitte eine Download Funktion einführen, die Links werden nach einiger Zeit ungültig.

Vielen Dank,
Vampy
FHEM 5.7 auf RPi 2 (Raspbian 4.4.13+, Perl v5.20.2), HM-CFG-USB, HM-SEC-RHS, HM-ES-PMSw1-Pl, HM-LC-Bl1PBU-FM, HM-SEC-SD-2, co2mini, Philips Hue, MySensors, DashButton

maluk

Ich war ein paar Tage geschäftlich unterwegs und konnte daher nicht antworten.

@choetzu: die Exception sagt mir so nichts. Arbeitet der Python Server danach weiter oder muss du ihn dann erneut starten? Die Ausgaben des Python HTTP-Service kann man von FHEM aus leider nicht unterdrücken. Das Problem ist, dass ich den Python Server von FHEM aus starte. Alles, was der Prozess auf die Konsole ausgeben möchtet, landet daher im FHEM Logfile.

@erwe: die Arlo Q kenne ich nicht, wird aber vermutlich über die API nicht gefunden (wie von luke666s geschrieben). Bzgl. erhöhter Last solltest du über den Linux-Befehl top mal prüfen, welcher Prozess die CPU verbraucht (also python oder perl).

@Vampy20: gibt es vor dem Absturz nachts um 1 Fehlermeldungen oder ungewöhnliche Einträge in arlo.log oder FHEM-Log? I


maluk

Zitat von: Vampy20 am 15 Mai 2018, 10:07:48
kannst Du bitte eine Download Funktion einführen, die Links werden nach einiger Zeit ungültig.

Wie meinst du das genau? Dass automatisch beim Bereitstellen eines neuen Video downgeloaded wird? Oder einen Befehl am Device, mit dem man sich die Liste der Videos geben lassen kann und dann gezielt Videos herunterlädt?

Vampy20

Zitat von: maluk am 16 Mai 2018, 20:54:37
@Vampy20: gibt es vor dem Absturz nachts um 1 Fehlermeldungen oder ungewöhnliche Einträge in arlo.log oder FHEM-Log? I

Hi maluk,

im arlo.log gibt es keine Fehlermeldungen, dafür aber im FHEM log:

Exception in thread HeartbeatThread:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 296, in Heartbeat
    self.Ping(basestation)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 394, in Ping
    return self.NotifyAndGetResponse(basestation, {"action":"set","resource":"subscriptions/"+self.user_id+"_web","publishResponse":False,"properties":{"devices":[basestation_id]}})
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 379, in NotifyAndGetResponse
    transId = self.Notify(basestation, body)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 370, in Notify
    self.request.post('https://arlo.netgear.com/hmsweb/users/devices/notify/'+body['to'], body, headers={"xcloudId":basestation.get('xCloudId')})
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 150, in post
    return self._request(url, 'POST', params, headers)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 133, in _request
    r = self.session.post(url, json=params, headers=headers)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 555, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 490, in send
    raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))


Bzgl. der download Funktion, ich benutze das TabletUI um das jeweils letzte Video einer Kamera anzuzeigen. Dies funktioniert nur so lange die URL gültig ist. Deswegen wollte ich die Videos lokal kopieren (überschreiben) um diese auch dann verfügbar zu haben wenn sich länger nichts mehr getan hat. Gestern ist mir eine Idee eingefallen, wie ich dies mit einem Notify und wget probierten könnte. Ich werde berichten.

Grüße, Vampy
FHEM 5.7 auf RPi 2 (Raspbian 4.4.13+, Perl v5.20.2), HM-CFG-USB, HM-SEC-RHS, HM-ES-PMSw1-Pl, HM-LC-Bl1PBU-FM, HM-SEC-SD-2, co2mini, Philips Hue, MySensors, DashButton

ChrisKoh

Hallo, vielen Dank für das Modul! Darauf habe ich schon gewartet!

Leider bekomme ich bei der Installation schon einen Fehler:


pi@fhem:~ $ sudo pip install sseclient
The directory '/root/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/root/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting sseclient
From cffi callback <function _verify_callback at 0x7558eeb0>:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 309, in wrapper
    _lib.X509_up_ref(x509)
AttributeError: 'module' object has no attribute 'X509_up_ref'
From cffi callback <function _verify_callback at 0x7558ebf0>:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 309, in wrapper
    _lib.X509_up_ref(x509)
AttributeError: 'module' object has no attribute 'X509_up_ref'
  Could not find a version that satisfies the requirement sseclient (from versions: )
No matching distribution found for sseclient


kann jemand damit etwas anfangen?

Dankeschön!
ODROID H2 + Docker: Portainer; FHEM; HomeBridge; Node-RED; Nextcloud; PiHole; MQTT.
FS20; HM; ZigBee; Z-Wave

Vampy20

Hi ChrisKoh,

hast Du schon das hier probiert?

sudo -H pip install sseclient

Grüße,
Vampy
FHEM 5.7 auf RPi 2 (Raspbian 4.4.13+, Perl v5.20.2), HM-CFG-USB, HM-SEC-RHS, HM-ES-PMSw1-Pl, HM-LC-Bl1PBU-FM, HM-SEC-SD-2, co2mini, Philips Hue, MySensors, DashButton

maluk

Hi Vampy,

"connection reset by peer" heißt, dass der Server die Verbindung getrennt hat. Dies kann aber auch durch andere Komponenten, z. B. Firewalls oder Proxies passieren.

Passiert das immer um 1 Uhr nachts? Passiert da irgendetwas in deinem Netzwerk bzw. mit deinem Internet-Anschluss? Falls du DSL und eine FritzBox hast, schaue mal nach, wann die Verbindung zum DSL zum letzten Mal neu aufgebaut wurde. Ich habe inzwischen Kabel, aber vorher bei DSL wurde glaube ich regelmäßig die Verbindung getrennt und neu aufgebaut.

Auf jeden Fall solltest du auch prüfen, ob du die korrekte OpenSSL-Version installiert hast (siehe https://github.com/jeffreydwalter/arlo/issues/39)

Gruß
maluk

Vampy20

Hi maluk,

ja ich benutze noch ne altmodische DLS Leitung  ;) aber zwischen der Zwangstrennung und dem "Vorfall" liegen 9 Minuten.

Arlo.log:
2018-05-18 00:13:17,628 INFO: Send command to FHEM: set myArloCloud readings 4N7278S37397B on 61 3
2018-05-18 01:18:12,542 INFO: Timeout occured in handle arlo events - restart event handler
2018-05-18 01:28:12,546 INFO: Timeout occured in handle arlo events - restart event handler
2018-05-18 01:38:12,550 INFO: Timeout occured in handle arlo events - restart event handler
2018-05-18 01:48:12,554 INFO: Timeout occured in handle arlo events - restart event handler
2018-05-18 01:58:12,558 INFO: Timeout occured in handle arlo events - restart event handler
2018-05-18 02:08:12,562 INFO: Timeout occured in handle arlo events - restart event handler


Router:

18.05.18 01:09:13 Internetverbindung wurde erfolgreich hergestellt. IP-Adresse: 4***, DNS-Server: 2*** und 2***5, Gateway: 8***, Breitband-PoP: a***
18.05.18 01:09:12 Internetverbindung wurde getrennt.
18.05.18 01:09:12 Die Internetverbindung wird kurz unterbrochen, um der Zwangstrennung durch den Anbieter zuvorzukommen.


Ich habe auch die OpenSSL-Version überprüft, scheint ok zu sein: OpenSSL 1.0.1t  3 May 2016

Liegt es evtl. an der neuen IP Adresse die jede Nacht zugewiesen wird??

Grüße,
Vampy
FHEM 5.7 auf RPi 2 (Raspbian 4.4.13+, Perl v5.20.2), HM-CFG-USB, HM-SEC-RHS, HM-ES-PMSw1-Pl, HM-LC-Bl1PBU-FM, HM-SEC-SD-2, co2mini, Philips Hue, MySensors, DashButton

maluk

Das scheint aber schon damit zusammen zu hängen. Du könntest mal versuchen, im Heartbeat von /usr/local/lib/python2.7/dist-packages/Arlo.py das Exception-Handling so zu verändern, dass alle Exceptions verschluckt werden und der Heartbeat trotzdem immer weiter läuft. Ändere dazu die Zeile 297 in der Heartbeat-Methode wie folgt ab:

alt:
                except queue.Empty:
neu:
                except:

Danach musst du den Python-Server neu staten.

Ansonsten könntest du auch in FHEM mit "at" 2 Timer einrichten: einer, der kurz um 1 Uhr den Server stoppt (set ArloCloud stopServer) und einen weiteren, der um 1:15 Uhr den Server wieder startet (set ArloCloud startServer) . Das ist zwar nicht so richtig toll, wäre aber ein Workaround.

maluk

Zitat von: Vampy20 am 17 Mai 2018, 09:22:30
Bzgl. der download Funktion, ich benutze das TabletUI um das jeweils letzte Video einer Kamera anzuzeigen. Dies funktioniert nur so lange die URL gültig ist. Deswegen wollte ich die Videos lokal kopieren (überschreiben) um diese auch dann verfügbar zu haben wenn sich länger nichts mehr getan hat. Gestern ist mir eine Idee eingefallen, wie ich dies mit einem Notify und wget probierten könnte. Ich werde berichten.

Ich werde da was einbauen, du brauchst also nichts mit Notify und wget probieren. Ich habe vor, dass man als Attribut ein Download-Verzeichnis setzen kann. Wenn dieses gesetzt ist, wird beim Bereitstellen eines Videos oder Snapshot jeweils eine Kopie dort abgelegt. Vielleicht schaffe ich es heute noch, ansonsten kommt es am Wochenende. Das Modul von Jeffrey Walter enthält die Methoden DownloadRecording und DownloadSnapshot, das ist also nur eine Kleinigkeit.

ChrisKoh

Zitat von: Vampy20 am 18 Mai 2018, 17:50:56
Hi ChrisKoh,

hast Du schon das hier probiert?

sudo -H pip install sseclient

Grüße,
Vampy

Hi Vampy,

leider gleicher Fehler :(


pi@fhem:~ $ sudo -H pip install sseclient
The directory '/root/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/root/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting sseclient
From cffi callback <function _verify_callback at 0x754adeb0>:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 309, in wrapper
    _lib.X509_up_ref(x509)
AttributeError: 'module' object has no attribute 'X509_up_ref'
From cffi callback <function _verify_callback at 0x754adbf0>:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 309, in wrapper
    _lib.X509_up_ref(x509)
AttributeError: 'module' object has no attribute 'X509_up_ref'
  Could not find a version that satisfies the requirement sseclient (from versions: )
No matching distribution found for sseclient
ODROID H2 + Docker: Portainer; FHEM; HomeBridge; Node-RED; Nextcloud; PiHole; MQTT.
FS20; HM; ZigBee; Z-Wave

maluk

Hi ChrisKoh,

welche OpenSSL-Version ist bei dir installiert? Gebe mal folgenden Befehl ein:

openssl version

Hier sollte eine Version 1.0 installiert sein. Falls du noch 0.9.x installiert hast, liegt dein Problem wahrscheinlich daran. Welche Betriebssystem-Version hast du bei dir installiert? Jessie oder Wheezy?

ChrisKoh

Zitat von: maluk am 18 Mai 2018, 21:42:11
Hi ChrisKoh,

welche OpenSSL-Version ist bei dir installiert? Gebe mal folgenden Befehl ein:

openssl version

Hier sollte eine Version 1.0 installiert sein. Falls du noch 0.9.x installiert hast, liegt dein Problem wahrscheinlich daran. Welche Betriebssystem-Version hast du bei dir installiert? Jessie oder Wheezy?

Hi maluk,

pi@fhem:/opt/fhem/FHEM $ openssl version
OpenSSL 1.1.0f  25 May 2017



pi@fhem:/opt/fhem/FHEM $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
ODROID H2 + Docker: Portainer; FHEM; HomeBridge; Node-RED; Nextcloud; PiHole; MQTT.
FS20; HM; ZigBee; Z-Wave

maluk

Da kann ich nur bedingt helfen, da ich noch jessie installiert habe, nicht stretch. Aber zu dem Problem gibt es mehrere Treffer, wenn man über Google sucht, z.B.

https://github.com/pyca/pyopenssl/issues/728
https://www.raspberrypi.org/forums/viewtopic.php?t=204149
https://stackoverflow.com/questions/48506436/error-installing-prettytable-on-ubuntu-with-pip

Offensichtlich passen die Versionen von OpenSSL und PyOpenSSL nicht zusammen. Versuche mal den Tipp aus dem einen Thread: sudo pip uninstall pyOpenSSL. Falls das nichts hilft, würde ich pyOpenSSL nochmal mit sudo pip install --upgrade pyOpenSSL installieren.

maluk

Ich habe gerade eine neue Version von 49_Arlo.pm und 49_Arlo.py hochgeladen. In dieser Version stehen am Cloud-Device (Subtype ACCOUNT) 2 neue Attribute bereit:

downloadDir: hier kann optional ein Verzeichnis angegeben werden, in das die Videos und Bilder kopiert werden sollen, die in der Arlo Cloud erzeugt werden. Die Bilder / Videos werden immer überschrieben, es ist nur die letzte Version lokal vorhanden. Hier sollte man ein Verzeichnis unter /opt/fhem/www angeben, also z.B. /opt/fhem/www/arlo. Der fhem-User benötigt Schreibrechte in diesem Verzeichnis. Also für das Beispiel wie folgt vorgehen:
cd /opt/fhem/www
sudo mkdir arlo
sudo chown fhem arlo


downloadLink: falls statt den Cloud-Links die lokalen Kopien in den Attributen der Kamera-Devices verlinkt werden sollen, muss zusätzlich zu downloadDir das Attribut downloadLink gesetzt werden, und zwar in der Form http://hostname:8083/fhem/arlo, falls die Dateien wie im Beispiel oben in das Verzeichnis /opt/fhem/www/arlo kopiert werden.