02 december 2024, 22:57:07

Is er iemand thuis?

Gestart door Nvbgm, 23 december 2019, 16:17:30

Vorige topic - Volgende topic

Nvbgm

Het volgende script heb ik ergens opgedaan en aangepast om bij afwezigheid de verwarming automatisch op een bepaalde stand te zetten.
Maar ook om zodra ik weer thuis kom de verwarming aan te zetten. Ik heb wat veranderingen en aanpassingen gedaan zodat het voor mij prima bruikbaar is. Ik wil het graag met jullie delen.

-- LUA Time "Niemand Thuis" script
-- Wat kan dit script:
-- De verwarming handmatig op continu 15 graden zetten.
-- De verwarming handmatig op tijdelijk 19 graden zetten tot het volgende schakelpunt van de thermostaat.
-- De verwarming automatisch op 15 graden zetten indien er aan bepaalde voorwaarden word voldaan.
-- De verwarming automatisch weer aanzetten bij verandering van de voorwaarden
-- o.a Ping je mobieltje of die in het netwerk aanwezig is. Zo niet verwarming na 20min op 15 graden constant.
-- Zodra mobiel weer online is de verwarming weer op tijdelijk 19 graden.
-- Dit alles is natuurlijk aan te passen naar eigen wensen.
-- Welke switches heb ik nodig:
-- 1 Light/Switch, Selector switch, Selector (b.v. Auto, Temp-19, Cont-15). Let op !! Zet Auto als eerste (Off) de andere als (On).
-- 1 Lightning2, AC, ON/OFF (b.v. Thermostaat switch) Hier kun je in de aan/uit actie de commando's ingeven voor de verwarming.
-- Voor de rest wijst het zich vanzelf.
-- ===============================================================================

function DevicePing(ip, device)
    ping_success=""
    ping_success=os.execute('ping -c1 -w1 ' .. ip)
    if ping_success then
        print("ping success " ..device)
        DeviceOnOff('On',device)
    else
        print("ping fail " ..device)
        DeviceOnOff('Off',device)
    end

end

function DeviceOnOff(Action, device)
   
    for deviceName,deviceValue in pairs(otherdevices) do
        if (deviceName==device) then
            if deviceValue == Action then
                print(tostring(device) .." staat ".. tostring(Action))
            else
                commandArray[device] = Action
                print(tostring(device) .." " ..tostring(Action).. "  gezet")
            end
       end
    end
end

commandArray = {}

DevicePing('192.157.1.15','A') --rechtstreeks on/off schakelen zet hier dan het devicenaam ('192.157.1.15','devicenaam')
DevicePing('192.157.1.16','B') --zodra dan het device online komt zal er geschakeld worden. de rest van het script is dan n.v.t.

if (otherdevices['Mijn mobiel'] == 'On' or otherdevices['Haar mobiel'] == 'On' or otherdevices['Thermostaat'] == 'Tijd-19' or otherdevices['Thermostaat'] == 'Cont-15') then
    print("Er is iemand thuis")
    DeviceOnOff("On","Thermostaat switch")
    commandArray['Variable:NiemandThuisTeller']=tostring(0)
       
    elseif (otherdevices['Mijn mobiel'] == 'Off' and otherdevices['Haar mobiel'] == 'Off' and otherdevices['Thermostaat'] == 'Auto') then   
            -- hier niet ......... uitzetten, maar alleen de var laten optellen --
            commandArray['Variable:NiemandThuisTeller'] = tostring(tonumber(uservariables['NiemandThuisTeller']) + 1)
            print("Er is al "..tostring(tonumber(uservariables['NiemandThuisTeller']) + 1).." minuten niemand thuis")
    end

if (tonumber(uservariables['NiemandThuisTeller']) > 19) then -- je moet minimaal XX minuten buiten bereik zijn
    DeviceOnOff("Off","Thermostaat switch")
end


Ter aanvulling nog dit. Wanneer je op de selector schakelaar de Temp-19 of de Cont-15 gebruikt word het script buiten werking gesteld.
Het script zal niet eerder weer werken dan dat je de selector op Auto zet.

Veel plezier.. :)