HowTo: Müllabfuhrplan mit fixen Terminen Anzeige ww. in Stunden/Tagen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Davidmei
    MS Profi
    • 06.02.2017
    • 539

    Hallo,

    bei mir zeigt es in der Visu leider nur Stunden an statt Tage?

    Kommentar

    • Davidmei
      MS Profi
      • 06.02.2017
      • 539

      Hallo Zusammen,

      ich habe den Code von Sebastian kopiert und entsprechend meine Statusbausteine angepasst.
      Nun wäre meine Frage, kann die BEnachrichtigung zweimal kommen so wie ich es programmiert habe im Statusbaustein?

      Kommentar

      • Davejje
        Extension Master
        • 24.11.2017
        • 173

        Hallo alle zusammen,

        Ich habe den Software-Block von diesem Thema an meinen eigenen Geschmack angepasst, so dass ich nicht mehr so viel von außen programmieren muss und andere Blöcke verwenden muss.
        Die Berechnung und Anzeige funktioniert gut. Ich stelle nur fest, dass die Aktualisierungszeit nicht mehr funktioniert.
        Wo habe ich einen Fehler gemacht?

        Wenn es nicht geschätzt wird, dass ich es in diesem Thema frage, werde ich es hören.


        HTML-Code:
        //----------CHANGE LOG----------//
        // 2019-01-08 1st release
        //----------INPUTS----------//
        //AI1: Year value of the program tree "T"
        //AI2: Update time in seconds
        //----------OUTPUTS----------//
        //TQ1: Connect to loxone virtual status block in "AI" Will display the time in "XX Weeks XX Days XX Hours"
        //TQ2: Connect to loxone virtual status block in "AI" Will display the time in "XX Weeks XX Days XX Hours"
        //TQ3: Connect to loxone virtual status block in "AI" Will display the time in "XX Weeks XX Days XX Hours"
        //AQ1: Notification output for waste type 1
        //AQ2: Notification output for waste type 2
        //AQ3: Notification output for waste type 3
        //----------CONFIG----------//
        // Translation of the output text
        char* Weeks = "weken";
        char* Week = "week";
        char* Days = "dagen";
        char* Day = "dag";
        char* Hour = "uur";
        char* PickUp = "totdat het wordt opgehaald";
        //----------INITILAZING----------//
        // Waste type 1 = Gray Container
        // Waste type 2 = Green Container
        // Waste type 3 = Spare
        char WasteTypeOneBuffer[128], WasteTypeTwoBuffer[128], WasteTypeThreeBuffer[128]; // Arrays. The notification can be use "128" digits
        float SleepTime, Now, WasteTypeOneLeftWeek, WasteTypeOneLeftDay, WasteTypeOneLeftHour, WasteTypeTwoLeftWeek, WasteTypeTwoLeftDay, WasteTypeTwoLeftHour, WasteTypeThreeLeftWeek, WasteTypeThreeLeftDay, WasteTypeThreeLeftHour;
        int WasteTypeOne[30], WasteTypeTwo[30], WasteTypeThree[30]; //Arrays. Falls es mehr Termine sind, einfach die Klammerwerte erhöhen
        int ArrWasteTypeOne, ArrWasteTypeTwo, ArrWasteTypeThree, i, k, YearValue, WeekValue, DayValue, HourValue, HourWasteTypeOne, HourWasteTypeTwo, HourWasteTypeThree, MinutesWasteTypeOne, MinutesWasteTypeTwo, MinutesWasteTypeThree, RemTimeWasteTypeOne, RemTimeWasteTypeTwo, RemTimeWasteTypeThree;
        YearValue = getinput(0); //Year of the waste calendar on Input 1 "AI2"
        WeekValue = 7; // 1 Week in days
        DayValue = 24; // 1 Day in hours
        HourValue = 3600; // 1 Hour in seconds
        HourWasteTypeOne = 17; //Average hour of pick up (Waste Type one)
        HourWasteTypeTwo = 10; //Average hour of pick up (Waste Type two)
        HourWasteTypeThree = 12; //Average hour of pick up (Waste Type three)
        MinutesWasteTypeOne = 0; //Average minutes of pickup (Waste Type one)
        MinutesWasteTypeTwo = 0; //Average minutes of pickup (Waste Type two)
        MinutesWasteTypeThree = 0; //Average minutes of pickup (Waste Type three)
        RemTimeWasteTypeOne = 23; //Message on output in hours for pick-up time (Waste Type one)
        RemTimeWasteTypeTwo = 16; //Message on output in hours for pick-up time (Waste Type two)
        RemTimeWasteTypeThree = 24; //Message on output in hours for pick-up time (Waste Type three)
        
        while(TRUE)
        {
            SleepTime = 60*getinput(1); //Update time in seconde
            Now = getcurrenttime(); //Actual time in seconds (time 01.01.2009 0:00)
            // Dates of waste type one ( Oud Papier)
        //WasteTypeOne[0] = gettimeval(YearValue-1, *MONTH*, *DATE*, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[0] = gettimeval(YearValue-1, 12, 17, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1); //Last time of last year
            WasteTypeOne[1] = gettimeval(YearValue, 1, 25, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[2] = gettimeval(YearValue, 2, 22, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[3] = gettimeval(YearValue, 3, 29, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[4] = gettimeval(YearValue, 4, 26, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[5] = gettimeval(YearValue, 5, 24, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[6] = gettimeval(YearValue, 6, 28, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[7] = gettimeval(YearValue, 7, 26, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[8] = gettimeval(YearValue, 8, 30, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[9] = gettimeval(YearValue, 9, 27, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[10] = gettimeval(YearValue, 10, 25, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[11] = gettimeval(YearValue, 11, 29, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
            WasteTypeOne[12] = gettimeval(YearValue, 12, 27, HourWasteTypeOne, MinutesWasteTypeOne, 0, 1);
        
                //Loop Count the existing array elements in WasteTypeOne
                ArrWasteTypeOne=0;
                for(k=0; k<(sizeof(WasteTypeOne)/sizeof(int)); k++) {
                    if(WasteTypeOne[k] > 0) {
                        ArrWasteTypeOne++;
                    }
                }
            // Dates of waste type two ( Plastic PMT)
        //WasteTypeTwo[0] = gettimeval(YearValue-1, *MONTH*, *DATE*, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[0] = gettimeval(YearValue-1, 12, 17, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1); //Last time of last year
            WasteTypeTwo[1] = gettimeval(YearValue, 1, 9, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[2] = gettimeval(YearValue, 1, 23, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[3] = gettimeval(YearValue, 2, 6, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[4] = gettimeval(YearValue, 2, 20, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[5] = gettimeval(YearValue, 3, 6, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[6] = gettimeval(YearValue, 3, 20, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[7] = gettimeval(YearValue, 4, 3, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[8] = gettimeval(YearValue, 4, 17, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[9] = gettimeval(YearValue, 5, 1, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[10] = gettimeval(YearValue, 5, 15, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[11] = gettimeval(YearValue, 5, 29, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[12] = gettimeval(YearValue, 6, 12, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[13] = gettimeval(YearValue, 6, 26, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[14] = gettimeval(YearValue, 7, 12, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[15] = gettimeval(YearValue, 7, 26, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[16] = gettimeval(YearValue, 8, 10, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[17] = gettimeval(YearValue, 8, 24, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[18] = gettimeval(YearValue, 9, 4, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[19] = gettimeval(YearValue, 9, 18, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[20] = gettimeval(YearValue, 10, 2, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[21] = gettimeval(YearValue, 10, 16, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[22] = gettimeval(YearValue, 10, 30, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[23] = gettimeval(YearValue, 11, 13, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[24] = gettimeval(YearValue, 11, 27, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[25] = gettimeval(YearValue, 12, 11, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
            WasteTypeTwo[26] = gettimeval(YearValue, 12, 21, HourWasteTypeTwo, MinutesWasteTypeTwo, 0, 1);
                //Loop Count the existing array elements in WasteTypeTwo
                ArrWasteTypeTwo=0;
                for(k=0; k<(sizeof(WasteTypeTwo)/sizeof(int)); k++) {
                    if(WasteTypeOne[k] > 0) {
                        ArrWasteTypeTwo++;
                    }
                }
            // Dates of waste type three ( spare)
        //WasteTypeThree[0] = gettimeval(YearValue-1, *MONTH*, *DATE*, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[0] = gettimeval(YearValue-1, 12, 31, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1); //Last time of last year
            WasteTypeThree[1] = gettimeval(YearValue, 1, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[2] = gettimeval(YearValue, 2, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[3] = gettimeval(YearValue, 3, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[4] = gettimeval(YearValue, 4, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[5] = gettimeval(YearValue, 5, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[6] = gettimeval(YearValue, 6, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[7] = gettimeval(YearValue, 7, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[8] = gettimeval(YearValue, 8, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[9] = gettimeval(YearValue, 9, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[10] = gettimeval(YearValue, 10, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[11] = gettimeval(YearValue, 11, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
            WasteTypeThree[12] = gettimeval(YearValue, 12, 1, HourWasteTypeThree, MinutesWasteTypeThree, 0, 1);
                //Loop Count the existing array elements in WasteTypeThree
                ArrWasteTypeThree=0;
                for(k=0; k<(sizeof(WasteTypeThree)/sizeof(int)); k++) {
                    if(WasteTypeOne[k] > 0) {
                        ArrWasteTypeThree++;
                    }
                }
        
            //Output Waste Type One
            for(i=0; i<ArrWasteTypeOne; i++) {
                WasteTypeOneLeftHour = (WasteTypeOne[i]-Now)/HourValue;
        WasteTypeOneLeftDay = WasteTypeOneLeftHour/DayValue;
        WasteTypeOneLeftWeek = WasteTypeOneLeftDay/WeekValue;
                setoutput(3,WasteTypeOneLeftHour);
        if(WasteTypeOneLeftHour >= 1 && WasteTypeOneLeftWeek >= 2) {
        sprintf(WasteTypeOneBuffer,"%d %s",WasteTypeOneLeftWeek,Weeks);
        setoutputtext(0,WasteTypeOneBuffer);
                    setoutput(0,false);
                    i = ArrWasteTypeOne-1;
                } else if(WasteTypeOneLeftHour >= 1 && WasteTypeOneLeftWeek >= 1 && WasteTypeOneLeftWeek < 2) {
        sprintf(WasteTypeOneBuffer,"%d %s %d %s",WasteTypeOneLeftWeek,Week,WasteTypeOneLeftDay-WeekValue,Days);
        setoutputtext(0,WasteTypeOneBuffer);
                    setoutput(0,false);
                    i = ArrWasteTypeOne-1;
                } else if(WasteTypeOneLeftHour >= 1 && WasteTypeOneLeftWeek >= 1 && WasteTypeOneLeftWeek < 2 && WasteTypeOneLeftDay <= 1) {
        sprintf(WasteTypeOneBuffer,"%d %s %d %s",WasteTypeOneLeftWeek,Week,WasteTypeOneLeftDay-WeekValue,Day);
        setoutputtext(0,WasteTypeOneBuffer);
                    setoutput(0,false);
                    i = ArrWasteTypeOne-1;
               } else if(WasteTypeOneLeftHour >= 1 && WasteTypeOneLeftDay >= 2) {
        sprintf(WasteTypeOneBuffer,"%d %s",WasteTypeOneLeftDay,Days);
        setoutputtext(0,WasteTypeOneBuffer);
                    setoutput(0,false);
                    i = ArrWasteTypeOne-1;
                } else if(WasteTypeOneLeftHour >= 1 && WasteTypeOneLeftDay >= 1 && WasteTypeOneLeftDay < 2) {
        sprintf(WasteTypeOneBuffer,"%d %s en %d %s",WasteTypeOneLeftDay,Day,WasteTypeOneLeftHour-DayValue,Hour);
        setoutputtext(0,WasteTypeOneBuffer);
                    setoutput(0,false);
                    i = ArrWasteTypeOne-1;      
               } else if(WasteTypeOneLeftHour >= 1 && WasteTypeOneLeftDay < 1 && WasteTypeOneLeftHour <= RemTimeWasteTypeOne) {
        sprintf(WasteTypeOneBuffer,"%d %s %s",WasteTypeOneLeftHour,Hour,PickUp);
        setoutputtext(0,WasteTypeOneBuffer);
        setoutput(0,true);
                    i = ArrWasteTypeOne-1;
               } else if (WasteTypeOneLeftHour >= 1 && WasteTypeOneLeftDay < 1) {
        sprintf(WasteTypeOneBuffer,"%d %s",WasteTypeOneLeftHour,Hour);
        setoutputtext(0,WasteTypeOneBuffer);
                    setoutput(0,false);
                    i = ArrWasteTypeOne-1;
        }
            }
            //Output Waste Type Two
            for(i=0; i<ArrWasteTypeTwo; i++) {
                WasteTypeTwoLeftHour = (WasteTypeTwo[i]-Now)/HourValue;
        WasteTypeTwoLeftDay = WasteTypeTwoLeftHour/DayValue;
        WasteTypeTwoLeftWeek = WasteTypeTwoLeftDay/WeekValue;
                setoutput(4,WasteTypeTwoLeftHour);
        
                if(WasteTypeTwoLeftHour >= 1 && WasteTypeTwoLeftWeek >= 2) {
        sprintf(WasteTypeTwoBuffer,"%d %s",WasteTypeTwoLeftWeek,Weeks);
        setoutputtext(1,WasteTypeTwoBuffer);
                    setoutput(1,false);
        i = ArrWasteTypeTwo-1;
                } else if(WasteTypeTwoLeftHour >= 1 && WasteTypeTwoLeftWeek >= 1 && WasteTypeTwoLeftWeek < 2) {
        sprintf(WasteTypeTwoBuffer,"%d %s %d %s",WasteTypeTwoLeftWeek,Week,WasteTypeTwoLeftDay-WeekValue,Days);
        setoutputtext(1,WasteTypeTwoBuffer);
                    setoutput(1,false);
        i = ArrWasteTypeTwo-1;
               } else if(WasteTypeTwoLeftHour >= 1 && WasteTypeTwoLeftWeek >= 1 && WasteTypeTwoLeftWeek < 2 && WasteTypeTwoLeftDay <= 1) {
        sprintf(WasteTypeTwoBuffer,"%d %s %d %s",WasteTypeTwoLeftWeek,Week,WasteTypeTwoLeftDay-WeekValue,Day);
        setoutputtext(1,WasteTypeTwoBuffer);
                    setoutput(1,false);
        i = ArrWasteTypeTwo-1;
               } else if(WasteTypeTwoLeftHour >= 1 && WasteTypeTwoLeftDay >= 2) {
        sprintf(WasteTypeTwoBuffer,"%d %s",WasteTypeTwoLeftDay,Days);
        setoutputtext(1,WasteTypeTwoBuffer);
                    setoutput(1,false);
        i = ArrWasteTypeTwo-1;
                } else if(WasteTypeTwoLeftHour >= 1 && WasteTypeTwoLeftDay >= 1 && WasteTypeTwoLeftDay < 2) {
        sprintf(WasteTypeTwoBuffer,"%d %s en %d %s",WasteTypeTwoLeftDay,Day,WasteTypeTwoLeftHour-DayValue,Hour);
        setoutputtext(1,WasteTypeTwoBuffer);
                    setoutput(1,false);
        i = ArrWasteTypeTwo-1;      
               } else if(WasteTypeTwoLeftHour >= 1 && WasteTypeTwoLeftDay < 1 && WasteTypeTwoLeftHour <= RemTimeWasteTypeTwo) {
        sprintf(WasteTypeTwoBuffer,"%d %s %s",WasteTypeTwoLeftHour,Hour,PickUp);
        setoutputtext(1,WasteTypeTwoBuffer);
        setoutput(1,true);
        i = ArrWasteTypeTwo-1;
               } else if (WasteTypeTwoLeftHour >= 1 && WasteTypeTwoLeftDay < 1) {
        sprintf(WasteTypeTwoBuffer,"%d %s",WasteTypeTwoLeftHour,Hour);
        setoutputtext(1,WasteTypeTwoBuffer);
                    setoutput(1,false);
        i = ArrWasteTypeTwo-1;
        }
            }
            //Output Waste Type Three
            for(i=0; i<ArrWasteTypeThree; i++) {
                WasteTypeThreeLeftHour = (WasteTypeThree[i]-Now)/HourValue;
        WasteTypeThreeLeftDay = WasteTypeThreeLeftHour/DayValue;
        WasteTypeThreeLeftWeek = WasteTypeThreeLeftDay/WeekValue;
        
        if(WasteTypeThreeLeftHour >= 1 && WasteTypeThreeLeftWeek >= 2) {
        sprintf(WasteTypeThreeBuffer,"%d %s",WasteTypeThreeLeftWeek,Weeks);
        setoutputtext(2,WasteTypeThreeBuffer);
                    setoutput(2,false);
        i = ArrWasteTypeThree-1;
                } else if(WasteTypeThreeLeftHour >= 1 && WasteTypeThreeLeftWeek >= 1 && WasteTypeThreeLeftWeek < 2) {
        sprintf(WasteTypeThreeBuffer,"%d %s %d %s",WasteTypeThreeLeftWeek,Week,WasteTypeThreeLeftDay-WeekValue,Days);
        setoutputtext(2,WasteTypeThreeBuffer);
                    setoutput(2,false);
        i = ArrWasteTypeThree-1;
               } else if(WasteTypeThreeLeftHour >= 1 && WasteTypeThreeLeftWeek >= 1 && WasteTypeThreeLeftWeek < 2 && WasteTypeThreeLeftDay <= 1) {
        sprintf(WasteTypeThreeBuffer,"%d %s %d %s",WasteTypeThreeLeftWeek,Week,WasteTypeThreeLeftDay-WeekValue,Day);
        setoutputtext(2,WasteTypeThreeBuffer);
                    setoutput(2,false);
        i = ArrWasteTypeThree-1;
               } else if(WasteTypeThreeLeftHour >= 1 && WasteTypeThreeLeftDay >= 2) {
        sprintf(WasteTypeThreeBuffer,"%d %s",WasteTypeThreeLeftDay,Days);
        setoutputtext(2,WasteTypeThreeBuffer);
                    setoutput(2,false);
        i = ArrWasteTypeThree-1;
                } else if(WasteTypeThreeLeftHour >= 1 && WasteTypeThreeLeftDay >= 1 && WasteTypeThreeLeftDay < 2) {
        sprintf(WasteTypeThreeBuffer,"%d %s en %d %s",WasteTypeThreeLeftDay,Day,WasteTypeThreeLeftHour-DayValue,Hour);
        setoutputtext(2,WasteTypeThreeBuffer);
                    setoutput(2,false);
        i = ArrWasteTypeThree-1;        
               } else if(WasteTypeThreeLeftHour >= 1 && WasteTypeThreeLeftDay < 1 && WasteTypeThreeLeftHour <= RemTimeWasteTypeThree) {
        sprintf(WasteTypeThreeBuffer,"%d %s %s",WasteTypeThreeLeftHour,Hour,PickUp);
        setoutputtext(2,WasteTypeThreeBuffer);
        setoutput(2,true);
        i = ArrWasteTypeThree-1;
               } else if (WasteTypeThreeLeftHour >= 1 && WasteTypeThreeLeftDay < 1) {
        sprintf(WasteTypeThreeBuffer,"%d %s",WasteTypeThreeLeftHour,Hour);
        setoutputtext(2,WasteTypeThreeBuffer);
                    setoutput(2,false);
        i = ArrWasteTypeThree-1;
        }
            }
            // loop to check whether the reminder time is pending (within 1 hour), if so: decrease SleepTime.
            if((WasteTypeOneLeftHour<(RemTimeWasteTypeOne+1) && WasteTypeOneLeftHour>=(RemTimeWasteTypeOne)) ||
                (WasteTypeTwoLeftHour<(RemTimeWasteTypeTwo+1) && WasteTypeTwoLeftHour>=(RemTimeWasteTypeTwo)) ||
                (WasteTypeThreeLeftHour<(RemTimeWasteTypeThree+1) && WasteTypeThreeLeftHour>=(RemTimeWasteTypeThree))) {
                    SleepTime = 120;
            }
        sleeps(SleepTime);

        Kommentar


        • romildo
          romildo kommentierte
          Kommentar bearbeiten
          Sorry, ich habe mich falsch ausgedrückt, ich meinte nicht die Codezeile 138, sondern den Thread #138.
          Dort fehlt im Code ganz am Ende noch die Klammer.

        • Davejje
          Davejje kommentierte
          Kommentar bearbeiten
          Ok, dann verstehen wir uns jetzt gut.
          Ich habe es überprüft und wage es nicht zu sagen, aber ich habe den letzten klammer vergessen

          Ich bin gespannt, ob es jetzt klappt.

        • Davejje
          Davejje kommentierte
          Kommentar bearbeiten
          ja super klasse!
          das war das problem...
      • JoUnderground
        Smart Home'r
        • 09.11.2016
        • 41

        Hallo Loxone Gemeinde,

        hab bei meine Müllprogramm nur das Jahr und das Datum geändert und leider funkt es seit dem nicht mehr. Da ich nicht unbedingt der Spezialist von Quellcode bin, bitte ich hiermit um Hilfe!
        HTML-Code:
        // Müllabfuhr für loxforum.com by Sebastian
        //AI1: Minuten Aktualisierung
        //AQ1: Stunden bis Restmüllabholung
        //AQ2: Stunden bis Biomüllabholung
        //AQ3: Stunden bis Altpapierabholung
        //AQ4: Stunden bis Leichtstoffabholung
        
        float sleeptime, now, restleft, bioleft, papierleft, leichtleft;
        int rest[30], bio[30], papier[30], leicht[30]; //Arrays. Falls es mehr Termine sind, einfach die Klammerwerte erhöhen
        int lenrest, lenbio, lenpapier, lenleicht, i, k, year, hourrest, hourbio, hourpapier, hourleicht, minuterest, minutebio, minutepapier, minuteleicht, remtimerest, remtimebio, remtimepapier, remtimeleicht;
        
        year = 2019; //Jahr, für den der Müllkalender gilt
        hourrest = 6; //Stunde, an der die Müllabfuhr üblicherweise kommt (Restmüll)
        hourbio = 6; //Stunde, an der die Müllabfuhr üblicherweise kommt (Biomüll)
        hourpapier = 6; //Stunde, an der die Müllabfuhr üblicherweise kommt (Altpapier)
        hourleicht = 6; //Stunde, an der die Müllabfuhr üblicherweise kommt (Leichtstoff)
        minuterest = 0; //Minute, an der die Müllabfuhr üblicherweise kommt ;-)
        minutebio = 0; //Minute, an der die Müllabfuhr üblicherweise kommt ;-)
        minutepapier = 0; //Minute, an der die Müllabfuhr üblicherweise kommt ;-)
        minuteleicht = 0; //Minute, an der die Müllabfuhr üblicherweise kommt ;-)
        remtimerest = 12; //Stunden vor der Abholung bzgl. Erinnerung. IM STATUSBAUSTEIN ANPASSEN (oder umgekehrt)!
        remtimebio = 12; //Stunden vor der Abholung bzgl. Erinnerung. IM STATUSBAUSTEIN ANPASSEN (oder umgekehrt)!
        remtimepapier = 12; //Stunden vor der Abholung bzgl. Erinnerung. IM STATUSBAUSTEIN ANPASSEN (oder umgekehrt)!
        remtimeleicht = 12; //Stunden vor der Abholung bzgl. Erinnerung. IM STATUSBAUSTEIN ANPASSEN (oder umgekehrt)!
        
        while(TRUE)
        {
        sleeptime = 60*getinput(0); //Aktualisierungszeit in Sekunden
        now = getcurrenttime(); //aktuelle Zeit in Sekunden (seit 01.01.2009 0:00)
        
        //Daten der Restmüllabholung
        rest[0] = gettimeval(year-1, 12, 21, hourrest, minuterest, 0, 1); //Letzter Abfuhrtermin des alten Jahres
        rest[1] = gettimeval(year, 1, 4, hourrest, minuterest, 0, 1); //ab hier für das neue Jahr (Variable "year")
        rest[2] = gettimeval(year, 1, 17, hourrest, minuterest, 0, 1);
        rest[3] = gettimeval(year, 1, 31, hourrest, minuterest, 0, 1);
        rest[4] = gettimeval(year, 2, 14, hourrest, minuterest, 0, 1);
        rest[5] = gettimeval(year, 2, 28, hourrest, minuterest, 0, 1);
        rest[6] = gettimeval(year, 3, 14, hourrest, minuterest, 0, 1);
        rest[7] = gettimeval(year, 3, 28, hourrest, minuterest, 0, 1);
        rest[8] = gettimeval(year, 4, 11, hourrest, minuterest, 0, 1);
        rest[9] = gettimeval(year, 4, 25, hourrest, minuterest, 0, 1);
        rest[10] = gettimeval(year, 5, 09, hourrest, minuterest, 0, 1);
        rest[11] = gettimeval(year, 5, 23, hourrest, minuterest, 0, 1);
        rest[12] = gettimeval(year, 6, 6, hourrest, minuterest, 0, 1);
        rest[13] = gettimeval(year, 6, 21, hourrest, minuterest, 0, 1);
        rest[14] = gettimeval(year, 7, 4, hourrest, minuterest, 0, 1);
        rest[15] = gettimeval(year, 7, 18, hourrest, minuterest, 0, 1);
        rest[16] = gettimeval(year, 8, 1, hourrest, minuterest, 0, 1);
        rest[17] = gettimeval(year, 8, 16, hourrest, minuterest, 0, 1);
        rest[18] = gettimeval(year, 8, 29, hourrest, minuterest, 0, 1);
        rest[19] = gettimeval(year, 9, 12, hourrest, minuterest, 0, 1);
        rest[20] = gettimeval(year, 9, 26, hourrest, minuterest, 0, 1);
        rest[21] = gettimeval(year, 10, 10, hourrest, minuterest, 0, 1);
        rest[22] = gettimeval(year, 10, 24, hourrest, minuterest, 0, 1);
        rest[23] = gettimeval(year, 11, 7, hourrest, minuterest, 0, 1);
        rest[24] = gettimeval(year, 11, 21, hourrest, minuterest, 0, 1);
        rest[25] = gettimeval(year, 12, 5, hourrest, minuterest, 0, 1);
        rest[26] = gettimeval(year, 12, 19, hourrest, minuterest, 0, 1);
        
        //Schleife Zählen der vorh. Arrayelemente beim Restmüll
        lenrest=0;
        for(k=0; k<(sizeof(rest)/sizeof(int)); k++) {
        if(rest[k] > 0) {
        lenrest++;
        }
        }
        
        //Daten der Biomüllabholung
        bio[0] = gettimeval(year-1, 12, 29, hourbio, minutebio, 0, 1); //Letzter Abfuhrtermin des alten Jahres
        bio[1] = gettimeval(year, 1, 11, hourbio, minutebio, 0, 1); //ab hier für das neue Jahr (Variable "year")
        bio[2] = gettimeval(year, 1, 25, hourbio, minutebio, 0, 1);
        bio[3] = gettimeval(year, 2, 8, hourbio, minutebio, 0, 1);
        bio[4] = gettimeval(year, 2, 22, hourbio, minutebio, 0, 1);
        bio[5] = gettimeval(year, 3, 8, hourbio, minutebio, 0, 1);
        bio[6] = gettimeval(year, 3, 22, hourbio, minutebio, 0, 1);
        bio[7] = gettimeval(year, 4, 5, hourbio, minutebio, 0, 1);
        bio[8] = gettimeval(year, 4, 19, hourbio, minutebio, 0, 1);
        bio[9] = gettimeval(year, 5, 4, hourbio, minutebio, 0, 1);
        bio[10] = gettimeval(year, 5, 17, hourbio, minutebio, 0, 1);
        bio[11] = gettimeval(year, 6, 1, hourbio, minutebio, 0, 1);
        bio[12] = gettimeval(year, 6, 14, hourbio, minutebio, 0, 1);
        bio[13] = gettimeval(year, 6, 28, hourbio, minutebio, 0, 1);
        bio[14] = gettimeval(year, 7, 12, hourbio, minutebio, 0, 1);
        bio[15] = gettimeval(year, 7, 26, hourbio, minutebio, 0, 1);
        bio[16] = gettimeval(year, 8, 9, hourbio, minutebio, 0, 1);
        bio[17] = gettimeval(year, 8, 23, hourbio, minutebio, 0, 1);
        bio[18] = gettimeval(year, 9, 6, hourbio, minutebio, 0, 1);
        bio[19] = gettimeval(year, 9, 20, hourbio, minutebio, 0, 1);
        bio[20] = gettimeval(year, 10, 4, hourbio, minutebio, 0, 1);
        bio[21] = gettimeval(year, 10, 18, hourbio, minutebio, 0, 1);
        bio[22] = gettimeval(year, 11, 2, hourbio, minutebio, 0, 1);
        bio[23] = gettimeval(year, 11, 15, hourbio, minutebio, 0, 1);
        bio[24] = gettimeval(year, 11, 29, hourbio, minutebio, 0, 1);
        bio[25] = gettimeval(year, 12, 13, hourbio, minutebio, 0, 1);
        bio[26] = gettimeval(year, 12, 28, hourbio, minutebio, 0, 1);
        
        //Schleife Zählen der vorh. Arrayelemente beim Biomüll
        lenbio=0;
        for(k=0; k<(sizeof(bio)/sizeof(int)); k++) {
        if(rest[k] > 0) {
        lenbio++;
        }
        }
        
        //Daten der Papiermüllabholung
        papier[0] = gettimeval(year-1, 12, 21, hourpapier, minutepapier, 0, 1); //Letzter Abfuhrtermin des alten Jahres
        papier[1] = gettimeval(year, 1, 17, hourpapier, minutepapier, 0, 1); //ab hier für das neue Jahr (Variable "year")
        papier[2] = gettimeval(year, 2, 14, hourpapier, minutepapier, 0, 1);
        papier[3] = gettimeval(year, 3, 14, hourpapier, minutepapier, 0, 1);
        papier[4] = gettimeval(year, 4, 11, hourpapier, minutepapier, 0, 1);
        papier[5] = gettimeval(year, 5, 9, hourpapier, minutepapier, 0, 1);
        papier[6] = gettimeval(year, 6, 6, hourpapier, minutepapier, 0, 1);
        papier[7] = gettimeval(year, 7, 4, hourpapier, minutepapier, 0, 1);
        papier[8] = gettimeval(year, 8, 1, hourpapier, minutepapier, 0, 1);
        papier[9] = gettimeval(year, 8, 29, hourpapier, minutepapier, 0, 1);
        papier[10] = gettimeval(year, 9, 26, hourpapier, minutepapier, 0, 1);
        papier[11] = gettimeval(year, 10, 24, hourpapier, minutepapier, 0, 1);
        papier[12] = gettimeval(year, 11, 21, hourpapier, minutepapier, 0, 1);
        papier[13] = gettimeval(year, 12, 19, hourpapier, minutepapier, 0, 1);
        
        //Schleife Zählen der vorh. Arrayelemente beim Papiermüll
        lenpapier=0;
        for(k=0; k<(sizeof(papier)/sizeof(int)); k++) {
        if(rest[k] > 0) {
        lenpapier++;
        }
        }
        
        //Daten der Leichtstoffabholung
        leicht[0] = gettimeval(year-1, 12, 7, hourleicht, minuteleicht, 0, 1); //Letzter Abfuhrtermin des alten Jahres
        leicht[1] = gettimeval(year, 1, 4, hourleicht, minuteleicht, 0, 1); //ab hier für das neue Jahr (Variable "year")
        leicht[2] = gettimeval(year, 1, 31, hourleicht, minuteleicht, 0, 1);
        leicht[3] = gettimeval(year, 2, 28, hourleicht, minuteleicht, 0, 1);
        leicht[4] = gettimeval(year, 3, 28, hourleicht, minuteleicht, 0, 1);
        leicht[5] = gettimeval(year, 4, 26, hourleicht, minuteleicht, 0, 1);
        leicht[6] = gettimeval(year, 5, 23, hourleicht, minuteleicht, 0, 1);
        leicht[7] = gettimeval(year, 6, 21, hourleicht, minuteleicht, 0, 1);
        leicht[8] = gettimeval(year, 7, 18, hourleicht, minuteleicht, 0, 1);
        leicht[9] = gettimeval(year, 8, 16, hourleicht, minuteleicht, 0, 1);
        leicht[10] = gettimeval(year, 9, 12, hourleicht, minuteleicht, 0, 1);
        leicht[11] = gettimeval(year, 10, 10, hourleicht, minuteleicht, 0, 1);
        leicht[12] = gettimeval(year, 11, 7, hourleicht, minuteleicht, 0, 1);
        leicht[13] = gettimeval(year, 12, 5, hourleicht, minuteleicht, 0, 1);
        
        //Schleife Zählen der vorh. Arrayelemente beim Leichtstoffmüll
        lenleicht=0;
        for(k=0; k<(sizeof(leicht)/sizeof(int)); k++) {
        if(rest[k] > 0) {
        lenleicht++;
        }
        }
        
        //Schleife Restmüll
        for(i=0; i<lenrest; i++) {
        restleft = (rest[i]-now)/3600;
        
        if(restleft >= 0) {
        setoutput(0,restleft);
        i = lenrest-1;
        }
        }
        //Schleife Biomüll
        for(i=0; i<lenbio; i++) {
        bioleft = (bio[i]-now)/3600;
        
        if(bioleft >= 0) {
        setoutput(1,bioleft);
        i = lenbio-1;
        }
        }
        //Schleife Papiermüll
        for(i=0; i<lenpapier; i++) {
        papierleft = (papier[i]-now)/3600;
        
        if(papierleft >= 0) {
        setoutput(2,papierleft);
        i = lenpapier-1;
        }
        }
        //Schleife Leichtstoff
        for(i=0; i<lenleicht; i++) {
        leichtleft = (leicht[i]-now)/3600;
        
        if(leichtleft >= 0) {
        setoutput(3,leichtleft);
        i = lenleicht-1;
        }
        }
        //Schleife zur Überprüfung, ob die Erinnerungsuhrzeit ansteht (innerhalb 1 Stunde), wenn ja: Sleeptime verringern.
        if((restleft<(remtimerest+1) && restleft>=(remtimerest)) ||
        (bioleft<(remtimebio+1) && bioleft>=(remtimebio)) ||
        (papierleft<(remtimepapier+1) && papierleft>=(remtimepapier)) ||
        (leichtleft<(remtimeleicht+1) && leichtleft>=(remtimeleicht))) {
        sleeptime = 120;
        }
        sleeps(sleeptime); //Sleep-Wert in Sekunden, um die CPU zu schonen..
        }
        Vielen Dank für eure Hilfe!

        Lg

        Jo
        Zuletzt geändert von JoUnderground; 10.03.2019, 12:14.

        Kommentar


        • JoUnderground
          JoUnderground kommentierte
          Kommentar bearbeiten
          Danke Thema hat sicher erledigt, hab nochmal alles eingegeben und jetzt funktioniert es. Sorry für die falsch Meldung!

          Lg

          Jo
      • Gast

        Hallo,
        kann mir jemand ganz kurz sagen, wie ich eine Aktion zum Mülltag auslöse? Ich will ein Tor für ca. 12 Stunden geöffnet halten (über Tortaster via Nano Air). Danke im Voraus.

        Kommentar


        • romildo
          romildo kommentierte
          Kommentar bearbeiten
          Dazu gibt es verschiedene Bausteine wie Ausschaltverzögerung, Monoflop usw.
          Um genauere Angaben machen zu können, müsste man dazu allerdings schon deine jetzigen diesbezüglichen Funktionen kennen.
      • Gast

        Ich habe mal die Seite mit meiner aktuellen Programmierung angehängt.
        Angehängte Dateien

        Kommentar


        • romildo
          romildo kommentierte
          Kommentar bearbeiten
          Leider kann ich auf dem Bild nicht erkennen wie das Tor geöffnet und wie es geschlossen wird.
          Geht das Tor bei einem Impuls auf und beim Nächsten zu, oder wie wird das gesteuert?
      • Gast

        Das Tor geht bei einem Impuls auf und schließt mit einer Verzögerung von 240 sec. Ist also dauerhaft geschlossen.

        Kommentar


        • romildo
          romildo kommentierte
          Kommentar bearbeiten
          Dann kannst Du das doch genauso machen und an Stelle von 240s 12h einstellen, oder wo liegt das Problem?
      • Gast

        Ich möchte halt, dass das Tor taggenau entsprechend dem Kalender in einer in der Schaltuhr festzulegenden Zeit geöffnet bleibt. Dass also der Müllkalender genau eingehalten wird (z.B. bei Verschiebung wg. Feiertagen etc.). Irgendwie kriege ich es nicht hintereinander.

        Kommentar


        • romildo
          romildo kommentierte
          Kommentar bearbeiten
          Was Du möchtest ist so ziemlich das einzige was mir vorher schon klar war.

          Dann wird das wohl die Schaltuhr sein, welche im Bild vorhanden ist?
          Leider reagiert die Schaltuhr über den Eingang Tr nur dann, wenn der Impuls innerhalb der Schaltzeit kommt.
          Du musst also das Signal hinter der Schaltuhr mit dem Müllkalender über ein UND verknüpfen.

          Mir ist auch immer noch nicht klar, wie das Tor gesteuert wird. Mit einem Impuls wird es geöffnet und nach 240s geschlossen.
          Wo werden denn die 240s eingestellt, macht das irgendeine Torsteuerung oder kommt das von Loxone?
      • Gast

        Die 240 sec

        Kommentar

        • Gast

          Die 240 sec ergeben sich aus dem Parameter Tp des NFC Touch.

          Kommentar


          • romildo
            romildo kommentierte
            Kommentar bearbeiten
            Dann geht aber das Tor nicht mittels Impuls auf, sondern bei EIN und schliesst bei AUS.
        • Gast

          Ok. Ich bin da noch ziemlicher Laie. Was müßte ich denn optimalerweise machen?

          Kommentar

          • romildo
            Lebende Foren Legende
            • 25.08.2015
            • 5113

            Wie schon gesagt kenne ich Deine Programmierung nicht, soweit ich gesehen habe ist sie auch nicht identisch mit derjenigen in #1.

            Gemäss Bild in #142 gehe ich davon aus, dass Du eine Benachrichtigung bekommst, wenn der Müll bereitgestellt werden soll.
            Ich vermute mal, dass dies einige Stunden vorher ist. Ist ja abhängig von den Einstellungen und der Programmierung.

            Du könntest also Beispielsweise diesen Impuls benutzen und damit ein Impulsschalter-Baustein über den Eingang S auf Ein setzen.
            In der Schaltuhr stellst Du die gewünschte Zeit ein und verknüpfst den Ausgang über ein UND mit dem Impulsschalter-Ausgang.
            Am UND-Ausgang bekommst Du dann so lange ein EIN wie der Impulsschalter und die Schaltuhr auf EIN sind.
            Wenn der UND-Ausgang auf AUS wechselt wird über ein Monoflop der Impulsschalter wieder auf AUS gesetzt.

            Die Bausteine sollten auch auf Remanent gestellt werden.

            Hier ein Bild, damit es etwas klarer wird, wie ich das meine.

            Klicke auf die Grafik für eine vergrößerte Ansicht  Name: MüllabfuhrToröffnung.png Ansichten: 0 Größe: 95,2 KB ID: 200972
            lg Romildo

            Kommentar

            • Gast

              Wunderbar! Ich danke Dir. Werde es mal am WE ausprobieren (mit meinen laienhaften Kenntnissen).

              Kommentar

              • Gast

                Hallo zusammen, habe ein Problem mit meinem Müllkalender. AQ2 zeigt seit ein paar Tagen immer 0 an. Dies dürfte aber lt. Programmcode nicht sein. Kann bitte jemand den Quellcode checken, mir ist leider nichts aufgefallen. https://pastecode.xyz/view/0eca5c38
                Danke 🙂👍

                Kommentar

                • romildo
                  Lebende Foren Legende
                  • 25.08.2015
                  • 5113

                  Gast

                  Folgende Zeilen sind falsch:

                  falsch 104 if(rest[k] > 0) {
                  richtig 104 if(bio[k] > 0) {
                  falsch 128 if(rest[k] > 0) {
                  richtig 128 if(papier[k] > 0) {
                  lg Romildo

                  Kommentar


                  • Gast
                    Gast kommentierte
                    Kommentar bearbeiten
                    Perfekt, so einfach und trotzdem überlesen werde ich heute gleich testen.

                  • Gast
                    Gast kommentierte
                    Kommentar bearbeiten
                    Funktioniert, besten Dank nochmal. Komisch, dass es bisher auch bei bio in der visu immer alles richtig angezeigt hatte

                  • romildo
                    romildo kommentierte
                    Kommentar bearbeiten
                    Bitte gerne.
                    Das ist nicht komisch, sondern logisch
                    Du hast 26 Einträge bei Restmüll. Diese Anzahl wird unter Restmüll in die Variable "rest" gespeichert.
                    Da Du bei Bio nur die Anzahl von "rest" abgefragt hast, wurden auch nur die ersten 26 Einträge angezeigt.
                Lädt...