Lua et json

json_luaLes dernières versions de Domoticz donnent maintenant la possibilité de lire/fabriquer, dans nos scripts Lua, des fichiers au format JSON en natif sans autre outil externe.

L’intérêt est grand en effet d’avoir des outils pour exploiter ce format qui est utilisé nativement dans Domoticz, mais aussi dans de nombreux sites web afin de donner aux utilisateurs des possibilités d’interrogation, citons juste l’api de Domogeek, celle de méteo France, airaprif …..

Rappel pour ceux qui arriveraient maintenant https://easydomoticz.com/lapi-json-de-domoticz-demythifiee/ et la bibliothèque complète https://easydomoticz.com/traduction-francais-de-lapi-json-domoticz/

Encore une fois il s’agit de la traduction de la page correspondante du wiki https://www.domoticz.com/wiki/Lua_-_json.lua

Utilisation

Rien n’est à installer puisque les versions après le 23/11/2016 (build  8e0dfd5) incorporent un fichier JSON.lua dont nous allons voir l’utilisation ici.

Dans chaque script Lua qui aura besoin d’utiliser des valeurs renvoyées au format JSON, il nous suffira d’appeler ce fichier JSON.lua. Ce fichier est dans le répertoire des scripts lua que ce soit sous Linux ou Windows©.

Exemples

Domoticz

Imaginons que je cherche à récupérer dans un script Lua, le nom et la valeur actuelle d’un dispositif interne à Domoticz.

Comme en tapant dans un navigateur :

http://192.168.1.81:8080/json.htm?type=devices&ridx=226 ou le ridx=226 est l’idx de mon périphérique Domoticz et 192.168.1.81:8080 , l’IP et le port de mon Domoticz.

je reçois cela en retour

{
"ActTime" : 1482786662,
"ServerTime" : "2016-12-26 22:11:02",
"Sunrise" : "08:37",
"Sunset" : "17:25",
"result" : [
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CustomImage" : 0,
"Data" : "On",
"Description" : "",
"Favorite" : 1,
"HardwareID" : 3,
"HardwareName" : "Rfxcommusb10",
"HardwareType" : "RFXCOM - RFXtrx433 USB 433.92MHz Transceiver",
"HardwareTypeVal" : 1,
"HaveDimmer" : true,
"HaveGroupCmd" : true,
"HaveTimeout" : false,
"ID" : "0945F16",
"Image" : "Light",
"IsSubDevice" : false,
"LastUpdate" : "2016-11-03 07:48:25",
"Level" : 0,
"LevelInt" : 0,
"MaxDimLevel" : 15,
"Name" : "Volet Salon",
"Notifications" : "false",
"PlanID" : "4",
"PlanIDs" : [ 4, 9 ],
"Protected" : false,
"ShowNotifications" : true,
"SignalLevel" : "-",
"Status" : "On",
"StrParam1" : "",
"StrParam2" : "",
"SubType" : "AC",
"SwitchType" : "On/Off",
"SwitchTypeVal" : 0,
"Timers" : "false",
"Type" : "Lighting 2",
"TypeImg" : "lightbulb",
"Unit" : 5,
"Used" : 1,
"UsedByCamera" : false,
"XOffset" : "899",
"YOffset" : "507",
"idx" : "34"
},
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,

Je vois que le nom est dans Name et la valeur dans Data ET TOUT CA dans le « pavé » nommé ‘result’

"result" : [
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CustomImage" : 0,
"Data" : "On",
...
"Name" :"Volet Salon",

Le script utilisant la bibliothèque JSON.lua serait :

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
--   json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")()  -- For Windows

local config=assert(io.popen('/usr/bin/curl http://192.168.1.81:8080/json.htm?type=devices&rid=226'))

 local blocjson = config:read('*all')
 config:close()
 --print (blocjson)
 local jsonValeur = json:decode(blocjson)
 nom = jsonValeur.result[1].Name
 data = jsonValeur.result[1].Data

 print('****************')
 print(nom)
 print(data)
  

commandArray = {}
print('****************')
return commandArray

  • on incorpore le fichier JSON.lua
  • on appelle curl pour interroger le site web qui nous renverra ses données JSON  (ici mon Domoticz)
  • la variable ‘blocjson’ contient tout le pavé JSON, (enlevez les — devant pour voir ce que vous avez reçu)
  • puis l’appel de result[1].Name, result[1].Data nous permet d’assigner nos variables.

Oui, mais pourquoi result[1] ? , cette syntaxe correspond au fait qu’il s’agit du 1er « pavé » nommé ‘result’  dans mon JSON (même si l’y en a qu’un seul).

Weather Undergroud

La doc du wiki prend en exemple le site Weather Ungerground

On voit dans la documentation qu’il nous renvoie la météo sous cette forme JSON

{
  "response": {
  "version": "0.1",
  "termsofService": "http://www.wunderground.com/weather/api/d/terms.html",
  "features": {
  "conditions": 1
  }
  },
  "current_observation": {
  "image": {
  "url": "http://icons-ak.wxug.com/graphics/wu2/logo_130x80.png",
  "title": "Weather Underground",
  "link": "http://www.wunderground.com"
  },
  "display_location": {
"full": "San Francisco, CA",
  "city": "San Francisco",
  "
  "country_iso3166": "US",
  "zip": "94101",
  "latitude": "37.77500916",
  "longitude": "-122.41825867",
  "elevation": "47.00000000"
  },

Le script du wiki retire longitude et latitude par un

latitude = jsonLocation.current_observation.display_location.latitude
longitude = jsonLocation.current_observation.display_location.longitude

car je dois aller à current_observation puis display_location pour « tomber sur » latitude et longitude, faites bien attention aux {} d’imbrication et au crochets.

Ça marche pas

Si votre script Lua ne vous renvoie rien :

  • vérifiez les noms des champs dans le JSON, attention aux majuscules/minuscules.
  • avez vous bien respecté le chemin vers votre valeur wwww. xxxx.yyyyy.zzzz
  • si comme pour Domoticz le champ que vous voulez extraire est dans un truc à crochets et accolades ->
"xxxxx" : [
      {
       "mon_champ" : 1.0,

il faut utiliser xxxxx[1].mon_champ pour extraire la valeur correspondante.

Conclusion

Loin d’avoir exploré tous les cas de figures d’utilisation de cette nouveauté de Domoticz, l’intérêt apporté est grand et nous permet encore plus d’ouverture et toujours plus de puissance dans notre box domotique préférée.

Résultat de recherche d'images pour "youpi"

 J’adore ces images des années 70

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

626f6e6e6520676e6e6565

b

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

2016, le récap.

Voici le sommaire des articles publiés sur le blog durant cette année. Soit 39 billets.

Série sur Domoticz et les scripts Windows

https://easydomoticz.com/domoticz-et-windows-les-scripts-powershell-1/

https://easydomoticz.com/domoticz-et-windows-les-scripts-powershell-2/

https://easydomoticz.com/domoticz-windows-et-powershell-envoyer-un-sms-via-free/

https://easydomoticz.com/domoticz-et-windows-scripts_et_action_on_action_off/

https://easydomoticz.com/powershell-et-airparif/

https://easydomoticz.com/maison-pilotee-domoticz-windows-sait-tweeter/

https://easydomoticz.com/powershell-domoticz-twitter-2/

https://easydomoticz.com/gestion-tarifs-edf-lapi-domogeek-powershells/

https://easydomoticz.com/powershell-windows-ecrire_via_json/

https://easydomoticz.com/utiliser-planificateur-de-taches-windows-scripts-powershell/

https://easydomoticz.com/windows-domoticz-et-powershell-utiliser-json/

https://easydomoticz.com/connecter-raspberry-directement-a-pc-windows

Inside Domoticz

https://easydomoticz.com/les-tables-domoticz/

https://easydomoticz.com/sqlite-manager/

https://easydomoticz.com/lapi-json-de-domoticz-demythifiee/

https://easydomoticz.com/traduction-francais-de-lapi-json-domoticz/

Matériel

https://easydomoticz.com/notifications-radio/
https://easydomoticz.com/installation-dun-portier-video-controle-douverture-pilotes-domoticz/
https://easydomoticz.com/ipx800/
https://easydomoticz.com/beacon/
https://easydomoticz.com/detection-de-presence-beacon-partie-2/
https://easydomoticz.com/domoticz-url-cameras/
https://easydomoticz.com/arretez-framboise-mettez-a-lorange/
https://easydomoticz.com/domoticz-dash-button-amazon/
https://easydomoticz.com/onduleur-raspberry-domoticz/

Scripts

https://easydomoticz.com/bientot-disponible/  :  pilotage des led RGB via JSON et Widget

https://easydomoticz.com/suivre-les-cours-de-bourse-grace-a-domoticz/

https://easydomoticz.com/envoyer-email-raspberry

ttps://easydomoticz.com/imperihome-nouvelle-version-nodejs/

https://easydomoticz.com/le-httplink-domoticz/

https://easydomoticz.com/debian-jessie-wheezystretch-sid-connaitre-version-de-debian/

https://easydomoticz.com/lien-tasker-domoticz/

https://easydomoticz.com/prvision-pluie/

https://easydomoticz.com/une-editeur-de-scripts-lua-integre-a-domoticz/

https://easydomoticz.com/scripts-plus-faciles-domoticz-dzvents/

https://easydomoticz.com/dzvents-domoticz-scripts-nont-jamais-ete-plus-faciles/

https://easydomoticz.com/scripts-dzvents-entrons-details/

https://easydomoticz.com/commandes-vocales-via-jarvis/

https://easydomoticz.com/commandes-vocales-via-jarvis-adaptations/

 

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

Onduleur, Raspberry, Domoticz

Voyons ici comment gérer un onduleur relié à notre Raspberry Domoticz.

Nous prendrons un cas simple ou le raspberry devra s’éteindre tout seul avant la fin des batteries de l’onduleur.

Il y aura deux épisodes à cette saga.

Prérequis

L’onduleur devra être équipé d’un port USB que vous relierez à un des ports USB du Raspberry avec le câble USB correspondant.

Alimentez votre raspi par un des connecteurs électriques dédiés de l’onduleur.

Faites attention il y a parfois des sorties électriques secourues par l’onduleur et d’autres non secourues. Branchez vous bien entendu sur une sortie protégée (c.f. logo ou « Battery » par exemple).

Ouvrez une session ssh sur le Raspberry pour continuer la configuration.

Installation

Tapez la ligne suivante afin d’installer les outils usb si il n’existent pas.

sudo apt-get install usbutils

Puis le logiciel de gestion de l’onduleur

sudo apt-get install nut

Configuration

Lors de l’installation, il s’affiche :

Setting up libupsclient1 (2.6.4-2.3+deb7u1) ...
Setting up nut-client (2.6.4-2.3+deb7u1) ...
[info] nut-client disabled, please adjust the configuration to your needs.
[info] Then set MODE to a suitable value in /etc/nut/nut.conf to enable it.
Setting up nut-server (2.6.4-2.3+deb7u1) ...

Comme indiqué il faut éditer /etc/nut/nut.conf par un

sudo nano /etc/nut/nut.conf

Et on place tout en bas le mode à  standalone

mode=standalone

Configuration de l’onduleur

Tapez ensuite

sudo nano /etc/nut/ups.conf

un fichier apparait :

# This file is used by upsdrvctl to start and stop your driver(s), and
# is also used by upsd to determine which drivers to monitor.  The
# drivers themselves also read this file for configuration directives.
#
# The general form is:
#
# [upsname]
#       driver = <drivername>
#         port = <portname>
#       < any other directives here >
#
# The section header ([upsname]) can be just about anything as long as
# it is a single word inside brackets.  upsd uses this to uniquely
# identify a UPS on this system.
#

Nous allons changer la partie upsname en supprimant les # de début de ligne.

  • Remplacez [upsname] entre crochets par un nom de votre choix identifiant cet onduleur.
  • driver = devra être rempli avec le nom du driver spécifique à votre onduleur, allez sur cette page pour rechercher votre modèle http://networkupstools.org/stable-hcl.html au bout à droite figure le nom à utiliser dans cette ligne.

Si vous ne trouvez pas, pas de panique beaucoup d’onduleurs fonctionnent avec le driver blazer_usb

Sinon recherchez sur le net avec le nom de votre onduleur pour trouver la référence correcte du matériel.

  • port = mettez auto pour que le Raspberry se débrouille , sinon mettez le vrai tty « /dev/tty/ACMO »

Ce qui fait  :

[ond_rasp_dz]
         driver = blazer_usb
         port = auto

Mon onduleur se nomme ond_rasp_dz

on démarre par

sudo upsdrvctl start

et paf une erreur

Network UPS Tools - UPS driver controller 2.6.4
Network UPS Tools - Megatec/Q1 protocol USB driver 0.08 (2.6.4)
Can't claim USB device [0665:5161]: could not detach kernel driver from interface 0: Operation not permitted
Driver failed to start (exit status=1)

il s’agit d’un problèmes de droits sur les ports usb, accordons les droits en notant les nombres affichés dans l’erreur ci-dessus.

On crée un fichier de règles pour l’onduleur.

Vous pouvez mettre le nom que vous voulez, toutefois le nom de l’onduleur préfixé par 10 est clair et explicite.

sudo nano /etc/udev/rules.d/10-ond_rasp_dz.rules

et on met la ligne  :

 SYSFS{idVendor}=='0665', SYSFS{idProduct}=='5161', MODE='0666'

Rebootez le pi, rebootez sinon ça marche pas.

Une fois le pi relancé , retirez le câble usb, patientez 10 seconds, rebranchez.

Maintenant interrogeons l’onduleur par la commande upsc suivie du nom donné plus haut.

sudo upsc ond_rasp_dz

me renvoie (cela dépend de votre onduleur)

battery.charge: 100
battery.voltage: 26.60
battery.voltage.high: 26.00
battery.voltage.low: 20.80
battery.voltage.nominal: 24.0
device.type: ups
driver.name: blazer_usb
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.6.4
driver.version.internal: 0.08
input.current.nominal: 5.0
input.frequency: 50.1
input.frequency.nominal: 50
input.voltage: 231.6
input.voltage.fault: 231.6
input.voltage.nominal: 220
output.voltage: 231.6
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 10
ups.productid: 5161
ups.status: OL
ups.type: offline / line interactive
ups.vendorid: 0665

On voit entre autres la charge que votre matériel « tire »sur l’onduleur (ups.load 10), le status (OL) = on line , (OB)= sur batteries , le délai avant shutdown (ups.delay.shutdown)

Nous avons donc un onduleur qui fonctionne en liaison avec notre Raspberry, nous verrons comment programmer des instructions d’extinction dans un prochain article.

Quelques références

http://networkupstools.org/ le site de nut

https://doc.ubuntu-fr.org/nut  et http://ovanhoof.developpez.com/upsusb/ pour des explications assez génériques.

Quelques trucs en vrac

Problèmes de droits

En faisant un lsusb sans câble USB puis avec on voit apparaître la ligne concernant l’usb relié à l’onduleur.

dans mon cas

Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial

Je vois que l’on est sur le bus 001 , port 004

On va voir les droits par un

ls -l /dev/bus/usb/001

crw-rw-r-- 1 root root 189, 0 Dec 28 22:55 001
crw-rw-r-- 1 root root 189, 1 Dec 28 22:55 002
crw-rw-r-- 1 root root 189, 2 Dec 28 22:55 003
crw-rw-r-- 1 root nut  189, 3 Dec 28 23:04 004
crw-rw-r-- 1 root root 189, 4 Dec 28 22:55 005

on voit bien que le port 004 est associé à nut, Sinon un

sudo chgrp nut /dev/bus/usb/001/004

remet tout ça en place.

Connexion refused, data stale, init SSL

Ces messages sont souvent résolus par le fait de débrancher/rebrancher le câble usb APRES avoir changé udev/rules.d ET avoir rebooté.

Les commandes de l’onduleur

sudo upscmd -l nom_de_l_onduleur donne la liste des commandes comprises et exécutables par l’onduleur, pratique pour le piloter par scripts.

 

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

Domoticz et Dash button Amazon

Avez vous vu les boutons Amazon DASH ?

Ces objets connectés qui permettent d’un simple appui de commander des sachets de thé, de la bière, des préservatifs, en passant par la lessive et les couches pour bébé.

Résultat de recherche d'images pour "dash button"
C’est incroyable ce que le marketing peut inventer pour nous faire consommer toujours plus. 👿
Et bien luttons et utilisons le petit bouton magique ( 😳 ) pour autre chose.
Piloter un switch par exemple.
Bien sur cela existe déjà, cela peut être fait via des simple esp8266 et un bouton, mais les non bricoleurs comme moi seront heureux de trouver un gadget tout fait.

 

Ou trouver le Amazon DASH ?

Chez Amazon parait être la bonne réponse, cela nécessite un compte Amazon premium, activez ce compte (c’est gratuit un mois), commandez un/des DASH à 4.99 €, remboursés lors de la 1ere commande.

Le mois gratuit premium laisse le temps d’activer notre Dash, sinon c’est 49 € à l’année.

Comment ça marche ?

Le DASH bouton utilise le Wifi de chez vous pour passer sa commande lors de l’appui. Il se connecte au compte Amazon configuré lors de la première utilisation pour passer commande.

L’idée est donc de ne pas aller jusqu’au bout de la configuration pour éviter de commander un semi remorque de couches Pampers.

Comment fait on ?

  • Il vous faudra un téléphone Android ou Ios.
  • Vos codes d’accès Wifi
  • Le  AMAZON DASH

Je vais décrire rapidement la partie Amazon qui ne représente par la partie essentielle ici.

Il faudra télécharger l’appli Amazon dans le store.

  • Appuyez sur l’icône Menu (dans l’angle supérieur gauche).
  • Sélectionnez Votre compte.
  • Sous Appareils Dash sélectionnez Configurer un nouvel appareil.
  • Après identification vous entrerez vos codes Wifi. Je tiens à vous faire remarquer qu’ils sont stockés chez Amazon.
  • Lors de la sélection du produit à commander, quittez la procédure.

Je réécris : »On quitte donc sans choisir de produit. » après la configuration du WIFI.

stop_config

dash_no_product

N.B : Dans le menu des appareils DASH on peut supprimer un DASH.

Lire la suite

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