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