Ankündigung

Einklappen
Keine Ankündigung bisher.

EIBPC- Visualisierung Müllabholung

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

    #16
    Hallo,
    habe eben festgestellt, dass das Müllmakro bei mir in Kombination mit dem BETA-FW-Patch 2.301 bei "Kein Ereignis" nichts mehr anzeigt.
    Grund dafür ist wohl, dass nun bei EOL 1400 zurückgegeben wird und nicht mehr 1399.
    Warum ich auch immer damals 1399 statt 1400 im Code hatte, weiß ich nicht mehr, ich bin mir ziemlich sicher, dass das damals das Ergebnis aus dem Debugger war. Anyway, nachdem ich nicht 100%ig sicher weiß, ob diese Änderung erst mit 2.301 der FW reingekommen ist oder schon früher wäre es klasse, wenn jemand hierzu mit FW-Stand < 2.301 ein kurzes Feedback geben könnte, ob das mit EOL=1399 noch läuft.
    Ich würde dann in dem Eingangsthread noch bei Gelegenheit eine neue Version mit >=1399 einstellen.
    VG, Oliver

    Kommentar


      #17
      Hallo Oliver,

      die einzelnen Positionen der C1400 Variable sind von 0 bis 1399 durchnummeriert. 1400 wird nur zurückgegeben wenn der Suchwert zwischen 0 und 1399 nicht gefunden wurde.

      Viele Grüße

      Michael

      Kommentar


        #18
        Hallo Michael,

        ja ist mir schon klar. Unklar ist allerdings, warum es vorher funktioniert hat mit 1399 als Rückgabewert für EOL. Ich habe dies damals mit dem Debugger herausgelesen, dass da 1399 kam und nicht 1400! Um Patchunabhängig zu sein kann man sicherlich mit der Unschärfe >=1399 arbeiten, ist aber halt nicht sauber...

        Kommentar


          #19
          Zitat von Sandman60 Beitrag anzeigen
          Hallo Michael,
          ja ist mir schon klar. Unklar ist allerdings, warum es vorher funktioniert hat mit 1399 als Rückgabewert für EOL.
          Das war ein Bug in der FW/Patch <2.301
          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
          Enertex Produkte kaufen

          Kommentar


            #20
            Zitat von enertegus Beitrag anzeigen
            Das war ein Bug in der FW/Patch <2.301
            Versteh ich nicht, wieso 'war'?

            Ist der Patch denn schon verfügbar?
            BR
            Marc

            Kommentar


              #21
              Zitat von saft6luck Beitrag anzeigen
              Versteh ich nicht, wieso 'war'?
              Ist der Patch denn schon verfügbar?
              Als Beta, wir werden das Release aber sehr zeitnah veröffentlichen.
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #22
                Müllabholung Bug?

                Zitat von Jambala Beitrag anzeigen
                Hallo Oliver,

                ich habe Deine Idee mit den Müllterminen aufgegriffen, aber die weitere Bearbeitung auf eine einfachere Art und Weise umgesetzt.

                Dies funktioniert bei mir bisher problemlos. Wichtig ist aber die Termine im Format tt.mm. einzugeben, also bei einstelligen Zahlen zwingend eine Null vorweg. Also 05.05. für den 5. Mai.

                Viele Grüße

                Michael


                [highlight=epc]
                // Variablen Definieren
                TagHeute = split(convert(setdate(),$$),0u16,1u16)
                TagMorgen = convert(convert(split(convert(setdate(),$$),0u16,0 u16),0u16),$$)+convert(convert(split(convert(setda te(),$$),1u16,1u16),0u16)+1u16,$$)
                Monat = split(convert(setdate(),$$),3u16,4u16)
                TagMonatHeute = TagHeute+$.$+Monat+$.$
                TagMonatMorgen = TagMorgen+$.$+Monat+$.$
                MuellabholungHeute = $$
                MuellabholungMorgen = $$
                // Abholtermine Restmülltonne
                SchwarzeTonne = $16.05.;23.05.;31.05.;06.06.;13.06.;20.06.;27.06.$
                // Abholtermine Leichtverpackungstonne
                GelbeTonne = $08.05.;22.05.;05.06.;19.06.$
                // Abholtermine Biotonne
                BrauneTonne = $15.05.;30.05.;12.06.;26.06.$
                // Abholtermine Altpapiertonne
                BlaueTonne = $11.05.;25.05.;09.06.;22.06.$

                // Müllabholung Heute
                SucheSchwarzeTonneHeute = find(SchwarzeTonne,TagMonatHeute,0u16)
                if SucheSchwarzeTonneHeute <= 1398u16 then \\
                MuellabholungHeute = $Schwarze Tonne$ \\
                else \\
                MuellabholungHeute = $$ \\
                endif
                SucheGelbeTonneHeute = find(GelbeTonne,TagMonatHeute,0u16)
                if SucheGelbeTonneHeute <= 1398u16 then \\
                MuellabholungHeute = $Gelbe Tonne$ \\
                else \\
                MuellabholungHeute = $$ \\
                endif
                SucheBrauneTonneHeute = find(BrauneTonne,TagMonatHeute,0u16)
                if SucheBrauneTonneHeute <= 1398u16 then \\
                MuellabholungHeute = $Braune Tonne$ \\
                else \\
                MuellabholungHeute = $$ \\
                endif
                SucheBlaueTonneHeute = find(BlaueTonne,TagMonatHeute,0u16)
                if SucheBlaueTonneHeute <= 1398u16 then \\
                MuellabholungHeute = $Blaue Tonne$ \\
                else \\
                MuellabholungHeute = $$ \\
                endif

                /7
                [/highlight]
                Eine Frage zu obigem Beispiel:

                Situation: MuellabholungHeute = $Schwarze Tonne$

                keine blaue Tonne ergibt

                MuellabholungHeute = $$, also kein Wert mehr in MuellabholungHeute.

                Ich habe MuellabholungHeute = MuellabholungHeute + $Tonnentext$
                in alle Abfragen nach der ersten Abfrage eingefügt und schon gings richtig.

                Habe allerdings einige Punkte im Programm geändert. Sehe ich etwas falch?

                Gruß
                Wolfgang

                Kommentar


                  #23
                  Ich kann mit der Frage leider nichts anfangen, weil ich nicht verstehe was Du uns sagen möchtest.

                  Bitte formuliere ein konkretes Beispiel und poste Deinen Code.

                  Kommentar


                    #24
                    Kann da Michael nur beipflichten, aber mal ein Schuss ins Blaue. Der hier geposteten Code kam noch aus einem älteren Patchlevel, dort war das Ende einer Textsuche 1399. Nach PL 2.3x wurde das geändert und nun ist das Ende 1400. Daher evtl. den Code mal anpassen auf <=1399...
                    Wie gesagt, nur ein Schuss ins Blaue...
                    Cheers,
                    Oliver

                    Kommentar


                      #25
                      Datum, Monatswechsel

                      Zitat von Jambala Beitrag anzeigen
                      Ich kann mit der Frage leider nichts anfangen, weil ich nicht verstehe was Du uns sagen möchtest.

                      Bitte formuliere ein konkretes Beispiel und poste Deinen Code.
                      Hallo Jambala,

                      danke für die schnelle Antwort.

                      Neben dem geschilderten Problem, dass ich später noch einmal erläutern werde, habe ich einen seltsamen Effekt.

                      Heute am 29.03. ist angeblich die "Braune Tonne" fällig. In der Tabele steht aber der 28.03.

                      Auf der Suche nach der Ursache per Debugger fiel mir das Datum für Morgen als "TagMonatMorgen" auf, hier steht 210.03 (siehe Muell1.bmp).
                      Es sollte doch der 30.03. sein.

                      Wie sieht es bei einem Monatswechsel aus?

                      Zum Thema von gestern:

                      Bitte schau einmal in den Sourcetext von mir.
                      Meine Idee

                      die erste Abfrage bringt ein Ergebnis, also MüllabholungHeute = Braune Tonne.

                      Die Suche nach der 2. Tonne bringt kein Ergennis, dann wird MüllabholungHeute = $$ gesetzt.

                      Wird hier nicht das Ergebnis der ersten Abfrage überschrieben?

                      Meine Kodierung MüllabholungHeute = MüllabholungHeute + $Tonne 2$ brachte das richtige Ergebnis.

                      Denke ich hier falsch?

                      Ich hoffe der Code hilft meine Unsicherheit zu erkennen.

                      Das Datum ist wohl noch eine Baustelle.

                      Ist der Source im Forum der letzte Stand?

                      Einen schönen Feiertag und frohe Ostern

                      Wolfgang

                      Kommentar


                        #26
                        Hallo Wolfgang,

                        auf die Schnelle ist mir vor allem das von Oliver genannte Thema mit dem EOL 1399 bzw. 1400 aufgefallen.

                        Nimm besser den Code unten. Der läuft bei mir problemlos.

                        Wichtig ist aber, dass bei Euch nie an einem Tag zwei Tonnen geleert werden. Wenn dies der Fall ist, hätte ich dazu noch eine andere Code Variante.

                        Außerdem solltest Du immer während des Systemstarts Auswertungen verhindern. Das ermöglicht die Variable Init:

                        [highlight=epc]
                        // Während Systemstart andere Prozesse verzögern
                        Init = AUS
                        if after(systemstart(),5000u64) then \\
                        Init = EIN \\
                        endif
                        [/highlight]

                        Deinen Email Versand würde ich auch anders triggern:

                        [highlight=epc]
                        mBetreff = $Heute: $ + MuellabholungHeute + $ Morgen: $ + MuellabholungMorgen
                        mText = $Ein Hinweis zur Muellbeseitigung: $ + mBetreff + CRLF
                        if Init == EIN \\
                        and (change(MuellabholungHeute) or change(MuellabholungMorgen)) then \\
                        sendmail($info@irgentwo.de$,mBetreff,mText) \\
                        endif
                        [/highlight]
                        Viele Grüße

                        Michael

                        [highlight=epc]
                        // Variablen Definieren
                        TagHeute = split(convert(setdate(),$$),0u16,1u16)
                        TagMorgenTag = convert(convert(split(convert(setdate(),$$),0u16,0 u16),0u16),$$)
                        TagMorgenMonat = convert(convert(split(convert(setdate(),$$),1u16,1 u16),0u16)+1u16,$$)
                        TagMorgen = TagMorgenTag + TagMorgenMonat
                        Monat = split(convert(setdate(),$$),3u16,4u16)
                        TagMonatHeute = TagHeute + $.$ + Monat + $.$
                        TagMonatMorgen = TagMorgen + $.$ + Monat + $.$
                        MuellabholungHeute = $Keine Abholung$
                        MuellabholungMorgen = $Keine Abholung$

                        // Abholtermine Restmülltonne
                        SchwarzeTonne = $09.05.;16.05.;23.05.;31.05.;06.06.;13.06.;20.06.; 27.06.;04.07.;11.07.;18.07.;25.07.;01.08.;08.08.;1 5.08.;22.08.;29.08.;05.09.;12.09.;19.09.;26.09.;04 .10.;10.10.;17.10.;24.10.;31.10.;07.11.;14.11.;21. 11.;28.11.;05.12.;12.12.;19.12.;27.12.$

                        // Abholtermine Leichtverpackungstonne
                        GelbeTonne = $08.05.;22.05.;05.06.;19.06.;03.07.;17.07.;31.07.; 14.08.;28.08.;11.09.;25.09.;09.10.; 23.10.;06.11.;20.11.;04.12.;18.12.$

                        // Abholtermine Biotonne
                        BrauneTonne = $15.05.;30.05.;12.06.;26.06.;10.07.;24.07.;07.08.; 21.08.;04.10.;18.09.;02.10.;16.10.;30.10.;13.11.;2 7.11.;11.12.;24.12.$

                        // Abholtermine Altpapiertonne
                        BlaueTonne = $11.05.;25.05.;09.06.;22.06.;06.07.;20.07.;03.08.; 17.08.;31.08.;14.09.;28.09.;12.10.;26.10.;09.11.;2 3.11.;07.12.;21.12.$

                        // Müllabholung Heute
                        SucheSchwarzeTonneHeute = find(SchwarzeTonne,TagMonatHeute,0u16)
                        if Init == EIN \\
                        and SucheSchwarzeTonneHeute < 1400u16 then \\
                        MuellabholungHeute = $Schwarze Tonne$ \\
                        else \\
                        MuellabholungHeute = $Keine Abholung$ \\
                        endif
                        SucheGelbeTonneHeute = find(GelbeTonne,TagMonatHeute,0u16)
                        if Init == EIN \\
                        and SucheGelbeTonneHeute < 1400u16 then \\
                        MuellabholungHeute = $Gelbe Tonne$ \\
                        else \\
                        MuellabholungHeute = $Keine Abholung$ \\
                        endif
                        SucheBrauneTonneHeute = find(BrauneTonne,TagMonatHeute,0u16)
                        if Init == EIN \\
                        and SucheBrauneTonneHeute < 1400u16 then \\
                        MuellabholungHeute = $Braune Tonne$ \\
                        else \\
                        MuellabholungHeute = $Keine Abholung$ \\
                        endif
                        SucheBlaueTonneHeute = find(BlaueTonne,TagMonatHeute,0u16)
                        if Init == EIN \\
                        and SucheBlaueTonneHeute < 1400u16 then \\
                        MuellabholungHeute = $Blaue Tonne$ \\
                        else \\
                        MuellabholungHeute = $Keine Abholung$ \\
                        endif

                        // Müllabholung Morgen
                        SucheSchwarzeTonneMorgen = find(SchwarzeTonne,TagMonatMorgen,0u16)
                        if Init == EIN \\
                        and SucheSchwarzeTonneMorgen < 1400u16 then \\
                        MuellabholungMorgen = $Schwarze Tonne$ \\
                        else \\
                        MuellabholungMorgen = $Keine Abholung$ \\
                        endif
                        SucheGelbeTonneMorgen = find(GelbeTonne,TagMonatMorgen,0u16)
                        if Init == EIN \\
                        and SucheGelbeTonneMorgen < 1400u16 then \\
                        MuellabholungMorgen = $Gelbe Tonne$ \\
                        else \\
                        MuellabholungMorgen = $Keine Abholung$ \\
                        endif
                        SucheBrauneTonneMorgen = find(BrauneTonne,TagMonatMorgen,0u16)
                        if Init == EIN \\
                        and SucheBrauneTonneMorgen < 1400u16 then \\
                        MuellabholungMorgen = $Braune Tonne$ \\
                        else \\
                        MuellabholungMorgen = $Keine Abholung$ \\
                        endif
                        SucheBlaueTonneMorgen = find(BlaueTonne,TagMonatMorgen,0u16)
                        if Init == EIN \\
                        and SucheBlaueTonneMorgen < 1400u16 then \\
                        MuellabholungMorgen = $Blaue Tonne$ \\
                        else \\
                        MuellabholungMorgen = $Keine Abholung$ \\
                        endif
                        [/highlight]

                        Kommentar


                          #27
                          Hallo zusammen,

                          das kann derzeit nicht immer korrekt berechnet werden, da der nächste Tag nicht korrekt berechnet wird. Dazu benötigt man ein wenig Zusatzlogik um die Übergänge der einzelnen Monate korrekt hinzubekommen.

                          Also entweder alle Monatsenden gezielt einzeln betrachten und ggf. abfangen oder aber ein bereits existierendes Makro nutzen. Passend dazu das Makro vom Michael mal angepaßt mit meiner UnixTime Bibliothek.

                          [highlight=epc]

                          // Variablen Definieren

                          MuellabholungHeute = $$
                          MuellabholungMorgen = $$
                          mBetreff = $$;
                          mText = $$;

                          // Abholtermine Restmülltonne
                          SchwarzeTonne = $29.03.$ // 2013
                          // Abholtermine Leichtverpackungstonne
                          GelbeTonne = $29.03.#30.03.$
                          // Abholtermine Biotonne
                          BrauneTonne = $01.04.#30.03.$ // 2013
                          // Abholtermine Altpapiertonne
                          BlaueTonne = $29.03.#02.04.$ // 2013

                          utNow = 0s32

                          UnixTime( utNow )
                          utTomorrow = utNow + 86400s32

                          UnixTimeToVar2( utTomorrow, utTomorrow )

                          TagMonatHeute = stringformat(utDay,0,3,2,2)+$.$+stringformat(utMon th,0,3,2,2)+$.$
                          TagMonatMorgen = stringformat(utTomorrowDay,0,3,2,2)+$.$+stringform at(utTomorrowMonth,0,3,2,2)+$.$

                          SucheSchwarzeTonneHeute = 0u16;
                          SucheGelbeTonneHeute = 0u16;
                          SucheBrauneTonneHeute = 0u16;
                          SucheBlaueTonneHeute =0u16;

                          SucheSchwarzeTonneMorgen = 0u16;
                          SucheGelbeTonneMorgen = 0u16;
                          SucheBrauneTonneMorgen = 0u16;
                          SucheBlaueTonneMorgen = 0u16;


                          if chtime(00,01,00) then {


                          /* Müllabholung Heute */;
                          SucheSchwarzeTonneHeute = find(SchwarzeTonne,TagMonatHeute,0u16);
                          SucheGelbeTonneHeute = find(GelbeTonne,TagMonatHeute,0u16);
                          SucheBrauneTonneHeute = find(BrauneTonne,TagMonatHeute,0u16);
                          SucheBlaueTonneHeute = find(BlaueTonne,TagMonatHeute,0u16);

                          MuellabholungHeute = $Heute keine Abholung$;
                          if !((SucheSchwarzeTonneHeute == EOS) and (SucheGelbeTonneHeute == EOS) and (SucheBrauneTonneHeute == EOS) and (SucheBlaueTonneHeute == EOS)) then {
                          MuellabholungHeute = $Heute:$;
                          if SucheSchwarzeTonneHeute < EOS then MuellabholungHeute = MuellabholungHeute + $ Schwarze Tonne$ endif;
                          if SucheGelbeTonneHeute < EOS then MuellabholungHeute = MuellabholungHeute + $ Gelber Sack$ endif;
                          if SucheBrauneTonneHeute < EOS then MuellabholungHeute = MuellabholungHeute + $ Braune Tonne$ endif;
                          if SucheBlaueTonneHeute < EOS then MuellabholungHeute = MuellabholungHeute + $ Papier Tonne$ endif;
                          } endif;

                          /* Müllabholung Morgen */;
                          SucheSchwarzeTonneMorgen = find(SchwarzeTonne,TagMonatMorgen,0u16);
                          SucheGelbeTonneMorgen = find(GelbeTonne,TagMonatMorgen,0u16);
                          SucheBrauneTonneMorgen = find(BrauneTonne,TagMonatMorgen,0u16);
                          SucheBlaueTonneMorgen = find(BlaueTonne,TagMonatMorgen,0u16);

                          MuellabholungMorgen = $Morgen keine Abholung$;

                          if !((SucheSchwarzeTonneMorgen == EOS) and (SucheGelbeTonneMorgen == EOS) and (SucheBrauneTonneMorgen == EOS) and (SucheBlaueTonneMorgen == EOS)) then {
                          MuellabholungMorgen = $Morgen:$;
                          if SucheSchwarzeTonneMorgen < EOS then MuellabholungMorgen = MuellabholungMorgen + $ Schwarze Tonne$ endif;
                          if SucheGelbeTonneMorgen < EOS then MuellabholungMorgen = MuellabholungMorgen + $ Gelber Sack$ endif;
                          if SucheBrauneTonneMorgen < EOS then MuellabholungMorgen = MuellabholungMorgen + $ Braune Tonne$ endif;
                          if SucheBlaueTonneMorgen < EOS then MuellabholungMorgen = MuellabholungMorgen + $ Papier Tonne$ endif;
                          } endif;

                          mBetreff = convert(MuellabholungHeute,$$) + convert(MuellabholungMorgen,$$) ;
                          mText = $Ein Hinweis zur Müllbeseitigung: $ + mBetreff;
                          /* pdisplay(MuellID,$H: $+convert(MuellabholungHeute,$$)+$<br>$ +convert(MuellabholungMorgen,$$),INFO,DISPLAY,GREE N,WeatherID);
                          LAEu16 = size(mBetreff);
                          sendmail($info@irgentwo.de$,mBetreff,mText); */;
                          } endif

                          [/highlight]

                          Gruß,
                          Bernd
                          Angehängte Dateien

                          Kommentar


                            #28
                            Hi Bernd,

                            was ist denn der Hintergrund für das Berechnungsproblem?

                            Ich wußte bis dato nicht, dass dabei irgendetwas nicht paßt.

                            Mir ist aber in den letzten 10 Monaten 1-2 aufgefallen, dass ein Abholtermin nicht korrekt angezeigt wurde, habe dem aber bisher keine Aufmerksamkeit beigemessen.

                            Viele Grüße

                            Michael

                            Kommentar


                              #29
                              Moin Michael,

                              >was ist denn der Hintergrund für das Berechnungsproblem?
                              setdate() gibt ein Datum zurück in der Form "29.03.2013"

                              Morgen wäre eigentlich der 30.03.

                              Nehmen wir mal nur den Tag (29) und rechnen einen drauf, dann klappt's.
                              Haben wir aber z.B. den 31.03.2013 dann wird bei reinem inkrementieren der Monat nicht angepaßt. Wir bekommen also für morgen dann sowas wie 32.03.2013. Den werden wir ja niemals in der Liste haben.

                              Also müßten wir die Sonderfälle prüfen am 31.01, 28. bzw. 29.02., 31.03. usw.

                              Solange die fraglichen Termine da nicht von betroffen sind, fällt das weiter nicht auf.

                              Bei der Unixzeit ist es so, das ein Zähler im Sekundentakt einen s32 weiterzählt. Ein gegebenes Datum seit 1970 kann man also sekundengenau in einen integer wandeln. Über Zusatzlogik auch wieder zurück.

                              Was ich mache ist also das aktuelle Datum umzuwandeln in eine Unixzeit, dann einen Tag, also 86400 Sekunden, dazuaddieren und wieder zurückzuwandeln. Daraus dann per stringformat den Suchstring generieren und fertig ist die Laube.

                              Gruß,
                              Bernd

                              Kommentar


                                #30
                                Hi Bernd,

                                vielen Dank für die Erläuterung. Da hätte ich bei ein wenig Nachdenken eigentlich auch selbst drauf kommen sollen.

                                Ich binde dann jetzt Dein Makro ein. Das wollte ich ohnehin noch in Sachen Sommerzeit "aufbohren".

                                Viele Grüße

                                Michael

                                Kommentar

                                Lädt...
                                X