• Uitstekend advies
  • Voor 16.30 uur besteld vandaag verstuurd
  • Bijna altijd bereikbaar (+31 73 762 0 762)
  • Maandag koopavond

FIBARO HC2 ICY Thermostaat koppeling

FIBARO Home Center 2 en ICY (essent) E-thermostaat | Wij leggen uit hoe

De ICY E-thermostaat - gewoon te koop! - kun je via een account bij E-thermostaat aansturen met je smartphone. Het is een basic on/off thermostaat, die je prima kunt programmeren op schema's, vorstprotectie en beweging. In de Vera is een plugin beschikbaar voor deze thermostaat, en het is ook mogelijk deze in de FIBARO HC2 aan te sturen, zij het beperkt. Maar: het komt nog niet in de buurt van de plugins die FIBARO zelf aanlevert. 

HET FIBARO HTTPS-PROTOCOL

De mogelijkheid van HTTPS (secure communicatie) van de HC2 is voorlopig alleen beschikbaar voor plugins en in scenes. Het is dus nog niet mogelijk dit rechtstreeks vanuit een virtueel apparaat te doen. Dat is jammer, want dat maakt de werking uiteindelijk wat omslachtig. 

Wat hebben we gedaan:

- Twee global variables aangemaakt voor het opslaan van de security token en de UID van de thermostaat.

FIBARO HC2 e-thermostaat koppeling

- Predfined variable voor de ingestelde temperaturen.

Predfined Variable

- Een virtueel apparaat aangemaakt dat bestaat uit twee labels en drie knoppen. (klik hier voor de .vfib)

Virtueel Apparaat

- Een scene gemaakt om gegevens op te halen.

- 1 scene gemaakt om de temperatuur te zetten.
 

HOE WERKT HET APPARAAT

In de mainloop van het virtuele apparaat wordt iedere 300 seconden de scene afgeroepen om de gegevens op te halen. Hiermee wordt ook het security token ververst.

--Put the data scene ID in here
fibaro:startScene(233)

fibaro:sleep(300*1000)

Iedere knop in de thermostaat zet de bijbehorende variabele en haalt dan een seconde later de data op zodat deze bijna meteen zichtbaar wordt (in dit geval 20 graden).

fibaro:setGlobal("ICY", "20");
fibaro:sleep(1*1000)
fibaro:startScene(233);

DE SCENES

De eerste scene is gemaakt om de gegevens op te halen. Hier zit ook de functie om een security token te verkrijgen. De eerste keer zal het data ophalen niet lukken omdat er nog geen security token is. Bij die foutmelding haalt hij dan een security token op. Bij de tweede run moet het wel lukken.

--[[
%% properties

%% globals
--]]


--Import the virtual ICY thermostat and look up the ID. Fill in Below
local VirtualICY = 232


--Fill in your login details for the ICY thermostat
local username='myICYusername'
local password='myICYpassword'


--This gets a security token from ICY
function GetToken()
        local http = net.HTTPClient({ timeout = 3000 })
        local message='username='..username..'&password='..password
        local controlHeaders = {['content-type'] = 'application/x-www-form-urlencoded'}
        http:request('https://portal.icy.nl/login', {
        options = {
                    headers = {
                      ['content-type'] = 'application/x-www-form-urlencoded',
                      },
                    method = 'POST',
                    data=message
               },
        success = function(param)
                if param.status == 200 then
                print('Succes STATUS: ', param.status)
                  local responds = json.decode(param.data)
                  local token = responds.token
                  local serialthermostat1 = responds.serialthermostat1
                  fibaro:setGlobal('ICYuid',serialthermostat1)
                  fibaro:setGlobal('IcyToken',token)
                end
        end,
        error = function(error)      end
        })
end


--This reads the details of the current settings
function ReadData()
          local SecurityToken = fibaro:getGlobal('IcyToken')
          
        local http = net.HTTPClient({ timeout = 3000 })
        local request_body=''

        http:request('https://portal.icy.nl/data', {
        options = {
                    headers= {
            ['content-type'] = 'application/x-www-form-urlencoded',
            ['session-token'] = SecurityToken,
            },
                    method = 'GET',
                    data=request_body
               },
      
        success = function(param)
        if param.status == 200 then
                print('Data Receiving: ', param.status)
                  local json_input = json.decode(param.data)
                local temperature1 = json_input.temperature1
                    print('Set temp: ', temperature1)
                fibaro:call(VirtualICY, "setProperty", "ui.TempSet.value",temperature1)
                temperature2 = json_input.temperature2
                    print('Current temp: ',temperature2)
                  fibaro:call(VirtualICY, "setProperty", "ui.TempNow.value",temperature2);
                  serial = json_input.serialthermostat1
        elseif param.status == 401 then
              --This is where we need to get a new token
            GetToken()
          end
        end,
        error = function(error)      end
        })

end

ReadData()

De tweede scene wordt getriggerd door een verandering van de predefined variabele met de temperaturen. Het haalt die temperatuur op en stuurt deze naar de thermostaat.

--[[
%% properties
%% globals
ICY
--]]

function setTemp(targettemp)
        local serialthermostat1 = fibaro:getGlobal('ICYuid')
        local SecurityToken = fibaro:getGlobal('IcyToken')

              local request_body= 'uid=' .. serialthermostat1
              message = request_body .. '&temperature1=' .. targettemp
              print(message)
              local data_length = string.len(message)
              print(data_length)
            local http = net.HTTPClient({ timeout = 3000 })

            http:request('https://portal.icy.nl/data', {
            options = {
                    headers= {
            ['content-type'] = 'application/x-www-form-urlencoded',
            ['session-token'] = SecurityToken,
            },
                    method = 'POST',
                    data=message
               },

        success = function(param)
        fibaro:debug(json.encode(param))
        if param.status == 200 then
                print('Data Receiving: ', param.status)
                  --print(param.data)
--                  local json_input = json.decode(param.data)
--                temperature1 = json_input.temperature1
--                    print('Set temp: ', temperature1)
--                temperature2 = json_input.temperature2
--                    print('Current temp: ',temperature2)
                
          end
        end,
        error = function(error)      end
        })

end
NewTemp = fibaro:getGlobalValue("ICY")
setTemp(NewTemp)

 

Dit zou moeten werken. 

Tips en commentaar zijn welkom!

 

 

Er zijn geen producten beschikbaar op deze pagina.

 
Klantenservice telefoonnummer

+31737620762
ma-vrij: 10:00-17:00 en za 10:00-15:00

 
Adres

Gasstraat Oost 14A 5349 AV Oss Nederland

Google maps