Hikvision IP Cam - Commandes API depuis Jeedom - plannings et profils

Bonjour,

Récent acquéreur de deux caméras Hikvision j’ai maintenant bien compris comment il faut parametrer celles-ci. Cela dit la gestion des plannings que ce soit pour les events (intrusion par exemple), des liaisons ou du profile de configuration de l’image ne m’ont pas convaincu.

D’apres quelques posts je comprends qu’il doit normalement etre possible de le gerer depuis Jeedom via des senarios et des requetes/API mais je manque de compétences pour les créer moi meme.

@loic69 J’ai vu que dans une todo list de l’année derniere tu prévoyais de l’integrer a ton plugin :

  • Commandes actions : activer/désactiver alarmes, changement de mode Nuit / Jour / Auto, générer une alarme sonore, activer l’éclairage supplémentaire pour une levée de doute.

Est ce que tu as pu avancer sur cette fonctionnalité ou est ce que tu aurais des exemple de commandes qui pourraient m’aider?

Pour etre plus concret, mes objectifs :
→ Si alarme on (dans jeedom) alors activer le mode smartevent detection intrusion (et inversement)
→ A heure du crépuscule changer le profil image en faible luminosité, a l’heure de l’aube profile image normal, … (ca sera bien plus précis que le calendrier au mois) – je déclinerai peut etre avec un capteur lumineux que j’ai qui pourrais servir de source plus précise, notamment pour les contre-jours.
En option:
→ si detection activée en journée, alarme lumineuse off - pas indispensable mais peut etre que pouvoir changer les methodes de liaison en fonction de certains criteres pourrait me servir dans le futur.

Merci d’avance

1 « J'aime »

Bonjour leeroy,

je pense que la majorité des utilisateurs (c’est en tout cas mon cas) le gère dans l’autre sens…
D’où le fait que ta question ne fasse pas beaucoup d’émule…

c’est à dire ?
Que ce n’est pas Jeedom qui envoie des infos aux caméras, mais les caméras qui envoient (indirectement) des infos à Jeedom, puis tout est géré dans Jeedom.
Pré-requis un NVR / un NAS… Car lui, contrairement aux caméras est capable d’envoyer des requêtes API à Jeedom…

Par exemple chez moi :

  • Toutes les cams arrivent sur mon NAS Synology (avec surveillance station)
  • Surveillance station reçoit toutes les détections (mouvement / franchissement de ligne / intrusion / Entrée-sortie de zone)
  • Chaque / UNE détection active UNE règle qui envoie une commande API à Jeedom (2 caméras avec 4 détections = 8 règles)
  • Chaque commande API active une commande virtuel (« caméra avant - franchissement de ligne » / Caméra avant - Détection x" / « Caméra arrière - Détection Y » / etc…)
  • Des scénarios dans Jeedom vont « traiter » ces informations et en fonction d’autres paramètres de Jeedom (alarme en marche, il fait nuit, etc…) vont exécuter différentes taches (allumer la lumière, envoyer une notification avec ou sans capture, etc…)

Pour la gestion Nuit / Jour de la caméra : Les cam le gèrent très bien automatiquement, je n’y touche pas.
Gestion lumière blanche qui clignote : Je n’en ai pas, mais c’est pas le plus important dans ton cas.

L’avantage de ne pas passer par un plugin (de tout faire via des commande API) est ne pas dépendre d’un plugin qui ne sera pas forcément suivi.
L’avantage d’avoir un NAS est de ne pas avoir les enregistrement dans la caméra (les cartes SD si tu active l’enregistrement en permanence vont vite usées, contrairement à un bon disque dur à plateau). Tu pourra également sécurisé tout ou partie des vidéo dans un cloud privé. Tu pourras coupé le lien externe de tes caméras qui ne sont pas le top de la sécurité vis à vis de l’extérieur (car ça oblige à ouvrir des port sur la box. Contrairement à Jeedom et un NAS).
L’inconvénient : Acheter un nas :slight_smile:

Voilà, je sais que ça répond pas directement à ta question, mais malheureusement, je ne pense pas qu’il y est de bonne réponse toute faite et pérenne à celle-ci…

Bonne journée.

1 « J'aime »

Merci pour ta réponse et je comprends tout à fait ta logique.

Pour l’instant je prefererai rester sur ma logique si possible pour deux raisons :

  • je base beaucoup d’action sur le status de mon alarme - je suis completement dépendant de leur plateforme et du plugin tier, ca sera forcément un probleme un jour, tu as raison. Mais du coup ça simplifierai l’ajout des caméras dans mon ecosysteme si je peux rester sur le meme model
  • comme indiqué j’ai une caméra qui s’allume et aussi qui a un haut parleur (pour alarme ou message d’alerte). Un calendrier fixe est trop contraignant, ca va pas me convenir mais j’avais quand meme l’intention d’utiliser cette fonctionnalité.

J’ai un peu avancé dans mes recherches, avec la fonction debug network de chrome (F12) je pense avoir trouvé ce qu’il faut modifier mais pour l’instant je n’y arrive pas encore, je ne sais pas si c’est ce que je change ou comment j’essaie de le changer qui ne marche pas.

PS: J’ai déja un NAS Syno (sur lequel Jeedom tourne et les video sont enregistrées).
PS2: Avec le plugin Hikvisionevent je récupere bien les alertes qui m’interessent, j’ai déjà des senarios en tete plus évolués mais pour l’instant j’utilise le bot de synochat pour m’envoyer un message instantané. Du coup pour l’instant je cherche plus a faire la modif via l’API en code (je suis pas sur que ce soit la meilleur méthode cela dit) que d’utiliser un plugin, mais en fait peu importe du moment que ca marche.

1 « J'aime »

Ca fonctionne enfin, c’est probablement pas beau comme code mais je verrai plus tard si ca peut etre mieux. Sans mettre l’intégralité du xml je n’ai pas réussi a le faire fonctionner. Si ca peut servir, c’est utilisé dans un sénario, block de type code.

function enableSmartEvent($cameraIP, $username, $password) {
    $url = "http://{$cameraIP}/ISAPI/Smart/FieldDetection/1";
    $headers = array(
        "Content-Type: application/xml"
    );

  $xmlData = '"1.0" encoding="UTF-8"?><FieldDetection xmlns="http://www.hikvision.com/ver20/XMLSchema" version="2.0">
<id>1</id>
<enabled>true</enabled>
<enableDualVca>true</enableDualVca>
<startTriggerTime>500</startTriggerTime>
<endTriggerTime>500</endTriggerTime>
<normalizedScreenSize>
<normalizedScreenWidth>1000</normalizedScreenWidth>
<normalizedScreenHeight>1000</normalizedScreenHeight>
</normalizedScreenSize>
<FieldDetectionRegionList size="4">
<FieldDetectionRegion xmlns="http://www.hikvision.com/ver20/XMLSchema" version="2.0">
<id>1</id>
<enabled>false</enabled>
<sensitivityLevel>70</sensitivityLevel>
<timeThreshold>0</timeThreshold>

<detectionTarget>human</detectionTarget>
<alarmConfidence opt="low,mediumLow,mediumHigh,high">mediumHigh</alarmConfidence>
<RegionCoordinatesList xmlns=""><RegionCoordinates><positionX>6</positionX><positionY>6</positionY></RegionCoordinates><RegionCoordinates><positionX>993</positionX><positionY>6</positionY></RegionCoordinates><RegionCoordinates><positionX>990</positionX><positionY>979</positionY></RegionCoordinates><RegionCoordinates><positionX>3</positionX><positionY>987</positionY></RegionCoordinates></RegionCoordinatesList></FieldDetectionRegion>
<FieldDetectionRegion xmlns="http://www.hikvision.com/ver20/XMLSchema" version="2.0">
<id>2</id>
<enabled>false</enabled>
<sensitivityLevel>50</sensitivityLevel>
<timeThreshold>0</timeThreshold>
<detectionTarget>human</detectionTarget>
<alarmConfidence opt="low,mediumLow,mediumHigh,high">low</alarmConfidence>
<RegionCoordinatesList xmlns=""/></FieldDetectionRegion>
<FieldDetectionRegion xmlns="http://www.hikvision.com/ver20/XMLSchema" version="2.0">
<id>3</id>
<enabled>false</enabled>
<sensitivityLevel>50</sensitivityLevel>
<timeThreshold>0</timeThreshold>
<detectionTarget>human</detectionTarget>
<alarmConfidence opt="low,mediumLow,mediumHigh,high">low</alarmConfidence>
<RegionCoordinatesList xmlns=""/></FieldDetectionRegion>
<FieldDetectionRegion xmlns="http://www.hikvision.com/ver20/XMLSchema" version="2.0">
<id>4</id>
<enabled>false</enabled>
<sensitivityLevel>50</sensitivityLevel>
<timeThreshold>0</timeThreshold>
<detectionTarget>human</detectionTarget>
<alarmConfidence opt="low,mediumLow,mediumHigh,high">low</alarmConfidence>
<RegionCoordinatesList xmlns=""/></FieldDetectionRegion>
</FieldDetectionRegionList>
<isSupportMultiScene>false</isSupportMultiScene>
<isSupportHumanMisinfoFilter>true</isSupportHumanMisinfoFilter>
<isSupportVehicleMisinfoFilter>true</isSupportVehicleMisinfoFilter>
</FieldDetection>';


    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_USERPWD, "{$username}:{$password}");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);

    $response = curl_exec($ch);
    $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  
    curl_close($ch);
}



// Exemple d'utilisation
$cameraIP1 = "192.168.1.70"; // Remplacez par l'adresse IP de votre caméra
$cameraIP2 = "192.168.1.64"; // Remplacez par l'adresse IP de votre caméra
$username = "login"; // Remplacez par le nom d'utilisateur de votre caméra
$password = "password"; // Remplacez par le mot de passe de votre caméra


// Activer l'événement intelligent
enableSmartEvent($cameraIP1, $username, $password);
// enableSmartEvent($cameraIP2, $username, $password);

<id>1</id>
<enabled>true</enabled>

Il faut modifier true par false pour desactiver

Pour la partie image c’est aussi possible :

function ImageMode($cameraIP, $username, $password) {
    $url = "http://{$cameraIP}/ISAPI/Image/channels/1/mountingScenario";
    $headers = array(
        "Content-Type: application/xml"
    );

  $xmlData = '<MountingScenario xmlns="http://www.hikvision.com/ver20/XMLSchema "version="2.0">
<mode>normal</mode>
</MountingScenario>
';


    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_USERPWD, "{$username}:{$password}");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);

    $response = curl_exec($ch);
    $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  
    curl_close($ch);
}



// Exemple d'utilisation
$cameraIP = "192.168.1.70"; // Remplacez par l'adresse IP de votre caméra
$username = "login"; // Remplacez par le nom d'utilisateur de votre caméra
$password = "password"; // Remplacez par le mot de passe de votre caméra


ImageMode($cameraIP, $username, $password);

liste des modes possibles :
« normal,backlight,frontlight,lowIllumination,custom1,custom2 »

3 « J'aime »