eufycam 2 und 2c in FHEM integrieren

Begonnen von Udomatic, 04 Juli 2020, 00:07:30

Vorheriges Thema - Nächstes Thema

Roadrunner1106

Hi,

bekomme den Fehler auch. Hatte schon länger nichts an den Modulen gemacht. Muss mal schauen woran das liegt. Das kann aber dauern.

Vielleicht findet ihr ja ein paar Infos dazu.

Gruß
Roadrunner

xschmidt

Hi,
ich hab folgendes gefunden:
https://www.npmjs.com/package/eufy-security-client
https://github.com/bropat/eufy-security-client/#readme

wenn ich es richtig deute, wurde die Kommunikation zur cloud auf V2 angehoben. Vermutlich hat Eufy hier was geändert. Ich hoffe die beiden Links helfen Dir schon mal weiter
LG
Marco

webdandy

Zitat von: xschmidt am 24 Januar 2023, 11:18:38
Hallo Roadrunner,
kannst Du noch auf die Kameras zugreifen? Bei mir kommt seit Ende Dezember nur noch ein 403 forbidden - ich vermute, dass Eufy die Security Richtlinien geändert hat. Eigentlich wollte ich FHEM nutzen, um bei erkannter Abwesenheit die Kameras automatisch scharf zu stellen. Hast Du eine Idee an welchen stellen wir drehen müssen um es wieder aktiv zu bekommen?
LG
Marco
Hallo Marco,
ich habe nun endlich eine Lösung gefunden, wie ich mit meiner FHEM Abwesenheitserkennung den Modus der Eufy Basisstation ändern kann.
Da ich eh schon eine Homebridge am Laufen habe, konnte ich dort wunderbar das Plugin "homebridge-eufy-security v2.1.4" installieren.
Somit kann man erstmal darüber auf die Eufy Basisstation und alle Kameras zugreifen.
Da das Plugin "homebridge-config-ui-x v4.50.2" eine API Schnittstille bereitstellt, kann man per curl dann den Modus wechseln.
Sprich, du erstellst dir ein notify/doif und als Aktion läuft der curl Befehl:
{system('/opt/fhem/FHEM/skripte/test-eufy-abwesend.sh&');}
In dem Skript steht dann der curl Befehl.

Viel Erfolg!

Grüße
Fabian

AB1970

Hallo Marco,
Sehr cool , über Homebridge kann ich schon Mal schalten.Könntest du den curl Befehl oder Script bitte hier Posten ( bitte Passwort entfernen nicht vergessen)
Dank dir Andreas

webdandy

Zitat von: AB1970 am 25 Februar 2023, 18:43:58
Hallo Marco,
Sehr cool , über Homebridge kann ich schon Mal schalten.Könntest du den curl Befehl oder Script bitte hier Posten ( bitte Passwort entfernen nicht vergessen)
Dank dir Andreas

Hallo Andreas,

den curl Befehl kannst Du dir ganz einfach selbst erstellen:

http://homebridge-ip:port/swagger

Dort dann einmal authentifizieren und gewünschte Befehle generieren lassen.

1. alle Geräte anzeigen lassen:
Return a list of Homebridge accessories
2. Wert des entsprechenden Gerätes ändern:
Set the value of an accessory characteristic.

Mein curl wird dir nichts bringen da die ID anders ist.
Wichtig sind die beiden Werte:
"characteristicType": "SecuritySystemTargetState",
  "value": "1"


Grüße
Fabian

AB1970


AB1970

Hi,
Wie hast du das Problem in den Griff bekommen, das das Bearer Token nur ein Tag gültig ist?
Hab ich da was übersehen?
Dank dir
Andreas

webdandy

Zitat von: AB1970 am 26 Februar 2023, 14:13:44
Hi,
Wie hast du das Problem in den Griff bekommen, das das Bearer Token nur ein Tag gültig ist?
Hab ich da was übersehen?
Dank dir
Andreas

Stimmt, sehe ich jetzt auch in meinen Logs  :(

AB1970

Also so klappt Home/Abwesend schalten bei mir, klar könnte schöner sein und PWD in SH Script sollte man nicht machen.
Aber für die Perl Variante, hab ich im Moment keine Zeit:  :-)

#! /bin/bash
echo "----------------------------------- Sending auth -------------------------------"
IN=$(curl -X 'POST' \
  'http://<your-ip>:8581/api/auth/login' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "username": "user name",
  "password": "password"
}')
echo  "----------------------------- Parsing result --------------------------------------"
IFS='"' read -ra ADDR <<< "$IN"

echo "Token: ${ADDR[3]}"

echo "------------------------------ Sending command  ------------------------------------"

curl -X 'PUT' \
  'http://your-ip>/api/accessories/<your-uniqueId>' \
  -H 'accept: */*' \
  -H "Authorization: Bearer ${ADDR[3]}" \
  -H 'Content-Type: application/json' \
  -d '{   
  "characteristicType": "SecuritySystemTargetState",
# 0 Anwesend 1 Abwesend
  "value": "1"
}'


Viele Grüße
Andreas

webdandy

Zitat von: AB1970 am 27 Februar 2023, 14:38:26
Also so klappt Home/Abwesend schalten bei mir, klar könnte schöner sein und PWD in SH Script sollte man nicht machen.
Aber für die Perl Variante, hab ich im Moment keine Zeit:  :-)

#! /bin/bash
echo "----------------------------------- Sending auth -------------------------------"
IN=$(curl -X 'POST' \
  'http://<your-ip>:8581/api/auth/login' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "username": "user name",
  "password": "password"
}')
echo  "----------------------------- Parsing result --------------------------------------"
IFS='"' read -ra ADDR <<< "$IN"

echo "Token: ${ADDR[3]}"

echo "------------------------------ Sending command  ------------------------------------"

curl -X 'PUT' \
  'http://your-ip>/api/accessories/<your-uniqueId>' \
  -H 'accept: */*' \
  -H "Authorization: Bearer ${ADDR[3]}" \
  -H 'Content-Type: application/json' \
  -d '{   
  "characteristicType": "SecuritySystemTargetState",
# 0 Anwesend 1 Abwesend
  "value": "1"
}'


Viele Grüße
Andreas
Hallo Andreas,

sehr cool, dass Du schon eine Lösung gefunden hast!  8)
Habe es natürlich gleich ausprobiert, doch erhalte ich noch eine Fehlermeldung:
----------------------------------- Sending auth -------------------------------
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   421  100   368  100    53   9684   1394 --:--:-- --:--:-- --:--:-- 11078
----------------------------- Parsing result --------------------------------------
eufy-test.sh: 12: eufy-test.sh: Syntax error: redirection unexpected


Zeile 12 habe ich ohne Änderung kopiert:
IFS='"' read -ra ADDR <<< "$IN"

Hast Du eine Idee?

Danke & Grüße
Fabian

AB1970


<<<


Ist nicht in allen Linux Shells oder Varianten supported. 

Bist du sicher , das du das Script in eine Bash Shell ausführst?

#!/bin/bash

webdandy

Zitat von: AB1970 am 27 Februar 2023, 16:39:46

<<<


Ist nicht in allen Linux Shells oder Varianten supported. 

Bist du sicher , das du das Script in eine Bash Shell ausführst?

#!/bin/bash



Ich würde mal behaupten ja, aber kann mich natürlich täuschen  ???

Wenn ich das Skript jetzt so starte, bekomme ich folgendes zurück:
root@SmartHome-Pi4 /opt/fhem/FHEM/skripte # /opt/fhem/FHEM/skripte/eufy-test.sh
----------------------------------- Sending auth -------------------------------
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   421  100   368  100    53   8177   1177 --:--:-- --:--:-- --:--:--  9790
----------------------------- Parsing result --------------------------------------
/opt/fhem/FHEM/skripte/eufy-test.sh: Zeile 12: -ra: Kommando nicht gefunden.
Token:
------------------------------ Sending command  ------------------------------------
{"statusCode":400,"message":"Unexpected token # in JSON at position 58","error":"Bad Request"}


AB1970

-ra sind parameter von read  , das ist echt merkwürdig
Könntest du mal das komplette Script posten ?
( ohne persönliche Infos bitte :-) )

webdandy

Na klar, ich bin ja dankbar über jede Hilfe  ;D

root@SmartHome-Pi4 ~ # cat /opt/fhem/FHEM/skripte/eufy-test.sh
#! /bin/bash
echo "----------------------------------- Sending auth -------------------------------"
IN=$(curl -k -X 'POST' \
  'https://192.168.1.6:8080/api/auth/login' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "username": "admin",
  "password": "xxxxxxx"
}')
echo  "----------------------------- Parsing result --------------------------------------"
IFS='"'read -ra ADDR <<< "$IN"

echo "Token: ${ADDR[3]}"

echo "------------------------------ Sending command  ------------------------------------"

curl -k -X 'PUT' \
  'https://192.168.1.6:8080/api/accessories/991ef198b937653214498fb6e40c7cde7c3c88acccabb6adacf83a55b4905eb4' \
  -H 'accept: */*' \
  -H "Authorization: Bearer ${ADDR[3]}" \
  -H 'Content-Type: application/json' \
  -d '{   
  "characteristicType": "SecuritySystemTargetState",
# 0 Anwesend 1 Abwesend 2 Zeitplan
  "value": "2"
}'

AB1970


----------------------------------- Sending auth -------------------------------
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1418  100  1355  100    63  56458   2625 --:--:-- --:--:-- --:--:-- 59083
----------------------------- Parsing result --------------------------------------
./timeplan.sh: Zeile 12: -ra: Kommando nicht gefunden.
Token:
------------------------------ Sending command  ------------------------------------
{"statusCode":400,"message":"Unexpected token # in JSON at position 58","error":"Bad Request"} $ ./


dergleiche Fehler...

SH Scripts sind extrem empfindlich.

IFS='"'read -ra ADDR <<< "$IN

Da fehlt Leerzeichen zwischen '"' und read.
Ob die veränderten curl Parameter funktionieren musst du allerdings in deinem Setup ermitteln. Bei mir machen sie Probleme.
Ach ja, auch mal checken, ob irgendwo zusätzliche Leerzeichen zu finden sind.