Page 2 of 22
Re: Controlling Toon [HACKED] from Domoticz
Posted: Thursday 09 March 2017 18:48
by manyakim
Hello, i've tried all the above, but still getting the following error message :
2017-03-09 18:46:00.470 Error: EventSystem: in Toon iets: [string "-- Time script runs every minute, intended to..."]:26: attempt to index global 'jsonThermostatInfo' (a nil value)
Did someone was able to adress what's causing this error messages ?
Thanks
Re: Controlling Toon [HACKED] from Domoticz
Posted: Tuesday 14 March 2017 10:07
by balans
I`m also having the same error`s running on a linux system.
applying changes from Domotics arrive on the Toon.
But the info/changes from Toon to Domoticz don`t.
I guess there might be the problem but i dont have any lua knowledge to fix it
I followed the guidings in this topic.
So i guess i might be missing something
Re: Controlling Toon [HACKED] from Domoticz
Posted: Monday 27 March 2017 21:13
by Timeless
I've added several improvements.
- Check each value for a nil value (in case of a failed request)
- Changed all global allocations to local. This is to prevent a memory leak. (This is how LUA works)
- Added a timeout to curl (
--max-time) which will prevent the script from running for more than 10 seconds and thus decreasing the warnings, in case Toon can't be reached. Please take note that this will also ignore the values for that particular request.
Please change the line "local json = assert(loadfile "/opt/domoticz/scripts/lua/JSON.lua")()" accordingly
If this script fails, please check if the url "
http://127.0.0.1/happ_thermstat?action=getThermostatInfo"(change IP/hostname) can be reached from another device, and returns valid JSON.
Code: Select all
-- Time script runs every minute, intended to sync Domoticz with Toon in case the value is changed on the physical device.
-- Updates Toon Thermostat Sensor to value set on Toon
-- Updates Toon Temperature Sensor to value set on Toon
-- Updates Toon Scenes switch based on program set on Toon
-- Updates Toon Auto Program switch to value set on Toon
-- Updates Toon program information text to value set on Toon
commandArray = {}
local ToonThermostatSensorName = uservariables['UV_ToonThermostatSensorName'] -- Sensor showing current setpoint
local ToonTemperatureSensorName = uservariables['UV_ToonTemperatureSensorName'] -- Sensor showing current room temperature
local ToonScenesSensorName = uservariables['UV_ToonScenesSensorName'] -- Sensor showing current program
local ToonAutoProgramSensorName = uservariables['UV_ToonAutoProgramSensorName'] -- Sensor showing current auto program status
local ToonProgramInformationSensorName = uservariables['UV_ToonProgramInformationSensorName'] -- Sensor showing displaying program information status
local ToonIP = uservariables['UV_ToonIP']
local DomoticzIP = uservariables['UV_DomoticzIP']
local ToonProgramInformationSensorValue;
local json = assert(loadfile "/opt/domoticz/scripts/lua/JSON.lua")() -- For Linux (LEDE)
local handle = assert(io.popen(string.format('curl -m 5 http://%s/happ_thermstat?action=getThermostatInfo', ToonIP)))
local ThermostatInfo = handle:read('*all')
handle:close()
local jsonThermostatInfo = json:decode(ThermostatInfo)
if jsonThermostatInfo ~= nil then
local currentSetpoint = tonumber(jsonThermostatInfo.currentSetpoint) / 100
local currentTemperature = tonumber(jsonThermostatInfo.currentTemp) / 100
local currentProgramState = tonumber(jsonThermostatInfo.programState)
local currentActiveState = tonumber(jsonThermostatInfo.activeState)
local currentNextTime = jsonThermostatInfo.nextTime
local currentNextSetPoint = tonumber(jsonThermostatInfo.nextSetpoint) / 100
if currentSetpoint ~= nil then
-- Update the thermostat sensor to current setpoint
if otherdevices_svalues[ToonThermostatSensorName]*100 ~= currentSetpoint*100 then
print('Updating thermostat sensor to new set point: ' ..currentSetpoint)
commandArray[1] = {['Variable:UV_ToonChangedByDomoticz'] = '1'} -- Set variable changed to 1 to prevent script ToonSetPoint from shooting an event at Toon
commandArray[2] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonThermostatSensorName], currentSetpoint)}
end
end
if currentTemperature ~= nil then
-- Update the temperature sensor to current room temperature
if otherdevices_svalues[ToonTemperatureSensorName]*100 ~= currentTemperature*100 then
print('Updating the temperature sensor to new value: ' ..currentTemperature)
commandArray[3] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonTemperatureSensorName], currentTemperature)}
end
end
if currentActiveState ~= nil then
-- Update the toon scene selector sensor to current program state
local CurrentToonScenesSensorValue = otherdevices_svalues[ToonScenesSensorName]
if currentActiveState == -1 then currentActiveState = '50' -- Manual
elseif currentActiveState == 0 then currentActiveState = '40' -- Comfort
elseif currentActiveState == 1 then currentActiveState = '30' -- Home
elseif currentActiveState == 2 then currentActiveState = '20' -- Sleep
elseif currentActiveState == 3 then currentActiveState = '10' -- Away
end
if CurrentToonScenesSensorValue ~= currentActiveState then -- Update toon selector if it has changed
print ('Updating Toon Scenes selector')
commandArray[4] = {['UpdateDevice'] = string.format('%s|1|%s', otherdevices_idx[ToonScenesSensorName], currentActiveState)}
end
end
if currentProgramState ~= nil then
-- Updates the toon auto program switch
local CurrentToonAutoProgramSensorValue = otherdevices_svalues[ToonAutoProgramSensorName]
if currentProgramState == 0 then currentProgramState = '10' -- No
elseif currentProgramState == 1 then currentProgramState = '20' -- Yes
elseif currentProgramState == 2 then currentProgramState = '30' -- Temporary
end
if CurrentToonAutoProgramSensorValue ~= currentProgramState then -- Update toon auto program selector if it has changed
print ('Updating Toon Auto Program selector')
commandArray[5] = {['UpdateDevice'] = string.format('%s|1|%s', otherdevices_idx[ToonAutoProgramSensorName], currentProgramState)}
end
end
if currentNextTime ~= nil and currentNextSetPoint ~= nil then
-- Updates the toon program information text box
local CurrentToomProgramInformationSensorValue = otherdevices_svalues[ToonProgramInformationSensorName]
if currentNextTime == 0 or currentNextSetPoint == 0 then
ToonProgramInformationSensorValue = 'Op ' ..currentSetpoint.. '°'
else
ToonProgramInformationSensorValue = 'Om ' ..os.date('%H:%M', currentNextTime).. ' op ' ..currentNextSetPoint.. '°'
end
if CurrentToomProgramInformationSensorValue ~= ToonProgramInformationSensorValue then
commandArray[6] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonProgramInformationSensorName], ToonProgramInformationSensorValue)}
end
end
end
--
return commandArray
Re: Controlling Toon [HACKED] from Domoticz
Posted: Thursday 06 April 2017 13:51
by balans
Hi sorry for the late reply
when i reach for toon i get a
Code: Select all
{"result":"ok", "currentTemp":"2058", "currentSetpoint":"1800", "currentInternalBoilerSetpoint":"6", "programState":"1", "activeState":"3", "nextProgram":"1", "nextState":"0", "nextTime":"1491490800","nextSetpoint":"2000","randomConfigId":"1681692777","errorFound":"255","connection":"0","burnerInfo":"0","otCommError":"0","currentModulationLevel":"0"}
but when running youre new script and the modded folder i still and up with the same
Code: Select all
2017-04-06 13:49:00.998 Error: EventSystem: in toonsync: [string "-- Time script runs every minute, intended to..."]:37: attempt to perform arithmetic on field '?' (a nil value)
Re: Controlling Toon [HACKED] from Domoticz
Posted: Thursday 06 April 2017 15:13
by QuasaR
I am also having issue's with the new script.
Code: Select all
2017-04-06 15:10:04.966 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_synctoon.lua: /home/pi/domoticz/scripts/lua/JSON.lua:1009: /home/pi/domoticz/scripts/lua/JSON.lua:660: expected string's opening quote at char 353 of: {"result":"ok", "currentTemp":"2170", "currentSetpoint":"2100", "currentInternalBoilerSetpoint":"6", "programState":"1", "activeState":"1", "nextProgram":"1", "nextState":"0", "nextTime":"1491503400","nextSetpoint":"2200","randomConfigId":"1804289383","errorFound":"255","connection":"0","burnerInfo":"0","otCommError":"0","currentModulationLevel":"0",}
2017-04-06 15:11:00.313 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_synctoon.lua: /home/pi/domoticz/scripts/lua/JSON.lua:1009: /home/pi/domoticz/scripts/lua/JSON.lua:660: expected string's opening quote at char 353 of: {"result":"ok", "currentTemp":"2170", "currentSetpoint":"2100", "currentInternalBoilerSetpoint":"6", "programState":"1", "activeState":"1", "nextProgram":"1", "nextState":"0", "nextTime":"1491503400","nextSetpoint":"2200","randomConfigId":"1804289383","errorFound":"255","connection":"0","burnerInfo":"0","otCommError":"0","currentModulationLevel":"0",}
2017-04-06 15:12:03.634 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_synctoon.lua: /home/pi/domoticz/scripts/lua/JSON.lua:1009: /home/pi/domoticz/scripts/lua/JSON.lua:660: expected string's opening quote at char 353 of: {"result":"ok", "currentTemp":"2170", "currentSetpoint":"2100", "currentInternalBoilerSetpoint":"6", "programState":"1", "activeState":"1", "nextProgram":"1", "nextState":"0", "nextTime":"1491503400","nextSetpoint":"2200","randomConfigId":"1804289383","errorFound":"255","connection":"0","burnerInfo":"0","otCommError":"0","currentModulationLevel":"0",}
I think it has todo with the , at the end of the line before the }.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Thursday 13 April 2017 19:17
by balans
I sorted my problems i had made i typo
temparature instead of temperature in the events list
that was al the cullprit..
running great now. Thank everybody involved for the scripts and modifications on the scripts
now start looking for al solution to read the allready logged power gas from domoticz in the toon. So i`m up for a hint
Re: Controlling Toon [HACKED] from Domoticz
Posted: Wednesday 10 May 2017 17:59
by terrorsource
I want to control my Toon from Domoticz, which is being controlled by HomeBridge (So i can use Siri to set the temperature).
Already have the LUA code in place. it's reading the environment temperature correctly but Domoticz won't update the temperature in Toon when i change it.
Code: Select all
-- Script used for Toon Thermostaat utility device, upon changing temp in Domoticz, temperature is sent to Toon.
commandArray = {}
ToonThermostatSensorName = uservariables['UV_ToonThermostatSensorName'] -- Sensor showing current setpoint
ToonIP = uservariables['UV_ToonIP']
for deviceName,deviceValue in pairs(devicechanged) do
if (deviceName == ToonThermostatSensorName) then
if uservariables['UV_ToonChangedByDomoticz'] == 1 then
commandArray['Variable:UV_ToonChangedByDomoticz'] = '0'
else
SetPoint = otherdevices_svalues[ToonThermostatSensorName]
print('Setting Toon setpoint to '.. SetPoint)
commandArray['OpenURL'] = string.format('http://%s/happ_thermstat?action=setSetpoint&Setpoint=%s', ToonIP, SetPoint*100)
end
end
end
return commandArray
Is working, but gives an error in logs:
Error: EventSystem: in ToonThermostat: [string "-- Script used for Toon Thermostaat utility d..."]:8: bad argument #1 to 'pairs' (table expected, got nil)
Shortend version of 1 of the previous scripts:
Code: Select all
commandArray = {}
ToonThermostatSensorName = uservariables['UV_ToonThermostatSensorName'] -- Sensor showing current setpoint
ToonIP = uservariables['UV_ToonIP']
json = assert(loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Raspberry
local handle = assert(io.popen(string.format('curl http://%s/happ_thermstat?action=getThermostatInfo', ToonIP)))
local ThermostatInfo = handle:read('*all')
handle:close()
jsonThermostatInfo = json:decode(ThermostatInfo)
currentSetpoint = tonumber(jsonThermostatInfo.currentSetpoint) / 100
-- Update the thermostat sensor to current setpoint
if otherdevices_svalues[ToonThermostatSensorName]*100 ~= currentSetpoint*100 then
print('Updating thermostat sensor to new set point: ' ..currentSetpoint)
commandArray[1] = {['Variable:UV_ToonChangedByDomoticz'] = '1'} -- Set variable changed to 1 to prevent script ToonSetPoint from shooting an event at Toon
commandArray[2] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonThermostatSensorName], currentSetpoint)}
end
return commandArray
Does not work, error in logs:
Error: EventSystem: Warning!, lua script ToonThermostat has been running for more than 10 seconds
We need some way to combine those 2 so we get 1 script without errors.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Friday 26 May 2017 12:26
by odelay
I got a rooted Toon and followed the procedure to control it with domoticz. Everything seems to work ok exept I can't set the Toon Thermostat from domoticz. The same as terrorsource mentioned.
I also got this error message every minute:
error: EventSystem: in toon: [string "-- Script used for Toon Thermostaat utility d..."]:8: bad argument #1 to 'pairs' (table expected, got nil)
Anyone know how to fix this?
thanks!
Re: Controlling Toon [HACKED] from Domoticz
Posted: Monday 29 May 2017 22:49
by terrorsource
odelay wrote:I got a rooted Toon and followed the procedure to control it with domoticz. Everything seems to work ok exept I can't set the Toon Thermostat from domoticz. The same as terrorsource mentioned.
I also got this error message every minute:
error: EventSystem: in toon: [string "-- Script used for Toon Thermostaat utility d..."]:8: bad argument #1 to 'pairs' (table expected, got nil)
Anyone know how to fix this?
thanks!
Well, i'm able to set the temperature with both scripts. still having the error in the logs tho.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Tuesday 30 May 2017 16:10
by odelay
Did you changed anything since? because you wrote:
"it's reading the environment temperature correctly but Domoticz won't update the temperature in Toon when i change it."
That is exactly what I experience at the moment.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Thursday 01 June 2017 10:24
by EdwinK
Looks interesting to do, even if it was only to control the Toon from Domoticz, something that isn't possible anymore. But... I just don't dare.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Thursday 01 June 2017 14:24
by marcelr
EdKo66 wrote:Looks interesting to do, even if it was only to control the Toon from Domoticz, something that isn't possible anymore. But... I just don't dare.
There are plenty people around at the domoticaforum.eu forum to help you out.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Saturday 08 July 2017 21:08
by DennisD
Sorry, didn't want to open a new topic for this hacked toon question I got. I want to have my gas usage displayed in domoticz did anybody accomplished this? Can't seem to find it.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Wednesday 12 July 2017 21:12
by BlackysBoss
terrorsource wrote:Does not work, error in logs:
Error: EventSystem: Warning!, lua script ToonThermostat has been running for more than 10 seconds
We need some way to combine those 2 so we get 1 script without errors.
The scripts in the first post works perfectly (After discovering a few typo's and deleting an unused variable).
The '10 seconds' problem seems to be caused by Domoticz itself:
viewtopic.php?t=12579
Oh, and I'm trying to get rid of the 'Manual' and 'Temporary' setting. I get how it works, but Toon doesn't show this, so what do I need it for in Domoticz?
Re: Controlling Toon [HACKED] from Domoticz
Posted: Tuesday 18 July 2017 11:44
by Timeless
Oh, and I'm trying to get rid of the 'Manual' and 'Temporary' setting. I get how it works, but Toon doesn't show this, so what do I need it for in Domoticz?
Correct me if I'm wrong but these states are used by toon? when the schedule is running and the temperature is manually set on Toon itself it will change it state to manual for example. Same applies to Temporary but then just for a limited time without schedule running.
Sorry, didn't want to open a new topic for this hacked toon question I got. I want to have my gas usage displayed in domoticz did anybody accomplished this? Can't seem to find it.
I've seen some functions indicating JSON output about gas and electric usage when I was browsing in Toon. But since I don't use those features (missing the Zwave sensor adaptor) I cannot verify if they work.
try:
Code: Select all
http://127.0.0.1/hdrv_zwave?action=getDevices.json
with 127.0.0.1 replaced by your Toon IP and see if this gives some valid output.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Wednesday 19 July 2017 20:59
by DennisD
Already figured out the gas usage, forgot to post it here
For the other values you want to pull from your toon, read this post (bit old, but files still function):
https://www.domoticaforum.eu/viewtopic. ... oot#p77453 . I will attach all files to this post just to share!
For the gas_data_json file (modified electricity_data_json file):
Goto http://ip_toon/hdrv_zwave?action=getDevices.json and look for:
Code: Select all
"dev_3.1":{"uuid":"eneco-001-018946:hdrv_zwave_68927F8D936", "name":"HAE_METER_v2_1", "internalAddress":"3.1", "type":"gas", "supportsCrc":"0", "CurrentGasFlow":"0.00", "CurrentGasQuantity":"3080.00", "location":"(null)"},
. The most important bit is the dev_3.1 part because that can be different in other toons. Open gas_date_json.php and search for:
Code: Select all
$gasUsage= $parsed_json['dev_3.1']['CurrentGasQuantity'];
now change the dev_3.1 to the one you have in the mentioned url. Make sure you change the ip_toon to the ip your toon has and also make a gasmeter (add virtual sensor) and fill in the idx. If you upload to mindergas you could also add your gas meter value to the following line:
Code: Select all
$gasUsage= $parsed_json['dev_3.1']['CurrentGasQuantity'] + yourmetervalue;
Now domoticz will have the actual meter value and you can upload it to mindergas.
Re: Controlling Toon [HACKED] from Domoticz
Posted: Saturday 05 August 2017 17:31
by JeDr
QuasaR wrote:I am also having issue's with the new script.
Code: Select all
2017-04-06 15:10:04.966 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_synctoon.lua: /home/pi/domoticz/scripts/lua/JSON.lua:1009: /home/pi/domoticz/scripts/lua/JSON.lua:660: expected string's opening quote at char 353 of: {"result":"ok", "currentTemp":"2170", "currentSetpoint":"2100", "currentInternalBoilerSetpoint":"6", "programState":"1", "activeState":"1", "nextProgram":"1", "nextState":"0", "nextTime":"1491503400","nextSetpoint":"2200","randomConfigId":"1804289383","errorFound":"255","connection":"0","burnerInfo":"0","otCommError":"0","currentModulationLevel":"0",}
I think it has todo with the , at the end of the line before the }.
Add the following to your script_time_synctoon.lua file below the "handle:close()" part at about rule 23:
ThermostatInfo = ThermostatInfo:gsub("%,}", "}")
This should be something like:
Code: Select all
local handle = assert(io.popen(string.format('curl http://%s/happ_thermstat?action=getThermostatInfo', ToonIP)))
local ThermostatInfo = handle:read('*all')
handle:close()
ThermostatInfo = ThermostatInfo:gsub("%,}", "}") --Add this to replace ,} with } for valid JSON string
jsonThermostatInfo = json:decode(ThermostatInfo)
Re: Controlling Toon [HACKED] from Domoticz
Posted: Sunday 13 August 2017 9:48
by qwerk
Hello, I Hacked my Toon and it is working Domoticz.
thanks for that !!
on my main screen I have two errors .
An explanation mark in my WiFi symbol
And an warning sign ,that has to do with not reaching Eneco.
does anyone know a way to remove these?
Re: Controlling Toon [HACKED] from Domoticz
Posted: Sunday 13 August 2017 15:11
by marcelr
Re: Controlling Toon [HACKED] from Domoticz
Posted: Sunday 13 August 2017 16:18
by qwerk
thank you , my error on the WiFi sign is gone.