Lua et json svalues d'un dimmer rgb
Publié : 13 janv. 2017, 12:13
Suite a l'article de Patrice paru sur le blog : https://easydomoticz.com/lua-et-json/
J'essaye de le mettre en application en paliant a un manque sur les eclairages "dimmables" yeelight et je veux crée un dimmer "variable" avec le cube Xiaomi :
Si je le tourne de droite a gauche et que la lampe est eteinte il doit l'allumer a 5% puis incrémenté de +5 a chaque mouvement en sens horaire
Si je le tourne en sens inversse, il doit descrementé de 5% jusqu a off
Pas de soucis pour la formule je l'ai
Par contre le niveau (Level) n'apparait pas dans svalues donc je dois parser Level depuis le Json.
premiere chose :
mon ampoule a l'idx 8
me donne
Si j'applique ceci tiré de l'article
j'obtiens les infos de mon idx 1, je suis obliger de remplacer :
par
Pas de soucis avec cela sauf une correction a apporter peut etre.
Deuxieme "probleme" : comment incorporé ceci dans un script device, car a chaque fois que j'actionne quelque chose le script ce lance,
voici ce que j'ai pour le moment :
J'essaye de le mettre en application en paliant a un manque sur les eclairages "dimmables" yeelight et je veux crée un dimmer "variable" avec le cube Xiaomi :
Si je le tourne de droite a gauche et que la lampe est eteinte il doit l'allumer a 5% puis incrémenté de +5 a chaque mouvement en sens horaire
Si je le tourne en sens inversse, il doit descrementé de 5% jusqu a off
Pas de soucis pour la formule je l'ai
Par contre le niveau (Level) n'apparait pas dans svalues donc je dois parser Level depuis le Json.
premiere chose :
mon ampoule a l'idx 8
Code : Tout sélectionner
http://127.0.0.1:8080/json.htm?type=devices&rid=8 Code : Tout sélectionner
{
"ActTime": 1484303909,
"result": [
{
"AddjMulti": 1,
"AddjMulti2": 1,
"AddjValue": 0,
"AddjValue2": 0,
"BatteryLevel": 255,
"CustomImage": 0,
"Data": "Off",
"Description": "",
"Favorite": 0,
"HardwareID": 3,
"HardwareName": "yeelight",
"HardwareType": "YeeLight LED",
"HardwareTypeVal": 91,
"HaveDimmer": true,
"HaveGroupCmd": false,
"HaveTimeout": false,
"ID": "C0A8004C",
"Image": "Light",
"IsSubDevice": false,
"LastUpdate": "2017-01-13 11:38:19",
"Level": 5,
"LevelInt": 5,
"MaxDimLevel": 100,
"Name": "YeeLight",
"Notifications": "false",
"PlanID": "0",
"PlanIDs": [
0
],
"Protected": false,
"ShowNotifications": true,
"SignalLevel": "-",
"Status": "Off",
"StrParam1": "",
"StrParam2": "",
"SubType": "White",
"SwitchType": "Dimmer",
"SwitchTypeVal": 7,
"Timers": "false",
"Type": "Lighting Limitless/Applamp",
"TypeImg": "dimmer",
"Unit": 0,
"Used": 1,
"UsedByCamera": false,
"XOffset": "0",
"YOffset": "0",
"idx": "8"
}
],
"status": "OK",
"title": "Devices"
}Si j'applique ceci tiré de l'article
Code : Tout sélectionner
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://127.0.0.1:8080/json.htm?type=devices&rid=8'))
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 commandArrayCode : Tout sélectionner
nom = jsonValeur.result[1].Name
data = jsonValeur.result[1].DataCode : Tout sélectionner
nom = jsonValeur.result[8].Name
data = jsonValeur.result[8].DataDeuxieme "probleme" : comment incorporé ceci dans un script device, car a chaque fois que j'actionne quelque chose le script ce lance,
Code : Tout sélectionner
2017-01-13 12:09:46.069 User: Admin initiated a switch command (5/Xiaomi Motion Sensor/On)
2017-01-13 12:09:46.070 010FE2DE
2017-01-13 12:09:46.220 XiaomiGateway: response {"cmd":"write_ack","sid":"158d00010fe2de","data":"{\"error\":\"Unsupported device\"}"}
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0^C2017-01-13 12:09:50.795 Closing application!...
2017-01-13 12:09:50.795 Stopping worker...
Code : Tout sélectionner
json = (loadfile "/root/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.0.186:8080/json.htm?type=devices&rid=8'))
local blocjson = config:read('*all')
config:close()
--print (blocjson)
local jsonValeur = json:decode(blocjson)
nom = jsonValeur.result[8].Name
data = jsonValeur.result[8].Level
print('****************')
print(nom)
print(data)
commandArray = {}
if (devicechanged['Xiaomi Cube'] == 'clock_wise' and otherdevices['YeeLight'] == 'Off') then
commandArray['YeeLight']='On'
elseif (devicechanged['Xiaomi Cube'] == 'anti_clock_wise' and otherdevices['YeeLight'] ~= 'Off') then
commandArray['YeeLight']='Off'
end
return commandArray