Bonjour,
Super boulot…
J’arrive bien a ouvrir et fermer la caméra et éteindre et allumer la LED. Cependant je n’arrive pas a activer/désactiver la détection de mouvement ( ni la détection d’humanoïde ! ) Auriez vous une idée de ce que je rate ?
Le modèle est « Rex 3D 3MP »
Bonjour,
on dirait que ça avance un peu, mais hélas, un peu compliqué pour moi.
Est-ce que quelqu’un pourrait me dire si c’est possible de piloter les mouvements de la caméra à l’aide d’une commande envoyée par jeedom? Quelle serai(en)t-elle(s)?
Et positionner 1, 2 ou 3 PTZ.
Bonjour,
merci beaucoup pour ce code !
par contre je n’arrive pas à trouver une info :
comment récupérer l’info quand la caméra a détecté un mouvement ?
Bonjour, je dispose de camera IMOU que je souhaiterais intégrer de votre façon. Mais étant très débutant je n’arrive pas à recréer vos scripts.
Pourriez-vous me dire de comment vous remplissez les champs dans le plugin script.
Merci d’avance.
Pas besoin du plugin script. Le plus simple est de créer un virtuel pour chaque caméra et de mettre le script PHP de @ripod dans un bloc code d’un scénario. Ça fonctionne tel quel.
J’ai légèrement adapté le script pour :
– récupérer le deviceID et le campass de la caméra qui déclenche le scénario ;
– lancer la commande virtuelle cacher, montrer, redémarrer la caméra ;
– déplacer la vue vers le haut, bas, droite ou gauche…
Ce dernier point est moyennement utilisable compte tenu de la latence.
Avec juste deux scénarii, un pour cacher/montrer et l’autre pour le PT sans le Z car mes cameras ne le gèrent pas, je peux gérer autant de cameras que je veux.
Je vais essayer de détailler tout ça de façon claire durant le weekend.
Tout d’abord, merci à @ripod qui a fourni l’essentiel du code utilisé ici, je me suis contenté d’adapter cela à mes besoins propres. Il est possible d’ajouter certaines fonctionnalités de l’API en fonction des besoins. Notamment, dans mon implémentation il est facile, depuis l’app téléphone ou pécé, de modifier l’état d’une caméra sans que cela ne soit remonté dans Jeedom. Dans l’idéal, il faudrait interroger l’API pour connaitre l’état de la caméra et le répercuter dans Jeedom. Cela ne correspondait pas à mes besoins immédiats mais reste envisageable pour une prochaine évolution.
Pour la vidéo, les cameras sont installées dans le plugin-camera.
Dans le plugin-virtual créer un virtuel nommé imouApi avec deux infos texte/autre : appId et appSecret. Ce virtuel doit être placé dans une pièce/objet nommée Système pour être retrouvé par les scripts (ce serait à améliorer pour retrouver ce virtuel peu importe l’objet dans lequel il est rangé…)
Créer ensuite un virtuel pour chaque camera (le plus simple étant d’en créer un puis de le dupliquer et changer le peu qui doit l’être) avec :
— deux infos texte/autre nommées deviceID et CamPass (le nom doit être respecté y compris la casse car utilisé pour retrouver les infos dans le scenario). Elles doivent être renseignées avec les valeurs propres à la caméra ;
— deux infos numériques nommées state et move (en minuscules idem ci-dessus) ;
— trois commandes action/défaut modifiant l’info state et nommées on, off et reboot (le nom a normalement moins de contraintes car non utilisé dans le scenario) ;
Le scenario comprend un unique bloc code dans lequel il faut coller le script de @ripod légèrement modifié :
— au début, je récupère l’objet qui a déclenché le scénario ainsi que ses différentes informations (cdeviceId et camPass) et la valeur de state ou move selon le scenario) :
$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger());
$cmd = cmd::byString($trigger);
$cmd_mame = $cmd->getName();
$eqLogicName = $cmd->getEqLogic()->getName();
$eqLogic = eqLogic::byId($cmd->getEqLogic()->getId());
$object = $eqLogic->getObject()->getName();
$cmd_value = $cmd->execCmd();
//$scenario->setLog($object); // nom de l'objet
//$scenario->setLog($eqLogicName); // nom de l'équipement
//$scenario->setLog($cmd_mame); // nom de la commande Info
//$scenario->setLog($cmd_value); // valeur de la commande Info
$deviceId=cmd::byString("#[$object][$eqLogicName][deviceID]#")->execCmd();
$camPass=cmd::byString("#[$object][$eqLogicName][CamPass]#")->execCmd();
//$scenario->setLog(cmd::byString("#[$object][$eqLogicName][deviceID]#")->execCmd());
$appId=cmd::byString("#[Système][imouApi][appId]#")->execCmd();
$appSecret=cmd::byString("#[Système][imouApi][appSecret]#")->execCmd();
$deviceID=$deviceId;
$CamPass=$camPass;
$SubAccount="12345674567";
$APIurl = 'https://openapi-fk.easy4ip.com:443/openapi/';
et plus loin (ligne 173 et suivantes) :
switch ($cmd_value) { // Selon la valeur de la commande qui a déclenché...
case 0: // Cache l'objectif
$url = $APIurl.'setDeviceCameraStatus' ;
$params = [
'enableType'=>'closeCamera',
'enable'=>true,
'deviceId'=>$deviceID,
'channelId'=>'0',
'token'=>$openidToken
];
break;
case 1: // Active l'objectif
$url = $APIurl.'setDeviceCameraStatus' ;
$params = [
'enableType'=>'closeCamera',
'enable'=>false,
'deviceId'=>$deviceID,
'channelId'=>'0',
'token'=>$openidToken
];
break;
case -1: // Reboot la caméro
$url = $APIurl.'restartDevice' ;
$params = [
// 'enableType'=>'closeCamera',
// 'enable'=>true,
'deviceId'=>$deviceID,
// 'channelId'=>'0',
'token'=>$openidToken
];
break;
}
$system = CreatSystemParams ($appId,$appSecret);
Pour les mouvements de caméra, créer un deuxième scenario avec comme déclencheur les changements des informations move des cameras :
Les modifications par rapport au script d’@ripod sont aux mêmes endroits.
Les déplacements de caméra sont quand même très lents (plusieurs longues secondes), j’ai réglé la variable vitesse à 250 ms qui m’a semblé correspondre à la réactivité que je pouvais supporter, cela peut être réglé directement dans le code PHP : $vitesse=250; // durée du mouvement en millisecondes
Dans le cas du redémarrage de la caméra, afin d’avoir un affichage correct de l’état (voir widget plus loin) dans Jeedom, j’ai ajouté une remise à 1 au bout d’une minute quand state est forcé à -1 :
La dernière ligne, <i class='icon kiko-reload-arrow icon_orange flashes'></i>, flashes est la reprise de @Phpvarious dans ce post.
Je me sers essentiellement des commandes d’activation/désactivation de certaines caméras en fonction des personnes présentes ou non dans la maison plugin-networks ou quand la caméra n° 5 n’affiche plus rien (c’est la seule à qui cela arrive) pour la redémarrer…
Dans mon design principal j’ajoute juste la commande state pour chaque caméra, avec ouverture au survol de l’équipement virtuel de la camera, cela donne :
ou
Bonsoir,
merci beaucoup pour ce tuto et le travail réalisé. Pour qu’il fonctionne chez moi il faut que je renseigne appID et appSecret directement dans le script.
Je vais essayer de mettre en place un scénario pour que les caméras s’activent et se désactivent avec le statut de l’alarme.
Grace à vous, je peux commander mes caméras de la marque IMOU en fonction de l’état de mon alarme. Juste si on veut contrôler plusieurs caméras dans un scénario, bien penser à mettre un « sleep » entre chaque action de caméra car sinon seule la première commande est envoyée.
Ça ne changera pas fondamentalement le fonctionnement ni la vitesse d’exécution. Mais dans un scénario plus complexe ça permet une meilleure lisibilité.