test: modul 74_UnifiProtect.pm

Begonnen von justme1968, 24 Februar 2020, 21:04:58

Vorheriges Thema - Nächstes Thema

chopsor

Hallo,


Wollte mal fragen, ob es in naher oder ferner Zukunft die Motion detection geben wird (aktuell der einzige Grund, wieso ich beim Unifi Video bleibe).


MfG
Hier könnte Ihre Werbung stehen !

justme1968

aktuell komme ich nur per pollen rückwirkend an die events. d.h. du erfährst x sekunden später das es im letzten intervall zum zeitpunkt y ein event gab.

so lange keiner eine push variante gefunden hat lässt sich das nicht wirklich sinnvoll einbauen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

synaps-o-dan

Hallo justme1968,
ich habe seit ein paar Tagen  einen Cloudkey Gen2+ im Test. Eigentlich ein tolles Teil, hohe Qualität in Hardware und den Aufnahmen. Wenn nur die fehlende API und den Zwang, den Cloudkey über den Unifi-Zugang kontaktieren zu müssen, nicht wären. Die Verbindung zu fhem mit Deinem Modul 74_UnifiProtect.pm läuft problemlos. Für das Triggern von motion events werde ich für mich den folgenden Weg testen, wie er in einem thread in der Unifi-Community angerissen wurde (da bin ich auch auf eine Antwort von Dir gestoßen):

  • Auf dem Cloudkey die Pakete incron, mosquitto und mosquitto-clients über apt installieren
  • Incron überwacht die Datei die log-Datei /srv/unifi-protect/logs/events.cameras.log (Eintrag in der incrontablist: /srv/unifi-protect/logs/events.cameras.log IN_MODIFY bash /root/bash/motion_event.sh $%)
  • Die Bash-Datei motion_event.sh sendet via MQTT eine Nachricht an fhem: mosquitto_pub -h <IP-Adresse fhem Server> -t Unifi/Unifi-Protect -m "Event!" -i <Name der Kamera>
  • In fhem läuft ein MQTT2_SERVER, der ein entsprechendes MQTT2-Device per autocreate angelegt hat und das mit den events füllt.
  • fhem überwacht dieses device (doif, notify o.ä.) und reagiert entsprechend.
Läuft bei mir testweise. Bin mal auf die Langzeiterfahrungen gespannt, vor allem nach Updates im Unifi-System. Nicht dass Unifi da irgendwas ändert, logs totlegt oder ähnliches. Die Lösung ist natürlich nicht out-of-the-box und ersetzt eine ordentlich dokumentierte API nur rudimentär.

To do: vor dem mosquitto_pub in die log-Datei events.cameras.log hineinschauen und herausfinden, was genau passiert ist, z.B. welche Kamera ausgelöset hat. Diese Infos dann per MQTT Payload mitschicken, so dass fhem darauf reagieren kann. Ich befürchte, das wird meine Programmier-Skills ganz gut stressen...

Noch eine Frage: Die Aktualisierung des Live-Bildes (weblink) kommt bei mir in Intervallen deutlich größer als 10 Sekunden. Gibt es da Hoffnung, das besser zu bekommen?

Ich überlege ernsthaft, ob ich den Cloudkey nicht zurückschicken soll und stattdessen auf einen Nuc/Beelink oder ähnliches umsteigen soll und dort Unifi-Video installiere. Das Modul 74_UnifiVideo.pm funktioniert ja deutlich besser.

Und natürlich ein dickes Dankeschön für die beiden Module!!


Grüße, Daniel
fhem auf Raspberry Pi 3
5 x Set aus jew. 1x FHT80B + 1xFHT8V + 1x FHT80TF-2
HM: 1 x HM-ES-PMSw1-Pl, 2 x HM-LC-Sw1-FM, 2 x HM-LC-Sw1PBU-FM, 3 x HM-Sec-SD, 2 x HM-PB-2-WM55, 2 x HM-Sec-MDIR-2
3 x EM-1000 EM
Onewire: insgesamt 11 Onewire-Sensoren an einem LinkUSB Adapter

justme1968

wenn es ein log gibt in dem die events zu sehen sind kann ich es genau so wie im unifi video modul per ssh überwachen. dann ist keine umweg über drei andere schritte nötig.

die snapshots werden scheinbar nur alle 10 sekunden aktualisiert. das war bei unifi video besser.

aktuell gibt es keine andere möglichkeit.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

im ersten post gibt es eine aktualisierte version die genau so wie beim unifiziert video modul das log file überwachen kann um motion events zu erzeugen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

synaps-o-dan

Wie legst Du im Cloudkey einen user ohne Passwort an? Im Web-Interface besteht Cloudkey auf ein Passwort. Oder per ssh und useradd?
fhem auf Raspberry Pi 3
5 x Set aus jew. 1x FHT80B + 1xFHT8V + 1x FHT80TF-2
HM: 1 x HM-ES-PMSw1-Pl, 2 x HM-LC-Sw1-FM, 2 x HM-LC-Sw1PBU-FM, 3 x HM-Sec-SD, 2 x HM-PB-2-WM55, 2 x HM-Sec-MDIR-2
3 x EM-1000 EM
Onewire: insgesamt 11 Onewire-Sensoren an einem LinkUSB Adapter

justme1968

die user die du per web interface anlegst sind nur für den web zugriff. d.h. nur um die snapshots zu machen.

du brauchst einen unix user auf den fhem ohne password zugreifen kann. das heisst nicht das der user kein password hat sondern das du den ssh public key wie oben beschrieben hinterlegen musst. ob du den adminstrator nimmt oder einen neuen user anlegst ist geschmacksache.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

synaps-o-dan

#22
OK, mit ssh-keygen und ssh-copy-id username@remote_host klappt es.

Zitat von: justme1968 am 24 Februar 2020, 21:04:58
also:
- ssh zugang einrichten. d.h. public key in .ssh/authorized_keys file auf nvr seite eintragen

Gibt es irgendwo eine Anleitung, wie man das macht?
fhem auf Raspberry Pi 3
5 x Set aus jew. 1x FHT80B + 1xFHT8V + 1x FHT80TF-2
HM: 1 x HM-ES-PMSw1-Pl, 2 x HM-LC-Sw1-FM, 2 x HM-LC-Sw1PBU-FM, 3 x HM-Sec-SD, 2 x HM-PB-2-WM55, 2 x HM-Sec-MDIR-2
3 x EM-1000 EM
Onewire: insgesamt 11 Onewire-Sensoren an einem LinkUSB Adapter

synaps-o-dan

Ich habe die motion events ausprobiert, funktioniert, vielen Dank!
eine Frage: ich habe eine Kamera, also hat die in den readings den Index 0. Das reading cam<>motion zeigt aber eine 1, siehe Screenshot. Ist das gewollt?
Grüße, Daniel
fhem auf Raspberry Pi 3
5 x Set aus jew. 1x FHT80B + 1xFHT8V + 1x FHT80TF-2
HM: 1 x HM-ES-PMSw1-Pl, 2 x HM-LC-Sw1-FM, 2 x HM-LC-Sw1PBU-FM, 3 x HM-Sec-SD, 2 x HM-PB-2-WM55, 2 x HM-Sec-MDIR-2
3 x EM-1000 EM
Onewire: insgesamt 11 Onewire-Sensoren an einem LinkUSB Adapter

bogi999

Hallo @JustMe,

ich versuche gerade das Protect Modul mit der UDM Pro ans laufen zu bekommen.
Aktuell wirft mir das ganze folgenden Fehler raus
ZitatProtect: failed to get authorization
Allerdings gibt es wie beim Network Controller die 7443 nich mehr.

Kannst Du hier etwas unterstützen?

Ciao, Lee

justme1968

ich habe gelesen das auf udm/udm pro die ports anders sind. ich weiss aber nicht mehr wo. und alle urls sind ein klein wenig anders.

versuch mal im code 7443 auf 443 zu ändern und statt nur /api könnte es /proxy/network/api sein.

im zweifehl kannst du beim zugriff per browser mal mit wireshark schauen.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

bogi999

#26
Zitat von: justme1968 am 23 Mai 2020, 14:25:57
versuch mal im code 7443 auf 443 zu ändern und statt nur /api könnte es /proxy/network/api sein.

Das ganze auf den UDM/UDM PRO, sprich das Unifi-OS scheint wohl Docker-Ähnlich zu sein.
Der Pfad zu Protect ist wohl dieser -- 443/proxy/protect/api
Wenn ich die 6 Einträge anpasse und im Anschluß ein "Define" mache, geht das Modul auf Active, aber ruft keine Daten/Infos ab.

Gehe ich auch "set snapshot" bekomm ich auch "not yet connected".
Mache ich ein "shutdown restart" ist das Modul wieder nur auf "initialised".

Zudem folgende Log-Einträge

Zitathttp request (https://ip:443/proxy/protect/api/auth) failed: read from https://ip:443 timed out

Irgendwann dann ein

Zitatfailed to get authorization

Masterfunk

Wie bekomme ich den das Bild in FTUI eingebunden?

justme1968

@bogi999: ich vermute die auth url stimmt noch nicht ganz.

@Masterfunk: mit etwas handarbeit:

- du musst aus dem modul code die loadImages() routine in  <script>... </script> eingebettet in den script teil der ftui seite stecken u

- den body tag in <body onload="loadImages()"> erweitern

- danach kannst du das cam bild genau so wie im <img...> tag aus der  ProtectVideo_2html routine in die seite einbauen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Masterfunk

Bekomme es nicht hin.

Diese Parts habe ich eingefügt:

<script>function loadImages() {
      var tags = document.getElementsByClassName('unifiProtectSnap');
      for(var i = 0;i < tags.length; i++) {
        var img = tags[i];
        var nvrIp = img.getAttribute('nvrIp');
        var cameraId = img.getAttribute('cameraId');
        var auth = img.getAttribute('auth');
        var width = img.width;

        if( keys[auth] === undefined ) { updateKeys(); continue; }
        if( keys[auth] === '' ) continue;

        tags[i].src='https://'+ nvrIp +':7443/api/cameras/'+cameraId+'/snapshot?accessKey='+keys[auth]+'&w='+width+'&ts='+Date.now()/1000;
      }

      setTimeout( function() {loadImages()}, 1000 );
    }</script>


<body onload="loadImages()"</body>

<img width='400' class='unifiProtectSnap' nvrIp='192.168.xxx.xxx' auth='' cameraId='1'>

Was kommt den in dem "auth=" part rein?