Tid-av-använda luftkonditionering med en styrenhet för Vera Smart Home (6 / 10 steg)
Steg 6: Vera scen - HVAC Tick funktion
Varje gång denna scen som kallas kräver vi funktionen tou_hvac_tick() för att växla termostat lägen och växlar baserat på nuvarande fästing kontra fästingar tillåtet per tid-av-använda politiken. Om du har flera termostater kan du anropa funktionen en gång för varje. Starta vi definiera parametrar och titt på nuvarande läge (Off/Cool/värme/Auto) och staten (Idle, kylning, uppvärmning) av termostaten:
funktion tou_hvac_tick (tickande, politik, dt, id)
lokala urn_hvac_mode = "urn: upnp-org:serviceId:HVAC_UserOperatingMode1"
lokala urn_hvac_state = "urn: micasaverde-com:serviceId:HVAC_OperatingState1"
lokala mode_status = luup.variable_get (urn_hvac_mode, "ModeStatus", id)
lokala mode_state = luup.variable_get (urn_hvac_state, "ModeState", id)
För att göra din termostat fungera så normalt som möjligt tjänar en kredit när på men inaktiv och förlorar en kredit annars. Om termostaten har HP då det inte är begränsad, vilket innebär en måttlig dag syns termostat ständigt cykling mellan eller aktiv. Om den startar kyla eller värme det kommer så tills det tar slut krediter, menande om du kommer hem och huset är för varmt du kan skruva ner temperaturen och ge den ett lyft utan att omedelbart starta begränsa.
--TimeOfUseCredits: öka om termostaten på men inaktiv; dekrement om aktiva
lokala var_credits = tonumber (luup.variable_get ("TimeOfUse", "TimeOfUseCredits", id) eller 0)
om (mode_status ~ = "Off") sedan
om (mode_state == "Idle") och (var_credits < policy.l) sedan
var_credits = var_credits + 1
ElseIf (mode_state ~ = "Idle") och (var_credits > 0) sedan
var_credits = var_credits - 1
slutet
slutet
Svåra här är att göra med enstaka misslyckande att överföra ändringsbegäranden Z-Wave eller boet termostat-läge. När släcka en termostat vi spela in det aktuella läget som "TimeOfUsePrevious" variabel termostat enhetens. Sen när återupptar vi uppsättning "ModeTarget" till detta värde och på nästa fästing kontrollera "ModeStatus" att se att kommandot tog. Först då kan vi rensa föregående läge till "None".
--TimeOfUsePrevious: ange "Off" om aktiv eller tidigare läge begränsat
lokala var_previous = luup.variable_get ("TimeOfUse", "TimeOfUsePrevious", id) eller "Ingen"
om (tick > = policy.l) och (var_credits == 0) sedan
om (var_previous == "None") sedan
luup.variable_set ("TimeOfUse", "TimeOfUsePrevious", mode_status, id)
luup.call_action (urn_hvac_mode, "SetModeTarget",
{NewModeTarget = "Off"}, id)
slutet
ElseIf (var_previous ~ = "Ingen") sedan
om (var_previous == mode_status) sedan
luup.variable_set ("TimeOfUse", "TimeOfUsePrevious", "Ingen", id)
slutet
luup.call_action (urn_hvac_mode, "SetModeTarget",
{NewModeTarget = var_previous}, id)
slutet
Till sist spara nya kreditkort räkningen. För felsökning ändamål jag också logga tiden av policy för användning som en variabel på termostat enheten och avsluta funktionen:
luup.variable_set ("TimeOfUse", "TimeOfUseCredits", var_credits, id)
luup.variable_set ("TimeOfUse", "TimeOfUsePolicy", policy.t, id)
slutet