aufgrund einer Anregung aus dem Thread von Albert, schönen Dank schon einmal im Voraus, habe ich mich mal an PicoC und der Problematik bei abweichenden Müllabfuhrterminen versucht.
PicoC kannte ich so noch nicht, und das letzte mal mit C habe ich in der 10. Klasse programmiert. Also seht mir bitte meine amateurhaften Versuche nach ;-)
Formelbaustein:
Das Skript ist so geschrieben, dass man einmal jährlich zu Weihnachten alle Termine einträgt. Ist eigentlich selbsterklärend, wenn man ins Skript schaut.
// 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 = 2016; //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, 17, hourrest, minuterest, 0, 1); //Letzter Abfuhrtermin des alten Jahres rest[1] = gettimeval(year, 1, 14, hourrest, minuterest, 0, 1); //ab hier für das neue Jahr (Variable "year") rest[2] = gettimeval(year, 2, 11, hourrest, minuterest, 0, 1); rest[3] = gettimeval(year, 3, 10, hourrest, minuterest, 0, 1); rest[4] = gettimeval(year, 4, 7, hourrest, minuterest, 0, 1); rest[5] = gettimeval(year, 5, 6, hourrest, minuterest, 0, 1); rest[6] = gettimeval(year, 6, 2, hourrest, minuterest, 0, 1); rest[7] = gettimeval(year, 6, 30, hourrest, minuterest, 0, 1); rest[8] = gettimeval(year, 7, 28, hourrest, minuterest, 0, 1); rest[9] = gettimeval(year, 8, 25, hourrest, minuterest, 0, 1); rest[10] = gettimeval(year, 9, 22, hourrest, minuterest, 0, 1); rest[11] = gettimeval(year, 10, 20, hourrest, minuterest, 0, 1); rest[12] = gettimeval(year, 11, 17, hourrest, minuterest, 0, 1); rest[13] = gettimeval(year, 12, 15, 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, 23, hourbio, minutebio, 0, 1); //Letzter Abfuhrtermin des alten Jahres bio[1] = gettimeval(year, 1, 7, hourbio, minutebio, 0, 1); //ab hier für das neue Jahr (Variable "year") bio[2] = gettimeval(year, 1, 21, hourbio, minutebio, 0, 1); bio[3] = gettimeval(year, 2, 4, hourbio, minutebio, 0, 1); bio[4] = gettimeval(year, 2, 18, hourbio, minutebio, 0, 1); bio[5] = gettimeval(year, 3, 3, hourbio, minutebio, 0, 1); bio[6] = gettimeval(year, 3, 17, hourbio, minutebio, 0, 1); bio[7] = gettimeval(year, 4, 1, hourbio, minutebio, 0, 1); bio[8] = gettimeval(year, 4, 14, hourbio, minutebio, 0, 1); bio[9] = gettimeval(year, 4, 28, hourbio, minutebio, 0, 1); bio[10] = gettimeval(year, 5, 12, hourbio, minutebio, 0, 1); bio[11] = gettimeval(year, 5, 27, hourbio, minutebio, 0, 1); bio[12] = gettimeval(year, 6, 9, hourbio, minutebio, 0, 1); bio[13] = gettimeval(year, 6, 23, hourbio, minutebio, 0, 1); bio[14] = gettimeval(year, 7, 7, hourbio, minutebio, 0, 1); bio[15] = gettimeval(year, 7, 21, hourbio, minutebio, 0, 1); bio[16] = gettimeval(year, 8, 4, hourbio, minutebio, 0, 1); bio[17] = gettimeval(year, 8, 18, hourbio, minutebio, 0, 1); bio[18] = gettimeval(year, 9, 1, hourbio, minutebio, 0, 1); bio[19] = gettimeval(year, 9, 15, hourbio, minutebio, 0, 1); bio[20] = gettimeval(year, 9, 29, hourbio, minutebio, 0, 1); bio[21] = gettimeval(year, 10, 13, hourbio, minutebio, 0, 1); bio[22] = gettimeval(year, 10, 27, hourbio, minutebio, 0, 1); bio[23] = gettimeval(year, 11, 10, hourbio, minutebio, 0, 1); bio[24] = gettimeval(year, 11, 24, hourbio, minutebio, 0, 1); bio[25] = gettimeval(year, 12, 8, hourbio, minutebio, 0, 1); bio[26] = gettimeval(year, 12, 22, 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(bio[k] > 0) { lenbio++; } } //Daten der Papiermüllabholung papier[0] = gettimeval(year-1, 12, 31, hourpapier, minutepapier, 0, 1); //Letzter Abfuhrtermin des alten Jahres papier[1] = gettimeval(year, 1, 28, hourpapier, minutepapier, 0, 1); //ab hier für das neue Jahr (Variable "year") papier[2] = gettimeval(year, 2, 25, hourpapier, minutepapier, 0, 1); papier[3] = gettimeval(year, 3, 23, hourpapier, minutepapier, 0, 1); papier[4] = gettimeval(year, 4, 21, hourpapier, minutepapier, 0, 1); papier[5] = gettimeval(year, 5, 20, hourpapier, minutepapier, 0, 1); papier[6] = gettimeval(year, 6, 16, hourpapier, minutepapier, 0, 1); papier[7] = gettimeval(year, 7, 14, hourpapier, minutepapier, 0, 1); papier[8] = gettimeval(year, 8, 11, hourpapier, minutepapier, 0, 1); papier[9] = gettimeval(year, 9, 8, hourpapier, minutepapier, 0, 1); papier[10] = gettimeval(year, 10, 7, hourpapier, minutepapier, 0, 1); papier[11] = gettimeval(year, 11, 4, hourpapier, minutepapier, 0, 1); papier[12] = gettimeval(year, 12, 1, hourpapier, minutepapier, 0, 1); papier[13] = gettimeval(year, 12, 30, 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(papier[k] > 0) { lenpapier++; } } //Daten der Leichtstoffabholung leicht[0] = gettimeval(year-1, 12, 30, hourleicht, minuteleicht, 0, 1); //Letzter Abfuhrtermin des alten Jahres leicht[1] = gettimeval(year, 1, 27, hourleicht, minuteleicht, 0, 1); //ab hier für das neue Jahr (Variable "year") leicht[2] = gettimeval(year, 2, 24, hourleicht, minuteleicht, 0, 1); leicht[3] = gettimeval(year, 3, 22, hourleicht, minuteleicht, 0, 1); leicht[4] = gettimeval(year, 4, 20, hourleicht, minuteleicht, 0, 1); leicht[5] = gettimeval(year, 5, 19, hourleicht, minuteleicht, 0, 1); leicht[6] = gettimeval(year, 6, 15, hourleicht, minuteleicht, 0, 1); leicht[7] = gettimeval(year, 7, 13, hourleicht, minuteleicht, 0, 1); leicht[8] = gettimeval(year, 8, 10, hourleicht, minuteleicht, 0, 1); leicht[9] = gettimeval(year, 9, 7, hourleicht, minuteleicht, 0, 1); leicht[10] = gettimeval(year, 10, 6, hourleicht, minuteleicht, 0, 1); leicht[11] = gettimeval(year, 11, 3, hourleicht, minuteleicht, 0, 1); leicht[12] = gettimeval(year, 11, 30, hourleicht, minuteleicht, 0, 1); leicht[13] = gettimeval(year, 12, 29, 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(leicht[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.. }
Man hat die Möglichkeit, sowohl die Reststunden als auch die Resttage anzuzeigen.
Statusbaustein:
Ich wollte es so, dass der Status jeweils 12 Stunden vor Abholung gesetzt wird. Das passt auch dazu, zu welchem Zeitpunkt wir abends die Tonnen rausstellen.
Differenzschwellwertschalter:
Schalten jeweils nur die Benachrichtigungen ein, die auch dazu passen.
Symbole:
Habe ich mir von Albert geborgt, reichen für meine Zwecke mehr als aus! Danke nochmals!
Dann viel Spaß damit!
Anregungen/Verbesserungen sind natürlich erwünscht!
Gruß Sebastian
EDIT 25.12.2015:
Frohe Weihnachten!
- Das Programm lief nur bei Miniserverupdate, behoben durch While(true)
- Sleeptime mit Schieber hinzugefügt, um die CPU zu schonen
- Statusbaustein angepasst
- Benachrichtigungsbausteine: Zeit auf 12 Stunden hochgesetzt
- Config-Datei angehängt
- Screenshots erneuert
EDIT 26.12.2015:
- Statusbaustein angepasst.
EDIT 27.12.2015:
- Schleifen zur autom. Erkennung der Arrayinhalte eingefügt.
EDIT 06.01.2016;
- Sleeptimeanpassung bei 1 Stunde vor Erinnerungszeit bis zur Erinnerungszeit (um die Erinnerungszeit relativ genau zu erhalten, für Benachrichtigungen)
EDIT 07.01.2016:
- Aus einer Abholzeit mach 4, auf vielfachen Wunsch einer einzelnen Person ;-)
EDIT 30.07.2016
- Fehler im Code behoben
Kommentar