dear all,
hereby version v0.1 of the script. For now it can only be used to write a setpoint and change modes. It also displays some current values of the toon in the homeseer log. In the next version these values will be pushed to 1 or more homeseer devices. In addition all other values such as current E/gas usage/costs etc will be made accesible by this script.
The reason I post this pre beta now;
I''ve tested the current script with HS3 and HS2 (v0.1). When I going to push values to homeseer devices it would not be compatible with HS2 anymore.
Im not a scripting guru, so I know I did something a bit clumsy, so please correct me
Installation instructions:
save the code as toon.vb and create an homeseer event with parameters described in the header, except when using HS2 use these parameters ("Main","USERNAME,PASSWORD,SETPOINT,MODE")
The username and password are the same as for your eneco access
So here it is, and please comment and feel free to give me some feedback
v0.1 usable for HS2 and HS3
Code: Select all
Sub Main(params as object)
'Control Eneco Toon Thermostat From Homeseer v0.1
'Made by Bart Bakels/ Promedes.nl
'Usage Script parameters; USERNAME,PASSWORD,SETPOINT,MODE
' No setpoint change fill in nothing; USERNAME,PASSWORD,,MODE
' no mode change fill in nothing USERNAME,PASSWORD,SETPOINT,
' only status update fill in USERNAME,PASSWORD,,
' modestates; 0=comfort; 1=thuis 2=slapen 3=weg
'Enable Debug Messages Level
'0=None
'1=Info
'2=All
Dim Debug = 1
'=====================================================================
'Get parameters
Dim parameters(4) as String
parameters = params.Split(",")
Dim Username As String = parameters(0)
Dim Password As String = parameters(1)
Dim setpoint As String = parameters(2)
Dim selectedmode As String = parameters(3)
'random needs to be a valid UUID1
Dim Random = "12344178-1544-5648-1234-567882545632"
dim indexstart
dim indexend
Dim loginresponse
Dim startresponse
Dim logoutresponse
Dim stateresponse
Dim spsetresponse
Dim modesetresponse
Dim clientid
Dim clientidchecksum
Dim agreementid
Dim agreementidchecksum
'======================
'Login
'======================
loginresponse = hs.URLAction("https://toonopafstand.eneco.nl/toonMobileBackendWeb/client/login?username=" & Username & "&password=" & Password,"GET", "", "")
If Debug = 2 Then
hs.WriteLog("Toon response login Pri", loginresponse)
End If
'======================
'find IDS
'======================
indexstart = InStr(loginresponse, """clientId"":")
indexstart = indexstart + 13
clientid = Mid(loginresponse,indexstart , 36 )
If Debug = 2 Then
hs.WriteLog("toon ClientID", clientid)
End If
indexstart = InStr(loginresponse, """clientIdChecksum"":")
indexstart = indexstart + 21
clientidchecksum = Mid(loginresponse,indexstart , 40 )
If Debug = 2 Then
hs.WriteLog("toon ClientIDChecksum", clientidchecksum)
End If
indexstart = InStr(loginresponse, """agreementId"":")
indexstart = indexstart + 16
agreementid = Mid(loginresponse,indexstart , 5 )
If Debug = 2 Then
hs.WriteLog("toon AgreementID", agreementid)
End If
indexstart = InStr(loginresponse, """agreementIdChecksum"":")
indexstart = indexstart + 24
agreementidchecksum = Mid(loginresponse,indexstart , 40 )
If Debug = 2 Then
hs.WriteLog("toon AgreementIDChecksum", agreementidchecksum)
End If
'======================
'Start
'======================
startresponse = hs.URLAction("https://toonopafstand.eneco.nl/toonMobileBackendWeb/client/auth/start?clientId=" & clientid & "&clientIdChecksum=" & clientidchecksum & "&agreementId=" & agreementid & "&agreementIdChecksum=" & agreementidchecksum & "&random=" & random,"GET", "", "")
If Debug = 2 Then
hs.WriteLog("Toon response Start", startresponse)
End If
'======================
'Retrieve Toon State
'======================
stateresponse = hs.URLAction("https://toonopafstand.eneco.nl/toonMobileBackendWeb/client/auth/retrieveToonState?clientId=" & clientid & "&clientIdChecksum=" & clientidchecksum & "&random=" & random,"GET", "", "")
If Debug = 2 Then
hs.WriteLog("Toon response status", stateresponse)
End If
'======================
'Write Manual Setpoint to Toon
'======================
Dim setpointraw
If NOT setpoint = "" Then
setpointraw = setpoint*100
spsetresponse = hs.URLAction("https://toonopafstand.eneco.nl/toonMobileBackendWeb/client/auth/setPoint?clientId=" & clientid & "&clientIdChecksum=" & clientidchecksum & "&value=" & setpointraw & "&random=" & random,"GET", "", "")
If Debug = 1 Then
hs.WriteLog("Toon SP written","SP set to: " & setpoint & " response: " & spsetresponse)
End If
End If
'======================
'Write Mode to Toon
'======================
If NOT selectedMode = "" Then
modesetresponse = hs.URLAction("https://toonopafstand.eneco.nl/toonMobileBackendWeb/client/auth/schemeState?clientId=" & clientid & "&clientIdChecksum=" & clientidchecksum & "&state=2&temperatureState=" & selectedMode & "&random=" & random,"GET", "", "")
If Debug = 1 Then
hs.WriteLog("Toon Mode written","Mode set to: " & selectedMode & " response: " & modesetresponse)
End If
End If
'======================
'Logout
'======================
logoutresponse = hs.URLAction("https://toonopafstand.eneco.nl/toonMobileBackendWeb/client/auth/logout?clientId=" & clientid & "&clientIdChecksum=" & clientidchecksum & "&random=" & random,"GET", "", "")
If Debug = 2 Then
hs.WriteLog("Toon response logout", logoutresponse)
End If
'======================
'decode state
'======================
Dim currenttemp
Dim currentsetpoint
Dim burnerstatus
Dim currentmode As String
indexstart = InStr(stateresponse, """currentTemp"":")
indexstart = indexstart + 14
currenttemp = Mid(stateresponse,indexstart , 5 )
currenttemp = currenttemp/100
If Debug > 0 Then
hs.WriteLog("Toon CurrentTemp", currenttemp)
End If
indexstart = InStr(stateresponse, """currentSetpoint"":")
indexstart = indexstart + 18
currentsetpoint = Mid(stateresponse,indexstart , 5 )
currentsetpoint = currentSetpoint/100
If Debug > 0 Then
hs.WriteLog("Toon CurrentSP", currentsetpoint)
End If
indexstart = InStr(stateresponse, """burnerInfo"":")
indexstart = indexstart + 15
burnerstatus = Mid(stateresponse,indexstart , 1 )
If Debug > 0 Then
hs.WriteLog("Toon burnerStatus", burnerstatus)
End If
indexstart = InStr(stateresponse, """activeState"":")
indexstart = indexstart + 14
currentmode = Mid(stateresponse,indexstart , 2 )
if currentmode = " -"
currentmode = "Manueel"
End if
if currentmode = " 0"
currentmode = "comfort"
End if
if currentmode = " 1"
currentmode = "thuis"
End if
if currentmode = " 2"
currentmode = "slapen"
End if
if currentmode = " 3"
currentmode = "weg"
End if
If Debug > 0 Then
hs.WriteLog("Toon currentmode", currentmode)
End If
If Debug > 0 Then
hs.WriteLog("Toon", "Success")
End If
End Sub