Stap 6: Vera Scene - HVAC teek functie
Voor elke keer dat deze scène heet noemen we de tou_hvac_tick()-functie aan/uitschakelen thermostaat modi en schakelingen, gebaseerd op huidige teek versus teken toegestaan per de tijd-of-use beleid. Hebt u meerdere thermostaten kunt u deze functie eenmaal aanroepen voor elk. Om te beginnen we om parameters te definiëren en kijken naar de huidige modus (Off/Cool/hitte/Auto) en staat (Idle, koeling, Verwarming) van de thermostaat:
function tou_hvac_tick(tick, policy, dt, id) local urn_hvac_mode = "urn:upnp-org:serviceId:HVAC_UserOperatingMode1" local urn_hvac_state = "urn:micasaverde-com:serviceId:HVAC_OperatingState1" local mode_status = luup.variable_get(urn_hvac_mode, "ModeStatus", id) local mode_state = luup.variable_get(urn_hvac_state, "ModeState", id)
Om uw thermostaat zo normaal mogelijk werken verdient het een krediet wanneer op maar niet-gebruikte en verliest een krediet anders. Als de thermostaat credits, heeft dan is het niet beperkt, wat betekent dat op een gemiddelde dag ziet u geen de thermostaat voortdurend Fietsen tussen uit en actief. Als het begint koeling of verwarming het zal dus tot het loopt uit kredieten, zin als je thuis en het huis aankomt te warm is je kunt crank neer de temperatuur en geef het een impuls netwerkmodus onmiddellijk beperken.
-- TimeOfUseCredits: Increment if thermostat on but idle; decrement if active local var_credits = tonumber(luup.variable_get("TimeOfUse", "TimeOfUseCredits", id) or 0) if (mode_status ~= "Off") then if (mode_state == "Idle") and (var_credits < policy.l) then var_credits = var_credits + 1 elseif (mode_state ~= "Idle") and (var_credits > 0) then var_credits = var_credits - 1 end end
Het moeilijke deel hier behandelt incidenteel falen voor het verzenden van Z-Wave of Nest thermostaat modus wijzigingsverzoeken. Als het uitschakelen van een thermostaat registreren wij de huidige modus als de variabele "TimeOfUsePrevious" van het apparaat van de thermostaat. Toen we hervatten reeks "ModeTarget" naar deze waarde en op de volgende teek controleren "ModeStatus" om te zien dat de opdracht nam. Alleen we schakelt u vervolgens de vorige modus op "None".
-- TimeOfUsePrevious: Set "Off" if active or previous mode when limited local var_previous = luup.variable_get("TimeOfUse", "TimeOfUsePrevious", id) or "None" if (tick >= policy.l) and (var_credits == 0) then if (var_previous == "None") then luup.variable_set("TimeOfUse", "TimeOfUsePrevious", mode_status, id) luup.call_action(urn_hvac_mode, "SetModeTarget", {NewModeTarget = "Off"}, id) end elseif (var_previous ~= "None") then if (var_previous == mode_status) then luup.variable_set("TimeOfUse", "TimeOfUsePrevious", "None", id) end luup.call_action(urn_hvac_mode, "SetModeTarget", {NewModeTarget = var_previous}, id) end
Tot slot Sla de nieuwe telling van het krediet. Voor foutopsporing ook ik meld u het tijdstip van gebruiksbeleid als een variabele op het apparaat van de thermostaat en beëindigen van de functie:
luup.variable_set("TimeOfUse", "TimeOfUseCredits", var_credits, id) luup.variable_set("TimeOfUse", "TimeOfUsePolicy", policy.t, id) end