Présence Maison

Domoticz : script de détection de présence en LUA

Bonjour à tous !

Aujourd’hui je vais vous présenter un petit script qui permet de détecter la présence des individus de votre maison à partir de la détection de leur téléphone. Je tiens à préciser que je ne suis pas développeur, il y a donc sûrement moyen de rendre le script plus « beau », si vous avez des idées, pistes, liens : n’hésitez pas à poster un commentaire :)

Détection de présence : explication du principe

Le principe est assez simple. Je détermine si il y a quelqu’un chez moi en me basant sur la présence des périphériques connectés au réseau Wifi. Si on arrive à les trouver à l’aide de la commande ‘ping’, il y a quelqu’un sinon … ben il n’y a personne.

Afin d’éviter les faux « négatifs » (personne à la maison parce que l’on est en dehors de la portée du wifi), j’ai introduit une tolérance de 30 minutes.

Bon allé, assez parlé, je vous explique comment faire.

 

Etape 1 : Déclaration des périphériques

Pour commencer, j’ai fixé les adresses ip des téléphones à l’aide de ma freebox. Pour cela, il faut se rendre dans l’admin de votre freebox en utilisant l’adresse http://mafreebox.free.fr puis choisir l’icône

Paramètres de la freebox

Paramètres de la freebox.

Rendez-vous ensuite dans l’onglet « Mode avancé » puis choisissez l’icone « DHCP » de la section « Réseau local ».

Paramètres avancés

Paramètres avancés

Choisissez alors l’onglet « Baux statiques » puis « Ajouter un bail DHCP Statique ».

Vous devez ensuite remplir les champs de l’interface en précisant :

  • l’adresse MAC de votre appareil, pour cela, utilisez le menu déroulant
  • l’adresse ip qui sera votre adresse permanente
  • le champ commentaire afin de donner un nom à votre appareil pour le reconnaître sur votre interface d’administration (non obligatoire).
Bail DHCP Statique

Bail DHCP Statique

Voilà, répétez cette opération pour l’ensemble de vos appareils (téléphone de chacun des habitants, tablettes…) et on peut ensuite passer à la suite ! :)

Etape 2 : Création du périphérique virtuel dans Domoticz

Afin de représenter la présence dans la maison, j’utilise un périphérique virtuel qui change d’état à l’aide d’un script LUA. Avant de passer à la partie script, je vais donc vous détailler les étapes pour même en place le périphérique virtuel.

La création du périphérique se fait en deux étapes :

  1. Création du périphérique :
    Choisir le menu « Configuration » puis « Matériel ». Une fois sur la page des matériels, rendez-vous en bas de celle-ci pour remplir le formulaire en saisissant les informations suivantes :
    – Nom : nom de votre périphérique
    – Type : choisir ici « Dummy (does nothing, use for virtual switches only) »
    – Délais d’attente des données : « Désactiver »
    Puis cliquez sur « Ajouter »

    Création du périphérique virtuel

    Création du périphérique virtuel

  2. Ajout de l’indicateur dans l’interface de domoticz :
    Choisir le menu « Interrupteur », puis cliquez sur le bouton « AJout manuel » en haut à gauche de la page puis remplissez les informations suivantes :
    – Hardware : Utilisez le menu déroulant pour retrouver le périphérique précédemment créé (normalement c’est le dernier de la liste)
    – Name : choisissez le nom de l’indicateur, c’est aussi le nom de l’on utilisera dans le script LUA
    – Switch Type : « On/Off »
    Laissez lerestedesinformationsavec leur valeur par défaut

    Ajout Manuel du périphérique

    Ajout Manuel du périphérique

     

    Voilà ! Nous pouvons maintenant passer à la suite : la création de la variable utilisateur « last_ping ».

Etape 3 : Création de la variable utilisateur représentant le temps depuis le dernier ping « OK ».

Pour créer une variable utilisateur, il faut choisir le menu « Configuration » puis « Plus d’options » et enfin « Variables utilisateur ».

Une fois sur la page, remplissez le formulaire qui se trouve en bas, puis cliquez sur « Ajouter ».

Déclaration de la variable utilisateur "last_ping"

Déclaration de la variable utilisateur « last_ping »

Et voila 😉 on en a fini avec les étapes de déclaration. Passons maintenant à la partie script.

Etape 4 : Ecriture du script LUA

Allé hop, nous rentrons maintenant dans le vif du sujet : l’écriture du script LUA. Si vous n’avez jamais entendu parler de LUA, je vous invite à parcourir ce site que j’ai trouvé assez complet pour débuter : http://lua.gts-stolberg.de/fr/index.php.

Bon, je vais essayer de vous expliquer ce que j’ai fait… euh non 😉 j’espère qu’avec les commentaires vous comprendrez et si vous ne comprenez pas un truc …. demandez en commentaire :)

Le script est nommé : script_time_PRESENCE_MAISON.lua pour être déclenché toutes les minutes. En effet, avec la solution Domoticz, les scripts doivent :

  1. être placé dans le répertoire « scripts/lua » du répertoire domoticz
  2. être nommés :
    1. script_time_XXXXXX.lua (pour être lancé toutes les minutes)
    2. script_event_XXXXXXX.lua (à chaque changement d’état. Dans ce cas, attention à bien tester le changement d’état de votre périphérique)

Voili voilou :)

Allé hop, c’est parti, voici le code :

 

Pour aller plus loin

Pour aller plus loin, on peut imaginer maintenant de commander de façon un peu plus pointue les autres périphériques de la maison.

On peut désormais imaginer commander les volets roulant pour minimiser les effets de la chaleur l’été.

On peut aussi penser à commander automatiquement l’envoie de notifications si on est parti depuis trop longtemps sans passer en mode vacance ou encore le passage dans le mode en automatique.

 

Comme d’hab, si vous avez des questions, remarques, ou encore précisions à apporter, n’hésitez pas à laisser un commentaire !

 

25 réflexions au sujet de « Domoticz : script de détection de présence en LUA »

  1. Minos

    Hello,

    ça fait 2 jours que j’essaie de me dépatouillé de cette erreur ( la même que netstf…) :

    2016-09-19 19:00:00.203 Error: EventSystem: in /usr/local/domoticz/var/scripts/lua/script_time_PRESENCE_MAISON.lua: …domoticz/var/scripts/lua/script_time_PRESENCE_MAISON.lua:17: unexpected symbol near char(160)

    Avez-vous une idée ,

    j ‘ai copié/collé dans plusieurs éditeurs …mais rien y fait …!!

    Répondre
  2. Dessy

    You got this script in english? I can figure out what to do translating this page, but the comments inside the script don’t translate well. So I have no idea where to change values

    Répondre
  3. faipassa

    Merci pour ce script. Malheureusement, après quelques tests, il s’avère que même si les baux restent actifs sur la freebox, les devices (iphones dans mon cas) ne répondent plus au pring lorsqu’ils sont en veille. Du coup, le résultat reste hasardeux car la détection ne se fait que lorsque la personne utilise activement son smartphone.

    Ceci dit, c’était toujours sympa de pouvoir apprendre le lua avec cet exemple :-)

    Répondre
  4. thomas

    Bonjour,

    je suis debutant je ne comprends pas quels espaces doivent etre enlevées pour éviter l’erreur:
    “Error: EventSystem: …/pi/domoticz/scripts/lua/script_time_PRESENCE_MAISON.lua:17: unexpected symbol near char(194)”

    Merci

    Répondre
  5. JL Brenas

    Bonjour,
    Je débute sur Domoticz et n’y connait pas grand chose en script LUA.
    J’ai ce message dans le log
    : »Domoticz\scripts\lua\script_time_PRESENCE_MAISON.lua:55: attempt to concatenate local ‘device_presence’ (a nil value) »
    A quoi cela correspond ?
    Cordialement.

    Répondre
  6. netstf

    Bonjour , je rencontre un erreur sur le scripts :

    Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_presence.lua:17: unexpected symbol near char(160)

    Pouvez vous m orientez ? merci

    Répondre
    1. JL Brenas

      Bonjour,
      J’ai eu ce problème et celà venait du copier coller du site internet dans Notepad.
      En supprimant les espaces coller, le problème a été résolu.
      Cordialement.

      Répondre
  7. pat

    Bonjour et bravo pour votre travail et ce script !
    Meme ci celui ne fonctionne que partiellement chez moi.

    – En effet si je laisse « -c1″ (local string = ‘ping -c1 ‘..v.ip) , le smartphone (connecté) ne repond pas au ping.
    Alors que la detection du smartphone fonctionne bien sans le « -c1″ et allume l’interrupteur virtuel.

    – Et vice versa, sans « -c1″ l’absence du smartphone (deconnecté), n’est pas detecté par le script qui genere un message d’erreur (script_time_PRESENCE_MAISON.lua has been running for more than 10 seconds) et n’éteint pas l’interrupteur virtuel.

    c’est un casse tete…

    Merci d’avance a ceux qui ont une idée :)

    Répondre
    1. Hervé

      Oui, test ceci :
      Remplace -c1 par -w1 et voit ce qui ce passe, normalement tu ne devrais plus recevoir de message d’erreur dans les log.

      Répondre
  8. jeanluc

    Bonjour,

    Pouvez-vous m’éclairer sur ce message d’erreur dans le log Domoticz ?
    2016-01-24 18:23:10.461 Error: EventSystem: Warning!, lua script /home/pi/domoticz/scripts/lua/script_time_PRESENCE_MAISON.lua has been running for more than 10 seconds

    En vous remerciant par avance pour votre aide.

    Cordialement

    Répondre
  9. shadow

    Bonjour,
    est-il possible avec ce même script LUA, contrôler la présence de 2 smartphones, avec des boutons virtuels pour chaque smartphone. si le smartphone 1 est détecté via le ping, c le bouton virtuel smartphone 1 qui s’allume. ou le contraire. tout en gardant la latence de 30mn.
    car un script par smartphone, génère beaucoup de log.
    merci

    Répondre
  10. Shadow

    Bonsoir,
    j’essaie depuis 3 jour a faire fonctionner ce script, mais ce dernier me remonte un message d’erreur (log)
    « Error: EventSystem: …/pi/domoticz/scripts/lua/script_time_PRESENCE_MAISON.lua:17: unexpected symbol near char(194) », en desactivant ces lignes directement dans le script, j’ai une autre erreur a la ligne 42 ensuite 68. je n’ai modifié que l’IP,!!!
    merci pour votre aide.

    Répondre
  11. Jay

    Je débute sur Domoticz et n’y connait pas grand chose en script LUA.
    J’ai ce message dans le log : script_time_PRESENCE_MAISON.lua:55: attempt to concatenate local ‘device_presence’ (a nil value)
    Sais-tu ou j’ai loupé quelque chose ?

    Répondre
      1. Jeee

        J’ai rencontré le même souci que Jay. Et effectivement Drabo, le souci était bien sur le virtual switch. Il fallait pour mon cas (Domoticz sur Synology) « simplement » changer manuellement au moins une fois le statut du virtual switch (indicateur) de présence (PRESENCE_MAISON) (positionner à on ou off via Domoticz). Je suppose qu’à la création le virtual switch n’a pas de statut exploitable (ni on, ni off) et que donc le script ne peut l’exploiter.
        Merci à vous.

        Répondre
  12. Ping : Domoticz : Automatiser la gestion des volets roulants en LUA - Debrouil'Home

  13. beuz33

    Bonjour,
    merci pour ce script, ça fait plusieurs scripts que j’essai de faire pour « pinger » mon téléphone, mais tous y compris le tiens ne voit pas le téléphone en continu, je voulais savoir si tu rencontrai aussi le problème et au cas ou si tu avais une solution.

    merci

    Répondre
    1. Bast' Auteur de l’article

      Salut !

      Je pense que ça vient de ton téléphone qui doit couper le wifi quand il est en veille. Essaie de regarder de ce coté là :)

      A bientôt j’espère !

      Bast’

      Répondre
  14. Farese Vito

    Bonjour et merci pour le tuto. Etant nouveau dans la domotique et entre autre Linux, mais ayant des connaissances en programmation, je n’arrive pas à trouver la manière de pouvoir exécuter le script LUA. Je sais qu’il faut mettre le programme dans domoticz..lua mais comment lancer ce script dans domoticz.
    merci pour votre réponse

    V.Farese

    Répondre
    1. Bast' Auteur de l’article

      Bonjour et merci pour votre commentaire !
      En effet je n’avais pas détaillé ce point et voilà qui est maintenant fait. Je viens d’éditer l’article pour ajouter :
      Le script est nommé : script_time_PRESENCE_MAISON.lua pour être déclenché toutes les minutes. En effet, avec la solution Domoticz, les scripts doivent :
      * être placé dans le répertoire « scripts/lua » du répertoire domoticz
      * être nommés :
      * script_time_XXXXXX.lua (pour être lancé toutes les minutes)
      * script_event_XXXXXXX.lua (à chaque changement d’état. Dans ce cas, attention à bien tester le changement d’état de votre périphérique)
      Voili voilou :)

      Répondre
  15. aris

    Bonjour,
    lien vers un vrai faux site domotique qui ne cache que des liens vers des sites marchands de télécommandes !! appartenant surement à l’auteur de ce post…. et ne parlant pas de domotique!

    et Merci pour vos partages d’expériences qui sont très utiles aux débutants et autres curieux , mais qui se font trop rares! on en veut d’autres!!!

    Aris

    Répondre
  16. Bast' Auteur de l’article

    Merci pour votre commentaire !
    Effectivement le commentaire précédent n’est pas approprié :( il vient d’être supprimé !

    A très bientôt j’espère :)

    Répondre

Répondre à Minos Annuler la réponse.

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">