Bewegungserkennung mit Hikvision-Kamera DS-2CD2032-I

Hallo zusammen,

ich habe eine Webcam (HIKVISION DS-2CD2032-I) und möchte die Bewegungserkennung der Kamera dazu verwenden bei Dunkelheit das Licht einzuschalten. Wonach und wo ich suchen muss, weiss ich zwischenzeitlich. Alleine bei der Umsetzung in IP Symcon happert es noch. Mit dem „Testtool for Integrators“ von Hikvision kann ich den GET Befehl auslösen und erhalte eine Antwort. Siehe Bild:

Der Befehl ist vermutlich folgender: „http://admin:12345@192.168.100.231:80 GET /ISAPI/Event/notification/alertStream“

Als Antwort erhalte ich den Status im XML-Format.

Wenn der Wert des rot markierten Bereiches <activePostCount>2</activePostCount> ungleich 0 ist wurde eine Bewegung erkannt.

Wäre euch sehr dankbar, wenn ihr mich hier mit einem Script unterstützen könntet.

Besten Dank
Alfred

Hallo zusammen,

habe zwischenzeitlich sehr viel recherchiert und bin sehr nahe an der Lösung dran.
Hierzu verwende ich folgendes Script

<?php
$xml_data = ''."
";
 
  $user = "admin";
  $pass = "Alf*2909";

$host = '192.168.100.231';
$path = '/ISAPI/Event/notification/alertStream';
 
//Socket öffnen
$fp = @fsockopen("tcp://".$host, 80, $errno, $errstr, 10);
if (!$fp)
{
    die($errstr.':'.$errno);
}
else
{
        $header  = "GET $path HTTP/1.1
";
        $header .= "Authorization: Basic ".base64_encode("$user:$pass")."
";
        $header .= "Host: $host
";
        $header .= "Content-Type:text/xml
";
        $header .= "Content-Length:0

";
 
    //senden von Daten
    fwrite($fp, $header.$xml_data);
 
    $headers='';
 
    //Header lesen
    while ($str = trim(fgets($fp, 4096)))
    $headers .= "$str
";
 
    $body='';
 
    //Antwort lesen
    while (!feof($fp))
    $body.= fgets($fp, 4096);
 
    //Soket schliessen
    fclose($fp);
}
 
//Daten ausgeben
echo $headers.'<hr/>'.$body;
 
?>

Dieses Script ( entsprechende Anpassung im $path ) funktioniert mit zahlreichen Befehlen, die so aufgebaut sind.
Nur nicht mit /ISAPI/Event/notification/alertStream. Hier bringt mir IP Symcon folgenden Fehler:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\IP-Symcon\scripts\27266.ips.php on line 37

was diese Zeile betrifft: $body.= fgets($fp, 4096);

Die Antwort mit dem Test-Tool sieht so aus:

HTTP/1.1 200 OK
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=boundary

–boundary
Content-Type: application/xml; charset=„UTF-8“
Content-Length: 483

<EventNotificationAlert version=„2.0“ xmlns=„http://www.hikvision.com/ver20/XMLSchema“>
<ipAddress>192.168.100.231</ipAddress>
<portNo>80</portNo>
<protocol>HTTP</protocol>
<macAddress>3c:8c:f8:a0:6f:3a</macAddress>
<channelID>1</channelID>
<dateTime>2016-09-24T10:39:51+01:00</dateTime>
<activePostCount>0</activePostCount>
<eventType>videoloss</eventType>
<eventState>inactive</eventState>
<eventDescription>videoloss alarm</eventDescription>
</EventNotificationAlert>
–boundary
Content-Type: application/xml; charset=„UTF-8“
Content-Length: 483

<EventNotificationAlert version=„2.0“ xmlns=„http://www.hikvision.com/ver20/XMLSchema“>
<ipAddress>192.168.100.231</ipAddress>
<portNo>80</portNo>
<protocol>HTTP</protocol>
<macAddress>3c:8c:f8:a0:6f:3a</macAddress>
<channelID>1</channelID>
<dateTime>2016-09-24T10:39:51+01:00</dateTime>
<activePostCount>0</activePostCount>
<eventType>videoloss</eventType>
<eventState>inactive</eventState>
<eventDescription>videoloss alarm</eventDescription>
</EventNotificationAlert>
–boundary
Content-Type: application/xml; charset=„UTF-8“
Content-Length: 483

<EventNotificationAlert version=„2.0“ xmlns=„http://www.hikvision.com/ver20/XMLSchema“>
<ipAddress>192.168.100.231</ipAddress>
<portNo>80</portNo>
<protocol>HTTP</protocol>
<macAddress>3c:8c:f8:a0:6f:3a</macAddress>
<channelID>1</channelID>
<dateTime>2016-09-24T10:39:52+01:00</dateTime>
<activePostCount>0</activePostCount>
<eventType>videoloss</eventType>
<eventState>inactive</eventState>
<eventDescription>videoloss alarm</eventDescription>
</EventNotificationAlert>
–boundary
Content-Type: application/xml; charset=„UTF-8“
Content-Length: 483

<EventNotificationAlert version=„2.0“ xmlns=„http://www.hikvision.com/ver20/XMLSchema“>
<ipAddress>192.168.100.231</ipAddress>
<portNo>80</portNo>
<protocol>HTTP</protocol>
<macAddress>3c:8c:f8:a0:6f:3a</macAddress>
<channelID>1</channelID>
<dateTime>2016-09-24T10:39:52+01:00</dateTime>
<activePostCount>0</activePostCount>
<eventType>videoloss</eventType>
<eventState>inactive</eventState>
<eventDescription>videoloss alarm</eventDescription>
</EventNotificationAlert>

Hat jemand eine Ahnung? Wäre toll wenn mir hier jemand weiter helfen könnte.

Grüße
Alfred

Hallo zusammen,
bin ein kleines Stück weitergekommen, hänge aber immer noch, weil ich von PHP keine Ahnung habe.
Wie es scheint, erfüllt die Antwort der Kamera, bei dieser Anfrage, nicht die Bedingungen, dass die while-Schleife beendet wird.

    //Header lesen
    while ($str = trim(fgets($fp, 4096)))
    $headers .= "$str
";
 
    $body='';
 
    //Antwort lesen
    while (!feof($fp))
    $body.= fgets($fp, 4096);

Ich habe mir über den Microsoft Netmonitor mal angesehen was so passiert. Während mit dem Testtool 4 Pakete von der Kamera zurückkommen, siehe oben, liefert sie mit dem PHP-Script endlos Pakte (bis zum Abbruch wegen timeout). Abwechselnd erst header dann body. Ich wäre mit einem Paket schon glücklich. Wie gesagt, ich habe von PHP keine Ahnung und wäre daher sehr dankbar, wenn jemand mal über das obige Script darüberschauen könnte und die while-Scheilfe so umbaut, dass ich nur noch ein Paket bekomme.

Danke Alfred

Hallo Alfred,

ich habe ebenfalls Hikvision Kameras und bin auch gerade auf der Suche nach einer Möglichkeit die Alarme der Kameras in IP Symcon abzubilden.

Wie ist bei dir der aktuelle Stand? Wenn du von dem XML Stream nur ein Paket haben möchtest, kannst du anstatt der While Schleife folgende Zeile einfügen:

stream_get_line($fp, 4096, ‚</EventNotificationAlert>‘);

Es wird dann der Stream nur bis zu dem Text </EventNotificationAlert> gelesen.

Allerdings bin ich mir noch nicht schlüssig wie es dann weitergeht. Eigentlich müsste ja pausenlos der Stream ausgewertet werden und bei einer Bewegungserkennung eine Varialbe in IPS gesetzt werden. Das würde heißen ein PHP Script müsste pausenlos laufen. Das denke ich ist auch nicht optimal. Liest man nur ein Paket pro Scriptlauf, so müsste das Script in kurzen Abständen hintereinander gestartet werden. Auch nicht ideal.

Besser wäre aus meiner Sicht wenn die Kamera bei einer Bewegungserkennung Daten an einen IPS Server Socket schickt, die dann entsprechend ausgewertet werden können. Dann müsste kein Script pausenlos laufen. Das funktioniert auch grundsätzlich, wenn man auf der Kamera über /ISAPI/Event/notification/httpHosts das vorher erstellte IPS Server Socket konfiguriert (funktionierte bei mir nur über curl und nicht über das Hikvision Test Tool). Die Daten würden dann sauber in IPS ankommen, allerdings wenn man auf dem Smartphone die Alarmfunktion der Hikvision APP iVMS4500 verwendet, wird die httpHost Einstellung wieder überschrieben und an IPS werden keine Daten mehr gesendet.

Das würde auch funktionieren: Günstige WebCam als Bewegungsmelder mit Motion Detection
Allerdings nur mit der zusätzlichen SMTPBridge.

Hallo,
oben beschriebene Aufgabenstellung wurde dank Premiumsupport gelöst und möchte sie hier niemanden vorenthalten.
Ich bin mit meinem Projekt dank der Community sehr weit gekommen und möchte deshalb auch einen Teil zu Community beitragen.

Für die Lösung sind eine Client-Socketverbindung, ein Cutter, 1 RegVar und 2 Scripte einzurichten.

1.Client-Socket-Verbindung unter I/O-Instanzen einrichten:

Client socket 2.PNG

  1. Cutter unter Splitter-Instanzen einrichten:

Der auszuwertende String in der XML-Datei ist innerhalb dieses Feldes:

<eventDescription> </eventDescription>

  1. RegVar Einrichten:

  1. Foldende Scripte einbinden:

4.1 Name des 1.Scriptes: ( in meinem Fall ) init alertstream Kamera 1

<?php
$ClientSocketID = 27739 /*[Client Socket Kamera 1]*/;

if ($_IPS['STATUS'] == 102) {
	$user = "admin"; 
	$pass = "12345"; 
	
	$url = '192.168.100.231'; 
	$path = '/Event/notification/alertStream';
	
	$Xml = ""; 
	
	$header  = "GET ".$path." HTTP/1.1
"; 
	$header .= "Authorization: Basic ".base64_encode($user.":".$pass)."
"; 
	$header .= "Content-Length: ".strlen($Xml)."

";
	$header .= $Xml;
	
	CSCK_SendText($ClientSocketID , $header.$Xml); 
 }
?>

4.2 Name des 2.Scriptes: ( in meinem Fall ) Verarbeite Alertstream Kamera 1

<?

if ($_IPS['VALUE'] == "Motion alarm") {
	SetValueBoolean(21463 /*[Technik\Kamera 1\Motion Alarm Kamera 1]*/ ,true);
} else {
	SetValueBoolean(21463 /*[Technik\Kamera 1\Motion Alarm Kamera 1]*/ ,false);
}
if ($_IPS['VALUE'] == "linedetection alarm") {
	SetValueBoolean(22410 /*[Technik\Kamera 1\Linedetection Alarm Kamera 1]*/ ,true);
} else {
	SetValueBoolean(22410 /*[Technik\Kamera 1\Linedetection Alarm Kamera 1]*/ ,false);
}
if ($_IPS['VALUE'] == "fielddetection alarm") {
	SetValueBoolean(39712 /*[Technik\Kamera 1\Fieldetection Alarm Kamera 1]*/ ,true);
} else {
	SetValueBoolean(39712 /*[Technik\Kamera 1\Fieldetection Alarm Kamera 1]*/ ,false);
}
?>

Zum Testen habe ich für mich noch 3 Bool-Variablen eingefügt. Nach alledem bitte IP-Symcon stoppen und starten.

Das sollte es gewesen sein.

Beste Grüße
Alfred

Hallo,

danke für die Bereitstellung der Lösung zum Auswerten des Alertstreams. Ich habe es ausprobiert und es funktioniert, allerdings ist mein Raspberry PI schon mit einer Kamera deutlich überfordert durch die vielen Daten (<eventType>videoloss</eventType> <eventState>inactive</eventState> Meldungen). Ich habe bis dato keine Möglichkeit bei der Kamera gefunden, diese irgendwie abzustellen.

Ich möchte deshalb auch kurz erläutern, wie weit ich mit der ISAPI/Event/notification/httpHosts Funktion der Kamera gekommen bin. Als erstes konfiguriert man einen Server Socket in IPS mit einem beliebigen freien Port.

Serversocket.JPG

Dann eine RegisterVariable, die die Daten vom Serversocket erhält und an ein Script (z. B. Notification) weiterleitet.

Das Script (Notification) wertet die XML Daten aus und speichert die relevanten Informationen in IPS Variablen. Z. B.


<?
	if ($_IPS['SENDER'] == "RegisterVariable")
	{
		$sData = $_IPS['VALUE'];
		$sXML = substr($sData, stripos($sData, "<?xml"));
		$sXML = str_replace('&&', '|' , $sXML);
		$oXMLData = new SimpleXMLElement($sXML);

		SetValueInteger(59656 /*[Scripts\Kamera\Nordseite_Motion_Counter]*/, (int)$oXMLData->activePostCount);
      
//		echo "Event: " . $oXMLData->eventDescription;
//		echo "PostCount: " . $oXMLData->activePostCount;
//		echo "Date: " . $oXMLData->dateTime;

  	}
?>

Um das ganze zu aktivieren, muss man folgende XML Datei anlegen (z. B. httpHosts.xml) und per curl an die Kamera schicken.


<?xml version="1.0" encoding="UTF-8"?>
<HttpHostNotificationList version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
<HttpHostNotification version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
<id>1</id>
<url>/</url>
<protocolType>HTTP</protocolType>
<parameterFormatType>XML</parameterFormatType>
<addressingFormatType>ipaddress</addressingFormatType>
<hostName></hostName>
<ipAddress>192.168.1.13</ipAddress>
<portNo>1024</portNo>
<userName></userName>
<httpAuthenticationMethod>none</httpAuthenticationMethod>
</HttpHostNotification>
</HttpHostNotificationList>

curl -T httpHosts.xml http://admin:passwort@192.168.1.65/ISAPI/Event/notification/httpHosts

Zurück sollte dann folgende XML kommen:


<?xml version="1.0" encoding="UTF-8"?>
<ResponseStatus version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
<requestURL>/ISAPI/Event/notification/httpHosts</requestURL>
<statusCode>1</statusCode>
<statusString>OK</statusString>
<subStatusCode>ok</subStatusCode>
</ResponseStatus>

Ab jetzt schickt die Kamera bei einem Ereignis die Daten an den Serverport in IPS. Ein großer Vorteil ist, dass nur dann Daten kommen, wenn ein Ereignis erkannt wird und das System nicht überlastet ist.

Allerding musste ich feststellen, dass bei einer Bewegung die Daten von der Kamera fünf mal geschickt werden (im 10 Sekunden Takt). Ich vermute mal das liegt daran, dass die Kamera erwartet, dass irgendeine Form von Bestätigung (XML) zurückkommt. Das wäre grundsätzlich über den ServerPort auch möglich, allerdings weiß ich nicht wie diese auszusehen hätte, so dass es von der Kamera akzeptiert wird.

Die Funktion ISAPI/Event/notification/httpHosts wird eigentlich von der Hikvision Smartphone APP konfiguriert, wenn man die Alarme in der APP einschaltet. Dann schickt die Kamera bei einer Bewegung die Daten an einen Hikvision Server bei AWS, der dann wiederum die Smartphone APP darüber informiert.
Ich haben schon mal versucht mit einem Netzwerktrace die Rückantwort anzusehen, allerdings ist das nicht ganz so trivial. Die Antwort kommt wiederum von einer anderen IP Adresse. Ganz komisch.

Vielleicht hat ja jemand eine Idee bezüglich der passenden Rückantwort. Dann denke ich wäre es eine schöne Lösung.

Viele Grüße

Hallo zusammen.
Also erstmal vielen Dank an alle, die bei der Lösung des Problems unterstützt haben.

Ich habe auch eine Hikvision Kamera, und das Problem, dass die Bewegungserkennung nicht funktioniert.

Ich habe das XML zur Kamera geschickt und folgende Antwort erhalten:

<?xml version=„1.0“ encoding=„UTF-8“?>
<HttpHostNotificationList version=„2.0“ xmlns=„http://www.hikvision.com/ver20/XMLSchema“>
<HttpHostNotification version=„2.0“ xmlns=„http://www.hikvision.com/ver20/XMLSchema“>
<id>1</id>
<url>/</url>
<protocolType>HTTP</protocolType>
<parameterFormatType>XML</parameterFormatType>
<addressingFormatType>ipaddress</addressingFormatType>
<ipAddress>192.168.10.77</ipAddress>
<portNo>6162</portNo>
<userName></userName>
<httpAuthenticationMethod>none</httpAuthenticationMethod>
</HttpHostNotification>
</HttpHostNotificationList>

Aber leider bekomme ich (Auch im Wireshark) nichts, wenn ich die Bewegungserkennung auslöse.
Hat noch jemand einen Tipp für mich?

Danke, Gruß, Torben

Hallo Alfred,
Ich selbst habe 20 Kameras im Einsatz, aber bin nicht der „Ober-Programmierer“. Daher bin ich auf der Suche nach dem „Hikvision Testtool for Integrators“ das du hier verwendet hast.
Ich habe schon mehrere Stunden damit verbracht die Software zu suchen. Leider ohne Erfolg.
Hast du die noch und wenn ja, könntest du dir mir evtl. zur Verfügung stellen?
Herzlichen Dank schon mal.
Christoph

Hallo Christoph,
Sorry dass ich mich erst so spät melde. Gleich vorweg. Ich habe das Tool nicht mehr gefunden. Aber suche mal nach isapi Test Tool. Das kommt sofort im Zusammenhang mit Hikivision. Das könnte es sein.
VG Alfred

Gesendet mit der Telekom Mail App



-----Original-Nachricht-----
Von: Lanoph via IP-Symcon Community <office@symcon.de>
Betreff: [IP-Symcon Community] [IP-Symcon/Skripte, PHP, SQL (Fragen)] Bewegungserkennung mit Hikvision-Kamera DS-2CD2032-I
Datum: 14.01.2024, 09:04 Uhr
An: <abc.fellinger@t-online.de>


|

  • |

| lanoph
14. Januar |

  • | - |

Hallo Alfred,
Ich selbst habe 20 Kameras im Einsatz, aber bin nicht der „Ober-Programmierer“. Daher bin ich auf der Suche nach dem „Hikvision Testtool for Integrators“ das du hier verwendet hast.
Ich habe schon mehrere Stunden damit verbracht die Software zu suchen. Leider ohne Erfolg.
Hast du die noch und wenn ja, könntest du dir mir evtl. zur Verfügung stellen?
Herzlichen Dank schon mal.
Christoph

Hallo zusammen,

Trotz ChatGPT und testen komme ich hier nicht weiter.

Ich habe eine Kamera von Hikvision die mir beim Überschreiten einer Linie eine Meldung per HTTP zusendet. So weit so gut.

Leider ist mein Log mit diesen Warnungen geflutet.

Ich habe einen Cutter erstellt der auf „“ als Trennzeichen achtet.

image

Mein Script ganz einfach.

<?
Cutter_ClearBuffer (21952);
if ($_IPS['VALUE'] == "linedetection alarm") {
	SetValueBoolean(49362 /*[Technik\Kamera 1\Motion Alarm Kamera 1]*/ ,true);
    IG_UpdateImage(30491);
    TB_SendImage(44149,40044);
    Cutter_ClearBuffer (21952);
} else {
	//SetValueBoolean(21463 /*[Technik\Kamera 1\Motion Alarm Kamera 1]*/ ,false);
}

?>

funktionieren tut alles doch im Debug Protokoll des Cutters schaut es so aus.

Es scheint als ob die Kamera irgendwas stört da „isDataRetransmission“ mitgeschickt wird. Hat aktuell jemand solche einen Kamera im Symcon eingebunden?

sG Christoph

Kann hier keiner helfen?

sg Christoph

Leider im Moment nicht. Ich habe auch Hikvision Kameras und bin an der Lösung sehr interessiert. Ich habe im Moment allerdings keine Möglichkeit mitzuhelfen.

OK das Script läuft jetzt bei mir

der cutter triggert auf character 
Left :  POST
Right : </EventNotificationAlert>

Hier ist das von der Registervariable aufgerufene Script

<?php


$data = extractXMLFromIpAddress($_IPS['VALUE']);

IPS_LogMessage("KameraTest",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;


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 extractXMLFromIpAddress($input) {
    // Locate the start of the <ipAddress> tag
    $startTag = '<ipAddress>';
    $startPos = strpos($input, $startTag);
    if ($startPos === false) {
        IPS_LogMessage("KameraTest","Start tag <ipAddress> not found");
        return false; // <ipAddress> tag not found
    }

    // Extract the XML part starting from <ipAddress>
    $xmlString = substr($input, $startPos - strlen($startTag));

    // Log the extracted XML string for debugging
    IPS_LogMessage("KameraTest", $xmlString);
    // Wrap the extracted part in a root element to ensure it's well-formed XML
    $xmlString = '<?xml version="1.0" encoding="UTF-8"?><root>' . $xmlString . '</root>';

    // Suppress errors during XML parsing and handle them manually
    libxml_use_internal_errors(true);
    $xml = simplexml_load_string($xmlString, 'SimpleXMLElement', LIBXML_NOCDATA);
    if ($xml === false) {
        // Log errors for debugging
        $errorMessages = "";
        foreach (libxml_get_errors() as $error) {
            $errorMessages .= "XML Error: " . $error->message . "\n";
        }
        
        IPS_LogMessage("KameraTest", $errorMessages);
        libxml_clear_errors();
        return false; // Failed to parse XML
    }

    // Convert the SimpleXMLElement object to a JSON string, then decode it to an array
    $json = json_encode($xml);
    $array = json_decode($json, true);

    // Log the resulting array for debugging

    return $array;
}



function manage_variable($parent, $name, $type, $profil, $logging, $aggregation_type) {
    $archive_id = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
    $parentName = IPS_GetName($parent);

  
    $var_id = @IPS_GetVariableIDByName($name, $parent);
    
    // If variable does not exist, create and set up the new variable
    if ($var_id === false) {
        $var_id = IPS_CreateVariable($type);
        if($profil != "") IPS_SetVariableCustomProfile($var_id, $profil);
        IPS_SetName($var_id, $name);
        IPS_SetParent($var_id, $parent);
        
        AC_SetLoggingStatus($archive_id, $var_id, $logging);
        if ($logging || $type != 3) { // Assuming 3 is StringType, only set aggregation if logging is true or not StringType
            AC_SetAggregationType($archive_id, $var_id, $aggregation_type);
        }
        IPS_ApplyChanges($archive_id);
    } else {
        // Existing variable logic remains unchanged
        $variable = IPS_GetVariable($var_id);
    }

    return $var_id;
}

Sobald ein Alarm empfangen wir werden die Daten in Variable unterhalb des Scripts automatisch angelegt

Danke für das Script. Wenn ich einmal durch das Kamera Bild laufe und die Linien Detektion auslöse, habe ich 80 Warnungen vom Typ Buffer is > 8kb etc.

image

Die Kamera ist wie folgt konfiguriert.


image
image

Vielleicht hat @paresy oder sonst ein „alter Hase“ eine Idee woher das kommt.

wieviel Memory hast du eingebaut ? Ich habe IPSymcon auf meinem QNAP laufen und in the php ini 128MB freigegeben

memory_limit=128Mb

Das ist egal, der Buffer ist auf 8 kB begrenzt.
Da Symcon inzwischen ja webhooks unterstützt, wäre das sicherlich eine Alternative zum CS mit Cutter.
Dann würde das XML payload direkt im Script und in einem Stück landen.
Michael

1 „Gefällt mir“

Der Server hat 128GB. Symcon hat 8GB.

Das Problem ist wenn ich es richtig sehe das die Kamera immer noch ein Bild mitschickt ( bei der Linien Detection) welches ich gar nicht benötige und es wie am Anfang vom Thread schon beschrieben wurde die Kamera wahrscheinlich auf eine Antwort wartet.

@Nall-chan Das habe ich auch schon probiert. Leider scheitere ich daran :wink:
Symcon:
image

Kamera:

Der Debug im Webhook bleibt leer.

<?php
// Webhook wird ausgelöst und das Skript wird ausgeführt
// Daten aus dem Webhook abrufen
$data = json_decode(file_get_contents('php://input'), true);

// Überprüfen, ob die Daten richtig empfangen wurden
if ($data === null) {
    echo "Keine Daten empfangen oder Daten ungültig.";
    exit;
}

// Beispiel: Überprüfen, ob der Alarm von der Line Detection kommt
if (isset($data['alarm_type']) && $data['alarm_type'] == 'linedetection') {
    // Alarm-Status setzen
    SetValueBoolean(49362 /*[Technik\Kamera 1\Motion Alarm Kamera 1]*/ , true);

    // Weitere Aktionen ausführen
    //IG_UpdateImage(30491);
    //TB_SendImage(44149, 40044);

    // Erfolgsmeldung ausgeben
    echo "Alarm von der Line Detection erkannt und verarbeitet.";
} else {
    // Optional: Alarm-Status zurücksetzen oder andere Aktionen
    // SetValueBoolean(21463 /*[Technik\Kamera 1\Motion Alarm Kamera 1]*/ , false);
    echo "Kein Line-Detection-Alarm oder falscher Alarmtyp.";
}
?>

Habe das Script mit hilfe von ChatGPT erstellt.

Tja… was soll man da sagen.
Lass mal das json_decode weg, hier kommt doch kein JSON rein, sondern XML.

Dazu z.b. das SimpleXMLElement benutzen.
https://www.php.net/manual/de/simplexml.examples-basic.php
Michael

:wink:

Ich weiß ja nicht mal wie das XML der Kamera aussieht. Wieso ist auch der Debug beim Webhook leer? Wo sehe ich die Daten die ankommen?

Das Script wird ausgeführt aber es gibt einen leider einen Fehler.

Das ist normal.

Fehlermeldung?
Warum nicht einfach starten mit dem ersten Beispiel Script aus der Doku?

Michael