Envoyer une image via pushBullet en lien avec une caméra

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.

Screenshot_20211012-160324_Pushbullet

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 :stuck_out_tongue:
  • Une caméra de surveillance est également installée dans le jardin avec une vue sur la porte d’entrée :male_detective:
  • 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 :wink:

Bonjour,

Je viens de faire la meme chose que toi mais avec telegram.

Petite question car je connais pushbullet que de nom. Tu recois ca sous quelle forme dans ton téléphone? notif ? mms ?

Merci

Bonjour,

Je reçois en mode notif. Pour moi l’intérêt de ce service (sans préjuger des autres similaires, puisque je ne les ai pas testés) c’est sa fiabilité. Je n’ai jamais remarqué de panne sur leurs serveurs et les notif / envoie de fichiers se font très rapidement. Le service existe également depuis près de 10ans.

Ta question m’a du coup fais regarder si pushBullet peut également envoyer des mms, et apparemment il le fait depuis 2016, en plus c’est gratuit avec une limite de 100/mois. Comme je n’ai pas de forfait Internet sur mon téléphone je vais regarder, car ça me sera fort utile :wink:

Ok, c’est bon a savoir.

Du coup pour info sur télégram c’est beaucoup plus simple mais ca fait ajouté une appli sur le tel.

Pas besoin de script, juste mettre l’api et puis ca envoi tout seul le fichier de la caméra.

Si tu veux un screen dit moi.

Oui ça m’intéresse :slight_smile:
Je vais regarder attentivement ce service, j’en entend souvent parler depuis quelques années. Tu es satisfait de sa fiabilité/temps de réponse ?

Alors je l’utilise que depuis 2/3 jours. Et pour l’instant ca fonctionne très bien. Pas de config a faire a par le token comme je t’ai dit.

Et pour le scénario tu as juste une ligne a faire ( celle du haut).

J’ai rajouté une autre ligne pour qu’en plus de la photo de la caméra ca me met le lien externe de mon motioneye pour avoir acces a ma caméra en un clic. ( deuxieme ligne).

Et le reste c’est un jeu de lumière pour quand je suis dans ma salle gaming et de son pour bien entendre quand ca sonne.

Juste une petite précision car ca marchait pas au début, il faut pas mettre la capture ou le snapshot mais bien un enregistrement sinon tu as pas la possibilité de l’envoyé.

Bonjour,
j’utilise depuis plusieurs années le plugin pushbullet pour m’envoyer des photos sur evenement. Et depuis tres recemment (le 4 Fevrier), j’ai une erreur lors de l’upload de la photo en lui meme.

Le premier appel a https://api.pushbullet.com/v2/upload-request se passe bien, et me retourne bien l’URL d’upload a utiliser etc.
En revanche lors de l’appel a https://upload.pushbullet.com/upload-legacy/… pour effectivement faire cet upload, alors la j’ai une curl error 22 et l’upload n’a pas lieu.

Est-ce que quelqu’un a le meme probleme?