Ipx800 V3 et Domoticz

Bonjour à tous et bonne année 2017 !

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 ?

Je réalise mes test sous Windows.

Merci pour vos lumières
Olivier

Avez-vous essayé de poser votre question sur le forum de Domoticz ?

Je pense que vous aurez plus de chance d’avoir une réponse.

1 « J'aime »

Bonjour,

Je vais regarder de ce côté

Merci

Bonjour
Est ce que vous avez eu des reponse parceque sa m interresse ,je voudrait faire la meme chose avec une v4

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

1 « J'aime »

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

Bonjour,
ci joint un lien qui peut vous interresser:
http://www.domotique-info.fr/2015/05/ipx-800-integration-des-mesures-analogiques-a-la-zibase/

http://www.myipx800.com/index.php?post/2012/09/25/Le-fichier-status.xml

Cordialement

1 « J'aime »

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

TEMP_1=$(cat $LOGFILE | grep «  » | cut -d « > » -f2 | cut -d « < » -f1)
TEMP_1=$(echo ‹ scale=1; ›« $TEMP_1*0.323-50.1 » | bc | awk ‹ {printf(« %.1f\n », $1)} ›)

TEMP_2=$(cat $LOGFILE | grep «  » | cut -d « > » -f2 | cut -d « < » -f1)
TEMP_2=$(echo ‹ scale=1; ›« $TEMP_2*0.323-50.1 » | bc | awk ‹ {printf(« %.1f\n », $1)} ›)

TEMP_3=$(cat $LOGFILE | grep «  » | cut -d « > » -f2 | cut -d « < » -f1)
TEMP_3=$(echo ‹ scale=1; ›« $TEMP_3*0.323-50.1 » | bc | awk ‹ {printf(« %.1f\n », $1)} ›)

TEMP_4=$(cat $LOGFILE | grep «  » | cut -d « > » -f2 | cut -d « < » -f1)
TEMP_4=$(echo ‹ scale=1; ›« $TEMP_3*0.323-50.1 » | bc | awk ‹ {printf(« %.1f\n », $1)} ›)

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&param=udevice&idx= ›$IDX’&nvalue=0&svalue='$TEMP > /dev/null
done

else
echo « IPX800 not responding to ping, is it connected to LAN? »
fi

3 « J'aime »

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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=udevice&idx=750&nvalue=0&svalue='.. Analog6 ..';'.. Analog5..';'..humstatus}
 --/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT
 end
   return commandArray
2 « J'aime »

@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…

rebonjour, voila ce qu’envoi la cmd30 sur une ipx800v3:

 {"product":"IPX800_V3","AN1":228,"AN2":288,"AN3":285,"AN4":284,"AN5":602,"AN6":754,"AN7":22,"AN8":0,"AN9":0,"AN10":0,"AN11":0,"AN12":0,"AN13":0,"AN14":0,"AN15":0,"AN16":0}

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.

En tout cas merci pour le partage!

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

je me répond , ayant trouvé une solution ,

TEMP=$(awk "BEGIN {printf \"%.1f\",${TEMP}/0.028*0.000050354-0.25/0.028}").