Commandes vocales via Jarvis

J’avais déjà parlé ici de reconnaissance vocale via imperihome Android ou YANA.

Je voudrais vous présenter ici un nouvel outil que j’ai découvert récemment nommé JARVIS.

Son grand avantage par rapport à d’autres outils : LE FRANCAIS est natif !!

jarvis Vous emballez quand même pas trop, on est pas dans Ironman. jarvis_logo_red

L’intérêt de ce Jarvis ci est de faire de la reconnaissance vocale et d’y enchaîner des actions :

  • « Jarvis » « météo » vous donnera vocalement la météo de weather Underground (plugin+enregistrement) ,
  • « Jarvis » « tu sais quelle heure il est ? » dira l’heure.

La reconnaissance se base sur des mots clés que vous définissez vous même. Ainsi dans le « tu sais quelle heure il est » le mot clé recherché peut être défini à *HEURE* et donc toute phrase contenant le mot heure donnera l’heure. Cette reconnaissance d’un mot permet de lancer des scripts bash qui font des actions. « Heure » lance une commande linux :

date +%H%M

En plus d’être extrêmement paramétrable car on peut programmer soit même les actions à effectuer à l’issue d’une phrase, on peut lancer des taches vocales via cron (toutes les 10 minutes dire « Bonjour votre Altesse »), il y a des plugins dont un destiné à de la domotique et bien plus.

La phase de reconnaissance vocale peut utiliser soit un moteur local (pocketsphynx) soit Bing.

La page de référence est ici http://domotiquefacile.fr/jarvis/ et Alexylem le concepteur du soft à bien fait les choses puisque explications d’ installation et d’utilisation du soft sont très claires et didactiques (comprenez par la que je ne détaillerai pas ces phases 😆 ).

Bien entendu nous verrons ici comment intégrer Jarvis à notre Domoticz.

A noter Jarvis ne fonctionne QUE sur Raspberry, il faut donc un micro et des enceintes reliés à celui-ci.

Les points forts

Énormément de choses sont paramétrables, plusieurs moteurs de synthèse ou reconnaissance vocable, liste de mots clés reconnus , actions à déclencher, des plugins météo, gmail, de domotique.

On peut aussi lancer Jarvis en ligne de commande pour lui faire faire des actions, on peut utiliser les scripts:/// de Action ON et Action OFF pour lancer des commandes au basculement d’un switch. jarvis.sh -s « Le salon vient de s’allumer » juste pour faire dire une phrase ou -x pour exécuter une commande interne Jarvis

Via Lua un petit os.execute fera le job./home/pi/jarvis/jarvis.sh -x « c’est comment la météo » lance la commande METEO de Jarvis.

Installation

Je vous laisse parcourir le site de Jarvis pour effectuer l’installation.

Sachez toutefois qu’il vous faudra installer sox, alsamixer,aplay, arecord,mpg123 et jq.

sudo apt-get install sox alsamixer aplay arecord mpg123

Pour jq vous trouverez la procédure ici https://easydomoticz.com/manipuler-les-donnees-json-de-domoticz-en-shell/

Sinon, pas d’inquiétude, la procédure d’installation vérifie tout cela et vous donne les commandes à taper.

Puis l’assistant d’installation vous guide dans tout le processus de configuration y compris la détection de vos micros et hauts-parleurs.

A noter : Les meilleurs résultats de reconnaissance que j’ai pu obtenir sont lors de l’utilisation de la reconnaissance vocale Microsoft Bing qui utilise Internet (à mon grand désespoir).

Alexylem à un joli tableau récapitulatif ici http://domotiquefacile.fr/jarvis/content/stt

Pensez à votre vie privée lorsque vous transmettez des commandes à des tiers sur Internet (Bing, Google, Wit)

Une fois familiarisé avec Jarvis, attaquons nous au coté Domoticz de façon à piloter quelque chose à la voix.

Intégration avec Domoticz

Nous allons utiliser un plugin générique Home Automation de Jarvis.

Ce plugin permet d’envoyer des requêtes http à la voix .

Dans le store Jarvis

jarvis_storeInstallez le plugin « Home Automation » puis « Home Control ».

De même n’hésitez pas à faire des mise à jour du plugin dans Store > Installed > Home Control > Update en attendant les mise à jour automatique des plugin (work in progress).

Il s’affiche une page d’aide que nous allons détailler et adapter à Domoticz.

Loading...
## Description
If your home automation system can be controlled via http requests, this Jarvis plugin is just for you.
It will allow you to simply turn on and off your devices.

## Configuration

1. Indicate the turn on and turn off http urls (with `[ADDRESS]` placeholder):

   ```
   pg_hc_turnon_url="http://192.168.1.1/home.php?action=on&device=[ADDRESS]"
   pg_hc_turnoff_url="http://192.168.1.1/home.php?action=off&device=[ADDRESS]"
   ```

2. List your device names & corresponding addresses in `json` format

   ```
   pg_hc_config='{ "devices":[
       { "name": "BEDROOM", "address": "A1"},
       { "name": "LIVING ROOM", "address": "A2"},
       { "name": "BAR", "address": "A3"}
   ]}'
   ```

## Usage
```
You: turn on the bar
> http://192.168.1.1/home.php?action=on&device=A3
Jarvis: Done
```

## Author
[alexylem](https://github.com/alexylem)
Press [Enter] to continue

On voit ici qu’il nous faudra adapter les url suivant les spécifications de l’API Json de Domoticz et indiquer dans le tableau pg_hc_config le nom à prononcer et l’idx domoticz.

Modifiez les turnon_url et turnoff_url avec vos ip:ports Domoticz et l’appel à l’api JSON qui vous convient en laissant [ADDRESS] à l’endroit ou vous devez envoyer l’idx Domoticz.

Rappel : l’idx c’est cette colonne :idx_domoticz

Faites les modifs  via le menu « Config » du plugin « Home Automation » de Jarvis pour obtenir quelque chose comme :

pg_hc_turnon_url="http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=[ADDRESS]&switchcmd=On"
pg_hc_turnoff_url="http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=[ADDRESS]&switchcmd=Off"


pg_hc_config='{ "devices":[
    { "name": "lumière", "address": "112"},
    { "name": "Volet cuisine", "address": "33"},
    { "name": "volet salon", "address": "34"}
]}'

Ou 192.168.181:8080 est mon Domoticz, lumière et 112 , le nom et l’idx de la lumière , volet cuisine, 33 …

En prononçant « allume lumière » on ira donc activer l’idx 112 de Domoticz  via « pg_hc_turnon_url »

N.B  Les plugins sont dans le dossier plugins, il y a un sous dossier par plugin, puis dans celui ci un readme.md qui donne quelques explications au sujet du plugin , puis des dossiers /fr ou /en ou se situent les commandes dans la langue correspondante. Ce sont des fichier texte bash. Vous pouvez agir directement sur ces fichiers. La modification est immédiate, pas besoin de relancer Jarvis sauf si vous avez changé un mot à reconnaitre..

Je vous conseille de prendre des mots vraiment discriminants , par exemple , la reconnaissance du mot « volets » donne souvent le verbe « voler » et donc la phrase « ouvre voler salon » n’existant pas …

alexylem vient de me préciser que en utilisant « vole » tout simplement (la comparaison vérifie si le nom du device est « inclue » dans la commande reçue) cela devrait fonctionner.

Et comme les plus perspicaces d’entre vous auront remarqué qu’il faut dire « Allume volet salon » ou « éteint volet salon » ce qui peut paraitre bizarre nous verrons prochainement comment améliorer cela en ajoutant les mots « Ouvre » et « Ferme ».

Un petit film de présentation ici

 

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Le httplink Domoticz

Sous ce nom barbare ce cache un outil fort pratique dès lors que l’on a besoin de mettre à jour un équipement, une machine, un service avec lequel le dialogue se fait par envoi de commandes http.

L’idée est donc d’envoyer des mesures issues de Domoticz à un quelque chose via http.

Prenons le cas d’un IPX 800 https://easydomoticz.com/ipx800 par exemple ou l’on envoyer des  http://192.168.1.74/api/xdevices.json?key=1234&SetC02=+1 pour incrémenter un compteur. Jusqu’à présent il fallait un script bash, python, lua pour mettre l’ipx 800 à jour.

Ou envoyer un sms sur un changement de valeur d’un capteur.

Grâce à httplink c’est Domoticz qui s’en charge tout seul.

A noter, 3 points importants :

  • Httplink s’exécute à chaque changement de la valeur en question, attention donc au nombre de sms recus!!.
  • Cet envoi n’est pas conditionnel , il s’exécute régulièrement
  • On ne peut définir d’un seul destinataire http.

 

Le principal intérêt de ce httplink est de faire un lien plus simple avec des outils que j’avais décrit ici https://easydomoticz.com/iot-1/ que sont les time series databases. Mais nous verrons cela une autre fois dans un article à venir.

La référence anglophone est ici https://www.domoticz.com/wiki/HttpLink

Configuration

« Réglage/Plus d’options/Envoi de Données/Httplink »

httplink_1

Vous obtenez un écran en 2 parties  :

httplink_2

A gauche nous choisirons les variables Domoticz à utiliser, la partie de droite permettra de décrire le format de la chaine http attendue par notre vis à vis.

 

 

Prenons ici l’exemple d’envoyer par sms la consommation électrique mesurée par Domoticz, ce n’est pas très malin étant donné que cela va envoyer un sms à chaque changement de valeur, mais cela permettra rapidement de tester.

Les valeurs

Dans la partie gauche il nous faut choisir quelle valeur Domoticz nous voulons envoyer à l’équipement en face.httplink_4

Il y a un choix « variable globale » ou « périphérique virtuel » dont je n’ai pas compris l’utilité (n’hésitez pas si vous savez :))

J’ai donc pris « variable globale » puis sélectionné le bon capteur ainsi que la valeur à envoyer pour ce capteur. N’oubliez pas que pour un capteur on peut avoir plusieurs valeurs. Ex : un capteur de température peut envoyer aussi la mesure d’humidité.

  • Variable cible un texte quelconque. j’ai mis v comme « valeur »  mais cela n’a pas d’incidence.
  • Inclure l’unité cochez ou pas suivant votre envie
  • Cochez « Lien actif » si vous voulez que cela marche 🙂
  • Cliquez sur « Ajouter »
  • Refaites la manip pour ce même capteur ou un autre si vous voulez envoyer plusieurs messages consécutifs à votre équipement.

httplink_45

 

On peut donc avoir de nombreuses lignes ici qui enverront autant de commande http distinctes.

Le lien http

La partie de droite va nous permettre de décrire la syntaxe de notre lien http. Vous devez ici respecter le format qu’attend votre périphérique à l’autre bout. Utiliser la doc des API de votre matèriel.

Repronons l’exemple d’envoi de mail par Free https://easydomoticz.com/nouveau-service-sms-pour-les-utilisateurs-de-free-mobile/

On voit qu’il faut envoyer quelque chose comme :

https://smsapi.free-mobile.fr/sendmsg?user=mon_identifiant_sms_free&pass=le_mot_de_passe_free&msg=le message SMS a envoyerGarage Ouverte

Donc dans url je met l’url avec les identifiants et mot de passe puis tout au bout il y a %v %u

https://smsapi.free-mobile.fr/sendmsg?user=identi_free&pass=pass_free&msg=%v %u

 

httplink_48

 

Oui d’accord mais pourquoi %v %u ? .

Cela permet à Domoticz d’envoyer la valeur %v suivie de l’unité %u ainsi le sms recu sera 2457458 Watt

On peut envoyer d’autres choses dans les champs URL et DATA telles que  :

  •  %v : Valeur
  •  %t0 : Timestamp (epoc time in seconds, local time)
  •  %t1 : Timestamp (epoc time in ms, local time)
  •  %t2 : Timestamp (epoc time in seconds, UTC)
  •  %t3 : Timestamp (epoc time in ms UTC)
  •  %t4 : Timestamp (RFC 3339 format, « YYYY-MM-DDThh:mm:ssZ »
  •  %D : L’idx du Capteurvice id
  •  %V : Target Variable
  •  %u : Unit
  •  %n : Nom du matériel
  •  %T0 : Type du capteur
  •  %T1 : Sous type du capteur
  •  %h : hostname

Dans le cas étudié ici seul %v et %u sont utilisables, le reste des % peut être utilisé en lien avec des base de données timeseries.

Au final on obtient quelque chose comme cela :

 

httplink_5

Activez le log pour voir les messages

2016-10-05 12:03:30.265 HttpLink: sending global variable v with value: 29334561.0
2016-10-05 12:03:30.486 HttpLink: response

Voila une première approche du httplink , nosu en verrons des déclinaisons liées aux time series databases dans un autre article.

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Détection de présence par beacon : partie 2

Dans l’article précédent https://easydomoticz.com/?p=3408 nous avions vu toute la partie préalable de la mise en place de détection de présence.

Voyons ici comment mettre en place la détection dans Domoticz.

Configurer le script

(Lisez les commentaires dans le script check_beacon_presence)

On peut adapter le niveau de log pour les tests et pour l’utilisation quotidienne en commentant/décommettant les lignes logLevel :
– Pour tester activez .DEBUG , le log de /var/log/check_beacon_presence.log est alors très bavard.

logLevel=logging.DEBUG
#logLevel=logging.CRITICAL
#logOutFilename='/var/log/check_beacon_presence.log'

– Ensuite passez en .CRITICAL en commentant la première ligne

#logLevel=logging.DEBUG
logLevel=logging.CRITICAL
logOutFilename='/var/log/check_beacon_presence.log'

Domoticz et les variables

Rendez vous dans Domoticz et ajoutez une variable texte par beacon à gérer.

variables

Je vous conseille d’acheter des beacons de couleur différente pour chaque membre de la famille puis de nommer vos variables soit par couleur ou par prénom du possesseur, ou un mix des deux si vous avez deux fois la même couleur.

Par exemple

variables-texte

Adaptation du script

Ouvrez le script

 sudo nano /usr/local/bin/check_beacon_presence.py

Adaptez la partie URL_DOMOTICZ si vous ne travaillez pas en localhost ou avec le port par défaut

URL_DOMOTICZ = 'http://localhost:8080/json.htm?type=command&param=updateuservariable&idx=PARAM_IDX&vname=PARAM_NAME&vtype=2&vvalue=PARAM_CMD'

 

Descendez dans la partie des beacons et configurez les vôtres  sous la forme suivante dans  TAG_DATA : [Nom_de_la_variable_domoticz,MacAddress,Timeout,0,idx,mode]

  • Nom_de_la_variable_domoticz: C’est le nom EXACT de la variable texte de Domoticz, attention aux majuscules/minuscules !
  • macAddress : la Mac adress de ce beacon.
  • Timeout est le temps qu’il faut pour que le beacon soit considéré en AWAY (parti). Si le beacon émets toutes les 3 à 8 secondes , un bon timeout est  15 seconds. Pour définir cela utilisez les valeurs données par test_beacon.py voir plus haut).
  • – 0 : pas touche.
  •  l’idx Domoticz de cette variable texte, c’est le nombre en face du nom de la variable.
  • mode : SWITCH_MODE = une mise a jour unique lorsque le statut change / REPEAT_MODE = mise à jour continuelle de l’état toutes les 3 secondes
TAG_DATA = [  
            ["Orange","Fb:14:78:38:18:5e",15,0,9,REPEAT_MODE],
            ["Vert_Papa","ff:ff:60:00:22:ae",15,0,7,REPEAT_MODE]
           ]

Second Test : Lançons le script à la main et voyons.

sudo python /usr/local/bin/check_beacon_presence.py

A l’écran des information s’affichent , le log se remplit à :

sudo more /var/log/check_beacon_presence.log
sudo python /usr/local/bin/check_beacon_presence.py
2016-09-23 12:33:26,274 - root - DEBUG - Ok hci0 interface Up n running !
2016-09-23 12:33:26,276 - root - DEBUG - Connect to bluetooth device 0
2016-09-23 12:33:31,282 - root - DEBUG - Tag Tag_Orange not seen since 20 sec => update absence
2016-09-23 12:33:31,284 - root - DEBUG - Tag Tag_Green not seen since 20 sec => update absence
2016-09-23 12:33:31,356 - requests.packages.urllib3.connectionpool - INFO - Starting new HTTP connection (1): localhost
2016-09-23 12:33:31,362 - requests.packages.urllib3.connectionpool - INFO - Starting new HTTP connection (1): localhost
2016-09-23 12:33:31,389 - requests.packages.urllib3.connectionpool - DEBUG - "GET /json.htm?type=command&param=updateuservariable&idx=7&vname=Tag_Green&vtype=2&vvalue=AWAY HTTP/1.1" 200 58
2016-09-23 12:33:31,394 - root - DEBUG -  <Thread(Thread-3, started daemon 1970148464)> -> <Response [200]>
2016-09-23 12:33:31,401 - requests.packages.urllib3.connectionpool - DEBUG - "GET /json.htm?type=command&param=updateuservariable&idx=6&vname=Tag_Orange&vtype=2&vvalue=AWAY HTTP/1.1" 200 58
2016-09-23 12:33:31,405 - root - DEBUG -  <Thread(Thread-2, started daemon 1978537072)> -> <Response [200]>

Vérifiez que vos variables texte sont mises à jour correctement en regardant leur contenu (AWAY ou HOME) et la date de mise à jour en fonction de ce que vous voyez passer à l’écran.

Repassez le debug à critical quand tout fonctionne et activons tout cela automatiquement en tant que service.

Installation du service

sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence%20detection%20%28beacon%29/check_beacon_presence
sudo mv check_beacon_presence /etc/init.d/
sudo chmod 755 /etc/init.d/check_beacon_presence

Troisième test

Lancez le service manuellement :

sudo /etc/init.d/check_beacon_presence start

Vérifiez qu’il fonctionne par :

sudo /etc/init.d/check_beacon_presence status

On peut y utiliser les commandes : start, stop, restart, status

Si le service est bien lancé activons le au boot du Raspberry

Démarrage du service automatique

sudo update-rc.d check_beacon_presence defaults

Pour le supprimer du démarrage du Raspberry  :

sudo update-rc.d -f check_beacon_presence remove

Test final (avec le démarrage automatique activé)

sudo reboot
ps -ef | grep python

Vous devez voir un « check_beacon_presence.py » quelque part

Utilisation dans Domoticz

Vous avez vu que ce sont des uservariables texte qui passent de AWAY à HOME, vous pouvez donc utiliser tous les moyens offerts par Domoticz pour exploiter cela à votre convenance (Lua, Blocky, API JSON…)

Exemple Lua

script_variable_autoArmAlarm.lua

--Variable scripts receive 7 tables from Domoticz: 
-- otherdevices, otherdevices_lastupdate, otherdevices_svalues, otherdevices_idx, uservariables, uservariables_lastupdate and uservariablechanged
 
commandArray = {}
 
beaconHome=0
for variableName, variableValue in pairs(uservariables) do
    if string.sub(variableName,1,3)=="Tag" and variableValue ~= "AWAY" then
      beaconHome=beaconHome+1
    end
end
if otherdevices['Alarm'] == 'On' and beaconHome>=1 then   -- switch Off Alarm because 1 beacon come back Home
    table.insert (commandArray, { ['Alarm'] ='Off' } )
elseif otherdevices['Alarm'] == 'Off' and beaconHome==0 then  -- switch On Alarm because all beacon are away
    table.insert (commandArray, { ['Alarm'] ='On' } )
end
 
return commandArray

 

D’autres exemples : https://www.domoticz.com/forum/viewtopic.php?f=28&t=10640&start=100#p86310

Blocky

https://www.domoticz.com/forum/viewtopic.php?f=28&t=10640&start=140#p86725

Références

Le topic du forum :https://www.domoticz.com/forum/viewtopic.php?f=28&t=10640
Une page de référence pour les beacons ble : https://www.beaconzone.co.uk/allbeacons
https://wiki.tizen.org/wiki/Bluetooth
https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/pybluez/source-archive.zip => pybluez\examples\advanced\inquiry-with-rssi.py

Mémo d’autres commandes

Reset  de l’adapttateur bluetooth (hci0 dans cet exemple) :

sudo hciconfig hci0 down
sudo hciconfig hci0 up

Trouver une  MacAdress d’un beacon avec hcitool

pi@raspberrypi ~ $ whereis hcitool
hcitool: /usr/local/bin/hcitool
pi@raspberrypi ~ $ sudo hcitool lescan
LE Scan ...
FB:14:78:38:18:5E nut
FB:14:78:38:18:5E (unknown)

 

Voila vous pouvez maintenant détecter les arrivées/départs de tous les membres de la famille, faites en bon usage.

big-brother-is-watching-you1

 

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Détection de présence par beacon

C’est la rentrée et afin de travailler mon anglais, je vous propose ici la traduction d’un article tiré du wiki anglophone et écrit par un de nos contributeurs français : jml. Merci de son autorisation de traduction.

Cet article détaille donc la mise en place de la détection de présence via des « beacons » ces petit capteurs bluetooth low energy que l’on peut attacher à nos clés de voiture, ou à nos enfants pour ne pas les perdre.

 

Nut_beacon

Voici le lien du forum ou l’annonce de son tuto est faite https://easydomoticz.com/forum/viewtopic.php?f=17&t=2047

et le le lien du wiki https://www.domoticz.com/wiki/Presence_detection_%28Bluetooth_4.0_Low_energy_Beacon%29

Je reprends éhontément les images issues du wiki.

But

Faire de la détection de présence d’un ou plusieurs beacon via BlueTooth Low Energy V4.0 dans Domoticz afin de savoir si le porteur du beacon en question est à proximité. Ainsi on pourra armer/désarmer les alarmes Domoticz en testant la présence/absence du/des beacons ou bien d’autres choses.

La présence d’un ou plusieurs beacons sera testée par un script qui affecte une valeur à une variable Domoticz.

Ce script possède 2 modes de fonctionnement. On peut choisir pour chaque beacon le mode préféré

  • REPEAT MODE : Pour un  beacon à portée, le script met à jour la variable Domoticz à « HOME » toutes les  3 secondes suivant la puissance du signal RSSI, sinon c’est « AWAY » qui est mis dans la variable.
  • SWITCH_MODE : Pour un beacon à proximité la variable est mise à « HOME » seulement une fois, sinon c’est  « AWAY » .

La détection est vraiment rapide (moins de 10 secondes), ensuite la présence/absence est vérifiée toutes les 5 secondes par comparaison à l’heure de la dernière présence de chaque beacon

Nous aurons donc besoin d’une variable de type string par beacon.

Beacon_uservariable

Puis des scripts Lua, Blocky ou autres pourront donc tester la valeur de la variable pour déclencher des actions Domoticz.

 Matériel

Ce tuto à été réalisé à l’aide d’un Raspberry Pi.

La clé USB Bluetooth BLE.

Les beacons utilisant bluetooth il faudra une clé USB Bluetooth 4.0 compatible avec le PI.

J’utilise celui ci : http://www.amazon.fr/SODIAL-Adaptateur-Bluetooth-Dongle-Ordinateur/dp/B00L317IL4/277-2648083-3402713?ie=UTF8&redirect=true&ref_=pe_386181_37038081_TE_3p_dp_1
https://www.amazon.co.uk/gp/product/B00XTU53A0/ref=oh_aui_detailpage_o09_s00?ie=UTF8&psc=1
– Plugable USB-BT4LE adapter: http://plugable.com/products/usb-bt4le (uses BCM20702 chipset)
– CSR chipset adapter http://www.amazon.co.uk/Version-Bluetooth-Adapter-Compatible-Windows/dp/B00A0CBOTE

Beacon

Ce type de beacon fonctionne correctement :
Vous les trouvez pour environ  10€
http://www.aliexpress.com/item/New-Nut-2-update-Nut-3-Nut-mini-Smart-Finder-Itag-Bluetooth-WiFi-Tracker-Locator-Luggage/32477579557.html
http://www.aliexpress.com/item/2015-Nut-2-Smart-Tag-Bluetooth-Tracker-Child-Pet-Key-Finder-Locator-Alarm-for-iphone-Android/32477066584.html
http://eu.banggood.com/Wholesale-Warehouse-Mini-Smart-Patch-Alarm-Tag-Bluetooth-GPS-Tracker-Locator-For-iPhone-Android-etc-wp-Uk-988462.html
La présence est détectée en 4 à 8 secondes. L’absence est décidée en moins de 15 sec quand le tracker s’éloigne et tombe hors de portée.

La clé USB SODIAL BLE  détecte à 12m (en vue directe) ou à 2 étages.

http://www.banggood.com/Mini-Smart-Patch-Alarm-Tag-Bluetooth-GPS-Tracker-Locator-For-iPhone-Android-etc-p-988462.html
https://www.amazon.co.uk/gp/product/B014P9VK5K/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

Ils ne fonctionnent pas :
Je n’ai pas réussi à les faire fonctionner. Ils arrêtent d’émettre lorsque ils sont déconnectés de leur téléphones.
http://www.banggood.com/Sfd-p-985626.html .
http://www.banggood.com/Bluetooth-4_0-Self-Portrait-Remote-Control-Anti-Lost-Electronic-Finder-p-974320.html
http://www.banggood.com/Wifi-Smart-Bluetooth-4_0-Tracker-GPS-Locator-Tag-Alarm-Anti-lost-Device-GPS-Track-for-iPhone-Android-p-1028944.html – TI SensorTag

Le bluetooth avec bluez et sans blues 🙂

Il nous faudra bluez pour le bluetooth

Bluez nécessite un kernel > 3.5

Un petit

 sudo apt-get update
 sudo apt-get install -y libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev

Et  BLE à besoin d’un bluez  >5.3

Vérifiez la version avec un

apt-cache policy bluez

 

Vérifiez la dernière version ici  : http://www.kernel.org/pub/linux/bluetooth/ (et changez les numeros de versions en conséquence ). La compilation prends aux alentours de 20 minutes, il faudra rebooter ensuite.

sudo mkdir bluez
cd bluez
sudo wget "http://www.kernel.org/pub/linux/bluetooth/bluez-5.39.tar.xz" 
sudo tar -xJf bluez-5.39.tar.xz
cd bluez-5.39
sudo ./configure --disable-systemd
sudo make
sudo make install
sudo apt-get install python-bluez python-requests
sudo cp attrib/gatttool /usr/local/bin/
sudo shutdown -r now

TODO check the right of gatttool. (set execution right chmod +x ?)

Premier Test

Pour être sur que la clé USB Bluetooth est bien reconnue, lancez un

lsusb 

On voit apparaitre une ligne Cambrige Silicon Radio:

Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 04d8:f55e Microchip Technology, Inc.
Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

Bien, l’adaptateur USB est sur le  Bus 001 Device 006.

Pour en savoir plus  prenez le numéro ID 0a12: et faites

sudo lsusb -v -d 0a12:

Il y a quelques pages de caractéristiques qui s’affichent.

lancez maintenant hciconfig.

hci0: Type: BR/EDR Bus: USB
 BD Address: 00:1A:7D:DA:71:11 ACL MTU: 310:10 SCO MTU: 64:8
 UP RUNNING
 RX bytes:2772 acl:0 sco:0 events:120 errors:0
 TX bytes:1109 acl:0 sco:0 commands:91 errors:0

on voit que l’adaptateur Bluetooth est sur hci0, si cela n’était pas le cas vous devez adapter les scripts python dont il est question ci-dessous avec votre configuration.

Récupérez  les fichier test_beacon.py et check_beacon_presence.py ici https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence-detection-beacon/test_beacon.py

ou copiez/collez dans votre terminal :

sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence-detection-beacon/test_beacon.py
sudo python test_beacon.py

Cela lance la détection des beacons à proximité.

Il FAUT noter la MAC Address et la fréquence à laquelle le beacon émet , nous en aurons besoin pour la suite.

Si j’ai un conseil, si vous avez plusieurs beacons, mettez les en route un par un, pas tous ensemble, et notez pour chacun sa MAC address.

pi@domoticz ~ $ sudo ./test_beacon.py
2016-09-23 11:30:24,859 - root - DEBUG - Ok hci0 interface Up n running !
2016-09-23 11:30:24,861 - root - DEBUG - Connect to bluetooth device 0
2016-09-23 11:34:22,639 - root - DEBUG - New Beacon c0:1d:75:4a:68:80 Detected
2016-09-23 11:34:26,494 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 3 sec. (Max 3). RSSI -90. DATA (-128,)
2016-09-23 11:34:45,792 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 19 sec. (Max 19). RSSI -89. DATA (-128,)
2016-09-23 11:35:01,236 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 15 sec. (Max 19). RSSI -92. DATA (-128,)
2016-09-23 11:35:12,823 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 11 sec. (Max 19). RSSI -93. DATA (-128,)

Installer le script

sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence-detection-beacon/check_beacon_presence.py
sudo mv check_beacon_presence.py /usr/local/bin/
sudo chmod 755 /usr/local/bin/check_beacon_presence.py

Vous avez bien travaillé : rendez vous bientôt pour la suite de la configuration : https://easydomoticz.com/?p=3442

 

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Prévision de pluie pour Domoticz

Météo France propose un service bien pratique et qui de nombreuses fois m’a prouvé son efficacité lors de sortie sportives : le fameux « Va t’il pleuvoir dans l’heure ». http://www.meteofrance.com/previsions-meteo-france/previsions-pluie

Ainsi vous saurez pour une ville donnée si vous avez la malchance de voir tomber la pluie dans l’heure qui suit et ainsi vous éviter un inutile arrosage du jardin ou une ballade humide.

A force de chercher j’ai trouvé l’API en question chez Météo France. :mrgreen:

Vous trouverez ici  une extension Chrome : https://github.com/liorzoue/ext-meteo affichant le fameux  » ‘Va-t-il pleuvoir dans l’heure ?' », merci à l’auteur liorzoue pour son travail et dont je reprends en fin d’article le message de prudence quand à l’utilisation de cette API.

 

L’API

  • Récupérer le code insee de votre ville ici  (ce n’est pas le code postal!) ajoutez y le chiffre 0 à la fin

sinon rendez vous ici avec le nom de votre ville tout au bout.

http://www.meteofrance.com/mf3-rpc-portlet/rest/lieu/facet/pluie/search/ma_ville_

avec XXX le nom ou le CP de votre ville

  • Récupérer les prévisions via url

http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/330210

la réponse est du JSON , je ne sais pas tout en lire mais l’essentiel est

 "niveauPluieText" : [ "De19h35 à 20h35 : Pas de précipitations" ],
{
  "idLieu" : "330210",
  "echeance" : "201604241935",
  "lastUpdate" : "19h25",
  "isAvailable" : true,
  "hasData" : true,
  "niveauPluieText" : [ "De19h35 à 20h35 : Pas de précipitations" ],
  "dataCadran" : [ {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  } ]
}

Un script bash + un switch virtuel

Je vais donc créer un switch virtuel qui passera à ON que si de la pluie est annoncée, une notification est associée à ce passage à ON

Après interrogation du site web, récupérons donc le contenu de niveauPluieText par utilisation de JQ  jdont l’installation est expliquée ici, supprimons les caractères indésirables de texte horaire, de ‘[‘ ‘]’ et espaces.

Dans ce script changez vos ip de votre Domoticz et votre CODE INSEE.

Dans la ligne curl http://192.168…..’ modifiez idx=215 par votre idx de votre switch virtuel.

#!/bin/bash
pl=$(curl -s "http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/773800"|jq -r .niveauPluieText|cut -d ' ' -f7|tr -d '['|tr -d ']'|tr -d ' '|sed 's/ //g'|cut -d ' ' -f1)
#echo $pl
pluie=$(echo $pl|cut -d ' ' -f1)
#echo $pluie
case $pluie in 

 "Pas" )
 curl 'http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=215&switchcmd=Off&level=0' 
 echo "Pas de pluie" ;;
 "Précipitations" )
 curl 'http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=215&switchcmd=On&level=0' 
 echo "Pluie Prevue" ;;

esac

Il faudra bien entendu lancer toutes les heures le script via crontab pour mettre à jour le widget

Attention !

L’extension utilise une API non documentée (à ma connaissance) de Météo France, cette extension peut donc cesser de fonctionner à tout moment. 🙂

Et hop, rangez vos parapluies

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/