Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Einfache Beschattungssteuerung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [EibStudio] - √ - Einfache Beschattungssteuerung

    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:
    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")
    Für Codeverbesserungen bin ich natürlich auch dankbar,

    Gruß, Mike

    #2
    Zitat von Mike01 Beitrag anzeigen
    Hallo,
    Ich versuche gerade für einen bekannten eine einfache Markisensteuerung zu realisieren.
    Welche EibStudio/EibPC Software nutzt du?
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Sorry, hab ich vergessen dazuzuschreiben, aktuell nutze ich noch die Eib Studio 2.3.11 / Patch 2.3.14.
      V3 Patch war bisher noch nicht notwendig.

      Kommentar


        #4
        Also wenn ich deinen Code richtig verstanden habe, dann fährst du mit diesem Befehl die Markise vor:
        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

        Wenn ich die Logik nacheinander durchgehe, dann finde ich keinen IF, der die Werte an einem normalen, halbes sonnigen Tag ohne Regen auf AUS stellt bzw. verhindert, dass beim ersten Sonnenschein am morgen der Wert auf EIN wandert und damit den IF validiert und die Aktion auslöst.

        Kann sein, dass ich da eine Zeile übersehen habe, aber beim durchspielen ist Sie mir nicht aufgefallen.
        Gruß
        Volker

        Wer will schon Homematic?

        Kommentar


          #5
          Danke für deine Antwort,

          In der darunterliegenden Zeile wär die bedingung für Jalousie einfahren,
          diese 2 Bedingungen sollten sich doch gegenseitig aufheben oder versteh ich da was falsch ?

          Code:
          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
          Gruppenadresse 3/2/7 ist übrigens ein Bustaster, mit dem man die Automatik ein/aus schalten kann.

          Gruß, Mike

          Kommentar


            #6
            Hi,
            ja, das verstehst du falsch.
            Bedingungen heben sich nie auf.
            Jeder Befehl sendet seine Befehle für sich auf den Bus sobald er validiert, also WAHR, ist.
            Im Extremfall würde es unmittelbar nacheinander 2 Befehle geben die auf den Bus gene, von jedem IF einen.
            Gruß
            Volker

            Wer will schon Homematic?

            Kommentar


              #7
              Hi,

              Schon klar, dass die Logik immer greift, sobald alle Bedingungen erfüllt sind, und das Ergebnis Wahr ist, aber sobald eine Bedingung nicht mehr erfüllt ist darf die Logik nicht Wahr sein, sprich die Markise nicht ausfahren.

              Der Helligkeitsgrenzwert ist aktuell z.B. bei 27000 lux eingestellt, dieser Wert muss von mindestens einem Helligkeitssensor für länger als 3 min. überschritten sein, das macht diese Logik:

              Code:
              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
              Morgens um 6:00 Uhr ist der helligkeitswert aber entweder bei 0, oder maximal bei 3000 lux. Trotzdem fährt die Markise raus.
              In der Visualisierung wird auch angezeigt, dass es Sonnig ist, obwohl die Werte deutlich unterhalb dem Grenzwert sind. Wenn man die Automatik dann aus und einschaltet über den Taster, dann wartet er wieder brav, bis die Logik erfüllt ist, und fährt dann die Markise raus.

              Über diese Logik würde doch normalerweise Abends die Variable Sonnig auf aus gesetzt, daher kann ich das nicht ganz nachvollziehen was jetzt falsch ist.

              Hier muss der Helligkeitswert länger als 10 min. unterschritten sein, dann soll Variable Sonnig auf Aus gesetzt werden.

              Code:
              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

              Kommentar


                #8
                Ja, eigentlich hast du Recht.
                Ich bin derzeit davon ausgegangen, dass Hell1 = 0 ist, da ich deine 27000 lux nicht im Code gefunden habe.
                Das liest du aber vermutlich aus dem Flash, korrekt?

                Welcher Wert ist den im Debugger in Hell1 hinterlegt?
                Gruß
                Volker

                Wer will schon Homematic?

                Kommentar


                  #9
                  Die Debugger Hell1 und hell2 sind nur Button, die direkt auf die Helligkeitswerte Ost und West senden, damit hab ich mir die Sonneneinstrahlung simuliert, da das Wetter momentan leider nicht die gewünschte Helligkeit liefert :-)
                  Angehängte Dateien

                  Kommentar


                    #10
                    Verstehe ich jetzt leider nicht.
                    Code:
                    if delayc(("Meßwert Sonne Ost-3/1/0"<[B][SIZE="3"]Hell1[/SIZE][/B])
                    Ist doch dein vergleich.
                    Was steht in Hell1?
                    Gruß
                    Volker

                    Wer will schon Homematic?

                    Kommentar


                      #11
                      Sorry, hatte deine Frage anfangs falsch verstanden, hier die Werte aus dem Debugger
                      (Anhang)

                      Hell1 ist der Helligkeitswert der überschritten werden muss, Diesen Wert kann man in der Visualisierung vorgegeben.
                      Angehängte Dateien

                      Kommentar


                        #12
                        Hmm, dann kann ich Dir glaub ich im Moment auch nicht weiterhelfen.
                        Außer das du eine etwas seltsame Klammersetzung und Variablenverschachtelung hast, aber das dürfte nix ausmachen. Hoffe ich zumindest.
                        Gruß
                        Volker

                        Wer will schon Homematic?

                        Kommentar


                          #13
                          Danke dir trotzdem für deine bemühungen.
                          die verschachtelung liegt mit sicherheit an meinen mangelhaften programmierkenntnissen.
                          Hab das Programm hauptsächlich anhand von beispielen und vorgaben der eibpc hilfe erstellt.

                          Kommentar


                            #14
                            Hab letzte Nacht nochmal den busmonitor mitlaufen lassen, hier das ergebnis, evtl. sieht ja noch jemand einen Fehler.
                            Auch das aus-/einschalten der Beschattungsfreigabe bringt nichts, beim einschalten kommt sofort wieder der Befehl zum ausfahren.

                            Danke und Gruß, Mike
                            Angehängte Dateien

                            Kommentar


                              #15
                              Ich glaube gerade die Lösung gefunden zu haben:

                              Die Timer der Helligkeitsauswertung haben sich gegenseitig aufgehoben.
                              Der Timer der die überschreitung der Helligkeit auswertet aktiviert sich nach 3 min., nach dieser Zeit stoppt er Zeit2, der Timer wird danach nicht mehr neu gestartet, bis der Wert einmal unterschritten und danach wieder überschritten wird. Die Markise fährt dann zwar abends rein, weil ja der Azimuthwert überschritten wird, aber es bleibt weiterhin Sonnig.

                              Ich hab es jetzt mal so gelöst:

                              Code:
                              //Mindesthelligkeit auswerten
                              // min. 3min
                              // min. 8min.
                              Zeit11=0u64
                              Zeit12=0u64
                              Zeit2=0u64
                              GradEin1=convert(Anfangswinkel,0f32)
                              GradAus1=convert(Endwinkel,0f32)
                              // 
                              if ("Meßwert Sonne Ost-3/1/0")>Hell1 or ("Meßwert Sonne Süd-3/1/2")>Hell1 then{
                                  Zeit2=0u64
                              } endif
                              if ("Meßwert Sonne Ost-3/1/0")<Hell1 and ("Meßwert Sonne Süd-3/1/2")<Hell1 then{
                                  Zeit11=0u64;
                                  Zeit12=0u64
                              } endif
                              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{ 
                                  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) or azimuth()<GradEin1 or azimuth()>GradAus1 then{ 
                                  Sonnig=AUS;
                                  pdisplay(Frei1ID,convert($Nein $,$$) + convert(settime(),$$),INFO,INACTIVE,GREY,WetterID)
                              } endif
                              Erster Testlauf sah im Debugger gut aus, Mehr kann ich dann Morgen nach 6 berichten :-)

                              Mike

                              Kommentar

                              Lädt...
                              X