Page 3 of 3

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Sunday 24 December 2017 22:40
by RATA1
This is what the script outputs for me from the gui. It is fine - if you don't get this but can browse to it from the same machine domoticz is on then don't know. If the two are on different networks you need to route between them.
I don't use windows so can't help with that platform but the script is fine on a pi ;)
Good luck maybe Santa will bring you a pi. Image

Sent from my SM-G935F using Tapatalk


Re: new: KMTronic USB/485/TCP(Web) support

Posted: Monday 25 December 2017 1:13
by mcgiak
I have pi model b and pi3 model b (used with kodi and retropie)
tomorrow i write a sdcard with raspbian jessie and install domoticz.

there is a router between two networks, from the broswer i have access

the temperature board is also accessible from outside the network (i can give you the adress via PM and you can try your script with my board?)

Thank you very much!

Again merry christmas to you

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Monday 25 December 2017 21:52
by RATA1
Hello,
Now that I had 5 mins to sit down and have a look the issue is that the virtual switch names were not changed and it was throwing an error but was for some reason not showing in the log file - maybe a bit different the way it does things when running Domoticz on Windows?

They need to be what your switch names are.

I have posted the modified script below and perhaps easier to modify/understand. I have PM'ed it to you too.

------------------------------------------------------------------------------
--
--
-- Domoticz lua script to convert XML output from KMTronic DS1820 LAN module
-- Reads the temperature based on the unique ID of the sensor and passes it
-- back to a virtual temperature sensor(s)
-- sensors in Domoticz
--
------------------------------------------------------------------------------
-- Rob Allen 12/04/2016
-- re written for "universal use" 25/12/2017
------------------------------------------------------------------------------

commandArray = {}



function XML_Capture(cmd,flatten)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
if flatten then
s = string.gsub(s, '^%s+', '')
s = string.gsub(s, '%s+$', '')
s = string.gsub(s, '[\n\r]+', ' ')
end
return s
end

--set to true to print to log file.
debug = true


--Dummy switch names - important to get these to match - change as appropriate to YOUR Virtual switches you already created
Dummy_Switch_Name_1 = "ACS"
Dummy_Switch_Name_2 = "Interna"
Dummy_Switch_Name_3 = "Puffer"
Dummy_Switch_Name_4 = "Esterna"

--or comment out above uncomment below and edit your IDX numbers of YOUR Virtual switches you already created


--Dummy_Switch_Name_1 = 644
--Dummy_Switch_Name_2 = 645
--Dummy_Switch_Name_3 = 646
--Dummy_Switch_Name_4 = 647



--define temperature sensor UID's - i.e. the DS1820 serial number
--up to 4 per DS1820 LAN interface

sensorID_1 = "28FFA4555115031C"
sensorID_2 = "28FF228C541503EC"
sensorID_3 = "28FFE28B54150348"
sensorID_4 = "28FF0E8B541503B3"


-- Define your device IP@

Device_IP = "192.168.1.199" -- change this to the internal IP@ of KMtronic box

if debug == true then
print("Reading values from: 'http://"..Device_IP.."/status.xml'")
end

-- Read the XML data from the device

XML_string=XML_Capture("curl -s 'http://"..Device_IP.."/status.xml'",1)


valid = string.find(XML_string, "<response>") -- check we are looking in the right place

if debug == true then
print(XML_string)
end

if valid == nil then
print ("Bad XML status read - temperatures NOT updated")
else

--Find the first sensor based on its UID

i = string.find(XML_string,sensorID_1) -- find the unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID

TempTemperature1=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[1] = {['UpdateDevice'] = Dummy_Switch_Name_1.."|0|"..TempTemperature1} --send updated values to Domoticz - must make sure the name matches the Dummy name you created above.

if debug == true then
print("Temp returned for "..Dummy_Switch_Name_1.." = '"..TempTemperature1.."'")
end



-- Second sensor based on its UID

i = string.find(XML_string, sensorID_2) -- find the next unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID

TempTemperature2=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[2] = { ['UpdateDevice'] = Dummy_Switch_Name_2.."|0|"..TempTemperature2 } --send updated values to Domoticz

if debug == true then
print("Temp returned for "..Dummy_Switch_Name_2.." = '"..TempTemperature2.."'")
end

-- Third sensor based on its UID


i = string.find(XML_string, sensorID_3) -- find the next unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID


TempTemperature3=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[3] = {['UpdateDevice'] = Dummy_Switch_Name_3.."|0|"..TempTemperature3 } --send updated values to Domoticz

if debug == true then
print("Temp returned for "..Dummy_Switch_Name_3.." = '"..TempTemperature3.."'")
end


-- Fourth sensor based on its UID

i = string.find(XML_string, sensorID_4) -- find the next unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID

TempTemperature4=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[4] = { ['UpdateDevice'] = Dummy_Switch_Name_4.."|0|"..TempTemperature4 } --send updated values to Domoticz

if debug == true then
print("Temp returned for "..Dummy_Switch_Name_4.." = '"..TempTemperature4.."'")
end


end




return commandArray

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Friday 29 December 2017 17:53
by mcgiak
Thank you for yout work and your disponibility!

Sorry, i'm late :\

I have changed the script code and insert the new code, but in the log i have the same message:

2017-12-29 17:51:00.465 LUA: Bad XML status read - temperatures NOT updated
2017-12-29 17:52:00.171 LUA: Bad XML status read - temperatures NOT updated
2017-12-29 17:53:00.501 LUA: Bad XML status read - temperatures NOT updated

It's possible?

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Friday 29 December 2017 18:23
by RATA1
Hello,
check all the error logs (not just the status) and make sure you have defined/created the virtual switches with what is in the code in the quotes - i.e. below.

Dummy_Switch_Name_1 = "ACS"
Dummy_Switch_Name_2 = "Interna"
Dummy_Switch_Name_3 = "Puffer"
Dummy_Switch_Name_4 = "Esterna"

It should be a copy and paste exercise and all you need to to is define/create what is needed in terms of dummy switches. If the dummy switches are not defined or wrong it will throw an error (that I am guessing you can't see in the info log) and print the "not updated". The script above works fine on my platform when using the public @ of your KMtronic box so it is something to do with your setup rather than the script or the KMtronic box.

Thanks

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Friday 29 December 2017 21:42
by RATA1
OK, For watchers here - did a TeamViewer session with mcgiak and the issue appears to be that cURL was not installed on the Windows box so failed to get anything back from the KMTronics module from the "curl" in the LUA script and fails with the:

"LUA: Bad XML status read - temperatures NOT updated"

Sadly there is no indication of failure due to curl not installed/working in the error logs (that I could see in the Window platform) ;(

I also made an error with the names or IDX. It needs to be the IDX value not the name. Sorry about the confusion there! The names can be used to reference the IDX for ease of debug.
Also there were no virtual switches created on mcgiak's install - it was pure vanilla:(

Below is the hopefully last update! We got it working on a fresh Pi install not the original Windows one so if you are having issues with it and on Windows OS I expect you will need to install cURL. I don't know and can't help there.

Thanks!
------------------------------------------------------------------------------
--
--
-- Domoticz lua script to convert XML output from KMTronic DS1820 LAN module
-- Reads the temperature based on the unique ID of the sensor and passes it
-- back to a virtual temperature sensor(s)
-- sensors in Domoticz
--
------------------------------------------------------------------------------
-- Rob Allen 12/04/2016
-- re written for "universal use" 25/12/2017
— corrected error with nave v IDX 29/12/2017
------------------------------------------------------------------------------

commandArray = {}



function XML_Capture(cmd,flatten)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
if flatten then
s = string.gsub(s, '^%s+', '')
s = string.gsub(s, '%s+$', '')
s = string.gsub(s, '[\n\r]+', ' ')
end
return s
end

--set to true to print to log file.
debug = false


--Dummy switch names - change as appropriate to YOUR Virtual switches you already created - used for meaningful debug output
Dummy_Switch_Name_1 = "Name1"
Dummy_Switch_Name_2 = "Name2"
Dummy_Switch_Name_3 = "Name3"
Dummy_Switch_Name_4 = "Name4"

—below edit the IDX numbers marked ?? with YOUR virtual switches you already created


--Dummy_Switch_IDX_1 = ?? -- replace with your dummy switch IDX of Dummy_Switch_Name_1 above
--Dummy_Switch_IDX_2 = ?? --replace with your dummy switch IDX of Dummy_Switch_Name_2 above
--Dummy_Switch_IDX_3 = ?? --replace with your dummy switch IDX of Dummy_Switch_Name_3 above
--Dummy_Switch_IDX_4 = ?? --replace with your dummy switch IDX of Dummy_Switch_Name_4 above



--define temperature sensor UID's - i.e. the DS1820 serial number
--up to 4 per DS1820 LAN interface

sensorID_1 = “1234567890AAAAAA"
sensorID_2 = “1234567890BBBBBB"
sensorID_3 = “1234567890CCCCCC"
sensorID_4 = “1234567890DDDDDD"


-- Define your device IP@

Device_IP = "192.168.1.199" -- change this to the internal IP@ of KMtronic box

if debug == true then
print("Reading values from: 'http://"..Device_IP.."/status.xml'")
end

-- Read the XML data from the device

XML_string=XML_Capture("curl -s 'http://"..Device_IP.."/status.xml'",1)


valid = string.find(XML_string, "<response>") -- check we are looking in the right place

if debug == true then
print(XML_string)
end

if valid == nil then
print ("Bad XML status read - temperatures NOT updated")
else

--Find the first sensor based on its UID

i = string.find(XML_string,sensorID_1) -- find the unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID

TempTemperature1=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[1] = {['UpdateDevice'] = Dummy_Switch_Name_1.."|0|"..TempTemperature1} --send updated values to Domoticz - must make sure the name matches the Dummy name you created above.

if debug == true then
print("Temp returned for "..Dummy_Switch_IDX_1.." = '"..TempTemperature1.."'")
end



-- Second sensor based on its UID

i = string.find(XML_string, sensorID_2) -- find the next unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID

TempTemperature2=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[2] = { ['UpdateDevice'] = Dummy_Switch_IDX_2.."|0|"..TempTemperature2 } --send updated values to Domoticz

if debug == true then
print("Temp returned for "..Dummy_Switch_Name_2.." = '"..TempTemperature2.."'")
end

-- Third sensor based on its UID


i = string.find(XML_string, sensorID_3) -- find the next unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID


TempTemperature3=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[3] = {['UpdateDevice'] = Dummy_Switch_IDX_3.."|0|"..TempTemperature3 } --send updated values to Domoticz

if debug == true then
print("Temp returned for "..Dummy_Switch_Name_3.." = '"..TempTemperature3.."'")
end


-- Fourth sensor based on its UID

i = string.find(XML_string, sensorID_4) -- find the next unique ID of the sensor
p = string.find(XML_string,"<temp>",i) --look for the next occurrence of <temp> after ID

TempTemperature4=string.sub(XML_string,p+6,p+10) --temperature is the 5 characters after <temp> - i.e. 6-10

commandArray[4] = { ['UpdateDevice'] = Dummy_Switch_IDX_4.."|0|"..TempTemperature4 } --send updated values to Domoticz

if debug == true then
print("Temp returned for "..Dummy_Switch_Name_4.." = '"..TempTemperature4.."'")
end


end




return commandArray

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Thursday 08 March 2018 18:10
by dulka
I would like to get a DS18B20 kmtronic sensor that I have on my PI3 but I can not. I compiled the script by copying that of RATA1 and I have a problem. I inserted the modified script with a text editor of windows but nothing happens, the script is ignored, after having lost a lot of time I realized that the same script inserted in the folder of domoticz for windows is activated ... Why? do? Am I wrong to modify it with a text editor? Thanks to those who will help me.

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Saturday 10 March 2018 9:48
by gizmocuz
In the next beta version (currently building) support has been added for the KMTronic temperature sensors.

https://github.com/domoticz/domoticz/co ... 0ba68bc830

Not sure why people are going very complicated with complex scripts while implementing this took less then 5 minutes in the native code :mrgreen:

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Saturday 10 March 2018 14:04
by dulka
In my situation this happens because i’m not so good. I hope that the kmtronic temp will be implemented as soon as possible within this nice program. I like it so much that I contributed to the financing. Thank you

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Saturday 10 March 2018 14:18
by gizmocuz
@Dulka, thanks ! If you update to the latest beta version it should work. Just add the KMTronic TCP hardware

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Saturday 10 March 2018 14:26
by dulka
I have done it and it works. Tank you very much!!!!

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Friday 29 June 2018 18:53
by jono
Hi my 8.channel kmtronic web relay keeps going idle after a period of time

I have to reset Domoticz to wake up the the relay any ideas

I’m using the latest beta version

Thank in advance
John


Sent from my iPhone using Tapatalk

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Saturday 30 June 2018 8:55
by gizmocuz
Looking at the code, it also tries to poll every 10 seconds the relay status, so it can not be a timeout problem.
It could be a firmware issue, try to see if there is a new firmware
Make sure the device has a fixed IP address, as well as Domoticz

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Saturday 24 November 2018 21:00
by mcgiak
gizmocuz wrote: Saturday 10 March 2018 9:48 In the next beta version (currently building) support has been added for the KMTronic temperature sensors.

https://github.com/domoticz/domoticz/co ... 0ba68bc830

Not sure why people are going very complicated with complex scripts while implementing this took less then 5 minutes in the native code :mrgreen:
At the moment I use the 4.9700 version and the native support for the KMTronic Temperature board does not seem to be present. Am I wrong?
I am using the lua script at the moment, but unfortunately (and I can not understand why), domoticz does not send notifications although correctly set (sends them to other sensors).

Re: new: KMTronic USB/485/TCP(Web) support

Posted: Sunday 25 November 2018 16:52
by gizmocuz
@mcgiak , send you a PM for a debug request