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,

vielen Dank für die schnelle Umsetzung, funktioniert soweit für Snapshots und selbst gestartete Aufnahmen. Bei Aufnahmen welche durch Bewegung ausgelöst werden werden keine Videos heruntergeladen.

Die Änderung bzgl. der DSL Verbindung hatte leider keinen Erfolg. Ich werde den von Dir vorgeschlagenen Workaround ausprobieren.

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,

bei mir werden auch Videos heruntergeladen, die durch Bewegung ausgelöst werden. Kannst du die aufgenommenen Videos über die Arlo App anzeigen? Falls ja, bitte im 49_Arlo.py wieder den Debug-Modues einstellen und prüfen, ob am Ende der Aufnahme ein solcher Event kommt:

2018-05-19 21:17:53,137 DEBUG: {u'recordingStopped': True, u'resource': u'mediaUploadNotification', u'uniqueId': ....

Grüße
maluk

choetzu

Hey Maluk, ich habe immer noch eine Scheissfreude an deinem Modul. Die Reaktionszeit bei Motion ist im Vergleich zu IFTTT einfach nur herrlich.. danke nochmals für deine Mühe.

Ich hab grad gesehen, dass Arlo als Hilfsmodul in der CommandRef gelistet ist. Wann wird es im Update verfügbar sein? Lg c
Raspi3, EnOcean, Zwave, Homematic

ChrisKoh

Zitat von: maluk am 18 Mai 2018, 22:11:12
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.


sudo pip uninstall pyOpenSSL hat geholfen :)

Vielen Dank für die Unterstützung!!!
ODROID H2 + Docker: Portainer; FHEM; HomeBridge; Node-RED; Nextcloud; PiHole; MQTT.
FS20; HM; ZigBee; Z-Wave

ChrisKoh

127.0.0.1 - - [21/May/2018 09:16:52] "GET /BASESTATION?device=Arlo_Arbeitszimmer&cmd=updateReadings&basestationId=xxxxxxxxxxxx&cameraId= HTTP/1.0" 200 -
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 652, in __init__
    self.handle()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
    self.handle_one_request()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 328, in handle_one_request
    method()
  File "FHEM/49_Arlo.py", line 318, in do_GET
    response = arloService.processCommand(fhemDevice, subtype, command, basestationId, cameraId)
  File "FHEM/49_Arlo.py", line 279, in processCommand
    self.updateReadings(fhemDevice, basestationId)
  File "FHEM/49_Arlo.py", line 211, in updateReadings
    devices = self.arlo.GetDevices()
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 732, in GetDevices
    devices = self.request.get('https://arlo.netgear.com/hmsweb/users/devices')
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 148, in get
    return self._request(url, 'GET', params, headers, stream, raw)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 127, in _request
    r = self.session.get(url, params=params, headers=headers, stream=stream)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 521, in get
    return self.request('GET', url, **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.', BadStatusLine("''",))


Das ist mir noch aufgefallen. Kann man das Ignorieren?

Grüße!
ODROID H2 + Docker: Portainer; FHEM; HomeBridge; Node-RED; Nextcloud; PiHole; MQTT.
FS20; HM; ZigBee; Z-Wave

choetzu

Hallo,

ich habe eine ähnliche oder die selbe Nachticht. Das Problem war, dass danach die Kameras nicht mehr bei motion ins FHEM Reading geschrieben haben. Und somit mein DOIF nicht ausgelöst haben.

Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 652, in __init__
    self.handle()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
    self.handle_one_request()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 328, in handle_one_request
    method()
  File "FHEM/49_Arlo.py", line 318, in do_GET
    response = arloService.processCommand(fhemDevice, subtype, command, basestationId, cameraId)
  File "FHEM/49_Arlo.py", line 279, in processCommand
    self.updateReadings(fhemDevice, basestationId)
  File "FHEM/49_Arlo.py", line 211, in updateReadings
    devices = self.arlo.GetDevices()
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 710, in GetDevices
    devices = self.request.get('https://arlo.netgear.com/hmsweb/users/devices')
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 144, in get
    return self._request(url, 'GET', {}, headers, stream)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 127, in _request
    r = self.session.get(url, headers=headers, stream=stream)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 521, in get
    return self.request('GET', url, **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.', BadStatusLine("''",))


hat jemand eine Ahnung, was das sein könnte?
Raspi3, EnOcean, Zwave, Homematic

maluk

Ich habe eine neue Version von 49_Arlo.py hochgeladen, die zumindest dafür sorgt, dass die Exception nicht zum Absturz des Servers führt. Ob das Euer Problem löst, kann ich allerdings nicht sagen, da es bei mir nicht auftritt. Bitte mal die neue Datei runterladen und den Python-Server stoppen und starten.

Habt Ihr einen DSL- oder Kabel-Anschluß? Bei DSL gibt es einmal täglich die Zwangtrennung, siehe Problem von Vampy20. Ich habe einen Kabelanschluß bei Unitymedia, dort wird die Verbindung nur getrennt, wenn ich meine FritzBox neu starte.

@choetzu: ich habe inzwischen Zugang zum FHEM-Repository beantragt, muss aber noch ein paar Änderungen vornehmen, damit ich das Modul einchecken kann. So lange müsst Ihr leider die Updates noch über den Thread hier beziehen. In der CommandRef taucht das Modul auf, da ich die entsprechende Hilfe in das FHEM-Modul integriert habe.

choetzu

hallo malux
super, danke. Ich habe die Datei gestern aktualisiert. Die Fehlermeldung kommt zwar nicht mehr, aber dafür läuft m.E. das System nicht wirklich "zuverlässig". Ich habe z.B. ein DOIF welches bei einer bestimmten Helligkeit den Befehl "set BasisStation mode Aussen" abgibt. Es klappt manchmal und manchmal eben nicht, wie heute Abend.

Das war im Log:
27.0.0.1 - - [24/May/2018 21:22:09] "GET /BASESTATION?device=Arlo_BasisSecurity&cmd=mode-Aussen&basestationId=48E3577FA00FD&cameraId= HTTP/1.0" 200 -

Also eigentlich korrekt. Aber es blieb "disarmed". Eine Ahnung wieso?

Lg c
Raspi3, EnOcean, Zwave, Homematic

FrankieSOC

Hallo Maluk,

habe heute auf deine neue Version gewechselt und habe nach ein paar Stunden diese Meldung bekommen.

Exception in thread EventStream:
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 283, in QueueEvents
    for event in event_stream:
  File "/usr/local/lib/python2.7/dist-packages/sseclient.py", line 65, in __next__
    next_chunk = next(self.resp_iterator)
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 653, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File "/usr/lib/python2.7/dist-packages/urllib3/response.py", line 256, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "/usr/lib/python2.7/dist-packages/urllib3/response.py", line 186, in read
    data = self._fp.read(amt)
  File "/usr/lib/python2.7/httplib.py", line 578, in read
    return self._read_chunked(amt)
  File "/usr/lib/python2.7/httplib.py", line 620, in _read_chunked
    line = self.fp.readline(_MAXLINE + 1)
  File "/usr/lib/python2.7/socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)
  File "/usr/lib/python2.7/dist-packages/urllib3/contrib/pyopenssl.py", line 188, in recv
    data = self.connection.recv(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 995, in recv
    self._raise_ssl_error(self._ssl, result)
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 851, in _raise_ssl_error
    raise ZeroReturnError()
ZeroReturnError


Viele Grüße
Frank

ChrisKoh

Hi,

aus aktuellem Anlass das Arlo aufgefordert hat sein Passwort zu ändern.

Gibt es einen komfortablen weg dies bei einem bereits definierten Arlo_Cloud Device zu tun ohne es zu löschen und neu Anzulegen?

Grüße!
ODROID H2 + Docker: Portainer; FHEM; HomeBridge; Node-RED; Nextcloud; PiHole; MQTT.
FS20; HM; ZigBee; Z-Wave

phil82

Zitat von: ChrisKoh am 26 Mai 2018, 10:46:12
Hi,

aus aktuellem Anlass das Arlo aufgefordert hat sein Passwort zu ändern.

Gibt es einen komfortablen weg dies bei einem bereits definierten Arlo_Cloud Device zu tun ohne es zu löschen und neu Anzulegen?

Grüße!

Ich hab einfach das define bearbeitet und das neue Passwort eingetragen. Direkt in FHEM - also nicht die config-Datei. Einfach das letzte "crypt:irgendwas" mit dem Passwort ersetzten. Das Modul verschlüsselt das Passwort dann automatisch und ersetzt es durch ein "crypt:blabla".
E-Mail habe ich verschlüsselt gelassen

Danach Arlo-Server neustarten, fertig.

maluk

Danke phil82, du warst schneller als ich. Genau das ist die einfachste Möglichkeit, das Passwort zu ändern.

Um die Probleme mit den Verbindungsabbrüchen werde ich mich noch kümmern, ich habe allerdings gerade etwas wenig Zeit. Ihr braucht also etwas Geduld.

choetzu

Hallo,
Bei mir hat das mit dem Passwort setzen nicht geklappt. Hab dann das Device Arlo_Cloud (und nur dieses) gelöscht und neu installiert. Hat bestens geklappt!
Raspi3, EnOcean, Zwave, Homematic

choetzu

maluk, soll ich weiterhin solche Fehlermeldungen im Log posten? Ich weiss natürlich nicht, ob die einen mit den anderen zusammenhängen oder gar gleich sind. Nicht dass du uns noch ein Burnout kriegst ;)

127.0.0.1 - - [28/May/2018 06:22:32] "GET /BASESTATION?device=Arlo_BasisSecurity&cmd=updateReadings&basestationId=48E3577FA00FD&cameraId= HTTP/1.0" 200 -
Exception in thread EventStream:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 278, in QueueEvents
    for event in event_stream:
  File "/usr/local/lib/python2.7/dist-packages/sseclient.py", line 72, in __next__
    self._connect()
  File "/usr/local/lib/python2.7/dist-packages/sseclient.py", line 47, in _connect
    self.resp = requester.get(self.url, stream=True, **self.requests_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 521, in get
    return self.request('GET', url, **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 508, in send
    raise ConnectionError(e, request=request)
ConnectionError: HTTPSConnectionPool(host='arlo.netgear.com', port=443): Max retries exceeded with url: /hmsweb/client/subscribe?token=2_5zFf-pYXsPmNlfAxZt3OJYeDD2UcpSusqfWLqd6--xGKiH3CAv4GYlSQyXgsjDVhLfrpjHk-Fif4GKQmMadBDuFuZrHCPPb5qL6vzRX1WnVUGkCifGpKxCk1fVVK1kg-Kh0mu-ejdfVQLF6MaJuH_TZUzQI371hgj5i8yPr5PZ9L (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x75e100b0>: Failed to establish a new connection: [Errno -2] Name or service not known',))
Raspi3, EnOcean, Zwave, Homematic

luke666s

#89
Hi Maluk,

ich habe mal die "setReadingAndDownload" aus der 49_Arlo.py so angepasst, dass, wenn man die sachen "lokal" speichert, alle bilder und videos mit timestamp gespeichert werden :)

  def setReadingAndDownload(self, reading, url, cameraId, fileSuffix, recording):
    if url != None:
      date = time.strftime("%Y%m%d%H%M%S", time.gmtime())
      if self.downloadDir != '-':
        if recording:
          self.arlo.DownloadSnapshot(url, self.downloadDir + '/' + cameraId + '_' + date + fileSuffix)
        else:
          self.arlo.DownloadRecording(url, self.downloadDir + '/' + cameraId + '_' + date + fileSuffix)
      if self.downloadLink != '-':
        self.executeFhemCommand('reading', cameraId, reading + ' ' + self.downloadLink + '/' + cameraId + '_' + date + fileSuffix)
      else:
        self.executeFhemCommand('reading', cameraId, reading + ' ' + url)


hintergund: ich hab einen share von meinem NAS auf dazu genutzt und da ich da ja genug platz habe, soll bitte auch erstmal alles gespeichert werden...
vielleicht magst du es ja übernehmen bzw konfigurierbar machen :)