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

5 thoughts on “Domoticz sunscreen LUA script

  1. Edwin ten Haaf

    Hoi André, mooi script maar het werkt helaas niet in mijn geval.

    Error: /home/pi/domoticz/scripts/lua/script_time_scherm.lua:3: unexpected symbol near char(150)
    Waardes netjes aangepast naar mijn device namen maar fout blijft staan.

    Heb wellicht nog een leuke uitbreiding voor je script, kans op regen in procenten komend uur.

    pop.py script:

    import requests
    r=requests.get(‘http://api.wunderground.com/api//hourly/lang:NL/pws:IGELDERL103/q/NL/Nijmegen.json’)
    power=r.json
    print power[‘hourly_forecast’][0][‘pop’]

    Script schiet ik af en schrijf ik weg in domoticz met:

    pop.sh script: (crontab elke 15 minuten)
    #!/bin/bash
    # Domoticz server
    SERVER=”username:password@192.168.1.101:8080?
    # Get POP
    POP=`python /home/pi/scripts/pop.py`
    # Sensor parameters
    HID=”1?
    DID=”1000?
    DUNIT=”1?
    DTYPE=”85?
    DSUBTYPE=”6?
    NVALUE=””
    SVALUE=$POP

    # Send data
    curl -s -i -H “Accept: application/json” “http://$SERVER/json.htm?type=command&param=udevice&hid=$HID&did=$DID&dunit=$DUNIT&dtype=$DTYPE&dsubtype=$DSUBTYPE&nvalue=$NVALUE&svalue=$SVALUE”

    Reply
  2. Reinier

    Hi Andre, heb jij inmiddels al verbeteringen aangebracht in dit script?
    Ik zie namelijk dat er een foutje zit in de temperatuur. als deze boven de 20 ligt dat gaat het scherm oprollen. Ik zanp alleen niet hoe de windjacht en de wind werkt. Als ik jou script gebruik dan gaat het scherm niet uit bij een windsnelheid van 3.1 m/s. Terwijl dit echter een 2 beaufort is oftewel een zwakke wind.

    Reply
    1. Kamm_and_Re Post author

      Hoi Reinier,

      ik ben zelf ook tegen dit probleem aangelopen. zodra de windsnelheid onder de waarde 10 zakt rolt het scherm op. Tot nu toe was de windsnelheid telkens hoger dan 10 denk ik dan maar.
      afgelopen weekend ben ik hier mee bezig geweest, maar nog geen oplossing gevonden. terwijl ik in het script niet echt een fout zie zitten.
      zodra ik weer tijd heb ga ik ermee aan de gang, mocht jij ondertussen een oplossing hebben/weten dan hoor ik dat graag,
      André

      Reply
  3. Jan

    Hallo Reinier,
    Was op zoek naar zoiets als jou script hier boven. Werkt het goed?
    Is er ook een uitgebreide beschrijving van wat e.e.a. doet en waar je e.e.a. moet installeren.

    gr.

    jan

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s