Reolink Kamera Personen und Fahrzeugerkennung

Schönen guten Abend,

ich habe eine Reolink rlc-520a Kamera, die eine Personen und Fahrzeugerkennung hat.
In der App kann man damit sehen ob eine Person oder ein Fahrzeug erkannt wurde.
Leider kann ich mit dem Onvif Modul nur „Bewegung erkannt“ sehen, sprich, keine Unterscheidung zwischen Auto und Person.
Gibt es doch irgendwie eine Möglichkeit, das herauszufinden?
In der synology surveillance station kann man das auswählen und dort wird auch unterschieden, es muss also irgendwie aus der Kamera herauszubekommen sein.

mfg

Mit ein bisschen suchen im Forum findest du das…

Dankeschön, hatte ich gestern gesehen, bin nur noch nicht dazu gekommen, das zu testen.
Ich werden mal gucken, wie weit ich damit komme.

Schönen Sonntag noch.

Leider verstehe ich das ganze nicht so wirklich.

Wenn ich mit diesem Scrip die Daten auslesen will:

$content = Sys_GetURLContent(„http://192.168.2.11/cgi-bin/api.cgi?cmd=GetAiState&rs=&user=admin&password=********“);
//print $content;
$json=json_decode($content);
print_r ($json);

echo „Person=“.$json->people->alarm_state. "
";

Bekomme ich zwar eine Antwort, aber der echo Befehl schlägt irgendwie fehl.

Array
(
[0] => stdClass Object
(
[cmd] => GetAiState

        [code] => 0
        [value] => stdClass Object
            (
                [channel] => 0
                [dog_cat] => stdClass Object
                    (
                        [alarm_state] => 0
                        [support] => 0
                    )

                [face] => stdClass Object
                    (
                        [alarm_state] => 0
                        [support] => 0
                    )

                [people] => stdClass Object
                    (
                        [alarm_state] => 0
                        [support] => 1
                    )

                [vehicle] => stdClass Object
                    (
                        [alarm_state] => 0
                        [support] => 1
                    )

            )

    )

)

Warning: Attempt to read property „people“ on array in /var/lib/symcon/scripts/25268.ips.php on line 10

Warning: Attempt to read property „alarm_state“ on null in /var/lib/symcon/scripts/25268.ips.php on line 10
Person=

Es wird als echo keine 1 oder 0 ausgegeben.
Auch wenn ich eine Variable daraus erzeugen will, passiert nichts.
Kann mir da jemand weiter helfen?

mfg

Diese Zeile mal zu>

SetValueInteger (13219, $info[‚people‘]->alarm_state);

umbauen. Denn $info ist ein Array, welches dann in sich Objekte beinhaltet.

Moin,

leider will es damit auch nicht.

wenn ich es so schreibe:

$info[‚people‘]->support);

kommt:

Fatal error: Uncaught Error: Undefined constant „‚people‘“ in /var/lib/symcon/scripts/25268.ips.php:9

wenn ich es so schreibe:

SetValueInteger (13219, $info[„people“]->support);

Kommt:

Warning: Undefined array key „people“ in /var/lib/symcon/scripts/25268.ips.php on line 9
Warning: Attempt to read property „support“ on null in /var/lib/symcon/scripts/25268.ips.php on line 9

Irgendwie will das nicht.

Irgendwie sieht das heute anders aus, als gestern.

Das ist, wenn man grob Verstanden hat, wie das funktioniert (Array, Objekt, etc.) in wenigen Minuten durchprobiert.

$beispiel1 = $json[0]->value->people->alarm_state;
$beispiel2 = $json[0]['value']->people->alarm_state;

Erstell doch einfach in Symcon einen neuen JSON-Decoder

Den zugehörigen HTTP Client füllst du mit obigem URL folgendermassen aus, und ‚schwupp‘ sind alles Events da…

Dankeschön, dass hat geklappt.
Ich muss mich da eindeutig besser einlesen, verstehe da noch nicht so ganz, was Arrays, Objekt usw. sind,
Aber danke für die Hilfe.

Hallo,

ja das hatte ich schon gesehen, wollte aber nicht alle möglichen Variablen haben, sondern das ganze in ein Scrip packen. Finde ich eleganter als zig Variablen, die ich nicht brauche.

Ok, wie du meinst…
Der Baum hält sich allerdings in Grenzen…

image

Reolink hat jetzt bei den meisten Firmware die Möglichkeit zur Definition eines Webhooks eingebaut. So hat die sekündlich Pollerei ein Ende und Symcon kann auf eine Meldung der Kamera warten.

Hier ein kleines Beispielscript, welches dem Webhook hinterlegt werden kann und automatisch die entsprechenden Variablen erstellt.

Version 2 mit dynamischer Erstellung der Variablen. So ist das Script für alle Reolink-Kameras brauchbar

<?php
// Hilfsfunktion zum Erstellen einer Variable, falls sie nicht existiert
function createVariableIfNotExists($parentID, $name, $type) {
    $variableID = @IPS_GetObjectIDByIdent($name, $parentID);
    if ($variableID === false) {
        $variableID = IPS_CreateVariable($type);
        IPS_SetName($variableID, $name);
        IPS_SetIdent($variableID, $name);
        IPS_SetParent($variableID, $parentID);
    }
    return $variableID;
}

// Hilfsfunktion zum Setzen einer Variablen basierend auf ihrem Typ
function setVariable($parentID, $key, $value) {
    if (is_string($value)) {
        $varID = createVariableIfNotExists($parentID, $key, 3); // String
        SetValue($varID, $value);
    } elseif (is_int($value)) {
        $varID = createVariableIfNotExists($parentID, $key, 1); // Integer
        SetValue($varID, $value);
    } elseif (is_float($value)) {
        $varID = createVariableIfNotExists($parentID, $key, 2); // Float
        SetValue($varID, $value);
    } elseif (is_bool($value)) {
        $varID = createVariableIfNotExists($parentID, $key, 0); // Boolean
        SetValue($varID, $value);
    } elseif (is_array($value) || is_object($value)) {
        $varID = createVariableIfNotExists($parentID, $key, 3); // String für JSON-String
        SetValue($varID, json_encode($value));
    } else {
        // Unbekannter Typ, als String speichern
        $varID = createVariableIfNotExists($parentID, $key, 3);
        SetValue($varID, (string)$value);
    }
}

// ID des aktuellen Skripts
$scriptID = $_IPS['SELF'];

// Erstellen oder Abrufen einer Kategorie unterhalb des Skripts
$categoryID = @IPS_GetObjectIDByIdent('WebhookData', $scriptID);
if ($categoryID === false) {
    $categoryID = IPS_CreateCategory(); // Kategorie erstellen
    IPS_SetName($categoryID, "Webhook Data");
    IPS_SetIdent($categoryID, 'WebhookData');
    IPS_SetParent($categoryID, $scriptID);
}

// Erfassen der rohen Daten
$rawData = file_get_contents("php://input");

if (!empty($rawData)) {
    $data = json_decode($rawData, true);

    if (is_array($data)) {
        foreach ($data as $key => $value) {
            // Wenn der Wert selbst ein Array oder Objekt ist, weiter rekursiv durchlaufen
            if (is_array($value) || is_object($value)) {
                foreach ($value as $subKey => $subValue) {
                    if ($subKey === 'alarmTime') {
                        // Zeitstempel in richtige Zeitzone konvertieren und speichern
                        $dateTime = new DateTime($subValue);
                        $dateTime->setTimezone(new DateTimeZone('Europe/Berlin')); // Beispiel: Zeitzone auf Europa/Berlin setzen
                        $formattedAlarmTime = $dateTime->format('Y-m-d H:i:s');
                        setVariable($categoryID, $subKey, $formattedAlarmTime);
                    } else {
                        setVariable($categoryID, $subKey, $subValue);
                    }
                }
            } else {
                setVariable($categoryID, $key, $value);
            }
        }

        // Beispielhafte Protokollierung der Daten
        IPS_LogMessage("Reolink-Carport", "Empfangene Daten: " . print_r($data, true));
    }
} else {
    IPS_LogMessage("WebHook RAW", "Keine rohen Daten empfangen oder roher Datenstrom ist leer.");
}

echo "Message: " . (isset($_GET['Message']) ? $_GET['Message'] : "Keine Nachricht");

Der Baum sieht dann in etwa so aus…