ELV Max! Heating control system

For heating/cooling related questions in Domoticz

Moderator: leecollings

Skippiemanz
Posts: 230
Joined: Sunday 14 July 2013 20:21
Target OS: Linux
Domoticz version: 4.10233
Location: Alkmaar, The Netherlands
Contact:

Re: ELV Max! Heating control system

Post by Skippiemanz »

The output so far looks good:

Code: Select all

LUA: 
2015-03-25 15:45:00.761 LUA: *** Heating Script Output ***
2015-03-25 15:45:00.761 LUA: 
2015-03-25 15:45:00.762 LUA: Hal valve is open 0 percent Setpoint temperature is 21.0C
2015-03-25 15:45:00.762 LUA: Zolder-Links valve is open 0 percent Setpoint temperature is 17.0C
2015-03-25 15:45:00.762 LUA: Badkamer valve is open 0 percent Setpoint temperature is 21.0C
2015-03-25 15:45:00.763 LUA: Kamer-Links valve is open 0 percent Setpoint temperature is 21.0C
2015-03-25 15:45:00.763 LUA: Kamer-Rechts valve is open 65 percent Setpoint temperature is 21.0C
2015-03-25 15:45:00.763 LUA: Zolder-Rechts valve is open 0 percent Setpoint temperature is 17.0C
2015-03-25 15:45:00.763 LUA: Kantoor valve is open 46 percent Setpoint temperature is 17.0C
2015-03-25 15:45:00.764 LUA: Noa valve is open 2 percent Setpoint temperature is 18.0C
2015-03-25 15:45:00.764 LUA: Tijn valve is open 0 percent Setpoint temperature is 18.0C
2015-03-25 15:45:00.764 LUA: 
2015-03-25 15:45:00.764 LUA: Zolder-Links temperature is 22.1 Centigrade 
2015-03-25 15:45:00.765 LUA: Zolder-Rechts temperature is 22.3 Centigrade 
2015-03-25 15:45:00.765 LUA: Kamer-Links temperature is 27 Centigrade 
2015-03-25 15:45:00.765 LUA: Noa temperature is 19 Centigrade 
2015-03-25 15:45:00.765 LUA: Hal temperature is 25.7 Centigrade 
2015-03-25 15:45:00.766 LUA: Kamer-Rechts temperature is 22.8 Centigrade 
2015-03-25 15:45:00.766 LUA: Kantoor temperature is 22.1 Centigrade 
2015-03-25 15:45:00.766 LUA: Tijn temperature is 21 Centigrade 
2015-03-25 15:45:00.766 LUA: Badkamer temperature is 26.7 Centigrade 
2015-03-25 15:45:00.766 LUA: 
2015-03-25 15:45:00.767 LUA: Number of valves open more than 50% is 1 valves
2015-03-25 15:45:00.767 LUA: Highest valve open value is 65 percent 
2015-03-25 15:45:00.767 LUA: Lowest thermostat reading is 19 Centigrade 
2015-03-25 15:45:00.767 LUA: 
2015-03-25 15:45:00.767 LUA: Current state - Boiler is OFF 
2015-03-25 15:45:00.768 LUA: PercentMax (65%) Boiler On value (50%) Boiler Off value (30)% 
2015-03-25 15:45:00.768 LUA: Number of valves open more than 50% is 1 valves. Minimum valves setting 2
2015-03-25 15:45:00.768 LUA: Maximum open value 65% Override value 99%
2015-03-25 15:45:00.768 LUA: 
2015-03-25 15:45:00.781 LUA: 
Im gonna play a llittle with the variables and see what is does to the boiler switch
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

ELV Max! Heating control system

Post by l0gic »

Well I've has a little play.

As the whole set up is dependent on the Max! Buddy script kicking out regular values, things could get messy if the system was working on outdated values.
So I've added some code to check the last update time, check it with the current time and send an email if it is outside a pre-set value (configured in the pre-set values)

Code below;

Code: Select all


-- script_time_Heating Valves.lua
-- Version 1.8 26/03/15
-- Script to read the % open of radiator valves
-- All radiator valves are labelled "RV <room name>" 
-- search is made for  "RV " (Note space) to indicate a radiator valve
-- If found it will be interrogated for % open value

-- Thermostat are named "Stat <room name>" so a search is made for "Sta" to indicate thermostats
-- If found it will be interrogated for temperature value

-- If demand is greater than BoilerOnPercent value then fire up boiler
-- If demand is less than BoilerOnPercent minus HysterysisOffPercent then switch off boiler

-- Preset Values
BoilerOnPercent = 50					-- percentage valve open at which the boiler will be turned on 
HysterysisOffPercent = 20 				-- percentage below BoilerOnPercent to switch off the boiler
MinValves = 2  							-- Number of Valves that need to be open before boiler is turned on
ValvePercentOveride = 99				-- Percentage value of valve open required to override MinValves value (one room is very cold) 
HolidayMinTemp = 10 					-- Minimum room temperature before boiler is turned on during holiday period
HolidayHysterysisTemp = 2 				-- Value to increase house temperature by while in holiday mode if boiler is turned on due to low temperatures
MissingDevicesTime = 3600				-- Value in seconds to allow before reporting a device has not been updated
email = "[email protected]" 		      -- email address for warnings

-- Script Variables
PercentMax = 0
TempMin = 100
ValveCount = 0
MissingDeviceCount = 0
SendAnEmail = false

-- Set printing to log options (true / false)
-- printData = false
printData = true
printDebug = false
-- printDebug = true

-- Get current date & time
t1 = os.time()
local currentDate = os.date("*t");  -- sets up currentDate.[table] 
-- (currentDate.year [full], .month [1-12], .day [1-31], .hour [0-23], .min [0-59], .sec [0-59], .wday [0-6 {Sun-Sat}])
sCurrentTime = currentDate.year .. "-" .. currentDate.month .. "-" .. currentDate.day .. " " .. currentDate.hour .. ":" .. currentDate.min .. ":" .. currentDate.sec

function TimeElapsed(s) -- expects date & time in the form of 2010-01-23 12:34:56
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference -- in seconds
end



commandArray = {}
 
		 -- print blank line in log 
		 if printData == true then
			print (" ")
			print (" *** Heating Script Output ***")
			print (" ")
		 end
		 
		 -- Get Data from Radiator Valves
		for i, v in pairs(otherdevices) do -- Get all devices in the database
		   v = i:sub(1,3) -- Grab the first three characters of the device name
		   
			   if (v == 'RV ') then -- are the first three characters "RV "? If so we have a Radiator Valve
			   
					 RoomName = i:sub(4) -- Get the rest of the name, which will be the room name
					 sSetTempValue, sValvePercentOpen = otherdevices_svalues[i]:match("([^;]+);([^;]+)") -- get the valve set Point and the  valve % open (Temp, Humidity)
					 sLastUpdateTime = otherdevices_lastupdate[i]
					 sElapsedTime = TimeElapsed(otherdevices_lastupdate[i])
					 message = RoomName .. " valve is open " .. sValvePercentOpen .. " percent " .. " Setpoint temperature is " .. sSetTempValue .. "C"  -- for debug
					 message2 = RoomName .. " last seen " .. sLastUpdateTime  ..  " Elapsed time " .. sElapsedTime
					 if printData == true then
						print (message)
						print (message2)
					 end
					 
					 -- check for missing devices
					 if sElapsedTime > MissingDevicesTime then
					 SendAnEmail = true
					 MissingDeviceCount = MissingDeviceCount + 1
					 end
					 
					 -- get the % value of the most open Radiator Valve
					 if tonumber(sValvePercentOpen) > PercentMax then
						PercentMax = tonumber(sValvePercentOpen)
					 end
					 
					 -- Count the number of valves that are open more than BoilerOnPercent
					 if tonumber(sValvePercentOpen) >= BoilerOnPercent then
						ValveCount = ValveCount + 1
					 end	
					 

			   end
		end

		 if printData == true then
			print (" ")
		 end		
		
		-- Get Data from Thermostats
		for i, v in pairs(otherdevices) do -- Get all devices in the database
		   v = i:sub(1,5) -- Grab the first three characters of the device name
			   
			   if (v == 'Stat ') then -- are the first five characters "Stat "? If so we have an EQ-3 Thermostat
			   
					 RoomName = i:sub(6) -- Get the rest of the name, which will be the room name
  					 sTemp = otherdevices_svalues[i] -- get the temperature	
					 sLastUpdateTime = otherdevices_lastupdate[i]
					 sElapsedTime = TimeElapsed(otherdevices_lastupdate[i])					 
					 message = RoomName.." temperature is " .. sTemp .. " Centigrade "  -- for debug
					 message2 = RoomName .. " last seen " .. sLastUpdateTime  ..  " Elapsed time " .. sElapsedTime
					 if printData == true then
						print(message)
						print(message2)
					 end
					 
					 -- get the lowest temperature of the thermostats
					 if tonumber(sTemp) < TempMin then
						TempMin = tonumber(sTemp)
					 end
					 
					 -- check for missing devices
					 if sElapsedTime > MissingDevicesTime then
					 SendAnEmail = true 							-- change this to false if you do not require emails to be sent
					 MissingDeviceCount = MissingDeviceCount + 1
					 end
					 
				end	 

		end
		 
		  if printData == true then
			print (" ")
			print ("Number of valves open more than " .. BoilerOnPercent .. "% is " .. ValveCount .." valves")
			print("Highest valve open value is " .. PercentMax .." percent ")
			print("Lowest thermostat reading is " .. TempMin .." Centigrade ")
			print (" ")
		  end
		
	 if printData == true then
		if (otherdevices['Boiler On (B1)'] == 'On')then
			print ("Current state - Boiler is ON ")
		else
			print ("Current state - Boiler is OFF ")
		end	

	end			

	-- Check the elapsed time and email if overdue
		if (SendAnEmail == true) then
			print (" ")
			print("Heating Script: missing device email sent to " .. (email) );
			notifyString = os.date("Domoticz Alert # The current time is %X on %A Lost contact with " .. MissingDeviceCount .. " Heating script devices, check if Max!Buddy is running.  #") .. (email) 
			commandArray['SendEmail'] = notifyString
		 end 
		
		
		
		
		
		-- Perform logic 
		
		if printDebug == true then
		-- view the settings to understand logic performance
			print ("PercentMax (" .. PercentMax .. "%) " .. "Boiler On value (" .. BoilerOnPercent .. "%) " .. "Boiler Off value (" .. (BoilerOnPercent - HysterysisOffPercent) .. ")% ")
			print ("Number of valves open more than " .. BoilerOnPercent .. "% is " .. ValveCount .." valves. Minimum valves setting " .. MinValves )
			print ("Maximum open value " .. PercentMax .. "%" .. " Override value " .. ValvePercentOveride .."%")
			
		print (" ")
	    end	
		if (otherdevices['On Holiday'] == 'Off')then -- Not on holiday 
		
		   if (otherdevices['Boiler On (B1)'] == 'Off') then --If a minimum of 'MinValves' valves are on by more that pre-set value BoilerOnPercent
		   
						if printDebug == true then
							print ("Test passed - Boiler is OFF ")
						end	
						
				if (PercentMax > BoilerOnPercent) then

						if printDebug == true then
							print ("Test passed - Radiators are open beyond the threshold ")
						end					
				
					if (ValveCount >= MinValves) or (BoilerOnPercent >= ValvePercentOveride) then

						if printDebug == true then
							print ("Test passed - Either multiple valves are open or override count is reached ")
						end	
					
						commandArray['Boiler On (B1)']='On' -- turn on boiler
							if printData == true then
								print ("Command sent - Turn ON Boiler ")
							end	
					end
				end
			end
			
			if (PercentMax < (BoilerOnPercent - HysterysisOffPercent) or (ValveCount < MinValves)) and (otherdevices['Boiler On (B1)'] == 'On')  then -- If the number of valves open more than BoilerOnPercent minus HysterysisOffPercent
				commandArray['Boiler On (B1)']='Off' -- turn off boiler
						if printData == true then
							print ("Command sent - Turn OFF Boiler ")
						end	
			end
			
		else -- on holiday
		
			if (TempMin <= HolidayMinTemp) and (otherdevices['Boiler On (B1)'] == 'Off') then  -- house is very cold
				commandArray['Boiler On (B1)']='On' -- turn on boiler
			end
			
			if (TempMin >= (HolidayMinTemp + HolidayHysterysisTemp)) and (otherdevices['Boiler On (B1)'] == 'On') then  -- house is warm enough
				commandArray['Boiler On (B1)']='Off' -- turn on boiler
			end
			
		end
	 if printData == true then
		print (" ")
	 end
		
 
return commandArray
I have found a little problem with the Max!Buddy operation though.
If I use the 'Boost' function on the thermostat, Max!Buddy sulks and reports that the room is in an 'Invalid State' (script error in line 86) and stops sending data into Domoticz.
Once the boost period is over, Max!Buddy returns to sending in the values.

As the time monitoring period for me is greater than the thermostat boost period I don't get an email warning, but it is worth bearing it in mind if you want to set the email period short.
Also as no data is being sent during the boost period the logs are not updated, not a problem but again worth realising.
Non credus crepitus
Skippiemanz
Posts: 230
Joined: Sunday 14 July 2013 20:21
Target OS: Linux
Domoticz version: 4.10233
Location: Alkmaar, The Netherlands
Contact:

Re: ELV Max! Heating control system

Post by Skippiemanz »

Had your newest script running for 4 days now.

At first the values seemed to be stuck but after a power failure of 2 hours everything started up as planned and from that point on the values looked promissing.

Her is my overview of the Boiler on switch during 3 days.
Attachments
Heatingswitch
Heatingswitch
Heatinglog.JPG (42.98 KiB) Viewed 8045 times
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

ELV Max! Heating control system

Post by l0gic »

Well that is looking ok as a starting point.
I'm playing with the optimum values that allow me to keep the house warm without short cycling the boiler.
I think that will only really happen once the script actually controls the boiler.

Regarding your sticking values, if you look at my last post I've set up a monitor the ensure that the values are up to date.
If we rely on them for control we need accurate values.

I'm playing with a new script for MaxBuddy at the moment to open the valves from Domoticz.
I have a wood burner in the house which is connected to the heating system.
I want to be able to override the cube settings to ensure the radiators are on to dissipate the wood burner heat.
It's bespoke to me but I'll post it up once I've got it working.
Non credus crepitus
Skippiemanz
Posts: 230
Joined: Sunday 14 July 2013 20:21
Target OS: Linux
Domoticz version: 4.10233
Location: Alkmaar, The Netherlands
Contact:

Re: ELV Max! Heating control system

Post by Skippiemanz »

I havent modified the values yet.

Trying to figure out how i can control my boiler through my Radio Thermostat by a json script.

I agree that controlling the valves directly from domoticz would be a far better option and just use the cube as a sort of rfxcom for the signal transmitting.

Great how much time you've put in so far keep up the good work! and im looking forward to your next script/solution
demoorpeter
Posts: 2
Joined: Tuesday 07 April 2015 20:32
Target OS: Windows
Domoticz version:
Contact:

Re: ELV Max! Heating control system

Post by demoorpeter »

Hi,
I am new here and have read that the ELV Max system can be interfaced in the Domaticz software.
I have 6 radiator valves and 1 control box in use and as other users already have written: the software is bad.
Can anybody explain me (English / Dutch) how to implement them in the Domoticz sofware?
(Budy software for windows is no longer available....)
Thanks in advance!
Peter
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

Re: ELV Max! Heating control system

Post by l0gic »

Hi Peter,
you will need to install the MaxBuddy software as it is key to interfacing with Domoticz.

You will need the MaxBuddy software (found here.. http://download.maxbuddy.de/ )
Get it working with the cube and then add the script from this thread (page 3 post from Skippiemanz )

Have fun!

Kevin
Non credus crepitus
demoorpeter
Posts: 2
Joined: Tuesday 07 April 2015 20:32
Target OS: Windows
Domoticz version:
Contact:

Re: ELV Max! Heating control system

Post by demoorpeter »

Thanks Kevin,
I am a bit busy this week but will test it asap

regards,

Peter
Skippiemanz
Posts: 230
Joined: Sunday 14 July 2013 20:21
Target OS: Linux
Domoticz version: 4.10233
Location: Alkmaar, The Netherlands
Contact:

Re: ELV Max! Heating control system

Post by Skippiemanz »

Kevin,

Are you having some progress with controlling the valves directly?

Maybe this could be of any help to you

http://www.mega-nas.de/max/readerscript.php?host=&port=

Also ive tested with the Holiday mode, but due to some reception failure on of my temp readings is 0. So the boiler turns straight on in Holiday mode.

Is there a way to ignore the 0 temp readings?
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

Re: ELV Max! Heating control system

Post by l0gic »

Morning guys,
the end of summer is approaching so I've had another play prior to the heating season hitting us.

I've updated the code to replace all instances of 0C with a dummy value to prevent spurious operation of the boiler when a device is not contactable.
This value is in the Preset values (ReplacementTemp) so can be changed to suit.

I've also added an email functionality to advise when a bad value is encountered.
This requires a User Variable in Domoticz called HeatingErrorTime of type time.
This will prevent an email being sent each time the script is run.

Hope this helps someone;

Code: Select all


-- script_time_Heating Valves.lua
-- Version 1.8 14/08/15
-- Script to read the % open of radiator valves
-- All radiator valves are labelled "RV <room name>" 
-- search is made for  "RV " (Note space) to indicate a radiator valve
-- If found it will be interrogated for % open value

-- Thermostat are named "Stat <room name>" so a search is made for "Sta" to indicate thermostats
-- If found it will be interrogated for temperature value

-- If demand is greater than BoilerOnPercent value then fire up boiler
-- If demand is less than BoilerOnPercent minus HysterysisOffPercent then switch off boiler

--  *** Important *** Requires a User variable called 'HeatingErrorTime' of type time (HH:MM)
--  this is used to prevent emails being sent under error conditions every time the script runs
--  it works with EmailDelay to regulate the amount of emails sent

-- Preset Values
BoilerOnPercent = 50					-- percentage valve open at which the boiler will be turned on 
HysterysisOffPercent = 20 				-- percentage below BoilerOnPercent to switch off the boiler
MinValves = 2  							-- Number of Valves that need to be open before boiler is turned on
ValvePercentOveride = 99				-- Percentage value of valve open required to override MinValves value (one room is very cold) 
HolidayMinTemp = 10 					-- Minimum room temperature before boiler is turned on during holiday period
HolidayHysterysisTemp = 2 				-- Value to increase house temperature by while in holiday mode if boiler is turned on due to low temperatures
ReplacementTemp = 19 					-- This value will be used to replace values of '0' when connection is temporarily lost with a temperature sensor
MissingDevicesTime = 3600				-- Value in seconds to allow before reporting a device has not been updated
MissingRadName = ""						-- Will hold a list of missing Radiator devices
MissingStatName = ""					-- Will hold a list of missing Thermostat devices
email = "[email protected]" 	    	-- email address for warnings
EmailDelay = 120						-- delay period between emails being sent when there is an error

-- Script Variables
PercentMax = 0							-- used to hold Radiator Valve maximum percent open value
TempMin = 100							-- used to hold Temperature minimum value
ValveCount = 0							-- used to hold number of valves open greater than the BoilerOnPercent set value
MissingDeviceCount = 0					-- used to hold the count of missing devices found (not updated since MissingDevicesTime duration) 
SendAnEmail = false						-- flag to indicate if email needs to be sent because missing devices were found


-- Set printing to log options (true / false)
-- printData = false
printData = true						-- writes execution information to the log for script performance information
printDebug = false						-- writes detailed information for fault finding purposes
-- printDebug = true

-- Get current date & time
t1 = os.time()
local currentDate = os.date("*t");  -- sets up currentDate.[table] 
-- (currentDate.year [full], .month [1-12], .day [1-31], .hour [0-23], .min [0-59], .sec [0-59], .wday [0-6 {Sun-Sat}])
sCurrentTime = currentDate.year .. "-" .. currentDate.month .. "-" .. currentDate.day .. " " .. currentDate.hour .. ":" .. currentDate.min .. ":" .. currentDate.sec

function TimeElapsed(s) -- expects date & time in the form of 2010-01-23 12:34:56
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference -- in seconds
end



commandArray = {}
 
		 -- print blank line in log 
		 if printData == true then
			print (" ")
			print (" *** Heating Script Output ***")
			print (" ")
		 end
		 
		 -- Get Data from Radiator Valves
		for i, v in pairs(otherdevices) do -- Get all devices in the database
		   v = i:sub(1,3) -- Grab the first three characters of the device name
		   
			   if (v == 'RV ') then -- are the first three characters "RV "? If so we have a Radiator Valve
			   
					 RoomName = i:sub(4) -- Get the rest of the name, which will be the room name
					 sSetTempValue, sValvePercentOpen = otherdevices_svalues[i]:match("([^;]+);([^;]+)") -- get the valve set Point and the  valve % open (Temp, Humidity)
					 sLastUpdateTime = otherdevices_lastupdate[i]
					 sElapsedTime = TimeElapsed(otherdevices_lastupdate[i])
					 message = RoomName .. " valve is open " .. sValvePercentOpen .. " percent " .. " Setpoint temperature is " .. sSetTempValue .. "C"  -- for debug
					 message2 = RoomName .. " last seen " .. sLastUpdateTime  ..  " Elapsed time is " .. sElapsedTime .. " seconds"
					 if printData == true then
						print (message)
						print (message2)
					 end
					 
					 -- check for unconnected devices (will return 0C if unreadable)
					 if sSetTempValue == 0 then
						sSetTempValue = ReplacementTemp
						print (RoomName .. "Radiator Valve is not communicating with the Cube")
											 
					 -- the following two lines can be removed if email notification of unresponsive sensors is not required
					 notifyString = os.date("Domoticz Alert # The current time is %X on %A <br><br>The Cube is not currently able to receive update from " .. RoomName .. " Radiator Valve ") .. (email) 
					 commandArray['SendEmail'] = notifyString		
					 
					 end
					 
					 -- check for missing devices
					 if sElapsedTime > MissingDevicesTime then
					 SendAnEmail = true
					 MissingDeviceCount = MissingDeviceCount + 1
					 MissingRadName =  MissingRadName .. " " .. RoomName .. " Radiator Valve <br>"
					 end
					 
					 -- get the % value of the most open Radiator Valve
					 if tonumber(sValvePercentOpen) > PercentMax then
						PercentMax = tonumber(sValvePercentOpen)
					 end
					 
					 -- Count the number of valves that are open more than BoilerOnPercent
					 if tonumber(sValvePercentOpen) >= BoilerOnPercent then
						ValveCount = ValveCount + 1
					 end	
					 

			   end
		end

		 if printData == true then
			print (" ")
		 end		
		
		-- Get Data from Thermostats
		for i, v in pairs(otherdevices) do -- Get all devices in the database
		   v = i:sub(1,5) -- Grab the first five characters of the device name
			   
			   if (v == 'Stat ') then -- are the first five characters "Stat "? If so we have an EQ-3 Thermostat
			   
					 RoomName = i:sub(6) -- Get the rest of the name, which will be the room name
  					 sTemp = otherdevices_svalues[i] -- get the temperature	
					 sLastUpdateTime = otherdevices_lastupdate[i]
					 sElapsedTime = TimeElapsed(otherdevices_lastupdate[i])					 
					 message = RoomName.." temperature is " .. sTemp .. " Centigrade "  -- for debug
					 message2 = RoomName .. " last seen " .. sLastUpdateTime  ..  " Elapsed time is " .. sElapsedTime .. " seconds"
					 if printData == true then
						print(message)
						print(message2)
					 end
					 
					 -- get the lowest temperature of the thermostats
					 if tonumber(sTemp) < TempMin then
						TempMin = tonumber(sTemp)
					 end
					 
					  -- check for unconnected devices (will return 0C if unreadable)
					 if sSetTempValue == 0 then
					 sSetTempValue = ReplacementTemp
					 print (RoomName .. " Thermostat is not communicating with the Cube")
					 
					 -- the following two lines can be removed if email notification of unresponsive Thermostat sensors is not required
					 notifyString = os.date("Domoticz Alert # The current time is %X on %A <br><br>The Cube is not able to receive update from " .. RoomName .. " Thermostat ") .. (email) 
					 commandArray['SendEmail'] = notifyString		
					 
					 end
					 
					 -- check for missing devices
					 if sElapsedTime > MissingDevicesTime then
					 SendAnEmail = true 							-- change this to false if you do not require emails to be sent
					 MissingDeviceCount = MissingDeviceCount + 1
					 MissingStatName =  MissingStatName .. " " .. RoomName .. " Thermostat <br> "
					 end
					 
				end	 

		end
		 
		  if printData == true then
			print (" ")
			print ("Number of valves open more than " .. BoilerOnPercent .. "% is " .. ValveCount .." valves")
			print("Highest valve open value is " .. PercentMax .." percent ")
			print("Lowest thermostat reading is " .. TempMin .." Centigrade ")
			print (" ")
		  end
		
	 if printData == true then
		if (otherdevices['Boiler On (B1)'] == 'On')then
			print ("Current state - Boiler is ON ")
		else
			print ("Current state - Boiler is OFF ")
		end	

	end			

	-- Check the elapsed time and email if overdue
		if (SendAnEmail == true) then
			print (" ")
			print("Heating Script: missing device(s) email sent to " .. (email) );
			notifyString = os.date("Domoticz Alert # The current time is %X on %A <br><br>Lost contact with " .. MissingDeviceCount .. " Heating script devices, check if Max!Buddy is running. <br>" .. "<br>Thermostats Missing: <br>" .. MissingStatName .. "<br><br> Radiator Valves Missing:<br>".. MissingRadName .."   #") .. (email) 
			commandArray['SendEmail'] = notifyString
		 end 
		
		
		
		
		
		-- Perform logic 
		
		if printDebug == true then
		-- view the settings to understand logic performance
			print ("PercentMax (" .. PercentMax .. "%) " .. "Boiler On value (" .. BoilerOnPercent .. "%) " .. "Boiler Off value (" .. (BoilerOnPercent - HysterysisOffPercent) .. ")% ")
			print ("Number of valves open more than " .. BoilerOnPercent .. "% is " .. ValveCount .." valves. Minimum valves setting " .. MinValves )
			print ("Maximum open value " .. PercentMax .. "%" .. " Override value " .. ValvePercentOveride .."%")
			
		print (" ")
	    end	
		
		
		-- Boiler Control Routine
		if (otherdevices['On Holiday'] == 'Off')then -- Not on holiday 

		
				   if (otherdevices['Boiler On (B1)'] == 'Off') then -- If a minimum of 'MinValves' valves are on by more that pre-set value BoilerOnPercent
									
						if (PercentMax > BoilerOnPercent) then		-- 	If any valve is open more than the pre-set for operating the boiler		
						
							if (ValveCount >= MinValves) or (BoilerOnPercent >= ValvePercentOveride) then -- If either enough valves are open or one valve is open more that the threshold
							
								commandArray['Boiler On (B1)']='On' -- turn on boiler
									if printData == true then
										print ("Command sent - Turn ON Boiler ")
									end	
							end
						end
					end
					
					if (PercentMax < (BoilerOnPercent - HysterysisOffPercent) or (ValveCount < MinValves)) and (otherdevices['Boiler On (B1)'] == 'On')  then -- If the number of valves open more than BoilerOnPercent minus HysterysisOffPercent
						commandArray['Boiler On (B1)']='Off' -- turn off boiler
								if printData == true then
									print ("Command sent - Turn OFF Boiler ")
								end	
					end
					
				else -- on holiday
				
					if (TempMin <= HolidayMinTemp) and (otherdevices['Boiler On (B1)'] == 'Off') then  -- house is very cold
						commandArray['Boiler On (B1)']='On' -- turn on boiler
					end
					
					if (TempMin >= (HolidayMinTemp + HolidayHysterysisTemp)) and (otherdevices['Boiler On (B1)'] == 'On') then  -- house is warm enough
						commandArray['Boiler On (B1)']='Off' -- turn on boiler
					end


			

		end
		
	 if printData == true then
		print (" ")
	 end
		
 
return commandArray

I've also been playing with Max!Buddy scripts and I'll start up a separate thread for those.

cheers

Kevin
Non credus crepitus
Skippiemanz
Posts: 230
Joined: Sunday 14 July 2013 20:21
Target OS: Linux
Domoticz version: 4.10233
Location: Alkmaar, The Netherlands
Contact:

Re: ELV Max! Heating control system

Post by Skippiemanz »

Kevin, I missed this post so sorry for the late reaction! I am running domoticz on my synology now so have to find out how to get everything running but the new script looks promising! Wil get back to you! And I am interested what you can do with the scripts!
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

Re: ELV Max! Heating control system

Post by l0gic »

No problem Skippiemanz,

I'm still playing with one of the MaxBuddy scripts, so I'll upload them once I'm done.

I'm also playing with the MySensors system at the moment, I'm going to add some temperature sensors to my central heating pipe system which will ultimately control the dummy switch into the MaxBuddy system.

All the best

Kevin
Non credus crepitus
badubo
Posts: 4
Joined: Thursday 03 July 2014 20:08
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: ELV Max! Heating control system

Post by badubo »

Hi,

www.maxbuddy.de is down, is there a backup site for API references and also max backup ?
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

Re: ELV Max! Heating control system

Post by l0gic »

badubo wrote:Hi,

http://www.maxbuddy.de is down, is there a backup site for API references and also max backup ?
Nope.
Everything has gone.

I've gained information from de-constructing published scripts from around the web.

You are pretty much on your own now, sad to say.

Kevin
Non credus crepitus
Skippiemanz
Posts: 230
Joined: Sunday 14 July 2013 20:21
Target OS: Linux
Domoticz version: 4.10233
Location: Alkmaar, The Netherlands
Contact:

Re: ELV Max! Heating control system

Post by Skippiemanz »

Do you have the tar package Kevin?
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

Re: ELV Max! Heating control system

Post by l0gic »

I do have some packages.
They are Windows only but it includes a portable version, so should be able to be used on any java enabled OS.

Kevin
Non credus crepitus
1970sITman
Posts: 5
Joined: Sunday 02 February 2014 14:10
Target OS: Raspberry Pi / ODroid
Domoticz version:
Location: NW London, UK
Contact:

Re: ELV Max! Heating control system

Post by 1970sITman »

Gents, (and Ladies if there are any here)......

Looking for some advice/assistance please.

Has anyone come across the error where the Maxbuddy dometicz script gets 'stuck' when trying to activate a room relay defined in the tasks tab?

It seems to my (non-programmer) eye that the issue occurs when the request to change the relay state occurs when the Cube is in the disconnect state.

Domoticz is running on a Pi. maxbuddy on a laptop running XP.

Here's a small cut of the debug log:-


[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: runAgent()
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Hall Valve valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Sitting Room Valve valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Main Bedroom Valve 1 valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Main Bedroom Valve 2 valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Office Valve valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Ben's Room Valve valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Spare Bedroom Valve valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Dining Room Valve valve: 0 - desired thermostat state: false
[2015-09-18 05:32:15,955] [DEBUG] [Scheduler]: Boiler Control Valve valve: 0 - desired thermostat state: false
[2015-09-18 05:32:19,371] [DEBUG] [ConnectionScheduler]: updateRadiatorThermostatTemperatures()
[2015-09-18 05:32:19,371] [DEBUG] [ConnectionScheduler]: updateWallThermostatTemperatures()
[2015-09-18 05:32:28,571] [DEBUG] [ConnectionScheduler]: disconnect()
[2015-09-18 05:32:34,616] [DEBUG] [Scheduler]: executeScript(Domoticz.js)
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Start run()
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Room = Hall
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Mode = AUTO
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Device = Hall Thermostat
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SerialNumber = KEQ1004246
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Temperature = 20
[2015-09-18 05:32:34,616] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... &svalue=20
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Device = Hall Valve
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SerialNumber = KEQ0825873
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Temperature = 20.2
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SetPointTmp = 20.5
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Valve = 100
[2015-09-18 05:32:34,819] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... value=20.2
[2015-09-18 05:32:34,866] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... 20.5;100;0
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Room = Sitting Room
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Mode = AUTO
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Device = Sitting Room Thermostat
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SerialNumber = KEQ1005186
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Temperature = 19.7
[2015-09-18 05:32:34,913] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... value=19.7
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Device = Sitting Room Valve
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SerialNumber = KEQ0826643
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Temperature = 0
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SetPointTmp = 17.0
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Valve = 0
[2015-09-18 05:32:34,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... 0&svalue=0
[2015-09-18 05:32:35,006] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... e=17.0;0;0
[2015-09-18 05:32:35,038] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
.
.
.
[2015-09-18 05:32:35,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:35,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Room = Manual Boiler Control
[2015-09-18 05:32:35,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Mode = AUTO
[2015-09-18 05:32:35,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Device = Boiler Control Thermostat
[2015-09-18 05:32:35,960] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SerialNumber = KEQ1004210
[2015-09-18 05:32:35,975] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:35,975] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Temperature = 21
[2015-09-18 05:32:35,975] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... &svalue=21
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Device = Manual Boiler Control Relay
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SerialNumber = KEQ0826632
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Temperature = 21
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SetPointTmp = 30.5
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Valve = 100
[2015-09-18 05:32:36,022] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... &svalue=21
[2015-09-18 05:32:36,069] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... 30.5;100;0
[2015-09-18 05:32:36,132] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Room = Boiler Relay
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Mode = MANUAL
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Device = Boiler Control Relay
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SerialNumber = KEQ9010453
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Temperature = 20
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: SetPointTmp = 4.5
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: Valve = 0
[2015-09-18 05:32:36,147] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... &svalue=20
[2015-09-18 05:32:36,194] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]: http://192.168.0.22:8080/json.htm?type= ... ue=4.5;0;0
[2015-09-18 05:32:36,256] [DEBUG] [Script:Domoticz.js]: [Domoticz.js]:
[2015-09-18 05:32:36,303] [DEBUG] [Scheduler]: Script execution time: 1687ms
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: runAgent()
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Hall Valve valve: 100 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Sitting Room Valve valve: 0 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Main Bedroom Valve 1 valve: 0 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Main Bedroom Valve 2 valve: 0 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Office Valve valve: 0 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Ben's Room Valve valve: 0 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Spare Bedroom Valve valve: 0 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Dining Room Valve valve: 0 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Boiler Control Valve valve: 100 - desired thermostat state: true
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: Thermostat is off, but should be on: enabling
[2015-09-18 05:32:46,317] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:47,319] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:48,324] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:49,329] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:50,343] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:51,352] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:52,365] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:53,376] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:54,382] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:55,386] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:56,013] [DEBUG] [AWT-EventQueue-0]: updateHomeMenu()
[2015-09-18 05:32:56,400] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:57,406] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:58,413] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:59,428] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:32:59,930] [DEBUG] [ConnectionScheduler]: ConnectionWatchdog:connect() <<<<<<<<<<<<<<< Why no connect??
[2015-09-18 05:33:00,430] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:33:01,433] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:33:02,438] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
[2015-09-18 05:33:03,448] [DEBUG] [Scheduler]: LiveConnection#execute() wait for connection...
.
.
.
and on and on until a restart of maxbuddy

I've tried different hardware combinations and can always recreate the problem.

One thought I have had is if I changed the "Thermostat Switch" for a "ETH-002" relay but don't want to buy yet more hardware and find I get the same problem.
I've also played with some timers but nothing has fixed the problem.

Any suggestions much appreciated.

Thanks

Steve
4 pi(master+RFXtrx433 and 3 slaves+PiFace)
HE, BBSB, Lightwave, Micromark, Retrotouch & LIVOLO sockets, door switches, PIRs & Dimmers
EVE on iPad for Voice
Weather sensors
OWL CM160
eQ-3 MAX! Heating Controls (10 therms, 8 valves, 2 relays)
User avatar
l0gic
Posts: 107
Joined: Tuesday 08 October 2013 9:35
Target OS: Linux
Domoticz version: Latest
Contact:

Re: ELV Max! Heating control system

Post by l0gic »

Hi Steve,
I've noticed that the valves can be in a state that the domoticz script does not cater for.
A typical example would be if you boost a room for a period of time the script can not deal with the state of the valves and just fails until the boost time is over.

Short term I'd say there is nothing that can be done, longer term I keep telling myself I'll have a look at the code and get it sorted.
It shouldn't be too hard to put a print statement into the code to show the state of the valve and wrap some code around that condition to deal with it...

All the best

Kevin

Edit - Just noticed that you have issues with the scheduler rather than the domoticz script - oops!
Not had any(obvious) issues with that.
Perhaps a call to the suppliers help desk?
Non credus crepitus
jorishp

Re: ELV Max! Heating control system

Post by jorishp »

User avatar
blackdog65
Posts: 311
Joined: Tuesday 17 June 2014 18:25
Target OS: Raspberry Pi / ODroid
Domoticz version:
Location: Norfolk, UK
Contact:

Re: ELV Max! Heating control system

Post by blackdog65 »

Hi guys,

I've been reading this with interest.

I've tried StellaZ and Smartwares and been VERY unimpressed. Danfoss is over priced and doesn't tick all the boxes.

How do you guys rate this stuff? I've been looking at the EQ-3 on conrad-electronic.co.uk. I assume that the minimum I need for testing is a cube and 1 trv? or is a thermostat essential?

Thanks for any advice/tips

Sean
CubieTruck Master
RasPi slaves
Aeon Labs Z-Stick, multi sensor
Fibaro Dimmers, relays, Universal sensors
EQ3 MAX!
TKB Sockets
RFXCOM
LightwaveRF sockets, switches, relays, doorbell
MySensors
ESPEasy ESP8266-12E
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest