MichaelLoch

Fenster Auf Party

Mar 9th, 2016
123
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2. %% properties
  3. 98 value
  4. %% globals
  5. PresentState
  6. --]]
  7.          
  8. --------------- Absenk-Temperatur bei Fenster-Öffnung-------------
  9. local schedule = {
  10. id = 4, --ID des Raumes im Heiz-Panel
  11. idleTemp = 8 --Temperatur, die bei Fenster-Öffnung gesetzt werden soll
  12. }
  13. --------------- Absenk-Temperatur bei Abwesenheit ----------------
  14. local scheduleAway = {
  15. id = 4, --ID des Raumes im Heiz-Panel
  16. idleTemp = 16  --Temperatur, die bei Abwesenheit gesetzt werden soll
  17. --idleTemp = tonumber(fibaro:getGlobalValue('AwayTemp'))--Temperatur, die bei Abwesenheit gesetzt werden soll
  18. }
  19. --------------- Heiz-Temperatur bei Party ----------------
  20. local scheduleParty = {
  21. id = 4, --ID des Raumes im Heiz-Panel
  22. idleTemp = 22  --Temperatur, die bei Abwesenheit gesetzt werden soll
  23. --idleTemp = tonumber(fibaro:getGlobalValue('AwayTemp'))--Temperatur, die bei Party gesetzt werden soll
  24. }
  25. sensorID = 98 --ID des Tür-/Fenstersensor
  26.  
  27.  
  28.            
  29. -- AB HIER NICHTS MEHR ÄNDERN
  30.        
  31.     function Debug( color, message )
  32.      fibaro:debug(string.format('<%s style="color:%s;">%s<!--%s-->', "span", color, message, "span"));
  33.     end
  34.          
  35.     local function getMethod(requestUrl, successCallback, errorCallback)
  36.       local http = net.HTTPClient()
  37.       http:request(requestUrl, {
  38.       options = {
  39.        method = 'GET'
  40.        },
  41.        success = successCallback,
  42.        error = errorCallback
  43.        })
  44.        end
  45.          
  46.     local function putMethod(requestUrl, data, successCallback, errorCallback)
  47.       local http = net.HTTPClient()  
  48.       http:request(requestUrl, {
  49.       options = {
  50.        method = 'PUT',
  51.        data = json.encode(data)
  52.        },
  53.        success = successCallback,
  54.        error = errorCallback
  55.        })
  56.        end
  57.          
  58.     local function setVactionModeTrue(subjectToChange)
  59.       local url = 'http://127.0.0.1:11111/api/panels/heating/' .. subjectToChange.id
  60.       getMethod(url, function(resp)
  61.       if resp.status == 200 then
  62.         print('Verbindung zum Heizpanel erfolgreich, Status ' .. resp.status)
  63.         local panel = json.decode(resp.data)
  64.         if panel.properties.vacationTemperature ~= nil then
  65.           panel.properties.vacationTemperature = subjectToChange.idleTemp          
  66.           print('Setze Temperatur auf ' .. subjectToChange.idleTemp .. ' C')
  67.           putMethod(url, panel, function(resp)  
  68.             if resp.status == 200 then
  69.             print('Änderung wurde vorgenommen.')
  70.             end
  71.             end,
  72.             function(err)
  73.             print('Error ' .. err)
  74.             end
  75.             )
  76.             else
  77.             print('Panel nicht gefunden')
  78.             end
  79.             else
  80.               print('Verbindung konnte nicht hergestellt werden, Status ' .. resp.status)
  81.             end
  82.             end,
  83.             function(err)
  84.               print('error ' .. err)
  85.             end
  86.             )
  87.         end
  88.          
  89.     local function setVactionModeFalse(subjectToChange)
  90.       local url = 'http://127.0.0.1:11111/api/panels/heating/' .. subjectToChange.id
  91.       getMethod(url, function(resp)
  92.       if resp.status == 200 then
  93.         print('Verbindung zum Heizpanel erfolgreich, Status ' .. resp.status)
  94.         local panel = json.decode(resp.data)
  95.         if panel.properties.vacationTemperature ~= nil then
  96.           panel.properties.vacationTemperature = 0      
  97.           print('Setze Heizplan wieder fort.')
  98.           putMethod(url, panel, function(resp)  
  99.             if resp.status == 200 then
  100.               print('Änderung wurde vorgenommen.')
  101.             end
  102.             end,
  103.             function(err)
  104.              print('Error ' .. err)
  105.             end
  106.             )
  107.             else
  108.              print('Panel nicht gefunden')
  109.             end
  110.             else
  111.              print('Verbindung konnte nicht hergestellt werden, Status ' .. resp.status)
  112.             end
  113.             end,
  114.             function(err)
  115.             print('error ' .. err)
  116.             end
  117.             )
  118.         end
  119.          
  120.     local trigger = fibaro:getSourceTrigger();
  121.        
  122. if (trigger['type']=='global') then
  123.   if (fibaro:getGlobalValue("PresentState") == "Away") then
  124.     if (tonumber(fibaro:getValue(sensorID, 'value')) == 0) then
  125.       setVactionModeTrue(scheduleAway)
  126.       Debug("blue",'Abwesend, niemand Zuhause, Fahre Heizung runter.')
  127.     else
  128.       Debug("white",'Abwesend, niemand Zuhause, Fenster ist noch geöffnet. Es bleibt bei der festgelegten Temperatur.')
  129.     end  
  130.     elseif (fibaro:getGlobalValue("PresentState") == "Party") then
  131.     if (tonumber(fibaro:getValue(sensorID, 'value')) == 0) then
  132.       setVactionModeTrue(scheduleParty)
  133.       Debug("red",'Anwesend, jemand Zuhause Party Time, Fahre Heizung hoch.')
  134.     else
  135.       Debug("white",'Abwesend, niemand Zuhause, Fenster ist noch geöffnet. Es bleibt bei der festgelegten Temperatur.')
  136.     end
  137.   elseif (fibaro:getGlobalValue("PresentState") == "Home") then
  138.     if (tonumber(fibaro:getValue(sensorID, 'value')) == 0) then
  139.       setVactionModeFalse(schedule)
  140.       Debug("green", 'Anwesend, jemand ist wieder Zuhause. Schalte Heizplan wieder ein.')
  141.     else
  142.       Debug("white",'Anwesend, jemand ist wieder Zuhause. Fenster ist noch geöffnet. Es bleibt bei der festgelegten Temperatur.')
  143.     end  
  144.   end
  145.        
  146.     elseif (trigger['type']=='property') then
  147.       if (tonumber(trigger['deviceID'])==tonumber(sensorID)) then
  148.         local sensor = fibaro:getValue(sensorID, 'value')
  149.         if (tonumber(sensor) == 1) then
  150.           Debug("yellow", 'Fenster geöffnet.')
  151.           counter = 0
  152.           while (tonumber(fibaro:getValue(sensorID, 'value')) == 1 and counter < 60) do
  153.             counter = counter + 1
  154.             fibaro:sleep(1*1000)
  155.           end
  156.         if (tonumber(fibaro:getValue(sensorID, 'value')) == 1) then
  157.           Debug("blue",'Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.')
  158.           setVactionModeTrue(schedule)
  159.         else
  160.           Debug("yellow", 'Fenster wurde innerhalb einer Minute wieder geschlossen.')
  161.         end
  162.     else
  163.         fibaro:debug('Fenster geschlossen.')
  164.         Debug("red", 'Fenster ist wieder zu. Schalte Heizplan wieder ein.')
  165.         setVactionModeFalse(schedule)
  166.         end
  167.       end
  168.     end
RAW Paste Data