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
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¶m=udevice&hid=$HID&did=$DID&dunit=$DUNIT&dtype=$DTYPE&dsubtype=$DSUBTYPE&nvalue=$NVALUE&svalue=$SVALUE”
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.
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é
Vandaag heb ik het script aangepast. hopelijk reageert deze beter.
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