Suite à la nouvelle version sortie hier par notre ami @nebz, des modifications sont apparu pour la partie Camera.
Je vous invite à lire le changelog si ce n’est pas encore fait : https://nebzhb.github.io/jeedom_docs/plugins/homebridge/fr_FR/changelog
Dans ce tutoriel, nous allons voir comment mettre en place la réception de notifications dans l’application Apple Maison lors d’une detection par une détecteur de mouvement.
Merci de bien lire la procédure, tout est indiqué. Si vous faites mal une étape, cela ne fonctionne pas.
Pré-requis :
- Une ou plusieurs caméras intégré à Homebridge (https://nebzhb.github.io/jeedom_docs/plugins/homebridge/fr_FR/#tocAnchor-1-40-11)
- Un ou plusieurs détecteurs de mouvement intégré à Jeedom (pas besoin qu’il soit dans Homebridge)
- iPhone >= iOS 13
1/ Configuration dans Homebridge
-
Aller dans la configuration du plugin Homebridge
-
Ouvrir « Plateforme Homebridge supplémentaire » qui doit contenir entre autre vos caméras
-
Définir le port sur lequel Motion va écouter (dans mon exemple le port 36333) au niveau de la plateforme - Penser a verifier que le port que vous choisissez n’est pas déjà utiliser avec la commande (en root) netstat -natp | grep « :36333 »
-
Configurer pour chaque camera souhaité, le motion (true) et le motionTimeout (1). Vous pouvez configurer le doorbell (true) si votre caméra agit comme un portier video.
-
Sauvegardez les changements et relancer le démon.
2/ Activation des notifications sur vos caméras
-
Lancer Apple Maison
-
Aller sur la/les cameras souhaité
-
Aller dans la configuration de la caméra (roue crantée)
-
Aller dans notification et activez les
3/ Informer Homebridge des mouvements détectés
Une version alternative existe pour faire un scénario par caméra, plus simple a appréhender pour certain : TUTO - Comment intégrer la detection de mouvement dans Homebridge? - #2 par mguyard
Maintenant il faut que votre détecteur de mouvement configuré dans Jeedom, alerte Homebridge qu’un mouvement a était détecté.
Pour cela, nous allons utilisé un scénario qui utilisera votre commande de detection de mouvement comme déclencheur.
- Créé un nouveau Scenario au nom de votre choix.
- Autoriser le multi-lancement (utile si vous pouvez avoir plusieurs détecteurs de mouvement qui se déclencherais en même temps)
- Mettre le mode de scénario en Provoqué
- Spécifier toutes les commandes de vos détecteurs de mouvement (que vous souhaitez utiliser conjointement avec vos caméras) dans les déclencheurs.
Vous pouvez a ce niveau filter la valeur qui déclenchera le scénario
Exemple : #[Camera][Portail][Notifications]# == 1
- Aller dans le scénario et créé un bloc code avec le bouton « Ajouter bloc » en haut à droite
- Remplir le bloc code avec le contenu ci-dessous
// Author : Marc GUYARD (mguyard)
// Version : 1.1
// Date : 20201108
// Fonction : Lancer des notifications sur detection de mouvement vers les camera Homebridge
// Indiquez le port que vous avez configuré dans la plateforme Homebridge
$motionPort="36333";
// Crée la relation entre le detecteur et la caméra
// La partie avant => correspond au nom du détecteur dans Jeedom (qui est aussi le déclencheur du scénario)
// La partie après => correspond au nom de la caméra dans la plateforme Homebridge (avec les options motion et doorbell)
$detecteurToCamera = array(
'Portail' => array(
'camName' => 'Caméra Portail',
'motion' => true,
'doorbell' => true
),
'Terrasse' => array (
'camName' => 'Caméra Terrasse',
'motion' => true,
'doorbell' => true
)
);
/* -------------------------------------------------------------------------- */
/* NE PAS TOUCHER APRES CETTE LIGNE SANS SAVOIR EXACTEMENT CE QUE VOUS FAITES */
/* -------------------------------------------------------------------------- */
// Recupère la commande TRIGGER (déclenchant le scénario)
$cmd = cmd::byId(str_replace('#', '', $scenario->getRealTrigger()));
$scenario->setLog("Trigger = ".$cmd->getHumanName());
// Recupère la valeur du trigger
$triggerValue = $cmd->execCmd();
$scenario->setLog("Trigger Value = ".$triggerValue);
// Recupère l'ID de l'équipement associé a la commande TRIGGER
$eqLogicId = $cmd->getEqLogic_id();
$eqLogic = eqLogic::byId($eqLogicId);
$detectorName = $eqLogic->getName();
$scenario->setLog("Equipement = ".$detectorName."(".$eqLogic->getId().")");
// Verifie que le detecteur est associé à une camera
if (isset($detecteurToCamera[$detectorName]) && is_array($detecteurToCamera[$detectorName])) {
$cameraName = $detecteurToCamera[$detectorName]['camName'];
$scenario->setLog("La caméra HomeBridge notifié est '".$cameraName."'");
// Lancement de la notification version HomeBridge
if ($detecteurToCamera[$detectorName]['motion']) {
$callMotionURL = "http://localhost:".$motionPort."/motion?".rawurlencode($cameraName);
call($scenario, $callMotionURL);
}
if ($detecteurToCamera[$detectorName]['doorbell']) {
$callDoorbellURL = "http://localhost:".$motionPort."/doorbell?".rawurlencode($cameraName);
call($scenario, $callDoorbellURL);
}
} else {
$scenario->setLog("Aucune caméra trouvée pour le déclencheur '".$detectorName."'");
}
// Fonction d'appel Homebridge
function call($scenario, $callURL) {
$scenario->setLog("URL called : ".$callURL);
$motionCall = curl_init();
curl_setopt($motionCall, CURLOPT_URL, $callURL);
curl_setopt($motionCall, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($motionCall, CURLOPT_TIMEOUT, 15);
curl_setopt($motionCall, CURLOPT_CONNECTTIMEOUT, 15);
$motionCallReturn = curl_exec($motionCall);
$motionCallHTTPCode = curl_getinfo($motionCall, CURLINFO_HTTP_CODE);
curl_close($motionCall);
// Retourne le résultat dans le log du scénario
if($motionCallHTTPCode == 200) {
$scenario->setLog("Homebridge a validé la demande : '".$motionCallReturn."'");
} else {
$scenario->setLog("/!\ ERROR : Homebridge a répondu '".$motionCallReturn."' avec code de retour HTTP ".$motionCallHTTPCode);
}
}
Le code peut sembler complexe (hein @nebz ) mais il est prévu pour gérer dans un seul scénario toutes vos détecteurs/cameras. Vous pouvez bien évidement faire autrement. Mais celui-ci ne nécessite que peut de changement pour fonctionner.
Les seule choses à modifier sont :
- La variable $motionPort (ligne 7) : Indiquer le port que vous avez configuré dans l’étape 1.3
- Le tableau $detecteurToCamera
Le tableau $detecteurToCamera est dans ce format :
'NomDuDetecteur' => array( 'camName' => 'NomDeLaCamera', 'motion' => true, 'doorbell' => true )
Il est important d’avoir une virgule entre 2 déclarations de détecteur.
Dans le cas d’une camera seulement :$detecteurToCamera = array( 'Portail' => array( 'camName' => 'Caméra Portail', 'motion' => true, 'doorbell' => true ) // Pas de virgule ici );
Pour 3 caméras :
$detecteurToCamera = array( 'Portail' => array( 'camName' => 'Caméra Portail', 'motion' => true, 'doorbell' => true ), // Virgule ici 'Terrasse' => array ( 'camName' => 'Caméra Terrasse', 'motion' => true, 'doorbell' => false ), // Virgule ici 'Patio' => array ( 'camName' => 'Caméra Patio', 'motion' => true, 'doorbell' => false ) // Pas de virgule ici );
Pour activer les notifications Motion d’une camera, le motion doit être à true, false dans le cas contraire
Pour activer les notifications Doorbell d’une camera, le doorbell doit être à true, false dans le cas contraire
4/ Test
Passer devant votre détecteur et vous devriez recevoir une notification (ou 2 si vous avez activé motion et doorbell)
et en restant appuyé sur la notification, vous voyez la capture effectuée (si vous cliquez sur la capture vous affichez le live de la caméra).
Dans le cas du Doorbell, vous pouvez aussi voir la notification sur votre AppleTV et avoir un carillon sur votre HomePod
Le scénario génère des logs.
Avant de dire « Ca marche pas à l’aide », regardez les logs et analysez le.Exemple de log qui marche :
[2020-11-10 12:32:09][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Camera][Portail][Notifications]. [2020-11-10 12:32:09][SCENARIO] Exécution du sous-élément de type [action] : code [2020-11-10 12:32:09][SCENARIO] Exécution d'un bloc code [2020-11-10 12:32:09][SCENARIO] Trigger = [Camera][Portail][Notifications] [2020-11-10 12:32:09][SCENARIO] Trigger Value = NOC-movement [2020-11-10 12:32:09][SCENARIO] Equipement = Portail(159) [2020-11-10 12:32:09][SCENARIO] La caméra HomeBridge notifié est 'Caméra Portail' [2020-11-10 12:32:09][SCENARIO] URL called : http://localhost:36333/motion?Cam%C3%A9ra%20Portail [2020-11-10 12:32:09][SCENARIO] Homebridge a validé la demande : 'Motion switched on.' [2020-11-10 12:32:09][SCENARIO] URL called : http://localhost:36333/doorbell?Cam%C3%A9ra%20Portail [2020-11-10 12:32:09][SCENARIO] Homebridge a validé la demande : 'Doorbell switched on.' [2020-11-10 12:32:09][SCENARIO] Fin correcte du scénario
ET VOILA !!!