Toon app: boiler status

Forum about forum-provided applications on Toon

Moderators: marcelr, TheHogNL, Toonz

Post Reply
Hypermobile
Member
Member
Posts: 76
Joined: Sun Jan 14, 2018 5:12 pm

Re: Toon app: boiler status

Post by Hypermobile »

Adjusted somebody elses Script to get it to work with this new app:

It's for Domoticz:
1) make 5 UV_variables in domoticz
UV_ToonIP => {STRING} =192.168.x.x
UV_DomoticzIP => {STRING} = 192.168.x.x
UV_ToonboilerInTempName => {STRING} = BoilerInletTemp
UV_ToonboilerOutTempName => {STRING} = BoilerOutletTemp
UV_BoilerPressure => {STRINT} = BoilerPressure

2) Create 3 dummy sensor; with Name BoilerInletTemp, BoilerOutletTemp, BoilerPressure

3) Create a LUA TIME Event copy paste script.

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 ToonboilerOutTempName Sensor to value set on Toon
-- Updates Toon ToonboilerInTempName Sensor to value set on Toon
-- Updates Toon ToonboilerPressure sensor to value set on Toon 

commandArray = {}
    
    ToonboilerInTempName = uservariables['UV_ToonboilerInTempName'] -- Sensor inlet temperature
    ToonboilerOutTempName = uservariables['UV_ToonboilerOutTempName'] -- Sensor outlet temperature
    ToonboilerPressure  =   uservariables['UV_ToonboilerPressure'] -- ToonboilerPressure
    
  	ToonIP = uservariables['UV_ToonIP']
    DomoticzIP = uservariables['UV_DomoticzIP']

    json = assert(loadfile "/usr/local/domoticz/var/scripts/lua/JSON.lua")()  -- For Synology
    
local handle = assert(io.popen(string.format('curl http://%s/boilerstatus/boilervalues.txt', ToonIP)))
   local BoilerInfo = handle:read('*all')
handle:close()

-- JSON data from Toon contains a extra "," which should not be there.
BoilerInfo = string.gsub(BoilerInfo, ",}", "}")

jsonBoilerInfo = json:decode(BoilerInfo)
    
    currentboilerInTemp = tonumber(jsonBoilerInfo.boilerInTemp)
    currentboilerOutTemp = tonumber(jsonBoilerInfo.boilerOutTemp)
    currentboilerPressure = tonumber(jsonBoilerInfo.boilerPressure)
   
    -- Update the boilerInTemp
    if otherdevices_svalues[ToonboilerInTempName]*100 ~= currentboilerInTemp*100 then  
        print('Updating boiler inlet temp to new value: ' ..currentboilerInTemp)
        commandArray[1] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonboilerInTempName], currentboilerInTemp)}
    end
    
    -- Update the boilerOutTemp
    if otherdevices_svalues[ToonboilerOutTempName]*100 ~= currentboilerOutTemp*100 then 
        print('Updating boiler outlet temp to new value: ' ..currentboilerOutTemp)
        commandArray[2] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonboilerOutTempName], currentboilerOutTemp)}
    end

    -- Update the boilerPressure
    if otherdevices_svalues[ToonboilerPressure]*100 ~= currentboilerPressure*100 then 
        print('Updating boiler pressure to new value: ' ..currentboilerPressure)
        commandArray[3] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonboilerPressure], currentboilerPressure)}
    end

return commandArray
---EDITTED: added Pressure measurement
---EDITTED: added *100 to let the IF THEN work Correct
Last edited by Hypermobile on Sun Jan 21, 2018 5:09 pm, edited 5 times in total.
Hypermobile
Member
Member
Posts: 76
Joined: Sun Jan 14, 2018 5:12 pm

Re: Toon app: boiler status

Post by Hypermobile »

To get more variables; i also adjusted this script found on this forum

You need to Make even more UV_Variables in Domoticz.
And also a Lua Time Script.

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
-- Updates Toon Burner status in order to see in domoticz if tyou boiler is on for the hotwater or heating or off (still is a undefined number which i must hunt down)

commandArray = {}

    ToonThermostatSensorName = uservariables['UV_ToonThermostatSensorName'] -- Sensor showing current setpoint
    ToonTemperatureSensorName = uservariables['UV_ToonTemperatureSensorName'] -- Sensor showing current room temperature
    ToonScenesSensorName  = uservariables['UV_ToonScenesSensorName'] -- Sensor showing current program
    ToonAutoProgramSensorName = uservariables['UV_ToonAutoProgramSensorName'] -- Sensor showing current auto program status
	ToonBurnerName = uservariables['UV_ToonBurnerName']
	ToonProgramInformationSensorName = uservariables['UV_ToonProgramInformationSensorName'] -- Sensor showing displaying program information status
	TooncurrentModulationLevel = uservariables['UV_TooncurrentModulationLevel'] -- Sensor showing displaying Current modulation leven
	ToonInternalBoilerSetpoint = uservariables['UV_ToonInternalBoilerSetpoint']
	ToonIP = uservariables['UV_ToonIP']
    DomoticzIP = uservariables['UV_DomoticzIP']

    json = assert(loadfile "/usr/local/domoticz/var/scripts/lua/JSON.lua")()  -- For Synology
    
local handle = assert(io.popen(string.format('curl http://%s/happ_thermstat?action=getThermostatInfo', ToonIP)))
   local ThermostatInfo = handle:read('*all')
handle:close()

-- JSON data from Toon contains a extra "," which should not be there.
ThermostatInfo = string.gsub(ThermostatInfo, ",}", "}")

jsonThermostatInfo = json:decode(ThermostatInfo)
    
    currentSetpoint = tonumber(jsonThermostatInfo.currentSetpoint) / 100
    currentTemperature = tonumber(jsonThermostatInfo.currentTemp) / 100
    currentProgramState = tonumber(jsonThermostatInfo.programState)
    currentActiveState = tonumber(jsonThermostatInfo.activeState)
    currentNextTime = jsonThermostatInfo.nextTime
	currentBurnerInfo = tonumber(jsonThermostatInfo.burnerInfo)
    currentNextSetPoint = tonumber(jsonThermostatInfo.nextSetpoint) / 100
    currentModulationLevel = tonumber(jsonThermostatInfo.currentModulationLevel)
    currentInternalBoilerSetpoint = tonumber(jsonThermostatInfo.currentInternalBoilerSetpoint)
    
    -- 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
    
    -- 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
    
    -- Update the toon scene selector sensor to current program state
    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
    
    -- Updates the toon auto program switch 
    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
    
    -- Updates the toon program information text box
    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
	
 -- Update the toon burner selector to current program state
    CurrentToonBurnerValue = otherdevices_svalues[ToonBurnerName]  
	

	if currentBurnerInfo == 0 then currentBurnerInfo = '0' -- uit
    elseif currentBurnerInfo == 1 then currentBurnerInfo = '10' -- cv aan
    elseif currentBurnerInfo == 2 then currentBurnerInfo = '20' -- warmwater aan
    end
    
    if CurrentToonBurnerValue ~= currentBurnerInfo then  -- Update toon burner selector if it has changed
        print ('Updating Toon burner info')
        commandArray[7] = {['UpdateDevice'] = string.format('%s|1|%s', otherdevices_idx[ToonBurnerName], currentBurnerInfo)}
    end
	

 -- Update the modulation level of the burner  
 
    if otherdevices_svalues[TooncurrentModulationLevel]+1 ~= currentModulationLevel+1 then 
        print('Updating the ModulationLevel to new value: ' ..currentModulationLevel)
        commandArray[8] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[TooncurrentModulationLevel], currentModulationLevel)}
    end
        
      -- Update the Internal Setpoint of the boiler  
    if otherdevices_svalues[ToonInternalBoilerSetpoint]+1 ~= currentInternalBoilerSetpoint+1 then 
        print('Updating the currentInternalBoilerSetpoint to new value: ' ..currentInternalBoilerSetpoint)
        commandArray[9] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonInternalBoilerSetpoint], currentInternalBoilerSetpoint)}
    end   
        
return commandArray
ams123
Member
Member
Posts: 73
Joined: Thu Aug 31, 2017 5:27 pm
Location: Amersfoort

Re: Toon app: boiler status

Post by ams123 »

Image

ok i get zero to

how can i solf this
Toon solarpannels
Toonz
Forum Moderator
Forum Moderator
Posts: 1876
Joined: Mon Dec 19, 2016 1:58 pm

Re: Toon app: boiler status

Post by Toonz »

ams123 wrote:Image

ok i get zero to

how can i solf this
Hi Ams123,

this app only works if you have a boiler which is controlled via the OpenTherm interface, not via the on/off protocol (you can check that in your Toon settings)
member of the Toon Software Collective
Hypermobile
Member
Member
Posts: 76
Joined: Sun Jan 14, 2018 5:12 pm

Re: Toon app: boiler status

Post by Hypermobile »

@toonz

when i hit http://192.168.x.x:10080/hcb_rrd/ReadRRD.html
and just hit SEND:

i see somewhere in the file a Switch from NaN to 0,00

Code: Select all

 NaN,"1515074400": NaN,"1515078000": NaN,"1515081600": 0.00,"1515085200": NaN,"1515088800": 0.00,"1515092400": 0.00,"1515096000": 0.00,"1515099600": 0.00,"1515103200": 0.00,"1515106800":
i think, my Boiler doesn't sent that value back on OpenTherm.
ams123
Member
Member
Posts: 73
Joined: Thu Aug 31, 2017 5:27 pm
Location: Amersfoort

Re: Toon app: boiler status

Post by ams123 »

Toonz wrote:
ams123 wrote:Image

ok i get zero to

how can i solf this
Hi Ams123,

this app only works if you have a boiler which is controlled via the OpenTherm interface, not via the on/off protocol (you can check that in your Toon settings)
OpenTherm is on

but i have the same problem i downgraded to happ-thermstat_1.554-trunk_qb2 can i upgrade that again
Toon solarpannels
Hypermobile
Member
Member
Posts: 76
Joined: Sun Jan 14, 2018 5:12 pm

Re: Toon app: boiler status

Post by Hypermobile »

domoticaforum.eu/viewtopic.php?t=11671& ... 895#p84770

check this:
i think he got the same problem and a Easier fix for it.
ams123
Member
Member
Posts: 73
Joined: Thu Aug 31, 2017 5:27 pm
Location: Amersfoort

Re: Toon app: boiler status

Post by ams123 »

happ-thermstat_1.554-trunk_qb2n i am not downgrade to this so i have a ather problem that i not can see the pressur
Toon solarpannels
jeltel
Starting Member
Starting Member
Posts: 18
Joined: Tue Dec 05, 2017 10:16 pm

Re: Toon app: boiler status

Post by jeltel »

Great!

Too bad I don't have an internal pressure sensor, so all I get to see with the screensaver screen is two big zeroes. Id like to see the percentage of the flame more up front. That changes more than the pressure.
Toonz
Forum Moderator
Forum Moderator
Posts: 1876
Joined: Mon Dec 19, 2016 1:58 pm

Re: Toon app: boiler status

Post by Toonz »

jeltel wrote:Great!

Too bad I don't have an internal pressure sensor, so all I get to see with the screensaver screen is two big zeroes. Id like to see the percentage of the flame more up front. That changes more than the pressure.
Ok. I will make it configurable which value to display on the tile in dim state
member of the Toon Software Collective
gijsje
Starting Member
Starting Member
Posts: 25
Joined: Sun Dec 03, 2017 12:52 am

Re: Toon app: boiler status

Post by gijsje »

If i go to /happ_thermstat?action=printTableInfo it only gives me 0 on all values.
If i go to /hcb_rrd/ReadRRD.html it says 404 not found.

If i look at the toon i does see it is otgw boiler but i also says it can not connect to the boiler
Is there something else t check to get this to work?


Image
Image
Hypermobile
Member
Member
Posts: 76
Joined: Sun Jan 14, 2018 5:12 pm

Re: Toon app: boiler status

Post by Hypermobile »

Toonz wrote:
jeltel wrote:Great!

Too bad I don't have an internal pressure sensor, so all I get to see with the screensaver screen is two big zeroes. Id like to see the percentage of the flame more up front. That changes more than the pressure.
Ok. I will make it configurable which value to display on the tile in dim state
I already changed it in the Code ;-)
now it shows Modulation level
Attachments
Webp.net-compress-image.jpg
Webp.net-compress-image.jpg (2.2 KiB) Viewed 12765 times
Templar
Member
Member
Posts: 178
Joined: Fri Mar 18, 2011 8:49 pm
Location: Netherlands

Re: Toon app: boiler status

Post by Templar »

Hypermobile wrote: I already changed it in the Code ;-)
now it shows Modulation level
In OpenTherm, the modulation levels are shown without the decimal fraction. So you can show it without the decimal separator & fraction.
gielie
Member
Member
Posts: 70
Joined: Thu Nov 02, 2017 11:06 am

Re: Toon app: boiler status

Post by gielie »

Hypermobile wrote:Adjusted somebody elses Script to get it to work with this new app:

It's for Domoticz:
1) make 5 UV_variables in domoticz
UV_ToonIP => {STRING} =192.168.x.x
UV_DomoticzIP => {STRING} = 192.168.x.x
UV_ToonboilerInTempName => {STRING} = BoilerInletTemp
UV_ToonboilerOutTempName => {STRING} = BoilerOutletTemp
UV_BoilerPressure => {STRINT} = BoilerPressure

2) Create 3 dummy sensor; with Name BoilerInletTemp, BoilerOutletTemp, BoilerPressure

3) Create a LUA TIME Event copy paste script.

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 ToonboilerOutTempName Sensor to value set on Toon
-- Updates Toon ToonboilerInTempName Sensor to value set on Toon
-- Updates Toon ToonboilerPressure sensor to value set on Toon 

commandArray = {}
    
    ToonboilerInTempName = uservariables['UV_ToonboilerInTempName'] -- Sensor inlet temperature
    ToonboilerOutTempName = uservariables['UV_ToonboilerOutTempName'] -- Sensor outlet temperature
    ToonboilerPressure  =   uservariables['UV_ToonboilerPressure'] -- ToonboilerPressure
    
  	ToonIP = uservariables['UV_ToonIP']
    DomoticzIP = uservariables['UV_DomoticzIP']

    json = assert(loadfile "/usr/local/domoticz/var/scripts/lua/JSON.lua")()  -- For Synology
    
local handle = assert(io.popen(string.format('curl http://%s/boilerstatus/boilervalues.txt', ToonIP)))
   local BoilerInfo = handle:read('*all')
handle:close()

-- JSON data from Toon contains a extra "," which should not be there.
BoilerInfo = string.gsub(BoilerInfo, ",}", "}")

jsonBoilerInfo = json:decode(BoilerInfo)
    
    currentboilerInTemp = tonumber(jsonBoilerInfo.boilerInTemp)
    currentboilerOutTemp = tonumber(jsonBoilerInfo.boilerOutTemp)
    currentboilerPressure = tonumber(jsonBoilerInfo.boilerPressure)
   
    -- Update the boilerInTemp
    if otherdevices_svalues[ToonboilerInTempName]*100 ~= currentboilerInTemp*100 then  
        print('Updating boiler inlet temp to new value: ' ..currentboilerInTemp)
        commandArray[1] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonboilerInTempName], currentboilerInTemp)}
    end
    
    -- Update the boilerOutTemp
    if otherdevices_svalues[ToonboilerOutTempName]*100 ~= currentboilerOutTemp*100 then 
        print('Updating boiler outlet temp to new value: ' ..currentboilerOutTemp)
        commandArray[2] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonboilerOutTempName], currentboilerOutTemp)}
    end

    -- Update the boilerPressure
    if otherdevices_svalues[ToonboilerPressure]*100 ~= currentboilerPressure*100 then 
        print('Updating boiler pressure to new value: ' ..currentboilerPressure)
        commandArray[3] = {['UpdateDevice'] = string.format('%s|0|%s', otherdevices_idx[ToonboilerPressure], currentboilerPressure)}
    end

return commandArray
---EDITTED: added Pressure measurement
---EDITTED: added *100 to let the IF THEN work Correct
Nice script but you wrote this to run on a synology, what do i need to change to make this work for a raspberry pi?
And how do i get the percentage in the dim screen instead of the pressure (my Tzerra doesn't report pressure :()
Toonz
Forum Moderator
Forum Moderator
Posts: 1876
Joined: Mon Dec 19, 2016 1:58 pm

Re: Toon app: boiler status

Post by Toonz »

gielie wrote:And how do i get the percentage in the dim screen instead of the pressure (my Tzerra doesn't report pressure :()
Will make this configurable in next release (soon) and remove the decimal digit for the percentage. Hang on.... :)
member of the Toon Software Collective
Post Reply

Return to “Toon Apps”