Bonjour à tous,
Je vous propose un petit scénario afin d’envoyer via pushBullet une notification avec image sur votre téléphone. Lorsqu’une personne utilise la sonnette par exemple ou lorsqu’un mouvement est détecté. C’est un système fiable puisque je l’utilise depuis quelques années déjà sans problème.
Les équipements / prérequis :
- Chez moi, la sonnette est branchée sur un wallPlug Fibaro. Le scénario est lancé lorsque la puissance dépasse les 0.6 watts avec un temps mort de 30s, histoire de ne pas se faire spammer par sa propre sonnette
- Une caméra de surveillance est également installée dans le jardin avec une vue sur la porte d’entrée
- Un compte pushBullet avec le token pour utiliser leur service
- La machine qui exécute jeedom est sous Linux
Concrètement voici comment cela se présente pour le déclenchement du scénario :
La partie scénario pushBullet :
Il existe un plugin pushBullet dans le market mais celui-ci ne permet pas de joindre une image, il faut donc créer un block code dans le scénario.
L’idée est de récupérer l’image de la caméra depuis la machine qui exécute jeedom et de la transférer dans un répertoire (chez moi /tmp/jeedom/) grâce à la commande Linux wget :
$wget = system('wget --http-user=admin --http-password=xxxxxxxxx -O '.$filePath.' -T 3 192.168.1.17/tmpfs/auto.jpg');
- Les identifiants user et password sont ceux de la caméra.
- 192.168.1.17/tmpfs/auto.jpg est l’url pour récupérer une image sur ma caméra. Cette partie est vraiment spécifique à mon matériel et il me semble que ce n’est pas ce qui se fait en général.
- -T 3 : Retente l’opération au maximum 3 fois
- Le scénario écrit des logs afin de faciliter le debuggage.
Le code au complet :
$pushBulletToken = 'o.fzx5oNLg2F3oFfIXXXXXXXXXXXXXXXXX';
$fileName = 'sonnette_'.date('YmdHis').'.jpg';
$filePath = '/tmp/jeedom/sonnette.jpg';
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//Recupere image depuis la camera
unlink($filePath);
$wget = system('wget --http-user=admin --http-password=xxxxxxxx-O '.$filePath.' -T 3 192.168.1.17/tmpfs/auto.jpg');
if (!is_readable($filePath)) {
$scenario->setLog($filePath.' n\'est pas accessible');
$post = json_encode(
[
'type' => 'note',
'title' => 'Sonnette a '.date('H:i'),
'body' => 'Utilisation de la sonnete le '.date('d-m-Y H:i')
]
);
$header = ['Content-Type: application/json', 'Access-Token: '.$pushBulletToken];
curl_setopt($curl, CURLOPT_URL, "https://api.pushbullet.com/v2/pushes");
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$return = curl_exec($curl);
$scenario->setLog('Return push: '.json_encode($return));
} else {
$mime = mime_content_type($filePath);
$scenario->setLog('mime: '.$mime);
//Params upload
$post = ['file_name' => $fileName, 'file_type' => $mime];
$header = ['Access-Token: '.$pushBulletToken];
curl_setopt($curl, CURLOPT_URL, "https://api.pushbullet.com/v2/upload-request");
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$return = curl_exec($curl);
$pushUpload = json_decode($return, true);
$scenario->setLog('Params upload: '.json_encode($pushUpload));
//Upload
$header = ['Content-Type: multipart/form-data'];
$cfile = curl_file_create($filePath);
$post = $pushUpload['data'];
$post['file'] = $cfile;
$scenario->setLog('Post upload: '.json_encode($post));
curl_setopt($curl, CURLOPT_URL, $pushUpload['upload_url']);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$return = curl_exec($curl);
$scenario->setLog('Return upload: '.json_encode($return));
//Push
$post = json_encode(
[
'type' => 'file',
'title' => 'Sonnette a '.date('H:i'),
'file_name' => $fileName,
'file_type' => $mime,
'file_url' => $pushUpload['file_url'],
'body' => 'Utilisation de la sonnete le '.date('d-m-Y H:i')
]
);
$header = ['Content-Type: application/json', 'Access-Token: '.$pushBulletToken];
curl_setopt($curl, CURLOPT_URL, "https://api.pushbullet.com/v2/pushes");
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$return = curl_exec($curl);
$scenario->setLog('Return push: '.json_encode($return));
}
curl_close($curl);
En dehors de ma propre utilisation en lien avec une sonnette + caméra, ça peut faire gagner pas mal de temps en évitant de regarder l’API de pushBullet.
Au plaisir