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

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

Vorheriges Thema - Nächstes Thema

Niko1987

Guten Morgen choetzu,

ich hab das ganze mittlerweile über 99myutils gelöst da das mit dem Userreadings nicht richtig funktioniert hat.
Das userReadings wird nur gesetzt wenn sich ein anderer State in dem entsprechenden device ändert... das ist natürlich schlecht weil sich kein
reading ändern wird wenn die Verbindung zu Arlo verloren geht.

Alternativ könntest du natürlich mit einem "at" device alle paar Minuten ein x-beliebiges reading im Arlo_Arlo device setzen.
Dann müsste es rein theoretisch auch klappen. Hab ich aber jetzt so nicht getestet aber früher schon mal ähnlich umgesetzt.

Gruß
Flo

choetzu

Hallo Flo,
Danke für deine Antwort. Darf ich fragen, wie du dies im myUtils gelöst hast?
Lg C
Raspi3, EnOcean, Zwave, Homematic

Niko1987

Servus,

na klar, ich bin irgendwann mal auf den folgenden Beitrag gestoßen:
https://forum.fhem.de/index.php/topic,15173.msg261574.html#msg261574

Meine myUtils sieht so aus:
# Device Timeoutueberwachung ################################################
sub myTimeout($$$$) {
my ($Tdevice, $Twarning, $Terror, $Tdummy) = @_;
my $Tdev1 =  (time - time_str2num(ReadingsTimestamp($Tdevice,"state",0))) / 60;
my $Tdev2 =  Value($Tdummy);

if ($Tdev1 < $Twarning && $Tdev2 ne "ok") {fhem "set ".$Tdummy." ok"};
if ($Tdev1 >= $Twarning && $Tdev1 < $Terror && $Tdev2 ne "timeout") {fhem "set ".$Tdummy." timeout"};
if ($Tdev1 >= $Terror && $Tdev2 ne "error") {fhem "set ".$Tdummy." error"};


}


hier die ganzen devices. Wichtig ist natürlich, das der Dummy entsprechend der myUtils benannt wird.

define ArloNeustart notify Arlo_Timeout_Dummy:.*timeout set Arlo_Cloud stopServer;; sleep 10;; set Arlo_Cloud startServer;; sleep 10;; set Arlo_Arlo updateReadings;;
attr ArloNeustart room Arlo
define Arlo_Timeout at +*00:03:00 {\
myTimeout("Arlo_Arlo", 10, 180, "Arlo_Timeout_Dummy");;\
\
}
attr Arlo_Timeout room Monitoring
define Arlo_Timeout_Dummy dummy
attr Arlo_Timeout_Dummy room Arlo


alternativ per "at" einfach irgendwas ins reading schreiben. Hier in meinem Fall in die Kamera beim Wintergarten alle 3 Minuten... das hab ich einfach mal "Ping" benannt und trage "ok" ein. Spielt aber auch gar keine rolle, hauptsache es ändert sich irgendein reading in deinem device.:
define FileLog_Arlo_Wintergarten FileLog ./log/Arlo_Wintergarten-%Y.log Arlo_Wintergarten
attr FileLog_Arlo_Wintergarten logtype text
define Arlo_Ping at +*00:03:00 setreading Arlo_Wintergarten ping ok


In der Kamera dann folgendes userReadings erstellen:
attr Arlo_Wintergarten userReadings Verbindung { return "getrennt" if ( (time_str2num(ReadingsTimestamp($NAME,"batteryLevel","0")) - time_str2num(OldTimestamp($NAME))) > 720 );;;; return "verbunden" }

Das heisst sobald sich der Timestamp des readings für den batteryLevel nicht mehr verändert (hier 720Sekunden) wird das userReading "getrennt" gesetzt.
Wenn sich das Timestamp in der Zeit aktualisiert hat schreibt er "verbunden" in das userReading.

Dann könntest du wieder mit einer notify auf das "getrennt" im Reading "Verbindung" reagieren und Arlo_Cloud stoppen, starten und so weiter.


Vielleicht viel zu kompliziert und unübersichtlich aber ich bin halt auch kein Profi und hab mir das ganze irgendwie zusammengeschnipselt.

Funktioniert und das ist ja die Hauptsache.

Gruß
Flo

maluk

Zitat von: mi.ke am 01 November 2018, 13:45:17

Hallo maluk,

ich wollte nochmal vorsichtig nachfragen, ob Du doch noch mal nach der 2.ten Basis Station schauen könntest?

Danke und Grüße

mi.ke

Ich habe gerade eine neue Version des Python-Servers hochgeladen. Bitte versuche mal, ob damit die Probleme mit deiner zweiten Basisstation behoben sind.

maluk

Die neue Version des Python Server, die ich gerade hochgeladen haben, enthält einige Optimierungen bzgl. Fehler-Handling. Ich habe jetzt alles mögliche bei mir lokal ausprobiert und hoffe, dass sich der Python-Server jetzt bei DSL-Zwangstrennungen nicht mehr aufhängt. Ich muss solche Situationen leider simulieren, da bei Unitymedia solche Zwangstrennungen nur alle paar Wochen mal vorkommen.

Wichtig: damit das Ganze vollumfänglich funktioniert, muss die Anpassung von /usr/local/lib/python2.7/dist-packages/Arlo.py in Zeile 308 erfolgen, die ich am 14.10.2018 hier im Thread beschrieben habe.



eddy242

Hallo maluk,

tolles Modul! Kann es sein, dass das Attribut stateFormat verschwunden ist? Taucht nicht mehr in der Drop Down auf. Ich würde mir nämlich lieber den activityState als STATE anzeigen lassen. Danke!

Grüße
Ed

maluk

Zitat von: eddy242 am 24 November 2018, 18:37:00
Kann es sein, dass das Attribut stateFormat verschwunden ist? Taucht nicht mehr in der Drop Down auf. Ich würde mir nämlich lieber den activityState als STATE anzeigen lassen. Danke!

Hallo Ed,

ich habe eine neue Version von 49_Arlo.pm hochgeladen, die das Problem beheben sollte.

Gruß
maluk

eddy242

Hallo maluk,

danke, stateFormat funktioniert wieder!

Ich habe das Modul nun seit etlichen Tagen im Test und ich konnte das Problem nachvollziehen, dass nach einer Veränderung der Verbindung (bin auch bei unitymedia und es kommt selten vor) keine Verbindung mehr zur Arlo Cloud aufgebaut werden konnte. Server Stop und Start hat nicht geholfen. Reboot hilft zwar, ist aber sicher keine Lösung. Trotz verbose 5 konnte ich nicht wirklich (zumindest für mich) was sinnvolles lesen, was ich hätte anders machen können.

Wenn ich einen Wunsch anmelden dürfte, könnte es nicht im Cloud Connector Device einen Healthcheck bzw. ein Watchdog auf den Python Server geben, dann ein Reading geben, das den Status zeigt?

Grüße
Ed

choetzu

Zitat von: maluk am 24 November 2018, 13:36:29
Die neue Version des Python Server, die ich gerade hochgeladen haben, enthält einige Optimierungen bzgl. Fehler-Handling. Ich habe jetzt alles mögliche bei mir lokal ausprobiert und hoffe, dass sich der Python-Server jetzt bei DSL-Zwangstrennungen nicht mehr aufhängt. Ich muss solche Situationen leider simulieren, da bei Unitymedia solche Zwangstrennungen nur alle paar Wochen mal vorkommen.

Wichtig: damit das Ganze vollumfänglich funktioniert, muss die Anpassung von /usr/local/lib/python2.7/dist-packages/Arlo.py in Zeile 308 erfolgen, die ich am 14.10.2018 hier im Thread beschrieben habe.

hmm, ich habe kein Arlo.py unter  /usr/local/lib/python2.7/dist-packages/... Obschon ich die Installation genau wie im ersten Post beschrieben, habe...
Raspi3, EnOcean, Zwave, Homematic

mi.ke

#204
@maluk,

tja, nach dem letzten Update leider keine Funktion mehr

Der Pyhton-Server lässt sich gar nicht mehr starten

2018.11.28 12:22:52 2: Error occured when calling Arlo daemon: localhost: Verbindungsaufbau abgelehnt
2018.11.28 12:23:02 2: Error occured when calling Arlo daemon: localhost: Verbindungsaufbau abgelehnt

Nach Neustart des Rechners oder des PyhonServers im Eventlog diese Meldungen im Loop:
Exception AttributeError: "'EventStream' object has no attribute 'heartbeat_thread'" in <bound method EventStream.__del__ of <Arlo.EventStream object at 0xb53b4690>> ignored
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 295, in QueueEvents
    self.event_streams[basestation_id].Disconnect()
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 100, in Disconnect
    self.Unregister()
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 120, in Unregister
    if self.heartbeat_thread != threading.current_thread():
AttributeError: 'EventStream' object has no attribute 'heartbeat_thread'

Exception AttributeError: "'EventStream' object has no attribute 'heartbeat_thread'" in <bound method EventStream.__del__ of <Arlo.EventStream object at 0xb537ee30>> ignored


Die /tmp/arlo.log wird geflutet (alle Sekunde) mit start/stop Einträgen

. . .
2018-11-28 11:50:40,351 INFO: Stopped event handler
2018-11-28 11:50:40,352 INFO: Start event handler
2018-11-28 11:50:42,755 INFO: Stopped event handler
2018-11-28 11:50:42,762 INFO: Start event handler
2018-11-28 11:50:44,664 INFO: Stopped event handler
2018-11-28 11:50:44,666 INFO: Start event handler
. . .




Habe leider die Installation aus dem ersten Therad nochmal komplett durchgeführt, dadurch hat sich die API geändert und seitdem auch mit der "alten funktionierenden" Version vom 21.06.2018 die gleichen Fehler.

Da das System durch die dauernde Schreiberei ausgebremst wird und auch die SD-Karte dadurch nicht besser wird, musste ich leider das Modul komplett abschalten, was natürlich einen ganz schlechten WAF ausgelöst hat.
Zum Glück lief das Arlo-Modul auf einem 2.ten RPi und nicht auf dem Hauptrechner und die Holde saß nicht im Dunkeln.

Leider bin ich nun ratlos was man noch ausprobiern könnte

LG
mi.ke

FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

eddy242

Hallo maluk,

das taucht seit heute im Log auf, ca 100+ lines. Keine Konfigurationsänderungen oder sonstige "Vorfälle" seit gestern

ConnectionError: HTTPSConnectionPool(host='arlo.netgear.com', port=443): Max retries exceeded with url: /hmsweb/users/devices/notify/4RD38474A61C4 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc68bc09550>: Failed to establish a new connection: [Errno 113] No route to host',))

Exception AttributeError: "'EventStream' object has no attribute 'event_stream_thread'" in <bound method EventStream.__del__ of <Arlo.EventStream object at 0x7fc68c2d2ad0>> ignored
Exception AttributeError: "'EventStream' object has no attribute 'event_stream_thread'" in <bound method EventStream.__del__ of <Arlo.EventStream object at 0x7fc68a348f90>> ignored


Grüße
Ed

maluk

Zitat von: mi.ke am 28 November 2018, 12:16:09
Die /tmp/arlo.log wird geflutet (alle Sekunde) mit start/stop Einträgen

. . .
2018-11-28 11:50:40,351 INFO: Stopped event handler
2018-11-28 11:50:40,352 INFO: Start event handler
2018-11-28 11:50:42,755 INFO: Stopped event handler
2018-11-28 11:50:42,762 INFO: Start event handler
2018-11-28 11:50:44,664 INFO: Stopped event handler
2018-11-28 11:50:44,666 INFO: Start event handler
. . .



Hallo mi.ke,

bitte schalte mal den Log Level in 49_Arlo.py auf DEBUG (Zeile 26). Dann werden die Fehlermeldungen ausgegeben, die zu dem ständigen Neustart des Event Handler führen.

maluk

Zitat von: eddy242 am 29 November 2018, 17:03:39
Hallo maluk,

das taucht seit heute im Log auf, ca 100+ lines. Keine Konfigurationsänderungen oder sonstige "Vorfälle" seit gestern

ConnectionError: HTTPSConnectionPool(host='arlo.netgear.com', port=443): Max retries exceeded with url: /hmsweb/users/devices/notify/4RD38474A61C4 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc68bc09550>: Failed to establish a new connection: [Errno 113] No route to host',))

Exception AttributeError: "'EventStream' object has no attribute 'event_stream_thread'" in <bound method EventStream.__del__ of <Arlo.EventStream object at 0x7fc68c2d2ad0>> ignored
Exception AttributeError: "'EventStream' object has no attribute 'event_stream_thread'" in <bound method EventStream.__del__ of <Arlo.EventStream object at 0x7fc68a348f90>> ignored


Grüße
Ed

Hallo Ed,

war das Phänomen temporär oder besteht es noch? Falls es nur temporär war, dann war es ein normaler Netzwerk-Ausfall und die Arlo-Cloud war nicht mehr erreichbar.

eddy242

Hallo maluk,

ist in der Tat nicht mehr wiedergekommen. Dafür taucht jetzt das heute auf (will nicht nerven, Modul funktioniert, aber vielleicht für Dich hilfreich). Das Netzwerk war definitiv nicht weg (wegen "No route to host"):


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 287, in QueueEvents
    for event in event_stream:
  File "/usr/local/lib/python2.7/dist-packages/sseclient.py", line 74, in __next__
    self._connect()
  File "/usr/local/lib/python2.7/dist-packages/sseclient.py", line 48, 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 546, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 516, 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_52U2UXXVLkuQuOdS5_7K4GE3A9pBamAFYrWrn8-sCOc-3np60ZAMFsJRm5pVthavzqRdHmlz9dtzMCHzHHrGXcQ0ZYviQCa5kcHSHXvPYHNgnNXkn0Yb_zQJaPTDFLBa-UUac6KMEEPJVOmd1wkI9Y9Wt2NbeHOb9H0ur7nf-a9M (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc68a33a290>: Failed to establish a new connection: [Errno 113] No route to host',))

Exception in thread HeartbeatThread:
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 305, in Heartbeat
    self.Ping(basestation)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 408, 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 388, in NotifyAndGetResponse
    transId = self.Notify(basestation, body)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 379, 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 158, in post
    return self._request(url, 'POST', params, headers, raw)
  File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 137, in _request
    r = self.session.post(url, json=params, headers=headers)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 581, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
ConnectionError: HTTPSConnectionPool(host='arlo.netgear.com', port=443): Max retries exceeded with url: /hmsweb/users/devices/notify/4RD38474A61C4 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc68a3d5a90>: Failed to establish a new connection: [Errno 113] No route to host',))



Grüße
Ed

maluk

Aufgrund der vielen Probleme mit dem Python-Modul bin ich gerade dabei, eine neue Version komplett in Perl zu entwickeln. Wenn ich damit fertig bin, wird der Python-Server nicht mehr benötigt. Ich hoffe, dass damit dann auch die ganzen Probleme ein Ende haben.

Wenn ich soweit bin, brauche ich ein paar Beta-Tester :)