Ankündigung

Einklappen
Keine Ankündigung bisher.

Onlinezeit einer GA

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

    Onlinezeit einer GA

    Hi Leute...

    vielleicht stell ich mich auch nur doof an.. aber irgendwie funktioniert das hier nicht so wie gewünscht..

    Ich hab einen Pelletskessel, dessen Status ich über die UVR1611 auf den Bus bringe... jetzt würd ich gern die Zeiten (gesamt) die er "An" war speichern. Da das ganze bei einem Neustart nicht gelöscht werden soll, wollte ich das per writeflash lösen...

    Eigentlich dacht ich .. kann nicht so schwer sein.. aber irgendwie passt das Ergebnis nicht zu dem was ich erwartet hab.

    könnt ihr da mal kurz drüberschauen und mir einen Tip geben.. ??

    Gruß Martin



    [highlight=epc] if systemstart() then readflash (Kesselalt, 1u16) endif

    if event("Anforderung Kessel-1/3/0") and "Anforderung Kessel-1/3/0" then Kesselstart=(hour()*60)+minute() endif
    if change("Anforderung Kessel-1/3/0") then Kesselstopp=(hour()*60)+minute() endif

    if change("Anforderung Kessel-1/3/0") then Kesseldiv = Kesselstopp-Kesselstart endif

    if change("Anforderung Kessel-1/3/0") then Kesselonline= Kesseldiv+Kesselalt endif
    if htime(23,59,00) then writeflash (Kesselonline, 1u16) endif



    if cycle(00,10) then display(24,Kesselonline, INFO, INACTIVE, GREEN) endif [/highlight]
    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

    #2
    Martin,

    vielleicht verrätst Du uns einfach mal, was Du erwartet hast? Ich komme da nicht so ganz hinter.


    [highlight=epc]
    if htime(23,59,00) or change(Kesselonline) then writeflash (Kesselonline, 1u16) endif
    [/highlight]

    Sonst wird das nur nachts kurz vor Mitternacht gesichert und nicht, wenn es "neue Erkenntnisse" gibt.

    Gruß,
    Bernd

    Kommentar


      #3
      Zitat von bmx Beitrag anzeigen
      Martin,

      vielleicht verrätst Du uns einfach mal, was Du erwartet hast? Ich komme da nicht so ganz hinter.
      Ok.. also ziel des ganzen ist hoffentlich klar.. ich will die Zeit die der "Status AN" war wissen...

      also wenn der Kessel von 9.oo Uhr bis 9.30 Uhr an war, soll in der Variablen Kesselonline 30 stehen...
      wenn dann am selben Tag der Kessel nochmal 45 min. an war.. sollen die zu den 30 dazu addiert werden...
      Abends (da ist der Kessel nie an (Sperre)) soll dann der Wert des Tages also die 75 in den Speicher
      geschrieben werden und am nächsten Tag wieder ausgelesen werden..

      Das mit dem "if change" hab ich mir auch gedacht.. nur wollt ich nicht unnötig auf den Flash schreiben,
      weil ich ja mal gehört hab, das die keine unbegrenzten Schreibzugriffe zulassen.. und wenn mir der 5 mal
      am Tag da drauf schreibt ist das vielleicht zu viel. .?!?!?

      Mein Code.. den ich jetzt über Nacht ausprobiert hab, hat gestern Abend noch "2" als "Kesselonline"
      geliefert obwohl der Kessel sicher 45-60 min. an war... und heut früh stand wieder "0" drin...

      Ich hoff jetzt erklärt sichs etwas besser..

      Gruß Martin
      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

      Kommentar


        #4
        Zitat von Brick Beitrag anzeigen
        Ok.. also ziel des ganzen ist hoffentlich klar.. ich will die Zeit die der "Status AN" war wissen...

        Mein Code.. den ich jetzt über Nacht ausprobiert hab, hat gestern Abend noch "2" als "Kesselonline"
        geliefert obwohl der Kessel sicher 45-60 min. an war... und heut früh stand wieder "0" drin...
        Du wirst sicher einen Überlauf bekommen, da Kesselstart vom Typ u08 ist (also max. 255).
        Du musst also alle Variablen als u16 nutzen und dann hour() und minute() mit converts be-ackern:
        [highlight=epc]
        Kesselstart=convert(hour(),0u16)*60u16+convert(min ute(),0u16)
        [/highlight]
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Zitat von enertegus Beitrag anzeigen
          Du wirst sicher einen Überlauf bekommen, da Kesselstart vom Typ u08 ist (also max. 255).
          Du musst also alle Variablen als u16 nutzen und dann hour() und minute() mit converts beackerm:
          Ok,

          das hatte ich in einer frühern Version auch schon mal... habs aber
          (fragt mich nicht wieso) wieder geändert...

          Werd das mal wieder dazuschreiben...

          Danke für den Tipp !!

          Gruß Martin
          Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

          Kommentar


            #6
            ich würde auch folgendes optimieren:

            TimeNow = convert(hour(), 0s32)*60s32)+convert(minute(),0s32)

            Statt u16 würde ich lieber s32 nehmen, dann kann man auch negative Zeitwerte berechnen.

            Gruß,
            Bernd

            Kommentar


              #7
              mit
              [highlight=epc]if event("Anforderung Kessel-1/3/0") and "Anforderung Kessel-1/3/0" then Kesselstart=(hour()*60)+minute() endif
              if change("Anforderung Kessel-1/3/0") then Kesselstopp=(hour()*60)+minute()
              [/highlight]
              ist doch gemeint, wenn EIN dann Start-Zeit merken, wenn AUS, dann Stopp-Zeit merken.

              Korrigiert mich, wenn ich falsch liege, aber trifft die zweite Zeile nicht immer zu, egal ob von EIN nach AUS oder von AUS nach EIN gewechselt wird?
              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

              Kommentar


                #8
                Zitat von Uwe! Beitrag anzeigen
                mit
                [highlight=epc]if event("Anforderung Kessel-1/3/0") and "Anforderung Kessel-1/3/0" then Kesselstart=(hour()*60)+minute() endif
                if change("Anforderung Kessel-1/3/0") then Kesselstopp=(hour()*60)+minute()
                [/highlight]
                ist doch gemeint, wenn EIN dann Start-Zeit merken, wenn AUS, dann Stopp-Zeit merken.

                Korrigiert mich, wenn ich falsch liege, aber trifft die zweite Zeile nicht immer zu, egal ob von EIN nach AUS oder von AUS nach EIN gewechselt wird?
                Ähmm.. ja.. glaub schon.. stimmt...
                hatte vorher:

                [highlight=epc]if event("Anforderung Kessel-1/3/0") and "Anforderung Kessel-1/3/0" then Kesselstart=(hour()*60)+minute() endif
                if event("Anforderung Kessel-1/3/0") and !"Anforderung Kessel-1/3/0" then Kesselstopp=(hour()*60)+minute()
                [/highlight]

                das müsste eigentlich funktionieren... !! oder ??

                EDIT:
                habs ma nochmal überlegt.. es stimmt zwar, das die zweite Bed. immer wahr wird.. aber für die Berechnung ist es eigentlich unerheblich...
                wenn sie von AUS auf EIN geht ist Kesselstopp = Kesselstart.. und wenn es dann von EIN auf AUS geht bleibt Kesselstart wärend sich
                Kesselstopp auf die richtige Zeit ändert.. und somit kann das wieder voneinander abgezogen werden... (also Kesseldiv= Kesselstopp-Kesselstart)
                Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                Kommentar


                  #9
                  Zitat von Brick Beitrag anzeigen
                  das müsste eigentlich funktionieren... !! oder ??
                  ja, das wäre das, was ich erwartet hatte.


                  Zitat von Brick Beitrag anzeigen
                  EDIT:
                  auch richtig, aber das macht es zumindets etwas verwirrend.
                  ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                  Kommentar


                    #10
                    So... folgender Code:

                    [highlight=epc]
                    Kesselstart=0s32
                    Kesselstopp=0s32
                    Kesselalt=0s32
                    Kesselonline=0s32


                    if systemstart() then readflash (Kesselalt, 1u16) endif
                    if htime(00,01,00) then readflash (Kesselalt, 1u16) endif

                    if event("Anforderung Kessel-1/3/0") and "Anforderung Kessel-1/3/0" then Kesselstart=TimeNow endif
                    if event("Anforderung Kessel-1/3/0") and !"Anforderung Kessel-1/3/0" then Kesselstopp==TimeNow endif

                    if change("Anforderung Kessel-1/3/0") then Kesselonline= (Kesselstopp-Kesselstart)+Kesselalt endif

                    if htime(23,59,00) then writeflash (Kesselonline, 1u16) endif

                    if cycle(00,30) then display(24,Kesselonline, INFO, INACTIVE, GREEN) endif
                    [/highlight]

                    bewirkt jetzt, das beim "Kesselstart" 1150 drin stand (19:10 Uhr) beim "Kesselstopp jetzt -1260 (21.oo Uhr)...

                    also als erstes würd ich sagen muss ich doch aus der einzigen "if change" anweisung auch ein if !"Anforderung Kessel" machen...
                    damit er das nur beim Ausschalten der Anforderung macht...

                    aber wieso er beim "change" einmal 1150 bzw. dann -1260 drin stehen hat, versteh ich noch nicht ganz...
                    Anforderung geht auf EIN --> Kesselstart = TimeNow (hab ich weiter oben im Code deklariert)
                    Dann müsste Kesselonline = (0-1150)+0 sein => die anzeige müsste eigentlich -1150 sein... (gut.. vielleicht hab ich mich verschaut)

                    Danach geht die Anforderung auf AUS --> Kesselstopp=TimeNow (1260)
                    Dann müsste Kesselonline =(1260-1150)+50 sein (das wären 110)

                    oder hab ich da was falsch verstanden ???

                    (Hintergrund der ganzen Geschichte ist übrigens. Ich will damit wissen wie lang mein Kessel gelaufen ist, damit ich rechtzeitig
                    den Pelletsaschebehälter leeren kann !! (alle 125 Std))

                    Gruß Martin
                    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                    Kommentar


                      #11
                      Ich würde das so machen:
                      [highlight=epc] if systemstart() then readflash (Kesselalt, 1u16) endif
                      if "Anforderung Kessel-1/3/0" == EIN then Kesselstart=convert(hour(),0u16)*60u16+convert(min ute(),0u16) endif
                      if "Anforderung Kessel-1/3/0"==AUS then {
                      Kesselstopp=convert(hour(),0u16)*60u16+convert(min ute(),0u16);
                      Kesseldiv = Kesselstopp-Kesselstart;
                      Kesselonline=Kesselonline+Kesseldiv
                      } endif
                      if htime(23,59,00) then writeflash (Kesselonline, 1u16) endif
                      if cycle(00,10) then display(24,Kesselonline, INFO, INACTIVE, GREEN) endif [/highlight]
                      Das mit change versteh ich nicht - da wurde doch bei jeder Änderung getriggert.
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Zitat von enertegus Beitrag anzeigen
                        ]
                        Das mit change versteh ich nicht - da wurde doch bei jeder Änderung getriggert.
                        das meinte ich ja auch schon:
                        "also als erstes würd ich sagen muss ich doch aus der einzigen "if change" anweisung auch ein if !"Anforderung Kessel" machen...
                        damit er das nur beim Ausschalten der Anforderung macht..."

                        hab jetzt mal die Version von dir eingespielt... mal schaun wies funktioniert..

                        Danke jedenfalls..

                        Gruß Martin
                        Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                        Kommentar


                          #13
                          Ist das so korrekt?

                          Hallo zusammen,

                          ist der Code wirklich stimmig ?
                          Zitat von enertegus Beitrag anzeigen
                          Ich würde das so machen:
                          [highlight=epc] if systemstart() then readflash (Kesselalt, 1u16) endif
                          <snipped>
                          if htime(23,59,00) then writeflash (Kesselonline, 1u16) endif
                          [/highlight]
                          Wir lesen "Kesselalt" und schreiben "Kesselonline"?
                          Hab jetzt nicht ins Handbuch geschaut - für mich machts aber ad hoc keinen Sinn...

                          Grüße
                          Matthias

                          Kommentar


                            #14
                            je nach dem....
                            Erst wird vom Speicherplatz 1 der "Kesselalt" als Basis gelesen und am ende eines jeden Tages wird der aktuelle "Kesselonline" auf den Platz 1 zurückgeschrieben. (um ihn von dort beim nächste Systemstart als "Kesselalt" wieder zu lesen)


                            das für sich wäre erst mal ok. aber dann müsste hier

                            Kesselonline=Kesselonline+Kesseldiv

                            folgendes stehen:
                            Kesselonline=Kesselalt+Kesselonline+Kesseldiv

                            Dann kann man sich's aber natürlich auch ganz sparen und den alten Wert gleich als "Kesselonline" vom Flash lesen....
                            Das war sicher Dein Gedanke dabei.
                            ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                            Kommentar


                              #15
                              Zitat von Uwe! Beitrag anzeigen
                              je nach dem....
                              das für sich wäre erst mal ok. aber dann müsste hier

                              Kesselonline=Kesselonline+Kesseldiv

                              folgendes stehen:
                              Kesselonline=Kesselalt+Kesselonline+Kesseldiv

                              Dann kann man sich's aber natürlich auch ganz sparen und den alten Wert gleich als "Kesselonline" vom Flash lesen....
                              Das war sicher Dein Gedanke dabei.
                              Hallo Uwe,

                              genau das war mein Gedanke dabei (also gleich das Lesen von Kesselonline).
                              Irritiert hat mich dann noch ebenfalls dass Fehlen von "Kesselalt" im weiteren Code...

                              Danke Dir!

                              Schöne Grüße
                              Matthias

                              Kommentar

                              Lädt...
                              X