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

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

Vorheriges Thema - Nächstes Thema

maluk

Die Probleme werden vermutlich alle durch irgendwelche Verbindungsabbrüche verursacht. Offensichtlich kommt der EventHandler in der Arlo-Library dabei aus dem Tritt und empfängt danach keine Events mehr vom Server. Dies erklärt, warum man noch Aktionen ausführen kann, aber keinen Statuswechsel mehr mitbekommt.

Da dies außerhalb meines Codes liegt, brauche ich noch etwas für die genaue Analyse und die Problemlösung. Ich muss irgendwie erkennen, dass der EventHandler "gestorben" ist und muss dann das Arlo-Modul neu starten. Also bitte noch etwas Geduld.

Die Sirene werde ich auf jeden Fall auch noch einbinden, das ist kein großer Aufwand. 2 Basisstationen sind für mich etwas schwer zu testen, da ich nur eine habe, aber auch darum werde ich mich kümmern - allerdings erst nach der Lösung für die Verbindungsabbrüche.

FrankieSOC

So, ich habe nochmals ein wenig getestet und habe mein Docker Image auf Stretch upgedatet.
Die Installation hatte nicht direkt geklappt, ich musste zusätzlich das Modul "pyOpenSSL" installieren.

RUN pip install pyOpenSSL
RUN pip install urllib3[secure]
RUN pip install sseclient
RUN pip install git+https://github.com/jeffreydwalter/arlo
RUN pip install fhem


Das System läuft und seit 4 Stunden klappt alles. Ich bin gespannt.  ;)

Viele Grüße
Frank

maluk

Jetzt endlich das lang erwartete Update: ich habe das Verhalten des EventStreamThread so angepasst, dass er eigentlich eine korrekte neue Verbindung aufbauen müsste, wenn Abbrüche wie DSL Zwangstrennung auftreten. Bitte unbedingt testen und Rückmeldung geben, damit ich weiß, ob das Problem behoben ist. Wenn eines solche Situation auftritt, kann es bis zu 5 Minuten dauern, bis die Verbindung wieder korrekt steht.

Außerdem habe ich 2 gewünschte Features umgesetzt:

  • An der Basisstation kann jetzt die Sirene ein- und ausgeschaltet werden. ACHTUNG: ich glaube, die Sirene ist ganz schön laut. Wenn Ihr es etwas leiser und/oder kürzer möchtet, 49_Arlo.py in Zeile 251 anpassen (volume/duration).
  • Bei Kameras kann jetzt die Helligkeit mit set brightness etwas angepasst werden. Gültige Werte sind von -2 bis +2.
Die aktualisierten Module hängen am ersten Eintrag zum Download.

mi.ke

#108
Wasserstandsmeldung:Letzte Version installiert.
- EventStreamThread: Ich log es mal mit und berichte
- brightness funktioniert bei der 3000er und 4000er Kamera Serie gut
- Sirene hatte ich im ersten Versuch Probleme, kann aber an meiner 2.ten Basisstation hängen.

btw. Hilft es Dir, wenn ich Dir eine Basisstation zum testen schicke?
Ich hab noch eine 3000 rumliegen.
Cheers
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

m0urs

    Zitat von: maluk am 21 Juni 2018, 23:19:11
    • Bei Kameras kann jetzt die Helligkeit mit set brightness etwas angepasst werden. Gültige Werte sind von -2 bis +2.

    Vielen, lieben Dank!

    maluk

    Zitat von: mi.ke am 22 Juni 2018, 12:33:25
    btw. Hilft es Dir, wenn ich Dir eine Basisstation zum testen schicke?
    Ich hab noch eine 3000 rumliegen.

    Ich habe gerade eine neue Version von 49_Arlo.py hochgeladen, die mit mehreren Basisstationen funktionieren müsste. Ich war ursprünglich nur zu faul, eine Liste von Basisstationen anzulegen, da ich in Python auch nicht hundertprozentig fit bin. Bitte teste mal - wir sollten das auch ohne Zusendung der Basisstation hinkriegen.

    supernova1963

    Hallo maluk,

    tolles Modul. Die Installation gem. Anleitung hat auf Anhieb funktioniert.

    Danke,

    Gernot

    choetzu

    Zitat von: maluk am 21 Juni 2018, 23:19:11
    Jetzt endlich das lang erwartete Update: ich habe das Verhalten des EventStreamThread so angepasst, dass er eigentlich eine korrekte neue Verbindung aufbauen müsste, wenn Abbrüche wie DSL Zwangstrennung auftreten. Bitte unbedingt testen und Rückmeldung geben, damit ich weiß, ob das Problem behoben ist. Wenn eines solche Situation auftritt, kann es bis zu 5 Minuten dauern, bis die Verbindung wieder korrekt steht.

    Außerdem habe ich 2 gewünschte Features umgesetzt:

    • An der Basisstation kann jetzt die Sirene ein- und ausgeschaltet werden. ACHTUNG: ich glaube, die Sirene ist ganz schön laut. Wenn Ihr es etwas leiser und/oder kürzer möchtet, 49_Arlo.py in Zeile 251 anpassen (volume/duration).
    • Bei Kameras kann jetzt die Helligkeit mit set brightness etwas angepasst werden. Gültige Werte sind von -2 bis +2.
    Die aktualisierten Module hängen am ersten Eintrag zum Download.

    Hallo maluk,
    danke fürs Update. Bin grad am Testen. Beim Restart von FHEM kam folgende Fehlermeldung:

    Traceback (most recent call last):
      File "FHEM/49_Arlo.py", line 406, in <module>
        main(sys.argv[1:])
      File "FHEM/49_Arlo.py", line 402, in main
        startService(int(argv[3]))
      File "FHEM/49_Arlo.py", line 373, in startService
        server.socket.close()
    NameError: global name 'server' is not defined


    NameError? Was kann das sein? Danke für die Hilfe.
    Lg C
    Raspi3, EnOcean, Zwave, Homematic

    maluk

    Für mich sieht es aus, als ob dein alter Server-Prozess noch läuft und daher der Port belegt ist. Schaue mal mit ps -ef | grep python ob noch ein alter Python-Prozess läuft. Falls diesen killen und nochmal neu starten. Falls das nichts hilft, bitte nochmal das /tmp/arlo.log prüfen, ob dort ein Hinweis steht, warum der Server bei dir nicht startet.

    choetzu

    pi        3719  3685  0 20:40 pts/0    00:00:00 grep --color=auto python
    fhem     28558     1  0 17:16 ?        00:00:26 python FHEM/49_Arlo.py


    läuft ja nur einer, oder?
    Raspi3, EnOcean, Zwave, Homematic

    maluk

    Genau deshalb konnte der Python-Server nicht gestartet werden, weil schon einer läuft und den Port blockiert. Bei jedem weiteren startServer kommt die von dir genannte Fehlermeldung. Wenn udu den Prozess mit sudo kill -9 28558 den laufenden Server stoppen und danach aus FHEM am Cloud-Device startServer aufrufen. Dann sollte der Fehler nicht mehr kommen.

    Alternativ kannst du auch mal versuchen, stopServer in FHEM aufzurufen und prüfen, ob der Python-Prozess dann verschwindet.

    choetzu

    Zitat von: maluk am 24 Juni 2018, 21:25:25
    Genau deshalb konnte der Python-Server nicht gestartet werden, weil schon einer läuft und den Port blockiert. Bei jedem weiteren startServer kommt die von dir genannte Fehlermeldung. Wenn udu den Prozess mit sudo kill -9 28558 den laufenden Server stoppen und danach aus FHEM am Cloud-Device startServer aufrufen. Dann sollte der Fehler nicht mehr kommen.

    Alternativ kannst du auch mal versuchen, stopServer in FHEM aufzurufen und prüfen, ob der Python-Prozess dann verschwindet.

    herzlichen Dank. Es ist also der selbe Fehler wie schon bereits in einem meiner ersten Posts. Ich habe ein Workaround mittels DOIF gemacht, wo der Server stopt,startet und updatet. ISt aber nicht wirklich die Lösung. Woher kommt das?

    hier noch der Logauszug:

    2018-06-24 17:12:52,829 WARNING: [Errno 32] Broken pipe
    2018-06-24 17:12:55,348 INFO: Start event handler
    2018-06-24 17:14:14,643 INFO: Send command to FHEM: set Arlo_Cloud reading 48E3577FA00FD state disarmed
    2018-06-24 17:14:14,644 WARNING: [Errno 32] Broken pipe
    2018-06-24 17:14:15,460 INFO: Send command to FHEM: set Arlo_Cloud readings 48B45BS62C960 on 95 4
    2018-06-24 17:14:15,461 WARNING: [Errno 32] Broken pipe
    2018-06-24 17:16:05,609 INFO: Stopped event handler
    2018-06-24 17:16:17,063 INFO: Start event handler
    2018-06-24 17:16:17,071 INFO: Started arlo http server on port 8001
    Raspi3, EnOcean, Zwave, Homematic

    mi.ke

    #117
    @choetzu

    Zitat von: mi.ke am 05 Juni 2018, 12:17:24
    . . . . (Broken-Pipe-Error).Die Lösung war, den Heartbeat auf 90.0 zu setzen.


    @maluk

    Die Version mit der 2.ten Basisstation verursacht bei mir "Hänger"
    und zwar, betrifft dies entweder die erste oder die zweite, anscheinend abhängig von der Startreihenfolge.Hier die Fehlermeldung:


    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 291, in QueueEvents
        self.event_streams[basestation_id].Disconnect()
      File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 96, in Disconnect
        self.Unregister()
      File "/usr/local/lib/python2.7/dist-packages/Arlo.py", line 116, 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 0xb51ef250>> ignored


    Auch die Zwangstrennung lässt die Verbindung "abrauchen".

    Es hilft dann noch nicht mal ein reboot des Rechners, ich musste das BaseStation-Device löschen und neuanlegen lassen.

    Wenn Du zum nachstellen weiteren LOGs brauchst, sag Bescheid.
    Bin jetzt erstmal zurück auf die Version vom 21.06.2018

    Danke und Grüße

    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

    choetzu

    Danke mi.ke. Doch wie und wo setzt man diesen heartbeat auf 90.0?
    Raspi3, EnOcean, Zwave, Homematic

    mi.ke

    Zitat von: maluk am 12 Mai 2018, 22:50:43

    Ich hatte auch schon ähnliche Probleme. Ich habe dann in der Datei /usr/local/lib/python2.7/dist-packages/Arlo.py in der Heartbeat-Funktion in Zeile 294 den Heartbeat-Intervall von 30.0 auf 90.0 erhöht. Seither läuft es bei mir ohne Probleme. Versuche das einfach mal und führe danach set ArloCloud stopServer und set ArloCloud startServer aus. Ich wollte eigentlich in dem Modul eine Möglichkeit, den Timeout von außen setzen zu können, aber Jeffrey Walter hat zunächst nur die früheren 2 Sekunden für den Heartbeat auf 30 Sekunden erhöht (siehe https://github.com/jeffreydwalter/arlo/issues/68). Falls die Erhöhung auf 90 Sekunden auch bei dir die Probleme behebt, werde ich nochmal auf ihn zugehen, damit er das Modul entsprechend anpasst.


    cheers


    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