Je souhaite que domoticz reçoivent des callback asynchrone (sans aucune requête de domoticz) au format JSON puis ensuite parser les données.
J'ai configuré le serveur tierce comme ceci :
Url pattern : "http://XX.XX.XX.XX:XXXX/json.htm?type=command¶m=udevices&script=test_callback.lua"
Use HTTP Method : post
Content type : application/json
Body:
Code : Tout sélectionner
{
"deviceID" : "{device}",
"data" : "{data}",
"ULcounter" : "{customData#ULcounter}",
"unused" : "{customData#unused}",
"unused_" : "{customData#unused_}",
"Temp_en_degres" : "{customData#Temp_en_degres}",
"Tension_Batterie_en_mV" : "{customData#Tension_Batterie_en_mV}"
}POST "http://XX.XX.XX.XX:XXXX/json.htm?type=command¶m=udevices&script=test_callback.lua HTTP/1.0"
content-length : 207
accept-encoding : gzip,deflate
accept-language : fr
host : XX.XX.XX.XX:XXXX
user-agent : XXXXXX
accept-charset : UTF-8;q=0.9,*;q=0.7
content-type : application/json
{
"deviceID" : "B131",
"data" : "000000020000000000160c75",
"ULcounter" : "2",
"unused" : "0",
"unused_" : "0",
"Temp_en_degres" : "22",
"Tension_Batterie_en_mV" : "3189"
}
Pour la réception des données du JSON puis parser celle-ci, coté Domoticz j'ai utilisé le script LUA d'exemple suivant pour réaliser les essais :
Idx domoticz : 8
répertoire : lua_parsers
File : test_callback.lua
Code : Tout sélectionner
-- Retrieve the request content
s = request['content'];
print (s)
-- Update some devices (index are here for this example)
--local id = domoticz_applyJsonPath(s,'.id')
local temp = domoticz_applyJsonPath(s,'.Temp_en_degres')
domoticz_updateDevice(8,'',temp)2018-09-17 12:49:05.302 CLuaHandler: udevices:
2018-09-17 12:49:05.303 Error: CLuaHandler (applyJsonPath from LUA) : Invalid Json data received
2018-09-17 12:49:05.303 Error: CLuaHandler (updateDevice from LUA) : Incorrect parameters type
Le script est bien exécuté à la réception du callback mais je ne comprends pas le "udevices" du print, ou est mon erreur
Merci de vos lumières et aide