+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 16
  1. #1
    Registriert seit
    Nov 2012
    Ort
    Oldenburg
    Beiträge
    478

    Standard Ubiquiti - Unifi Video

    Hallo zusammen,

    ich habe versprochen noch eben die Skripte für die Ubiquiti WebCams hier rein zu stellen. Na dann wollen wir doch mal. Obwohl es mit ein paar Stolpersteinen versehen ist.

    Also es geht los mit einem Skript, welches die aktuell vorhandenen Kameras aus der Unifi Video API zieht, und dafür entsprechende Informationen zur Verfügung stellt.

    Bilder sagen mehr als Worte..

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Infos.jpg 
Hits:	919 
Größe:	68.1 KB 
ID:	28738

    Jede Kamera erhält einen Ordner (ausgehend vom Skript) mit seinem Namen und den Infos, wie im Bild oben zu sehen.
    Im Objektbaum sieht es dann wie folgt aus...

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS-PC - VNC Viewer 2015-03-12 22-23-35.jpg 
Hits:	488 
Größe:	105.2 KB 
ID:	28739

    Am besten einen Ordner erstellen, und das folgende Skript anpassen, und in den Ordner schieben. Dazu einen Timer, der die Daten aus der API zieht.

    HINWEIS: Mir ist aufgefallen, dass schnelle Anfragen den Zugang schnell dicht machen. Also am besten dafür Sorgen, die Schnittstelle nicht zu oft zu beaufschlagen. Vor allem im Zusammenhang mit den nachher noch erwähnten ImageGrabber sorgt das für Stress.

    Skript GetCamInfo in IPS erzeugen..

    PHP-Code:
    <?php
    // IP+Port von Unifi Video Webfront
    $webfrontIP "127.0.0.1:7443";
    // API Key - Zu bekommen direkt aus dem Webfront "Settings -> My Account Settings -> API Access" ggf. einen Key anfordern!
    $apiKey "MEIN_API_KEY";

    // ---------------------------------------
    // Ab hier nix mehr ändern
    // ---------------------------------------

    include "orga.php";

    $camDataJSON getSslPage("https://".$webfrontIP."/api/2.0/camera/?force=true&apiKey=".$apiKey);

    $camData json_decode($camDataJSON);


    $parentID IPS_GetParent ($_IPS["SELF"]);

    foreach(
    $camData->data as $cam)
    {
            
    $catID CreateCategory($cam->name,$cam->mac$parentID);

            
    CreateVariable("LastRecording",3,date("H:i:s d.m.Y",$cam->lastRecordingStartTime/1000),  $cam->mac."lastRecording",$catID);
            
    CreateVariable("CPULoad",1$cam->systemInfo->cpuLoad$cam->mac."CPULoad",$catID);
            
    CreateVariable("Firmware",3$cam->firmwareVersion$cam->mac."FirmwareVersion",$catID);
            
    CreateVariable("IP",3$cam->host$cam->mac."Host",$catID);

        
    // State muss wegen des VarProfils umgewandelt werden
           
    if ($cam->state == "CONNECTED")
                
    CreateVariable("State",10$cam->mac."State",$catID);
            else if (
    $cam->state == "REBOOTING")
                
    CreateVariable("State",11$cam->mac."State",$catID);
            else if (
    $cam->state == "DISCONNECTED")
                
    CreateVariable("State",12$cam->mac."State",$catID);
            else if (
    $cam->state == "UPGRADING")
                
    CreateVariable("State",13$cam->mac."State",$catID);
            else if (
    $cam->state == "UNAUTHENTICATED")
                
    CreateVariable("State",14$cam->mac."State",$catID);

                
            else
            {
                
    CreateVariable("State",15$cam->mac."State",$catID);
                
    CreateVariable("StateUnknown",3$cam->state$cam->mac."StateUnknown",$catID);
            }
    }

    function 
    getSslPage($url) {
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE); // This is the key here, telling curl to ignore the self-signed certificate.
        
    curl_setopt($chCURLOPT_HEADERfalse);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_REFERER$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
        
    $result curl_exec($ch);
        
    curl_close($ch);
        return 
    $result;
    }
    ?>
    Dazu gehört das File im Include.. bitte in den Ordner IP-Symcon\scripts\orga.php kopieren.

    orga.php.zip

    Sobald das GetCamInfo Skript gestartet wird, sollte es selbstständig die entsprechenden Infos anlegen.
    Eine Variable brauch ein spezielles Profil. Siehe Bild:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	profil.jpg 
Hits:	435 
Größe:	55.2 KB 
ID:	28742

    CPULoad (Intensity100%) die anderen nach deinen Wünschen.

    Sooo.. nun fehlen noch die entsprechenden Standbilder. Früher war es noch möglich bei den Aircams und Unifi Video Cams über einen Link ala http://ip/snapshot.cgi das aktuelle Bild abzurufen. Dies ist mit den aktuellen Firmware Versionen so nicht mehr ohne weiteres möglich. Es kann sein, dass Ubiquiti dies wieder einführt, da sich zml. viele User beschwert haben. Aber solang es so nicht geht, habe ich eine andere Lösung gefunden, die das Bild aus dem Fundus zieht.
    Bzw. das Bild kommt gar nicht von der Kamera direkt, sondern von der gleichen Software, wo ich auch die Kamerainfos her ziehe.

    Da ich gerne den ImageGrabber weiterhin benutzen wollte, habe ich folgendes gemacht.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	grabber.jpg 
Hits:	336 
Größe:	92.0 KB 
ID:	28741

    Und zwar habe ich eine weitere PHP Datei, die mir (auf einen anderen Apache gelegt) das Bild zur Verfügung stellt. So kann ich ohne weitere Authentifizierungsprobleme die Datei ran holen. Sicher könnte man auch die Daten in eine Datei speichern, und die dann auch anzeigen. Aber es ist nun mal so, wie es ist.

    In dem Screenshot sieht man... url/getCam.php?c=1 wobei c für die CamID steht.. es geht los mit 0,1,2 usw.. je nachdem wieviele Cams eingetragen sind.

    Das getCam Skript sieht dann folgendermaßen aus. Innerhalb des oberen Arrays befinden sich Links mit denen die Kamerabilder direkt abgerufen werden.

    PHP-Code:
    <?php
    header
    ('Content-Type: image/jpeg');

    $apiKey 'MEIN_API_KEY'
    $unifiVideoIP '192.168.0.11:7443';

    // Im folgenden Array bitte je nach Anzahl der Kameras entsprechend viele Elemente eintragen. Wichtig ist hierbei, die UUID der Kamera zu ergänzen. Ich habe eine als Beispiel drinnen gelassen, damit man den Aufbau erkennt.

    $cams = array(    
    // 0 Garage (alt)
      
    'https://'.$unifiVideoIP.'/api/2.0/snapshot/camera/86a65eea-312b-380d-b399-d940b2c02a82?force=true&apiKey='.$apiKey,
    // 1 Baustelle
      
    'https://'.$unifiVideoIP.'/api/2.0/snapshot/camera/CAMUUID?force=true&apiKey='.$apiKey,
    // 2 Seite links
      
    'https://'.$unifiVideoIP.'/api/2.0/snapshot/camera/CAMUUID?force=true&apiKey='.$apiKey
    // usw...

                
    );


    echo 
    getSslPage($cams[$_GET["c"]]);

    function 
    getSslPage($url) {
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE); 
        
    curl_setopt($chCURLOPT_HEADERfalse);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_REFERER$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
        
    $result curl_exec($ch);
        
    curl_close($ch);
        return 
    $result;
    }
    ?>
    Die UUID kann man über mehrere Wege abfragen. Am einfachsten ist - in der Config muss die Motion Detection aktiviert sein, und dann guckt man im folgenden Ordner nach der gewünschten ID.
    Der Basisordner von liegt bei mir c:\ProgramData\unifi-video\data\videos\ und dort befinden sich auch schon die UUIDs. Vorraussetzung ist mindestens 1 Aufnahme per Moition Detection.

    Ich hoffe ich habe nix vergessen. Ansonsten nachfragen und nerven.

    Beste Grüße
    Kevin

  2. #2
    Registriert seit
    Oct 2014
    Ort
    unterägeri
    Beiträge
    41

    Standard Einwandfrei

    Besten Dank, klappt einwandfrei..

    Bis auf das vergessene Semikolon, hat alles auf anhieb gepasst

    Gruss aus der Schweiz

    PHP-Code:
    $apiKey 'MEIN_API_KEY' 

  3. #3
    Registriert seit
    Jan 2007
    Ort
    Heimbach
    Beiträge
    475

    Hallo Spoosie,

    ist die API irgendwo dokumentiert? Ich habe bei UBNT nichts gefunden.

    Ich würde gerne per API eine Videoaufzeichnung starten. Also quasi eine Motion simulieren.
    Hast du da evtl. etwas gesehen?

    Danke & Gruß

    Philipp

  4. #4
    Registriert seit
    Nov 2012
    Ort
    Oldenburg
    Beiträge
    478

    Hi... die Api ist so gut wie undokumentiert. Man muss sich da was aus Codeschnipseln und selber raten zusammenfummeln. Nicht sehr komfortabel. Wenn die neuen UVC's auch mit der Synology laufen würden, hätt ich wohl schon längst umgestellt.

  5. #5
    Registriert seit
    Aug 2014
    Beiträge
    10

    Standard Fehlermeldung beim Script getCam

    Hallo!

    Danke erstmal, für die Lösung, warte schon lange auf eine Möglichkeit, die Unifi Cams einzubinden.
    leider bekomme ich beim Ausführen des getCam Script eine Fehlermeldung:
    Notice: Undefined index: c in C:\IP-Symcon\scripts\52320.ips.php on line 19

    line 19: echo getSslPage($cams[$_GET["c"]]);

    Irgendeine Idee dazu?

    Besten Dank!

  6. #6
    Registriert seit
    Nov 2012
    Ort
    Oldenburg
    Beiträge
    478

    Das läuft ein bischen anders. Du musst das Skript nicht in IPS aufrufen, sondern aus dem Browser, mit dem Parameter c=0..1..2 usw. Und diese URL trägt man dann in eine ImageGrabber Instanz ein. Das Skript muss dann verschoben werden, damit es vom Webserver erreichbar ist. Z.B. /webfront/user/...

  7. #7
    Registriert seit
    Aug 2014
    Beiträge
    10

    Sorry, war ein Denkfehler, hab hab getCam.php nun auf einen Webserver gelegt und den Image Grabber angepasst.
    Jetzt läufts! Danke nochmal!!

  8. #8
    Registriert seit
    Aug 2014
    Beiträge
    10

    Standard Bildformat

    Jetzt bin ich nochmal lästig.
    Die Bilder werden zwar vom Image Grabber geholt und als jpg im Ordner cams gespeichert, allerdings sind die jpg Files scheinbar nicht in Ordnung. Man kann sie weder über das Webfront noch direkt öffnen. "Das Bild kann in der Windows Fotoanzeige nicht geöffnet werden, da die Datei möglicherweise beschädigt oder zu groß iost"

    Wenn ich die Url im Browser eintrage, bekomme ich ganz normal das Bild.
    Hab es über einen externen IIS und über den Internen Webserver versucht, beides das selbe Ergebnis!?

    Abweichend zu deinem Screenshot muss ich auch den Typ beim Grabber auf jpg stellen, da bei "automatisch" die Meldung: "Kann Bildtyp für Inhaltstyp text/html nicht erkennen" kommt.

    Danke im Voraus!

    lg

  9. #9
    Registriert seit
    Aug 2014
    Beiträge
    10

    So, nach langem suchen hab ich den Fehler gefunden, es war ein böses Leerzeichen in der getCam.php...

    Danke nochmal für die Hilfe!!

  10. #10
    Registriert seit
    Nov 2012
    Ort
    Bremerhaven
    Beiträge
    50

    An dieser Stelle ein großes Dankeschön an Spoosie. Habe nun auch meine erste Unifi in IPS integriert.
    Leider habe ich es nicht geschafft das Standbild nach der Anleitung in IPS zu integrieren.

    Mit der aktuellen Firmware ist es aber möglich das Standbild über den NVR zu beziehen.
    Der Link dafür sieht wie folgt aus:

    http://"NVR-IP-Adresse":7080/api/2.0/snapshot/camera/"CAMID"?force=true&apiKey="APIKey"

    die CAMID lässt sich aus der "RTSP URL" ermitteln. Wichtig ist es die letzten zwei Zeichen nicht mit zu kopieren also nur bis zum Unterstrich kopieren.
    Geändert von wowa371 (30.05.17 um 20:11 Uhr)

Ähnliche Themen

  1. Ubiquiti - Unifi AP ClientListe
    Von Spoosie im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 64
    Letzter Beitrag: 26.12.15, 10:29
  2. Unifi Controller auf WHS2011
    Von fraggle im Forum Alles rund um den PC
    Antworten: 1
    Letzter Beitrag: 26.11.14, 20:29
  3. UniFi Voip - Powered by Android
    Von r4m3u5 im Forum Schaufenster
    Antworten: 11
    Letzter Beitrag: 11.08.14, 19:39
  4. Video - Netzwerkplayer
    Von TBe im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 8
    Letzter Beitrag: 23.08.11, 18:27