Chez vous c’est open bar ou pas ?

La lecture du blog de korben.info et cet article particulier http://korben.info/scanner-iot.html m’ a donné l’idée de vous alerter sur les aspects de sécurité liés à nos configurations.

En effet la plupart d’entre nous, suivant les tutos ici et la, ouvrent leurs webcams, Domoticz au monde entier sans forcement beaucoup de vigilance vis à vis des hackers du dimanche.

En effet une fois les ports ouverts, redirigés vers Domoticz, ou la webcam connectée à Internet, on oublie souvent que ces équipements sont exposés 24/24 aux scripts kiddies ou bots et que quelques précautions suffiraient à se protéger contre la majorité des attaques.

Nous verrons dans d’autres articles à suivre les quelques mesures à prendre pour sécuriser notre installation.

Toutefois ici pour commencer je vous propose de vérifier comment vous êtes visibles sur Internet puis si vous êtes déjà dans une basse de données d’objets connectés.

Allez tester ici http://iotscanner.bullguard.com/search si votre installation ne s’expose pas trop aux hackers en entrant votre ip publique, celle de mon-ip.com .

Normalement vous ne devriez trouver que des ports ouverts/redirigés que vous connaissez (ceux de Domoticz, de vos cams, sites en autohébergement, … ), bref que des choses que vous avez définies vous même.

Attention ce n’est pas parce que cet outil vous dit que vous êtes vulnérable qu’il faut paniquer à mort. En effet si vous avez une box Internet qui vous permet de téléphoner via SIP, il est fort probable qu’elle soit vue par le scanner mais pas pour autant accessible au premier quidam venu.

 

Regardez dans cet outil si vous n’avez pas trop de ports ouverts.

D’autre part :

Avez vous déjà été sondé par les robots des hackers de l’internet des objets et êtes vous dans leur basse de données ?

vérifiez ici : https://censys.io/

et ici surtout : https://www.shodan.io/  si vous trouvez l’IP de votre frigo, d’une de vos webcam …

et amusez vous dans l’outil explore :

https://www.shodan.io/explore avec les termes de recherche « default password » domoticz

ou on trouve quelques MyDomoAtHome »

Vous êtes dans la liste ?

 

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

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/