Modul für Netgear Arlo-Kameras

Begonnen von maluk, 02 Dezember 2018, 22:20:58

Vorheriges Thema - Nächstes Thema

GSK19

Zitat von: urseigner am 08 Februar 2024, 09:25:14@maluk: Ich habe Deine Hinweise bzgl. ssePollingInterval, updateInterval und pingInterval gesehen und angewendet. Trotzdem wechselt Arlo_Cloud rel. zügig (< 10 Minuten) in den Status "inactive". Kannst Du diesbezüglich noch Erfahrungswerte teilen?

VG
Urs

DEr Trick wird vermutlich expiryTime sein, was ich auf 0 gesetzt habe. Bei allem anderen bin ich bei den Standardwerten geblieben, und es läuft.

urseigner

Danke für den Hinweis, das scheint zu helfen.

VG
Urs

StephanFHEM

nachdem ich nur Probleme hatte hab ich mal den Mail-Dienst geändert. Seitdem scheint es besser zu funktionieren (ich bekomme Arlo wieder auf Active).

Allerdings habe ich alle halbe Stunde folgende Einträge im Log:
2024.05.30 18:46:59 2: Invalid Arlo event response: vary: Origin
2024.05.30 18:46:59 2: Invalid Arlo event response: vary: Access-Control-Request-Method
2024.05.30 18:46:59 2: Invalid Arlo event response: vary: Access-Control-Request-Headers
2024.05.30 18:46:59 2: Invalid Arlo event response: x-content-type-options: nosniff
2024.05.30 18:46:59 2: Invalid Arlo event response: x-xss-protection: 1; mode=block
2024.05.30 18:46:59 2: Invalid Arlo event response: pragma: no-cache
2024.05.30 18:46:59 2: Invalid Arlo event response: expires: 0
2024.05.30 18:46:59 2: Invalid Arlo event response: strict-transport-security: max-age=31536000 ; includeSubDomains
2024.05.30 18:46:59 2: Invalid Arlo event response: x-frame-options: DENY
2024.05.30 18:46:59 2: Invalid Arlo event response: content-language: en-US
2024.05.30 18:46:59 2: Invalid Arlo event response: access-control-allow-origin: https://my.arlo.com
2024.05.30 18:46:59 2: Invalid Arlo event response: access-control-allow-methods: GET,POST,HEAD,OPTIONS,PUT,DELETE
2024.05.30 18:46:59 2: Invalid Arlo event response: access-control-allow-headers: Auth-Version,Content-Type,contenttype,registrationtoken,discoveryToken,X-Requested-With,Accept,Accept-Encoding,Accept-Language,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Connection,Host,authorization,schemaversion,timeout,xcloudid,data-type,cameraId,stateless,x-transaction-id,Accept,Referer,accessToken,Authorization,User-Agent,pragma,cache-control,securitytoken,auth-version,x-forwarded-user,deviceId,x-user-device-id,locationId,deeplink,installerdeeplink,X-INSTANA-T,X-INSTANA-S,X-INSTANA-L
2024.05.30 18:46:59 2: Invalid Arlo event response: access-control-expose-headers: Access-Control-Allow-Origin,Access-Control-Allow-Credentials,api-transaction-lock
2024.05.30 18:46:59 2: Invalid Arlo event response: access-control-allow-credentials: true

hab ich etwas falsch eingestellt? Eigentlich hatte ich mir die neusten Versionen runtergeladen...

maluk

Da wurde zu viel geloggt. Ich habe das korrigiert, sollte beim Update ab morgen gefixt sein.

tschimi

#559
Hi,
leider hab ich auch nach dem erneuten Update das TimeOut Problem.

Direkt nach dem Update wurde einmalig der Code via Email geschickt. Die Mail verschwindet dann auch wieder aber das Einloggen hat trotzdem nicht funktioniert. Nach einem erneuten Versuch jetzt auch bei mir immer Login-Timeout. Emails mit dem Code bekomme ich jetzt auch keine mehr. Hab nochmal meine Login Daten erneut eingegeben - selbes Ergebnis. Ob expiryTime auf 0 steht oder nicht macht bei mir auch keinen Unterschied :-(

Übrigens: Nach einem restart von FHEM erscheint wieder einmalig die Email. GetFactors läuft dann aber auf einen Timeout :-( Kann es sein, das die Mail schneller gelöscht als verarbeitet wird?

Lg, tschimi

Kurzes Update: Ich hatte jetzt mal die arlo.py aus dem FHEM-Verzeichnis gelöscht. Dann kam immer gleich die Email mit dem Code durch, wurde nach ein paar Sek wieder gelöscht -> dann leider wieder Timeout. Jetzt die Arlo.py wieder reinkopiert - dann hängt es am getFactors -> Timeout.

StephanFHEM

Bis auf die Log-Fehler lief es bei mir nachdem ich eine neue Mail-Adresse eingerichtet habe. Mit der alten Mail ging es nicht mehr richtig (warum auch immer).
Einfach die neue Mail anlegen (zB GMX) und bei Arlo dein System dafür freigeben. Dann mit der neuen Mail Arlo Account anmelden und Freigabe annehmen und diese dann als Mail im Modul eintragen. Vielleicht hilft dir das?

tschimi

Hmm, hab ich versucht - selbes Ergebnis (timeout). Schade :-(

tobias.vorberg

#562
Hi,
ich bräuchte mal etwas Hilfe.
Arlo läuft bei mir nicht mehr seit dem ich auf Debian Bookworm bin.
Hintergrund scheint zu sein, dass Python 3.11 genutzt wird und Python 3.11 nur noch mit virtuellen Python-Umgebungen arbeitet.

Die im Wiki beschriebenen Installation:
sudo pip3 install cloudscraperfunktioniert nicht mehr.

Wie kann ich Python nun konfigurieren bzw. wie kann ich Cloudscraper installieren damit es läuft und vom Arlo Modul gefunden wird?

Danke.

Nachtrag: mit der Installation: sudo pip3 install cloudscraper --break-system-packages funktioniert es.



tschimi

Hi, ich hatte das Problem auch zuerst. Wenn du den Intallbefehl absetzt, kommt er mit einem Fehler zurück. Allerdings steht da auch, wie man diesen Fehler umgehen kann. Dazu mußt du den install-Befehl um sowas wie ignore... erweitern. Dann kannst du das auch unter bookworm installieren. Passiert ist bei mir nix negatives.
Lg, tschimi

tschimi

#564
Hi, ich bin jetzt einen großen Schritt weiter. Ich hab im hier im Forum die Möglichkeit gefunden, 49_Arlo.py direkt zu starten. Und siehe da: GMX, Yahoo gehen nicht mehr.  Bei Gmail kam ne Warnung, das man ein App-Password erstellen müsse. Und das hab ich dann in Google gemacht und siehe da - 49_Arlo.py läuft einwandfrei.

ABER: Wenn ich jetzt die selben Daten in FHEM eingebe, läuft es wieder nicht. Ich vermute mal, dass die App nen anderen Namen hat und damit auch ein anderes Password benötigt würde.

Nun brauche ich eure Hilfe: Welchen Namen für das FHEM-Interface nehme ich den nun???? z.B. hat FHEM nicht funktioniert :-(

Danke schon mal im Vorraus, tschimi

P.S.: Als Nachtrag: Ich hab mal Outlook.de verwendet und beim Run von 49_Arlo.py hat mich MS tatsächlich gefragt, ob ich ein APP-Passwd generieren möchte. Hab ich gemacht und dann lief es. Aber auch hier läuft es leider NICHT im FHEM - was hab ich übersehen???

tschimi

#565
Habs hinbekommen ;-)

- bei mir war es das fehlende TMP-Verzeichnis.

Mal schauen, wie lange das jetzt läuft...

Lg, tschimi

Nachtrag :-( Seit heute morgen läuft es wieder nicht. Die 2FA-Mail kommt durch, wird gelöscht, aber FHEM hängt irgendwie am StartAuth fest. Auch die Modifikation von expireTime hat nix gebracht :-(

tschimi

Hi,
ich hab jetzt mal in der 49_Arlo.pm ein paar Codingzeilen geändert. Zum einen hab ich den Timeout verkürzt von +120 auf +20 und den InternalTimer von +1 auf +10 erhöht; alles in sub Arlo-Login. Zudem hab ich einfach mal den Teil mit dem "login Timeout" in sub Arlo_ReadPythonResult auskommentiert. Da bei mir 49_Arlo.py in der Kommandozeile ohne Probleme läuft war das mal einen Versuch wert. Und siehe da. Auch wiederholte LogIns laufen jetzt reibungslos durch. Den Code hab ich mal angehängt. Viel Spaß beim Ausprobieren.
Ich weiß, die Änderungen sind nicht "sauber" aber erstmal läufts :-) Wäre für Rückmeldungen dankbar...

Lg, tschimi


#
# Login and Event-Polling
#

sub Arlo_Login($) {
  my ($hash) = @_;
  RemoveInternalTimer($hash);
  my $name = $hash->{NAME};

  if (AttrVal($name, 'disable', 0) == 1) {
    return;
  }

  $hash->{STATE} = 'python-login';
  delete $hash->{EXPIRY};
  delete $hash->{helper}{followUpRequest};
 
  delete $hash->{helper}{cookies};
  delete $hash->{helper}{token};
  my $mailServer = AttrVal($name, 'mailServer', '');
  if ($mailServer eq '') {
    Log3 $name, 1, 'Bei 2-Faktor-Authentifizierung muss das Attribut mailServer gesetzt sein, damit die Mail mit dem Authentifizerungs-Code abgerufen werden kann.';
    return;
  }
 
  system "python3 contrib/49_Arlo.py $hash->{helper}{username} $hash->{helper}{password} $mailServer $hash->{helper}{mailUser} $hash->{helper}{mailPassword} > /tmp/arlo &";

  $hash->{helper}{pythonTimeout} = gettimeofday() + 20;
  InternalTimer(gettimeofday() + 10, "Arlo_ReadPythonResult", $hash);
}

sub Arlo_ReadPythonResult($) {
  my ($hash) = @_;
#  if (gettimeofday() > $hash->{helper}{pythonTimeout}) {
#    $hash->{STATE} = 'login timeout';
#    Arlo_ClosePythonFile($hash);
#    return;
#  }
  my $fh = $hash->{helper}{pythonFh};
  if (!defined($fh)) {
    open($fh, '<', '/tmp/arlo');
    $hash->{helper}{pythonFh} = $fh;
  }
  my $line = <$fh>;
  while (defined($line)) {
    $line =~ s/\s+$//;
    if ($line eq "end") {
      Arlo_ClosePythonFile($hash);
      Arlo_Request($hash, '/users/session/v2', 'GET', undef, undef, \&Arlo_FinishLogin);
      return;
    }
    my $p = index($line, ': ');
    my $key = substr($line, 0, $p);
    my $value = substr($line, $p + 2);
    if ($key eq 'error') {
      $hash->{STATE} = 'login failed';
      Log3 $hash->{NAME}, 2, "Arlo: $value";
      Arlo_ClosePythonFile($hash);
      return;
    } elsif ($key eq 'log') {
      Log3 $hash->{NAME}, 3, "Arlo: $value";
    } elsif ($key eq 'status') {
      $hash->{STATE} = $value;
    } elsif ($key eq 'cookies') {
      $hash->{helper}{cookies} = $value;
    } elsif ($key eq 'token') {
      $hash->{helper}{token} = $value;
    } elsif ($key eq 'userId') {
      $hash->{helper}{userId} = $value;
    } else {
      Log3 $hash->{NAME}, 2, "Arlo: unknown command $line";
    }
    $line = <$fh>;
  }
  InternalTimer(gettimeofday() + 1, "Arlo_ReadPythonResult", $hash);
}






mi.ke

#567
Zitat von: tschimi am 22 Juli 2024, 12:38:14Wäre für Rückmeldungen dankbar...
Hi tschimi,

ich hab Deine Änderungen seit 4 Tagen im Testsystem am laufen und was soll ich sagen...?!?

DANKE

Denn es läuft stabil, sogar die Kamera Readings, die seit einem Jahr nicht mehr funktionierten, aktuallisieren wieder.

Ich hab Deine Änderungen seit gestern im Produkiv System, auch hier tickt alles wieder perfekt.

und ich wiederhole mich gerne...
DANKESCHÖN

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

Mumpitz

Zitat von: tschimi am 22 Juli 2024, 12:38:14Hi,
ich hab jetzt mal in der 49_Arlo.pm ein paar Codingzeilen geändert. Zum einen hab ich den Timeout verkürzt von +120 auf +20 und den InternalTimer von +1 auf +10 erhöht; alles in sub Arlo-Login. Zudem hab ich einfach mal den Teil mit dem "login Timeout" in sub Arlo_ReadPythonResult auskommentiert. Da bei mir 49_Arlo.py in der Kommandozeile ohne Probleme läuft war das mal einen Versuch wert. Und siehe da. Auch wiederholte LogIns laufen jetzt reibungslos durch. Den Code hab ich mal angehängt. Viel Spaß beim Ausprobieren.
Ich weiß, die Änderungen sind nicht "sauber" aber erstmal läufts :-) Wäre für Rückmeldungen dankbar...

Lg, tschimi


#
# Login and Event-Polling
#

sub Arlo_Login($) {
  my ($hash) = @_;
  RemoveInternalTimer($hash);
  my $name = $hash->{NAME};

  if (AttrVal($name, 'disable', 0) == 1) {
    return;
  }

  $hash->{STATE} = 'python-login';
  delete $hash->{EXPIRY};
  delete $hash->{helper}{followUpRequest};
 
  delete $hash->{helper}{cookies};
  delete $hash->{helper}{token};
  my $mailServer = AttrVal($name, 'mailServer', '');
  if ($mailServer eq '') {
    Log3 $name, 1, 'Bei 2-Faktor-Authentifizierung muss das Attribut mailServer gesetzt sein, damit die Mail mit dem Authentifizerungs-Code abgerufen werden kann.';
    return;
  }
 
  system "python3 contrib/49_Arlo.py $hash->{helper}{username} $hash->{helper}{password} $mailServer $hash->{helper}{mailUser} $hash->{helper}{mailPassword} > /tmp/arlo &";

  $hash->{helper}{pythonTimeout} = gettimeofday() + 20;
  InternalTimer(gettimeofday() + 10, "Arlo_ReadPythonResult", $hash);
}

sub Arlo_ReadPythonResult($) {
  my ($hash) = @_;
#  if (gettimeofday() > $hash->{helper}{pythonTimeout}) {
#    $hash->{STATE} = 'login timeout';
#    Arlo_ClosePythonFile($hash);
#    return;
#  }
  my $fh = $hash->{helper}{pythonFh};
  if (!defined($fh)) {
    open($fh, '<', '/tmp/arlo');
    $hash->{helper}{pythonFh} = $fh;
  }
  my $line = <$fh>;
  while (defined($line)) {
    $line =~ s/\s+$//;
    if ($line eq "end") {
      Arlo_ClosePythonFile($hash);
      Arlo_Request($hash, '/users/session/v2', 'GET', undef, undef, \&Arlo_FinishLogin);
      return;
    }
    my $p = index($line, ': ');
    my $key = substr($line, 0, $p);
    my $value = substr($line, $p + 2);
    if ($key eq 'error') {
      $hash->{STATE} = 'login failed';
      Log3 $hash->{NAME}, 2, "Arlo: $value";
      Arlo_ClosePythonFile($hash);
      return;
    } elsif ($key eq 'log') {
      Log3 $hash->{NAME}, 3, "Arlo: $value";
    } elsif ($key eq 'status') {
      $hash->{STATE} = $value;
    } elsif ($key eq 'cookies') {
      $hash->{helper}{cookies} = $value;
    } elsif ($key eq 'token') {
      $hash->{helper}{token} = $value;
    } elsif ($key eq 'userId') {
      $hash->{helper}{userId} = $value;
    } else {
      Log3 $hash->{NAME}, 2, "Arlo: unknown command $line";
    }
    $line = <$fh>;
  }
  InternalTimer(gettimeofday() + 1, "Arlo_ReadPythonResult", $hash);
}







perfekt, dass hat bei mir auch geholfen. Nun habe ich wieder zugriff auf die Snapshots!

tobias.vorberg

Zitat von: tschimi am 22 Juli 2024, 12:38:14Hi,
ich hab jetzt mal in der 49_Arlo.pm ein paar Codingzeilen geändert. Zum einen hab ich den Timeout verkürzt von +120 auf +20 und den InternalTimer von +1 auf +10 erhöht; alles in sub Arlo-Login. Zudem hab ich einfach mal den Teil mit dem "login Timeout" in sub Arlo_ReadPythonResult auskommentiert. Da bei mir 49_Arlo.py in der Kommandozeile ohne Probleme läuft war das mal einen Versuch wert. Und siehe da. Auch wiederholte LogIns laufen jetzt reibungslos durch. Den Code hab ich mal angehängt. Viel Spaß beim Ausprobieren.
Ich weiß, die Änderungen sind nicht "sauber" aber erstmal läufts :-) Wäre für Rückmeldungen dankbar...

Lg, tschimi


#
# Login and Event-Polling
#

sub Arlo_Login($) {
  my ($hash) = @_;
  RemoveInternalTimer($hash);
  my $name = $hash->{NAME};

  if (AttrVal($name, 'disable', 0) == 1) {
    return;
  }

  $hash->{STATE} = 'python-login';
  delete $hash->{EXPIRY};
  delete $hash->{helper}{followUpRequest};
 
  delete $hash->{helper}{cookies};
  delete $hash->{helper}{token};
  my $mailServer = AttrVal($name, 'mailServer', '');
  if ($mailServer eq '') {
    Log3 $name, 1, 'Bei 2-Faktor-Authentifizierung muss das Attribut mailServer gesetzt sein, damit die Mail mit dem Authentifizerungs-Code abgerufen werden kann.';
    return;
  }
 
  system "python3 contrib/49_Arlo.py $hash->{helper}{username} $hash->{helper}{password} $mailServer $hash->{helper}{mailUser} $hash->{helper}{mailPassword} > /tmp/arlo &";

  $hash->{helper}{pythonTimeout} = gettimeofday() + 20;
  InternalTimer(gettimeofday() + 10, "Arlo_ReadPythonResult", $hash);
}

sub Arlo_ReadPythonResult($) {
  my ($hash) = @_;
#  if (gettimeofday() > $hash->{helper}{pythonTimeout}) {
#    $hash->{STATE} = 'login timeout';
#    Arlo_ClosePythonFile($hash);
#    return;
#  }
  my $fh = $hash->{helper}{pythonFh};
  if (!defined($fh)) {
    open($fh, '<', '/tmp/arlo');
    $hash->{helper}{pythonFh} = $fh;
  }
  my $line = <$fh>;
  while (defined($line)) {
    $line =~ s/\s+$//;
    if ($line eq "end") {
      Arlo_ClosePythonFile($hash);
      Arlo_Request($hash, '/users/session/v2', 'GET', undef, undef, \&Arlo_FinishLogin);
      return;
    }
    my $p = index($line, ': ');
    my $key = substr($line, 0, $p);
    my $value = substr($line, $p + 2);
    if ($key eq 'error') {
      $hash->{STATE} = 'login failed';
      Log3 $hash->{NAME}, 2, "Arlo: $value";
      Arlo_ClosePythonFile($hash);
      return;
    } elsif ($key eq 'log') {
      Log3 $hash->{NAME}, 3, "Arlo: $value";
    } elsif ($key eq 'status') {
      $hash->{STATE} = $value;
    } elsif ($key eq 'cookies') {
      $hash->{helper}{cookies} = $value;
    } elsif ($key eq 'token') {
      $hash->{helper}{token} = $value;
    } elsif ($key eq 'userId') {
      $hash->{helper}{userId} = $value;
    } else {
      Log3 $hash->{NAME}, 2, "Arlo: unknown command $line";
    }
    $line = <$fh>;
  }
  InternalTimer(gettimeofday() + 1, "Arlo_ReadPythonResult", $hash);
}







Damit läuft es bei mir auch wieder. Danke.