Hallo,
Ich versuche gerade für einen bekannten eine einfache Markisensteuerung zu realisieren.
er will nur, dass bei überschreiten einer Temperatur und helligkeitsschwelle die Markise rausfährt, und nach unterschreiten eines Wertes die Markise wieder reinfährt.
Ich hab dazu noch die Sonnenposition mit einbezogen, so dass damit die Beschattung noch feiner eingegrenzt werden kann.
Das ganze läuft soweit auch recht gut, allerdings wird scheinbar irgend ein Wert nicht zurückgesetzt, weil täglich um ca. 6 Uhr Morgens die Markise rausfährt, obwohl weder Helligkeit noch Temperatur überschritten wurden, lediglich der Azimuthwert sagt "Sonne ist im Fenster".
Hier der Programmcode:
Für Codeverbesserungen bin ich natürlich auch dankbar,
Gruß, Mike
Ich versuche gerade für einen bekannten eine einfache Markisensteuerung zu realisieren.
er will nur, dass bei überschreiten einer Temperatur und helligkeitsschwelle die Markise rausfährt, und nach unterschreiten eines Wertes die Markise wieder reinfährt.
Ich hab dazu noch die Sonnenposition mit einbezogen, so dass damit die Beschattung noch feiner eingegrenzt werden kann.
Das ganze läuft soweit auch recht gut, allerdings wird scheinbar irgend ein Wert nicht zurückgesetzt, weil täglich um ca. 6 Uhr Morgens die Markise rausfährt, obwohl weder Helligkeit noch Temperatur überschritten wurden, lediglich der Azimuthwert sagt "Sonne ist im Fenster".
Hier der Programmcode:
Code:
[Location]
// Länge und Breite des Aufstellungsorts
13.22006
48.54031
[Performance]
// Performance Einstellungen
20
70
15
[MacroLibs]
//Makro-Bibliotheken
D:/Projekte/eib-pc/Bibliotheken/EnertexWebV2.lib
D:/Projekte/eib-pc/Bibliotheken/EnertexSchaltuhrenV2.lib
D:/Projekte/eib-pc/Bibliotheken/eigeneLibs.lib
D:/Projekte/eib-pc/Bibliotheken/EnertexWiga.lib
D:/Projekte/eib-pc/Bibliotheken/EnertexBeschattung.lib
D:/Projekte/eib-pc/Bibliotheken/Enertex.lib
[ETS-ESF]
// Die aus der ETS exportierte ESF-Datei
D:/Projekte/KNX.esf
[WebServer]
//
//Wettervorhersage
page(WetterID)[$Allgemein$,$Beschattung$]
header(0)
design $black$
footer (0)
//Datum & Uhrzeit
none button(TimeID)[CLOCK]$Uhrzeit$ button(DateID)[DATE]$Datum$ none
pshifter(Licht1ID)[SWITCH]$Beschattung Freigeben$ pshifter(Licht2ID)[UP,BLIND,DOWN]$Markise$
none button(AziID)[INFO]$Sonnenstand$ pshifter(SunID)[INFO]$Sonnenauf- und Untergang$
//button(EleID)[INFO]$Sonnenhöhe °$
line $Der Sonnenstand muss sich zwischen den beiden Werten befinden, damit beschattet wird.$
pshifter(Azi2ID)[PLUS,MINUS,UP,DOWN]$Anfangswert$ pshifter(Ele2ID)[PLUS,MINUS,UP,DOWN]$Endwert$
line $Der Helligkeitswert von mindestens einem Sensor muss über dem Mindesthelligkeitswert liegen damit beschattet wird.$
pshifter(Hell1ID)[WEATHER]$Helligkeit Ost$ pshifter(Hell2ID)[WEATHER]$Helligkeit Süd$
//pshifter(Debug1ID)[PLUS,MINUS,UP,DOWN]$Ostseite$ pshifter(Debug2ID)[PLUS,MINUS,UP,DOWN]$Westseite$
pshifter(Hell3ID)[WEATHER]$Helligkeit West (optional)$ pshifter(Hell4ID)[PLUS,MINUS,UP,DOWN]$Mindesthelligkeit$
pbutton(RegenID)[WEATHER]$Regen $ pbutton(Frei1ID)[INFO]$Sonnig$ pshifter(Frei2ID)[INFO]$Freigabe erfüllt$
//pbutton(IsttempID)[TEMPERATURE]$Aussentemp.$
pshifter(Wind1ID)[WIND]$momentane Windstärke$ pshifter(Wind2ID)[PLUS,MINUS,UP,DOWN]$Grenzwert Wind m/s$
picture(0)[DOUBLE,CENTERGRAF]($Das Wetter$,$http://media.zenfs.com/en_us/weather/weather.com/eur_germany_outlook_DE_DE_440_dmy_y.jpg?1342773172$) picture(1)[DOUBLE,CENTERGRAF]($Satellitenbild$,$http://media.zenfs.com/en_us/weather/weather.com/eur_satintl_440_dmy_y.jpg?1342773172$)
//
//
[EibPC]
//Definitionen der IDs für den Webserver
//Seiten
Beschattung = 1
WetterID = 30
//Button
TimeID = 1
DateID = 2
NachtID = 3
EinschaltUhrID = 4
AusschaltUhrID = 5
SunID = 6
TempVisuID = 7
// = 8
// = 10
AziID = 11
EleID = 12
Azi2ID = 13
Ele2ID = 14
Frei1ID = 15
Frei2ID = 16
Licht1ID = 17
Licht2ID = 18
Licht3ID = 19
// = 26
SollButtonID= 30
IsttempID = 31
SollButton2ID= 32
Isttemp2ID = 33
Wind1ID = 34
Wind2ID = 35
RegenID = 36
Hell1ID = 37
Hell2ID = 38
Hell3ID = 39
Hell4ID = 28
Debug1ID = 20
Debug2ID = 21
//Freigabe = 28
// max = 40
//
//Sonnenaufgang und Sonnenuntergang in einen String konvertieren
Sonnenaufgang=stringformat(sunrisehour(),0,3,2,2)+$:$+stringformat(sunriseminute(),0,3,2,2)
Sonnenuntergang=stringformat(sunsethour(),0,3,2,2)+$:$+stringformat(sunsetminute(),0,3,2,2)
//
//Wenn sich der Sonnenaufgang ändert, die Anzeige aktualisieren
if change(Sonnenaufgang) or Init then{
pdisplay(SunID,Sonnenaufgang+$ - $+Sonnenuntergang,INFO,DISPLAY,GREEN,WetterID)
} endif
//
// Variablen definieren
AWinkel=azimuth()
HWinkel=elevation()
Sonnig=AUS
Sonnig1=AUS
Freigabe=AUS
AWinkel2=convert(AWinkel,0f16)
HWinkel2=convert(HWinkel,0f16)
Anfangswinkel=0f16
Endwinkel=0f16
Hellwert=0f16
Hellwert2=convert(Hellwert,0u64)
// Sonnenstand berechnen und ausgeben
if change(azimuth()) or Init then{
webdisplay(AziID,$ $+convert(AWinkel2,$$)+$ °$,INFO,INACTIVE,GREEN)
} endif
if change(elevation()) or Init then{
webdisplay(EleID,$ $+convert(HWinkel2,$$)+$ °$,INFO,INACTIVE,GREEN)
} endif
// Webpagebutton-Steuerung definieren und Werte bei änderung in Speicher schreiben
Anfang1=Anfangswinkel
if pbutton(Azi2ID,WetterID)==1 then if Anfang1<359.0 then Anfang1=Anfang1+(min(10.0,359.0-Anfang1)) endif endif
if pbutton(Azi2ID,WetterID)==2 then if Anfang1>10.0 then Anfang1=Anfang1-(min(10.0,Anfang1-10.0)) endif endif
if pbutton(Azi2ID,WetterID)==3 then if Anfang1<359.0 then Anfang1=Anfang1+(min(1.0,359.0-Anfang1)) endif endif
if pbutton(Azi2ID,WetterID)==4 then if Anfang1>10.0 then Anfang1=Anfang1-(min(1.0,Anfang1-10.0)) endif endif
if change(Anfang1) then {
Anfangswinkel=Anfang1;
writeflash(Anfang1,0u16);
pdisplay(Azi2ID,$ $+convert(Anfang1,$$)+$ °$,DOWN,INACTIVE,GREEN,WetterID)
} endif
Ende1=Endwinkel
if pbutton(Ele2ID,WetterID)==1 then if Ende1<359.0 then Ende1=Ende1+(min(10.0,359.0-Ende1)) endif endif
if pbutton(Ele2ID,WetterID)==2 then if Ende1>10.0 then Ende1=Ende1-(min(10.0,Ende1-10.0)) endif endif
if pbutton(Ele2ID,WetterID)==3 then if Ende1<359.0 then Ende1=Ende1+(min(1.0,359.0-Ende1)) endif endif
if pbutton(Ele2ID,WetterID)==4 then if Ende1>10.0 then Ende1=Ende1-(min(1.0,Ende1-10.0)) endif endif
if change(Ende1) then {
Endwinkel=Ende1;
writeflash(Ende1,1u16);
pdisplay(Ele2ID,$ $+convert(Ende1,$$)+$ °$,DOWN,INACTIVE,GREEN,WetterID)
} endif
Hell1=Hellwert
if pbutton(Hell4ID,WetterID)==1 then if Hell1<100000.0 then Hell1=Hell1+(min(1000.0,100000.0-Hell1)) endif endif
if pbutton(Hell4ID,WetterID)==2 then if Hell1>100.0 then Hell1=Hell1-(min(1000.0,Hell1-100.0)) endif endif
if pbutton(Hell4ID,WetterID)==3 then if Hell1<100000.0 then Hell1=Hell1+(min(10.0,100000.0-Hell1)) endif endif
if pbutton(Hell4ID,WetterID)==4 then if Hell1>100.0 then Hell1=Hell1-(min(10.0,Hell1-100.0)) endif endif
if change(Hell1) then {
Hellwert=Hell1;
writeflash(Hell1,2u16);
pdisplay(Hell4ID,$ $+convert(Hell1,$$)+$ LUX$,DOWN,INACTIVE,GREEN,WetterID)
} endif
//Debug
DebugWert1="Meßwert Sonne Ost-3/1/0"
if pbutton(Debug1ID,WetterID)==1 then if DebugWert1<100000.0 then DebugWert1=DebugWert1+(min(1000.0,100000.0-DebugWert1)) endif endif
if pbutton(Debug1ID,WetterID)==2 then if DebugWert1>100.0 then DebugWert1=DebugWert1-(min(1000.0,DebugWert1-100.0)) endif endif
if pbutton(Debug1ID,WetterID)==3 then if DebugWert1<100000.0 then DebugWert1=DebugWert1+(min(10.0,100000.0-DebugWert1)) endif endif
if pbutton(Debug1ID,WetterID)==4 then if DebugWert1>100.0 then DebugWert1=DebugWert1-(min(10.0,DebugWert1-100.0)) endif endif
if change(DebugWert1) then {
write("Meßwert Sonne Ost-3/1/0",DebugWert1)
} endif
//
DebugWert2="Meßwert Sonne Süd-3/1/2"
if pbutton(Debug2ID,WetterID)==1 then if DebugWert2<100000.0 then DebugWert2=DebugWert2+(min(1000.0,100000.0-DebugWert2)) endif endif
if pbutton(Debug2ID,WetterID)==2 then if DebugWert2>100.0 then DebugWert2=DebugWert2-(min(1000.0,DebugWert2-100.0)) endif endif
if pbutton(Debug2ID,WetterID)==3 then if DebugWert2<100000.0 then DebugWert2=DebugWert2+(min(10.0,100000.0-DebugWert2)) endif endif
if pbutton(Debug2ID,WetterID)==4 then if DebugWert2>100.0 then DebugWert2=DebugWert2-(min(10.0,DebugWert2-100.0)) endif endif
if change(DebugWert2) then {
write("Meßwert Sonne Süd-3/1/2",DebugWert2)
} endif
// Werte aus Speicher bei Systemstart auslesen
if systemstart() then {
readflash(Anfang1, 0u16);
readflash(Ende1, 1u16);
readflash(Hell1, 2u16);
read ("Regensensor 1 (antenne)-3/3/3");
read ("Regensensor 2 (Sensor)-3/3/4");
read ("Wind-3/3/1")
} endif
if after(systemstart(),1000u64) then {
Anfangswinkel=Anfang1;
Endwinkel=Ende1;
Hellwert=Hell1
} endif
//Mindesthelligkeit auswerten
Zeit11=0u64
Zeit12=0u64
Zeit2=0u64
GradEin1=convert(Anfangswinkel,0f32)
GradAus1=convert(Endwinkel,0f32)
//
if delayc(("Meßwert Sonne Ost-3/1/0")>Hell1,180000u64,Zeit11) or delayc(("Meßwert Sonne Süd-3/1/2")>Hell1,180000u64,Zeit12) then{
Zeit2=0u64;
Sonnig=EIN;
pdisplay(Frei1ID,convert($Ja $,$$) + convert(settime(),$$),INFO,INACTIVE,GREEN,WetterID)
} endif
if delayc(("Meßwert Sonne Ost-3/1/0"<Hell1) and ("Meßwert Sonne Süd-3/1/2"<Hell1),480000u64,Zeit2) then{
Zeit11=0u64;
Zeit12=0u64;
Sonnig=AUS;
pdisplay(Frei1ID,convert($Nein $,$$) + convert(settime(),$$),INFO,INACTIVE,GREY,WetterID)
} endif
if azimuth()<GradAus1 then{
Sonnig=AUS
} endif
//
// Freigabe
if Sonnig==EIN and Regensensor==AUS and ("Wind-3/3/1"==AUS) then{
Freigabe=EIN;
pdisplay(Frei2ID,convert($Ja $,$$) + convert(settime(),$$),INFO,INACTIVE,GREEN,WetterID)
} else{
Freigabe=AUS;
pdisplay(Frei2ID,convert($Nein $,$$) + convert(settime(),$$),INFO,INACTIVE,GREY,WetterID)
} endif
//Mindesthelligkeit auswerten
//Markise ansteuern
if ('3/2/7'b01==EIN) and Freigabe==EIN and (elevation()>2f32) and azimuth()>GradEin1 and azimuth()<GradAus1 then write("M1.05 Terrasse LZ-2/1/0",EIN) endif
if ('3/2/7'b01==EIN) and (azimuth()>GradAus1 or azimuth()<GradEin1 or Freigabe==AUS or Regensensor==EIN or "Wind-3/3/1"==EIN) then write("M1.05 Terrasse LZ-2/1/0",AUS) endif
//
if change("Messwert Wind (m/s)-3/1/9") or Init then{
pdisplay(Wind1ID,$ $+convert("Messwert Wind (m/s)-3/1/9",$$)+$ m/s$,WIND,DISPLAY,GREEN,WetterID)
} endif
//
if change("Meßwert Sonne Ost-3/1/0") or Init then{
pdisplay(Hell1ID,$ $+convert("Meßwert Sonne Ost-3/1/0",$$)+$ LUX$,WEATHER,DISPLAY,GREEN,WetterID)
} endif
//
if change("Meßwert Sonne Süd-3/1/2") or Init then{
pdisplay(Hell2ID,$ $+convert("Meßwert Sonne Süd-3/1/2",$$)+$ LUX$,WEATHER,DISPLAY,GREEN,WetterID)
} endif
//
if change("Meßwert Sonne West-3/1/4") or Init then{
pdisplay(Hell3ID,$ $+convert("Meßwert Sonne West-3/1/4",$$)+$ LUX$,WEATHER,DISPLAY,GREEN,WetterID)
} endif
Regensensor=1b01
//Regensensoren
// Regensensor sendet direkt auf Jalousiesensor
//
//if ('3/3/3'b01==EIN) or ('3/3/4'b01==EIN) then {
if ('3/3/3'b01==EIN) or ('3/3/4'b01==EIN) then {
pdisplay(RegenID,convert($Ja $,$$) + convert(settime(),$$),WEATHER,STATE6,GREY,WetterID);
Regensensor=EIN
// write("Regen-3/3/0",EIN)
} else {
pdisplay(RegenID,convert($Nein $,$$) + convert(settime(),$$),WEATHER,STATE4,GREEN,WetterID);
Regensensor=AUS
// write("Regen-3/3/0",AUS)
} endif
////
//Zeit abfragen
WebZeit=convert(convert(hour(),0f32)+convert(minute(),0f32)/60f32,0f16)
//
//Initialisierung zur Verringerung der Buslast
Init = after(systemstart(), convert(random(10000u32),0u64))
//Jede Minute wird die Uhrzeit aktualisiert
if stime(0) or Init then webdisplay(TimeID,settime(),CLOCK,DISPLAY,GREEN) endif
//Jeden Tag wird die Datumsanzeige aktualisiert
if change(setdate()) or Init then webdisplay(DateID,setdate(),DATE,DISPLAY,GREEN) endif
[Macros]
//Wetter
WebWertvorgabeGA(Wind2ID,WetterID,WindWert1ID,"Windgrenzwert-Vorgabe-3/1/1",20.0,1.0)
//BeschattungRollo(Freigabe,"M1.05 Terrasse LZ-2/1/0",Anfangswinkel,Endwinkel)
UmschaltButtonZustand(Licht1ID,WetterID,"Automatik Freigabe Taster-3/2/7","Automatik Freigabe Taster-3/2/7",SWITCH,ACTIVE,INACTIVE)
RolloTime(Licht2ID,WetterID,"M1.05 Terrasse LZ-2/1/0","M1.05 Terrasse KZ-2/1/1")
Gruß, Mike


Kommentar