Bewegungserkennung mit Hikvision-Kamera DS-2CD2032-I

Wenn ich auf den Link klicke sehe ich eine weiße Seite.

ich sehe das das Script auch ausgelöst wird, wenn ich bei der Kamera vorbeilaufe.

Dann passt soweit der Webhook.

Das scriot wird auch ausgeführt. Bist du sicher, das du das webhookscript bearbeitest? Hast dubaich gespeichert?

Mach in einer weiteren zeile mal

echo "ein Testtext";

IPS_LogMessage("WebSocket", "ein Testtext");

Wenn du den link aufrust müsste statt der leeren seite ein text kommen und eine meldung im log erscheinen.

btw:

ist was anderes als ein webhook.
Michael

Hab ich 1:1 aus der doku :stuck_out_tongue_closed_eyes:

Ah, das Erste Script… das ist auch das für WebSocket Support :wink:

Das Beispiel Script weiter unten für Hooks ist dagegen korrekt und damit würde ich auch testen, da es mehr als nur RAW / PHP-Input enthält :

IPS_LogMessage("WebHook GET", print_r($_GET, true));
IPS_LogMessage("WebHook POST", print_r($_POST, true));
IPS_LogMessage("WebHook IPS", print_r($_IPS, true));
IPS_LogMessage("WebHook RAW", file_get_contents("php://input"));
echo "Meldung: " . $_GET['Meldung'];

Michael

1 „Gefällt mir“

Moin,

Ich habe das script vorher getestet. Das beispielschnipsel stammte von meiner hikvision und entspricht deiner vorletzter Zeile. Ob nun „Webhook“, „Websocket“ oder „Schnitzelbrötchen“ im ersten string steht ist erstmal egal, hauptache im Meldungsfenster kommt was an. :face_with_peeking_eye:

Viele grüße

Ja, richtig.
Ich hatte halt unter Beispiel geschaut. Die Seite ist an der Stelle da leider schlecht strukturiert.
Wenn es bei dir klappt und bei @Kampfwurst nur war leeres im Log kommt, muss aber irgendwas an der Kamera ja anders sein.
Wenn der Log Eintrag kommt, stimmt zumindest der Hook und die Zuordnung zum Script.
Darum die Idee mal alles ausgeben zu lassen, eventuell sieht man dann mehr.
Michael

1 „Gefällt mir“

Hi,

deswegen bat ich Kampfwurst darum das Script zu erweitern um auszuschließen das er evtl das falsche script bearbeitet hat.

→ Kommt nun „eine Testnaricht“ ist das Script korrekt aber an der Kamera was nicht,
→ kommt wieder ein leeres Script ist etwas mit dem hook oder dem script faul.

Irgendwo muss man ja anfangen :man_shrugging:. Wenn ich dann weiß welche Daten er bekommt (und diese evtl sogar identisch sind) können wir das hook verfeinern.

Alles besser als Chat GPT dran zu lassen und nichts dabei zu lernen :joy:

Hier ist mein Script das mit Hilfe des Webhooks funktioniert

<?php

$webhook_data = file_get_contents("php://input");

$data = parseEventNotificationAlert($webhook_data);

IPS_LogMessage("WebhookKamera",print_r($data,true ));

/*
0	Legt eine Variable vom Typ Boolean an
1	Legt eine Variable vom Typ Integer an
2	Legt eine Variable vom Typ Float an
3	Legt eine Variable vom Typ String an

Aggregationstyp	
AGGREGATIONSTYP	DESCRIPTION
0	Standard
1	Counter


*/


$parent = $_IPS['SELF'];

$type = 3;
$profil = "";
$logging =  true;
$aggregation_type = 0;

if (is_array($data))
{
    foreach($data as $key => $value)
    {
        $name = $key;
        if($key != "@attributes")
        {
            $var_id =  manage_variable($parent, $name, $type, $profil, $logging, $aggregation_type);
            SetValueString( $var_id,$value);
        }
    }
}



function parseEventNotificationAlert($xmlString) {
    $xml = simplexml_load_string($xmlString, "SimpleXMLElement", LIBXML_NOCDATA);
    $json = json_encode($xml);
    $array = json_decode($json, TRUE);
    return $array;
}


Wenn ich den Linien Alarm aktiviere kommen Daten nur noch über POST

Die Daten kommen als array an : [linedetection] und der Inhalt des Arrays hat bei der Linien überquerung die folgende Struktur :

Array
(
    [@attributes] => Array
        (
            [version] => 2.0
            [xmlns] => http://www.std-cgi.com/ver20/XMLSchema
        )

    [ipAddress] => 192.168.50.200
    [portNo] => 3777
    [protocol] => HTTP
    [macAddress] => e8:a0:ed:e9:d4:b4
    [channelID] => 1
    [dateTime] => 2024-06-17T12:12:44+02:00
    [activePostCount] => 1
    [eventType] => linedetection
    [eventState] => active
    [eventDescription] => linedetection alarm
    [DetectionRegionList] => Array
        (
            [DetectionRegionEntry] => Array
                (
                    [regionID] => 1
                    [sensitivityLevel] => 100
                    [RegionCoordinatesList] => Array
                        (
                            [RegionCoordinates] => Array
                                (
                                    [0] => Array
                                        (
                                            [positionX] => 550
                                            [positionY] => 987
                                        )

                                    [1] => Array
                                        (
                                            [positionX] => 546
                                            [positionY] => 12
                                        )

                                )

                        )

                    [detectionTarget] => human
                    [TargetRect] => Array
                        (
                            [X] => 526
                            [Y] => 93
                            [width] => 121
                            [height] => 836
                        )

                )

        )

    [channelName] => 119 Middle
    [detectionPictureTransType] => binary
    [detectionPicturesNumber] => 1
    [isDataRetransmission] => false
)

mit dem Script von Michael kommen Daten zum Vorschein.

17.06.2024, 13:02:43 | WebHook POST         | Array
(
    [linedetection] => <EventNotificationAlert version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
<ipAddress>10.40.80.112</ipAddress>
<portNo>3777</portNo>
<protocol>HTTP</protocol>
<macAddress>4c:f5:dc:84:ad:e8</macAddress>
<channelID>1</channelID>
<dateTime>2024-06-17T13:02:43+02:00</dateTime>
<activePostCount>1</activePostCount>
<eventType>linedetection</eventType>
<eventState>active</eventState>
<eventDescription>linedetection alarm</eventDescription>
<DetectionRegionList>
<DetectionRegionEntry>
<regionID>1</regionID>
<sensitivityLevel>50</sensitivityLevel>
<RegionCoordinatesList>
<RegionCoordinates>
<positionX>457</positionX>
<positionY>0</positionY>
</RegionCoordinates>
<RegionCoordinates>
<positionX>177</positionX>
<positionY>533</positionY>
</RegionCoordinates>
</RegionCoordinatesList>
<detectionTarget>human</detectionTarget>
<TargetRect>
<X>0.572</X>
<Y>0.235</Y>
<width>0.226</width>
<height>0.736</height>
</TargetRect>
</DetectionRegionEntry>
</DetectionRegionList>
<channelName>Camera 01</channelName>
<detectionPictureTransType>binary</detectionPictureTransType>
<detectionPicturesNumber>1</detectionPicturesNumber>
<isDataRetransmission>false</isDataRetransmission>
</EventNotificationAlert>

)

War schon am Zweifeln ob ich das System neu aufsetze weil nie Daten angezeigt wurden :wink:

Hier nochmal die XML Strukturen abhängig vom Bewegungstyp :

Bewegung (Daten kommen als XML über $webhook_data = file_get_contents(„php://input“):wink:

Die folgenden Daten kommen über $webhook_data = $_POST als Array mit XML als Inhalt. Der Array Key ist der Typ der Bewegungsmeldung (z.b. linedetection)

Kann man eigentlich remote events für die Hikvision Kameras aktivieren bzw. Deaktivieren? Falls ja weiss jemand wie?
Ich nutze meine Kameras als intelligente Bewegungsmelder und würde für den Fall das der Gärtner im Urlaub etwas erledigt gerne den Alarm in der Kamera deaktivieren bzw. Die Sirene und das Strobelight ausschalten

Im Modul store gibt es jetzt ein HikVision Modul : Neues Modul : IP-Symcon als HikVision Alarm Center

1 „Gefällt mir“

Super freue mich auf das Modul. Geht auch Liniendetection?

Linienerkennung müsste funktionieren, muss ich nochmal explizit testen. Im Moment habe ich alle Möglichkeiten bei meinen 10 Kameras aktiviert und soweit funktioniert es. Ich muss mal bei einer alles bis auf Linienerkennung ausschalten und schauen welche Meldung kommt

Hallo BestEx,
wäre es möglich, dass Du beispielhaft die Einstellungen einer Kamera postest? Wäre Dir sehr dankbar.

Schon passiert, mūsste helfen

Linedetection funktioniert :