Après plusieurs année d’utilisation de l’IPX, j’ai découvert par hasard domoticz.
L’IPX étant parfaitement autonome je n’utilisais jusqu’à présent que imperihome sous Android.
Ayant des produits Z-wave , je souhaite piloter l’ensemble sous raspberry et c’est la que j’ai découvert Domotics.
Ma question,
J’ai retourné le pb dans tout les sens, je n’arrive pas à configurer Domotics pour voir apparaître l’état des sorties par exemple…
J’ai bien compris que cela passait par du Json (version firmawre ok) , mais je bloque dès le départ.
Quel matériel faut-il configurer dans le menu réglages de domotics ?
Voici comment communiquer en json avec DomoticZ : https://www.domoticz.com/wiki/Domoticz_API/JSON_URL’s
Le retour d’état de l’IPX ce fait via PUSH
Et pour le sens inverse il faut faire la même chose avec l’api de l’ipx
j’utilise ipx800 + domoticz +zwave depuis 3ans. Pour les analogs il n’etait pas possible à l’époque de faire du push depuis l’ipx donc ul fallait faire un script qui lit le xml ou interroge en json toutes les min. ca marche tres bien
Bonjour, je cherche justement à récupérer les entrées analogique (Temperatures) et à les importer dans DomoticZ, pourriez vous partager votre façon de procéder ?
Merci
Bon, j’y suis arrivé !
J’ai trouvé un vieux message et à partir de là j’ai bricolé un script bash existant que je laisse ici pour les suivants :
#!/bin/bash
IPX800=XXX.XXX.XXX.XXX
LOGFILE=« /var/log/domoticz/ipx800.log »
DOMOTICZSERVER=XXX.XXX.XXX
DOMOTICZPORT=8080
#Créer avant vos sondes de température virtuelle dans DomoticZ (Hardware > Dummy > Create > Temperature) puis récupérer les IDX et ajoutez les ci-après :
IDX_TEMP_1=XXXX
IDX_TEMP_2=XXXX
IDX_TEMP_3=XXXX
IDX_TEMP_4=XXXX
if ping -c 1 $IPX800 > /dev/null ; then # if host is online then #Retrieve temperatures from IPX800 - Mettez vos identifiants / mot de passe à la place des XXXXX
curl --silent ‹ http://XXXXX:XXXXX@ ›$IPX800’/admin/status.xml’ > $LOGFILE
for i in 1 2 3 4
do #report Temperature
eval IDX=‹ $‹ IDX_TEMP_$i
eval TEMP= ›$‹ TEMP_$i #Mettez vos identifiants / mot de passe à la place des XXXXX
curl --silent http://XXXXX:XXXXX@$DOMOTICZSERVER:$DOMOTICZPORT ›/json.htm?type=command¶m=udevice&idx= ›$IDX’&nvalue=0&svalue='$TEMP > /dev/null
done
else
echo « IPX800 not responding to ping, is it connected to LAN? »
fi
bonjour, pas eu le temps de repondre avant, je te conseille d’utiliser lua ce qui permet de tout sauvegarder avec la base domoticz et de ne pas gerer le repertoire scripts ni un crontab, voila comment je fais, je n’ai pas bouclé volontairement pour le debug je trouve ca plus simple sinon ca tient en 3 lignes. les formules sont adaptees au type d’analog, cdialt, MyFunc est mon fichier ou je mets toutes mes fonctions, il faut les resaisir ici, ex: My.round est une fonction arrondie de type:
function My.Round(num, idp)
local mult = 10^(idp or 0)
return math.floor(num * mult + 0.5) / mult
end
commandArray = {}
json = (loadfile « /home/pi/domoticz/scripts/lua/JSON.lua »)() – For Linux
package.path = package.path … ‹ ; › … ‹ /home/pi/domoticz/scripts/lua/?.lua ›
My = require(‹ MyFunc ›)
DeviceLuaMstr = uservariables[« LUA_MasterSW »] – LUA_MasterSW
if (otherdevices[DeviceLuaMstr]) == ‹ On › then
local util=‹ xxx › – utilisateur ipx
local mdp=‹ xxx › – passwd ipx
local url_ipx800=‹ 192.168.x.x › – ip ipx800
local url_domoticz = ‹ 192.168.x.x › – ip domoticz
-- API IPX800
local config=assert(io.popen('curl http://'..util..':'..mdp..'@'..url_ipx800..'/api/xdevices.json?cmd=30'))
local analog = config:read('*all')
config:close()
local jsonAnalog = json:decode(analog)
--maj chamb parents enfants bb ami
Analog1 = My.Round((jsonAnalog.AN1* 0.323) - 50, 2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=50&nvalue=0&svalue='.. Analog1 }
Analog2 = My.Round(((jsonAnalog.AN2/308.998)-0.25)/0.028,2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=726&nvalue=0&svalue='.. Analog2 }
Analog3 = My.Round(((jsonAnalog.AN3/308.998)-0.25)/0.028,2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=54&nvalue=0&svalue='.. Analog3}
Analog4 = My.Round(((jsonAnalog.AN4/308.998)-0.25)/0.028,2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=53&nvalue=0&svalue='.. Analog4}
Analog5 = My.Round((((jsonAnalog.AN5* 0.00323 /3.3)-0.1515)) / 0.00636 , 2)
--commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=406&nvalue=0&svalue='.. Analog5} --humsalon2
Analog6 = My.Round(((jsonAnalog.AN6* 0.00323) - 1.63) / 0.0326, 2)
--commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=404&nvalue=0&svalue='.. Analog6} --temp salon2
Analog7 = My.Round(jsonAnalog.AN7, 0)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=405&nvalue=0&svalue='.. Analog7} --lux salon2
--MAJ temp/hum salon2
if Analog5<40 then --permet de definir l humidité
humstatus=2
end
if Analog5>=40 and Analog5<70 then
humstatus=1
end
if Analog5>=70 then
humstatus=3
end
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=750&nvalue=0&svalue='.. Analog6 ..';'.. Analog5..';'..humstatus}
--/json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT
end
return commandArray
@Hache, merci de ce retour, d’un point de vue technique, le script bash que j’ai modifié agit pareil, notez que les données sont également bien stockés dans DomoticZ.
L’avantage du script lua est qu’un néophyte aura plus de faciliter à le mettre en place.
Une procédure plus détaillé pourrait être bienvenue, car après lecture de votre script je ne vois qu’une référence au json de l’IPX : « /api/xdevices.json?cmd=30 » qui pour moi ne renvois qu’une erreur…
Il me semble d’ailleurs avoir été contraint de récupérer les données du status.xml parce que les informations des entrées analogique n’étaient pas disponible entité par entité via « xdevices » sur l’IPX (&Get=A).
Après, j’ai de bonne connaissance, mais je ne suis ni développeur, ni expert…
Toutes les valeurs des analogues que je parse ensuite, on peut faire la même chose avec le xml
bien sur que les données de température sont stockées dans domoticz avec votre batch, néammoins cela implique de sauvegarder le repertoire du batch et le crontab de linux, alors que si le script est directement en base de domoticz, il suffit de seulement sauvegarder la base de domoticz et on peut même envisager de migrer vers une plateforme windows sans problème, voila pour les avantages, après tant que ca marche…
bonne soiree
@Hache, nous aurions dû débuter par cela… j’utilise une V4… C’est donc pour cela que « cmd=30 » ne fonctionne pas chez moi.
Oui, effectivement, mon fichier « bash » est hors domoticz, cependant, cela ne présente pas de problème puisque je sauvegarde la machine complète de façon journalière et non pas domoticz seul, enfin, il n’y a aucun risque pour que je migre mon serveur de domotique sur une marchine windows, d’une pars parce que je n’en ai pas et n’envisage pas d’en avoir et que je préfère dédié un petit Raspberry Pi à l’opération, facile à placer n’importe ou et qui tourne sous Linux, une simple copie de l’image disque suffit à le rendre à nouveau opérationnel.
bonjour , je récupère les données d’un sonde tc110 que j’envoie sur domoticz, j’aimerai savoir comment formater la réponse json de l’ipx afin de n’avoir qu’une décimale ? , actuellement je renvoie , une valeur avec 10 décimales , et pas moyen de formater , afin d’en avoir qu’une .merci de votre aide
colt