Page 1 sur 1

Réception de callback json asynchrone

Publié : 19 sept. 2018, 09:24
par Fredquerty
Bonjour à tous
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&param=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}"
}
Le JSON envoyé est celui ci

POST "http://XX.XX.XX.XX:XXXX/json.htm?type=command&param=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)
Dans le log de domoticz j'ai ceci :

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