Domotique – proximité

L’objectif est de pouvoir utiliser l’information de proximité de personnes (via leurs smartphones qu’ils ne quittent jamais) dans des logiques domotiques (éteindre le chauffage ou la lumière lorsque l’on quitte l’appartement, faire des calculs de temps de trajet, etc).

Capture d’écran 2016-07-13 à 22.34.55

Le GPS (GeoFence)

Dans ce scénario, Une application (Pilot home par exemple) utilise le signal GPS reçu et si les coordonnées sont dans les environs (relativement large, 150m de rayon), une requête (http api rest) est envoyée sur la box domotique pour activer un switch virtuel.

Le problème est la fiabilité d’une part et la nécessite d’autre part de laisser le GPS allumé (batterie). Au niveau de la fiabilité, la requête peut être envoyée alors que la connectivité n’est pas bonne, dans le métro par exemple, étant donné que la précision n’est pas excellente (150m) . Aucune application ne propose de renvois récurrents à l’heure actuelle.

  • Précision: Faible
  • Fiabilité de l’information: Faible
  • Complexité mise en oeuvre: Simple
  • Consommation énergie: Elevée

Le WiFi

Dans ce scénario, un script (en python par exemple) sur la box ping l’IP attribuée au smartphone et s’il reçoit une réponse envoi une requête pour allumer le switch virtuel.

La précision est meilleure mais nécessite se laisser le wifi du smartphone allumé en permanence. Ce qui est problématique avec un iPhone convenons-en.

  • Précision: Bonne
  • Fiabilité de l’information: Faible
  • Complexité mise en oeuvre: Moyenne
  • Consommation énergie: Elevée

le ibeacon

Dans ce scénario, lorsque l’iPhone reçoit un ibeacon de la box domotique, une application envoi une requête à la box pour activer le switch virtuel.

Dans ce scénario le problème de la fiabilité de la transmission des données n’est plus car la précision est de quelques mètres. Aucun risque que la connectivité soit mauvaise 🙂

L’utilisation du iBeacon permettrait même de gérer des logiques à l’intérieur du logement (type allumer la lumière dans telle pièce en fonction de la force du signal reçu).

  • Précision: Bonne (qq mètres)
  • Fiabilité de l’information: Bonne
  • Complexité mise en oeuvre: Moyenne
  • Consommation énergie: Faible

La mise en place du ibeacon

Sur Raspberry

  • Une clé USB bluetooth 4.0 compatible (constructeur CSR par exemple)
  • Les librairies USB
  • La librairie Bluez

Les librairies USB sont déjà installées si domoticz est présent.

sudo mkdir bluez
cd bluez
sudo wget www.kernel.org/pub/linux/bluetooth/bluez-5.18.tar.gz
sudo gunzip bluez-5.18.tar.gz
sudo tar xvf bluez-5.18.tar
cd bluez-5.18
sudo ./configure --disable-systemd
sudo make
sudo make install
sudo shutdown -r now

Il convient ensuite de configurer les données transmisses par le iBeacon (son identifiant UUID notamment) en utilisation la commande suivante:

sudo tools/hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 00 4C 02 15 63 6F 3F 8F 64 91 4B EE 95 F7 D8 CC 64 A8 63 B5 00 00 00 00 C8

Les données sont au format suivant:

687474703a2f2f616a7265732e6769746875622e696f2f697369676e2d626c75657a2f697369676e7061796c6f61642e706e67

Sur l’iPhone

L’application Locative (iPhone) permet d’appeler directement une API web lors de l’entrée ou de la sortie d’un iBeacon. L’application iPhone “Pilot Home” devrait être capable de prendre en compte les iBeacon en version 1.7 ou 1.8 d’après son auteur.

L’utilisation de l’application IFTTT qui permet de déclencher des actions sur un trigger (le tout formant dans leur jargon “une recette”) aurait pu répondre à notre besoin mais aucun trigger n’existe pour la detection d’un broadcast iBeacon. L’action, grâce au module Maker Chanel eu été d’envoyer une requête sur l’API de domoticz.

Internet Of Things – Routage

Introduction

L’Internet of Thing défini tout ce qui tourne autour des réseaux de capteurs qui remontent des informations à des nœuds de décision qui peuvent à leur tour redescendre à d’autres capteurs des ordres (actions). L’Internet of Thing s’est démocratisé avec l’émergence des solutions de domotique basées sur les technologies sans fil simples à mettre en oeuvre.

D’une part la capillarité du réseau est très importante et l’utilisation du sans fil fait que la topologie est dynamique. D’autre part les capteurs et devices ont des capacités limitées en traitement de l’information (CPU, mémoire, alimentation Electrique). 

Les mécanismes d’échange d’information, de routage et de sécurité doivent être repensés en intégrant ces contraintes là. Nous allons nous intéresser ici au routage de l’information.

Read More

Domoticz – Caméra IP

Domoticz permet de gérer des caméras IP dans le cadre de la sécurité et permet nativement de prendre des snapshots lorsqu’un switch virtuel est allumé avec l’envoi en PJ de notification (push, mail, etc)

1- Configuration de la caméra

domo_cam

2- Attachement à un virtual Switch

switch_domo

3- Création d’un event pour allumer le virtual switch “Alarme” si un mouvement est détecté alors que le mode “alarme” est activé

event_alarm

Spécifications de la caméra

Pour ma part je suis parti sur la caméra IP Edimax IC-3115W qui possède les avantages suivants:

  • Wifi et Ethernet (Wifi désactivable)
  • Caméra commandable par API HTTP
    • Prise de screenshot
    • Configuration du motion detection
    • extinction de la LED de fonctionnement (pour feinter le malfrat)

Pour aller plus loin…

Domoticz permet seulement d’appeler une URL, d’enregistrer le screenshot et de l’envoyer en PJ lors d’une notification (par email).

Les API de la caméra permettent d’aller plus loin:

  • Envoi direct en FTP de screenshots
  • Détection de mouvements

Le guide de programmation API:

API_HTTP_EDIMAX_IPCAM.pdf

Bannière Linux personnalisée

Dans le fichier de profile /etc/profile de connexion au terminal il est possible de:

  • Definer les paths
  • Executer un script au demarrage de la session en précisant simplement son chemin: /usr/local/bin/welcome.sh par exemple

 

let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`

# get the load averages
read one five fifteen rest < /proc/loadavg

echo "$(tput setaf 2)
.~~. .~~. `date +"%A, %e %B %Y, %r"`
'. \ ' ' / .' `uname -srmo`$(tput setaf 1)
.~ .~~~..~.
: .~.'~'.~. : Uptime.............: ${UPTIME}
~ ( ) ( ) ~ Memory.............: `cat /proc/meminfo | grep MemFree | awk {'print $2'}`kB (Free) / `cat /proc/meminfo | grep MemTotal | awk {'print $2'}`kB (Total)
( : '~'.~.'~' : ) Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
~ .~ ( ) ~. ~ Running Processes..: `ps ax | wc -l | tr -d " "`
( : '~' : ) Domoticz status....: `ps ax | grep domotics | wc -l | tr -d " "`
'~ .~~~. ~' SSH failure attempt: `cat /var/log/auth.log | grep sshd | grep -a Failed | grep -va "for pi" | wc -l`
'~'
$(tput sgr0)"

Resultat

Linux domoticzpi 3.12.35+ #730 PREEMPT Fri Dec 19 18:31:24 GMT 2014 armv6l
Last login: Tue Jul 28 15:18:50 2015 from 80.215.228.135

   .~~.   .~~.    Friday, 31 July 2015, 08:11:39 PM
  '. \ ' ' / .'   Linux 3.12.35+ armv6l GNU/Linux
   .~ .~~~..~.    
  : .~.'~'.~. :   Uptime.............: 0 days, 05h05m04s
 ~ (   ) (   ) ~  Memory.............: 267528kB (Free) / 382800kB (Total)
( : '~'.~.'~' : ) Load Averages......: 0.01, 0.03, 0.05 (1, 5, 15 min)
 ~ .~ (   ) ~. ~  Running Processes..: 69
  (  : '~' :  )   Domoticz status....: 1
   '~ .~~~. ~'    SSH failure attempt: 0