Tag Archives: raspberry

Domoticz sunscreen LUA script

Configuration

Hardware
Raspberry pi
RFXCOM – RFXtrx433 USB 433.92MHz Transceiver
KAKU ASUN-650
Sunscreen with motor

Software
Domoticz
weather Underground or ForcastIO supscription
winSCP

Script

— Zonnescherm zal uitrollen wanneer de goed condities worden weergegeven
— en rolt weer op wanneer dit nodig is.
— André Kamman
— versie info verplaatst naar beneden

commandArray = {}

— #############################################################################################
— # Compiling Values #
— #############################################################################################
— # datum en tijd bepalen #
tijd = (os.date(“%H:%M”))
opmerking = os.date(“Zonnescherm melding %A %d %B %Y om %H:%M#\n”)
optellen = 0

— # Extract waardes from SValue TempDrukLVWU #
TempDrukLVWU1 = otherdevices_svalues[‘TempDrukLVWU’]
–print(“TempDrukLVWU1: “..TempDrukLVWU1)
TempDrukLVWUTemp = string.sub(TempDrukLVWU1,1,string.find(TempDrukLVWU1,’;’,1,true)-1)
print(“TempDrukLVWUTemp: “..TempDrukLVWUTemp)
TempDrukLVWU2 = string.sub(TempDrukLVWU1,string.find(TempDrukLVWU1,’;’,1,true)+1)
–print(“TempDrukLVWU2: “..TempDrukLVWU2)
TempDrukLVWULV = string.sub(TempDrukLVWU2,1,string.find(TempDrukLVWU2,’;’,1,true)-1)
print(“TempDrukLVWULV: “..TempDrukLVWULV)
TempDrukLVWU3 = string.sub(TempDrukLVWU2,string.find(TempDrukLVWU2,’;’,1,true)+1)
–print(“TempDrukLVWU3: “..TempDrukLVWU3)
TempDrukLVWUwaarde1 = string.sub(TempDrukLVWU3,1,string.find(TempDrukLVWU3,’;’,1,true)-1)
print(“TempDrukLVWUwaarde1: “..TempDrukLVWUwaarde1)
print(“1 is Comfortabel”)
print(“2 is ?”)
print(“3 is NAT”)
print(“4 is ?”)
TempDrukLVWU4 = string.sub(TempDrukLVWU3,string.find(TempDrukLVWU3,’;’,1,true)+1)
–print(“TempDrukLVWU4: “..TempDrukLVWU4)
TempDrukLVWUDruk = string.sub(TempDrukLVWU4,1,string.find(TempDrukLVWU4,’;’,1,true)-1)
print(“TempDrukLVWUDruk: “..TempDrukLVWUDruk)
TempDrukLVWUWaarde2 = string.sub(TempDrukLVWU4,string.find(TempDrukLVWU4,’;’,1,true)+1)
print(“TempDrukLVWUWaarde2: “..TempDrukLVWUWaarde2)
print(“1 is ?”)
print(“2 is Deels bewolkt”)
print(“3 is Bewolkt”)
print(“4 is Regen”)
— # Extract waardes from SValue Wind #
wind = otherdevices_svalues[‘Wind’]
–wind = ‘326.00;NW;13;0;9.9;9.9’
–wind = ‘182.00;S;66;0;18.2;18.2′
–print(“Wind: “..wind)
windgetal = string.sub(wind,1,string.find(wind,’;’,1,true)-1)
–print(“windgetal: “..windgetal)
b = string.sub(wind,string.find(wind,’;’,1,true)+1)
–print(“b: “..b)
windrichting = string.sub(b,1,string.find(b,’;’,1,true)-1)
–print(“windrichting: “..windrichting)
d = string.sub(b,string.find(b,’;’,1,true)+1)
–print(“d: “..d)
windsnelheid = string.sub(d,1,string.find(d,’;’,1,true)-1)
–print(“windsnelheid: “..windsnelheid)
— # i.v.m. getallen onder de 10 is deze workaround opgenomen, bijv. 6 is hoger dan 50
if (windsnelheid == ‘1’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘2’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘3’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘4’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘5’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘6’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘7’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘8’ ) then
windsnelheid = “NOK”
end
if (windsnelheid == ‘9’ ) then
windsnelheid = “NOK”
end
–print(“windsnelheid: “..windsnelheid)
f = string.sub(d,string.find(d,’;’,1,true)+1)
–print(“f: “..f)
windjacht = string.sub(f,1,string.find(f,’;’,1,true)-1)
–print(“Windjacht: “..windjacht)
g = string.sub(f,string.find(f,’;’,1,true)+1)
–print(“g: “..g)
— # Extract Temperatuur from SValue Wind #
temperatuurWU = string.sub(g,1,string.find(g,’;’,1,true)-1)
–print(“Temperatuur WU: “..temperatuurWU)
— # Extract BuitenTemperatuur from SValue BuitenTemperatuurThuis #
BuitenTemperatuurThuis = otherdevices_svalues[‘BuitenTemperatuurThuis’]
–print(“BuitenTemperatuur Thuis: “..BuitenTemperatuurThuis)
— # Extract Zicht from SValue FIO – Zicht #
FIOZicht = otherdevices_svalues[‘FIO – Zicht’]
–print(“Zicht FIO: “..FIOZicht)
— # Extract UV Straling from SValue Wind #
zonkracht = otherdevices_svalues[‘UV Straling’]
–print(“Zonkracht: “..zonkracht)
–Filter the first digit from SValue
uv_straling = string.sub(zonkracht,1,string.find(zonkracht,’;’,1,true)-1)
–print(“UV_straling: “..uv_straling)
— heel vaak zijn deze gegevens niet up-to-date
— # Extract actual rainfall from Rain_SValue Weather Underground #
regen1 = otherdevices_svalues[‘RegenWU’]
–print(“Weather Underground regen totaal: “..regen1)
–Filter the first digit from SValue
rain1 = string.sub(regen1,1,string.find(regen1,’;’,1,true)-1)
print(“Weather Underground regen: “..rain1)
–Filter the last digit from SValue
actualrain1 = string.sub(regen1,string.find(regen1,’;’,1,true)+1)
–print(“Weather Underground actualregen: “..actualrain1)
— # Extract actual rainfall from Rain_SValue Forcast IO #
regen2 = otherdevices_svalues[‘RegenFIO’]
–print(“Forcast IO regen totaal: “..regen2)
–Filter the first digit from SValue
rain2 = string.sub(regen2,1,string.find(regen2,’;’,1,true)-1)
print(“Forcast IO regen: “..rain2)
–Filter the last digit from SValue
actualrain2 = string.sub(regen2,string.find(regen2,’;’,1,true)+1)
–print(“Forcast IO actualrain: “..actualrain2)

— #############################################################################################
— # Waardes bepalen #
— # beginwaarde is 100 #
— # +220 is het hoogste #
— # -210 is het laagste #
— #############################################################################################

if (timeofday[‘Daytime’]) then
optellen = optellen + 80
— # Alleen overdag en pas na 7:30 uur ‘s ochtends
opmerking = (opmerking ..”\nDe zon is op! ” ..” – ” ..optellen)
if (tijd >= ‘7:30’) then
optellen = optellen + 10
elseif (tijd >= ‘8:30′) then
optellen = optellen + 20
elseif (tijd >= ’20:00′) then
optellen = optellen – 10
elseif (tijd >= ’21:00′) then
optellen = optellen – 30
elseif (tijd >= ’22:00’) then
optellen = optellen – 40
end
opmerking = (opmerking ..”\n1. Het is nu: “..tijd ..” – ” ..optellen)
–print(optellen)

if (TempDrukLVWUWaarde2 == ‘1’) then
optellen = optellen + 10
elseif (TempDrukLVWUWaarde2 == ‘2’) then
optellen = optellen + 0
elseif (TempDrukLVWUWaarde2 == ‘3’) then
optellen = optellen – 10
elseif (TempDrukLVWUWaarde2 == ‘4’) then
optellen = optellen – 50
end
opmerking = (opmerking ..”\n2. Weather Underground is: “..TempDrukLVWUWaarde2 ..” – ” ..optellen)
–print(optellen)

if (actualrain1 == ‘0.0’) then
optellen = optellen + 10
elseif (actualrain1 == ‘0.1’) then
optellen = optellen + 0
elseif (actualrain1 >= ‘0.2’) then
optellen = optellen – 50
end
opmerking = (opmerking ..”\n3. WU actualregen is: “..actualrain1 ..” – ” ..optellen)
–print(optellen)

if (actualrain2 == ‘0.0’) then
optellen = optellen + 10
elseif (actualrain2 == ‘0.1’) then
optellen = optellen + 0
elseif (actualrain2 >= ‘0.2’ ) then
optellen = optellen – 50
end
opmerking = (opmerking ..”\n4. FIO actualrain is: “..actualrain2 ..” – ” ..optellen)
–print(optellen)

if (windsnelheid == ‘NOK’ or windsnelheid = ’30’ and windsnelheid = ’50’ and windsnelheid = ’70’) then
optellen = optellen – 50
end
opmerking = (opmerking ..”\n5. Windsnelheid is: “..windsnelheid ..” – ” ..optellen)
–print(optellen)

if (BuitenTemperatuurThuis >= ‘26.0’) then
optellen = optellen + 10
elseif (BuitenTemperatuurThuis > ‘18.0’ and BuitenTemperatuurThuis < '26.0') then
optellen = optellen + 0
elseif (BuitenTemperatuurThuis = ‘26.0’) then
optellen = optellen + 10
elseif (temperatuurWU > ‘18.0’ and temperatuurWU < '26.0') then
optellen = optellen + 0
elseif (temperatuurWU ‘10.0’) then
optellen = optellen + 50
elseif (uv_straling >= ‘6.0’ and uv_straling = ‘3.0’ and uv_straling = ‘1.0’ and uv_straling < '3.0') then
optellen = optellen + 0
elseif (uv_straling = ‘7.0’ and FIOZicht = ‘0.0’ and FIOZicht < '7.0') then
optellen = optellen – 20
end
opmerking = (opmerking .."\n9. FIO Zicht is: "..FIOZicht .." – " ..optellen)
–print(optellen)
else
— # 's nachts gebeurd er niks
optellen = optellen + 0
opmerking = (opmerking .."\nWe wachten op de volgende mooie dag! " .." – " ..optellen)
end

— #############################################################################################
— # Acties #
— #############################################################################################

–optellen = optellen + 100

if (otherdevices['Zonnescherm'] == 'Closed' ) then
opmerking = (opmerking .."\nHet scherm is uitgerold. " .." – " ..optellen)
if (optellen = 100) then
opmerking = (opmerking ..”\n2. Handmatig of automatisch uitgerold, geen actie. ” ..” – ” ..optellen)
–commandArray[‘Zonnescherm’]=’Off’
–commandArray[‘SendNotification’] = (opmerking)
end
elseif (otherdevices[‘Zonnescherm’] == ‘Open’ ) then
opmerking = (opmerking ..”\n3. Het scherm is opgerold. ” ..” – ” ..optellen)
if (optellen >= 160) then
commandArray[‘Zonnescherm’]=’On’
commandArray[‘SendNotification’] = (opmerking)
end
end

print(opmerking)
–print(optellen)

— #############################################################################################
— # Versie informatie #
— #############################################################################################

— 2014-07-04, tijd ook opgenomen als puntentelling
— 2014-06-15, optel systeem toegevoegd
— 2014-06-13, Het is avond, zonnescherm omhoog! Andere melding bij 7:30h
— 1 betekend comfortabel
— 2014-06-08, datum en tijd toegevoegd
— nu nog de volgorde / prioriteit bepalen, wat eerst wat tweede etc.
— 2014-06-06, Waardes iets aangepast en zicht toegevoegd bij UV=NOK
— 2014-05-31, ‘s ochtends spring hij aan?? zonnescherm is Open en de voorwaarde is dan goed, Opgelost: vaste waarde in Zonnestraling!
— UVI is niet altijd up-to-date, NOK invoeren en zicht toevoegen.
— 2014-05-18, bij een windsnelheid onder de 10 gaat het scherm niet uit of toch weer in. Opgelost!?
— 2014-04-21, initiële versie

Advertisements