Advertisement
boomx

Heizplan-Steuerung 1 Fenster

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