Ankündigung

Einklappen
Keine Ankündigung bisher.

Remanente Variablen im EibPC

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

    Remanente Variablen im EibPC

    Moin zusammen,

    ich hatte ja hier schon geschrieben, das ich wegen Remanentspeicher was in der Pipeline habe.
    Die neue Beta scheint einige Probleme gefixt zu haben so dass es eine Lösung geben wird der Art:

    [highlight=epc]
    //RemanentVariable( VariableName, defaultValue )
    RemanentVariable( Gaszaehler, 0s32 )
    RemanentVariable( Geburtstage, $23.01.:Mutti;27.03.:Vati .... etc$ )
    RemanentVariable( DimmerEinschaltwert, 12% )
    RemanentVariable( Letzter Temperaturwert, 28.5f16 )
    [/highlight]

    Beim Start werden die Variable aus dem Flash gelesen und bei Änderung nach einer vorgebbaren Wartezeit wieder reingeschrieben.

    Das Verfahren ist nicht so effizient wie die Aufteilung eines Strings in einzelne Speicherplätze z.B. 1400 * u08 oder 700 * u16 aber es ist komfortabler da man sich nicht so viele ID für den Slot und die Position innerhalb des Flash Slots merken muß.

    Insofern wird das Makro (zumindest bei mir) die Makros zum Flash vom Wettbewerb ablösen.

    Wer das unbedingt sofort haben will: PN ansonsten kommen die Makros am Sonntag wenn keiner der Tester etwas auszusetzen hat.

    Gruß,
    Bernd


    #2
    puhhh, bis Sonntag. Ich hab gerade mal das Zelt der Kirchweih abgebaut... Das wird viel Arbeit bis dahin...
    Gruß
    Volker

    Wer will schon Homematic?

    Kommentar


      #3
      ich freu' mich schon auf Sonntag

      Das wäre wider eine "Baustelle" weniger beim eibPC....

      Nur eine kleine Frage: das schreiben/lesen vom Flash beeinträchtigt nicht (mehr) die Lebenszeit, oder?
      ich hab' da so irgendetwas im Hinterkopf....(da gab' es ein Update wegen dieser Thematik)
      EPIX
      ...und möge der Saft mit euch sein...
      Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

      Kommentar


        #4
        Zitat von EPIX Beitrag anzeigen
        ich hab' da so irgendetwas im Hinterkopf....(da gab' es ein Update wegen dieser Thematik)
        Du könntest im ms Takt den Flash beschreiben, was dann sicher nicht gut ist. Aber wenn so wie im Makro vom Bernd ist, dann ist es ok
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Ach.. ähmm.. bei Wikipedia steht da folgendes:
          Nachteile beider Architekturen

          Flash-Speicher haben eine begrenzte Lebensdauer, die in einer maximalen Anzahl an Löschzyklen angegeben wird (10.000 bis 100.000 Zyklen für NOR-Flash und bis zu zwei Millionen für NAND-Flash). Dies entspricht gleichzeitig der maximalen Anzahl Schreibzyklen, da der Speicher jeweils blockweise gelöscht werden muss, bevor er wieder beschrieben werden kann

          bei 10.000 Zyklen (worst case) und einer stündlichen Speicherung wär nach knapp über einem Jahr Schluss...
          genau aus dem Grund scheue ich mich regelmäßig auf den Flash zu speichern...

          oder habt ihr NAND Speicher verbaut ??

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

          Kommentar


            #6
            Zitat von enertegus Beitrag anzeigen
            Du könntest im ms Takt den Flash beschreiben, was dann sicher nicht gut ist. Aber wenn so wie im Makro vom Bernd ist, dann ist es ok
            ach ja.. dazu fällt mir gerade ein.. gibt es eigentlich einen Möglichkeit VOR dem EibPC neustart (kompilieren) Werte auf den Flash zu schreiben...
            quasi:
            if systemrestart() then writeflash.. oder so..

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

            Kommentar


              #7
              Hi Brick,

              solch eine Funktion wurde seitens einiger User schon einmal befürwortet aber nicht seitens enertex eingebaut.

              Ich kann nur für mein Makro schreiben: Da ist es so, das es eine Gruppenadresse geben wird die dafür sorgt, das alle Werte ins Flash geschrieben werden.
              Ansonsten gibt es aber auch einen "Timeout" der nach x Sekunden nach der letzten Variablenänderung alles ins Flash schreibt.

              Ich warte nur noch auf eine Rückmeldung im betaforum zu einer speziellen Flashsituation. Da ist enertegus aber sicher dran und wird das klären.

              Gruß,
              Bernd

              Kommentar


                #8
                Zitat von Brick Beitrag anzeigen
                bei 10.000 Zyklen (worst case)
                Du kannst von mindestens 100.000 Zyklen ausgehen.

                Zitat von Brick Beitrag anzeigen
                und einer stündlichen Speicherung wär nach knapp über einem Jahr Schluss...
                Das Flash-Dateisystem betreibt Wear-Levelling, d.h. er verteilt Schreibzugriffe möglichst gleichmäßig über alle Speicherzellen. Das wird auch gemacht, wenn immer die gleiche Datei geschrieben wird. Die möglichen Schreibzugriffe auf eine einzelne kleine Datei multiplizieren sich so enorm. Außerdem stirbt auch nicht gleich der gesamte Flash, sondern es werden erst mal die überstrapazierten Blöcke als defekt markiert und für weitere Zugriffe nicht mehr genutzt.

                Zitat von Brick Beitrag anzeigen
                genau aus dem Grund scheue ich mich regelmäßig auf den Flash zu speichern...
                Man sollte das Ganze wirklich nicht überbewerten. Vertraut ihr euren SSDs, Smartphones, etc. auch so wenig? Bei einem stündlichen Zugriff sagt mir die Theorie: alles bestens.
                Firma: Enertex Bayern GmbH, Ebermannstädter Straße 8, 91301 Forchheim
                Amazon: KNXnet/IP Router
                , KNXnet/IP Interface

                Kommentar


                  #9
                  Hallo BMX,

                  wie geht es denn deinen Makro - wenn es "publikumsreif" ist, würden ich (wir) es natürlich gerne testen/einsetzen...


                  Schönes WE
                  EPIX
                  ...und möge der Saft mit euch sein...
                  Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                  Kommentar


                    #10
                    Moin zusammen,

                    aktuelle Testversion zum Download im Dateibereich.

                    Gruß,
                    Bernd

                    Kommentar


                      #11
                      bummmmm....

                      Da kommt man nichtsahnend vom Motorradfahren heim und schon ist für Beschäftigung in der nächsten Zeit gesorgt....

                      DANKE! für die lib's (auch für die anderen "Zuckerl") - ich blick' noch gar nicht durch welche Funktionen was machen - ich habe sie nur kurz überflogen - aber da sind ware Schätze dabei (Webfunktionen)...
                      EPIX
                      ...und möge der Saft mit euch sein...
                      Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                      Kommentar


                        #12
                        BMXRemanen8.lib

                        Ok, dann will ich mal nachlegen:

                        Ich habe das Makro für die Remanentvariablen und die Steuerung des EibPC für UDP sozusagen verheiratet.

                        Es ist jetzt via UDP (also netcat) möglich die Werte der definierten Remanentvariablen abzufragen. Dazu wird nach dem Aufruf des init Makros für die Remanentvariablen noch hinzugefügt:

                        [highlight=epc]
                        // UDPCommandInterface( RemotePort, RemoteIP, Password, TimeOut, OutPort, OutIP )
                        // listen with "nc -l -u -p /5055/"
                        // send with "nc EibPC-IP 4806 -p 4806 -u"
                        UDPCommandInterface( 4806u16, EibPC_NCIP, $1234$, 300000u64, EibPC_NCPort, 192.168.20.70 )
                        [/highlight]

                        Dazu Auszug aus dem Help command:

                        Code:
                        list of commands for the UDP command line interface
                        h --> help as displayed
                        p password --> send the password, if timeout occurs the password will be reset
                        w HG MG UG Type Value --> write a value to the bus
                           HG MG UG: parts of the GA like HG/MG/UG
                           Type as one of b, u08, u16, u32, s08, s16, s32, f16, f32, s
                        R HG MG UG --> read a value from the bus
                        r HG MG UG --> read a value from the EibpC
                        d --> dump all remanent variables
                        s number Value --> set a value to a remanent variable, the number is given with dump and may change after new compilation
                        s VariableName Value --> set a value to a remanent variable, the Variable Name is given with dump (will not change)
                        So läßt sich eine Datei erzeugen derart
                        Code:
                        s MyVarAlreadyDefined 0815
                        s Zaehlerstand_Strom_gestern 1234
                        s Zaehlerstand_Gas_gestern 5678
                        s KTemp_ElternSchlafzimmer 99
                        s KTemp_KindNord 11
                        s Kind_Nord_Minutes2Shutdown 9990
                        s KTemp_KindSued 24
                        s KTemp_Windfang 25
                        s KTemp_FlurSchlaftrakt 26
                        die dann per netcat via UDP direkt an den EibPC geschickt werden kann. Dieser nimmt dann Zeile für Zeile und aktualisiert die Remanenten Variablen.
                        Sehr praktisch, wenn man seinen EibPC nicht unbedingt neu starten möchte und mal eben die aktuellen Mülldaten hochladen möchte.

                        Das Makro ist wieder bei den Downloads unter CodeSchnipsel zu finden, muß allerdings von Alfred noch freigegeben werden.

                        Viel Spaß damit!

                        Gruß,
                        Bernd

                        Kommentar


                          #13
                          nur zum Verständnis:

                          die Sicherung /Rücksicherung erfolgt in deinem Beispielmakro mittels Button, also manuell...

                          Wenn ich automatisch beim Neustart rücksichern will, dann muss ich DoRFF = EIN beim Systeminit setzen und nach einer Zeit wieder DoRFF = AUS setzen?

                          Aber wie sichert man automatisch wenn sich ein Wert ändert?
                          bei jedem Event(GA) - da kommt einiges zusammen, wenn man mehrere Remanente Variablen hat (haben möchte) oder ruft man das Makro zyklisch auf?

                          bei "InitRemanentVariables" welche IP-Adresse gibt man da an? vom NAS?
                          EPIX
                          ...und möge der Saft mit euch sein...
                          Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                          Kommentar


                            #14
                            Zitat von EPIX Beitrag anzeigen
                            die Sicherung /Rücksicherung erfolgt in deinem Beispielmakro mittels Button, also manuell...
                            Ja, kann man auch. Ist eigentlich hauptsächlich dazu da um eine Sicherung oder Rücksicherung zu erzwingen.

                            Beispielaufruf für Init:
                            [highlight=epc]
                            ////////////////////////////////////////////////////////////////////////////
                            //
                            // Remanentspeicher vorbereiten
                            //
                            DoRFF = AUS
                            DoWTF = AUS

                            //InitRemanentVariables(DebugEnabled, DebugPort, DebugIP, vFirstSlot, vLastSlot, ReadFromFlash, GAorVarReadFromFlash, GAorVarWriteToFlash, DelayTime )
                            InitRemanentVariables( EIN, DebugOut_Port, DebugOut_IP, 333u16, 400u16, EIN, DoRFF, DoWTF, 120000u64 )
                            [/highlight]

                            120000 = 120 Sekunden DelayTime. Nach dieser Zeit ohne das eine weitere Variablenänderung aufgetreten wäre, werden die Variablen gesichert. Du kannst das auch auf 5 min oder 1 Stunde setzen.

                            Wenn ich automatisch beim Neustart rücksichern will, dann muss ich DoRFF = EIN beim Systeminit setzen und nach einer Zeit wieder DoRFF = AUS setzen?
                            Nee, bei einem Neustart werden automatisch alle Variablen aus dem Flash wieder eingelesen da mußt Du Dich nicht weiter drum kümmern.

                            Aber wie sichert man automatisch wenn sich ein Wert ändert?
                            bei jedem Event(GA) - da kommt einiges zusammen, wenn man mehrere Remanente Variablen hat (haben möchte) oder ruft man das Makro zyklisch auf?
                            1. Strategie: Delaytime, siehe oben. Wenn sich eine gewisse Zeit nichts mehr geändert hat, dann sichern auf den Flash.
                            2. In regelmäßigen Zeitabständen DoWTF auf EIN setzen. z.B. mit
                            [highlight=epc]
                            if chtime( 0, 45) then DoWTF = EIN endif
                            if after(change( DoWTF ) and DoWTF = EIN, 10000u64) then DoWTF = AUS endif
                            [/highlight]

                            Das DoRFF braucht man im Allgemeinen nicht, es sei denn man ist am Testen ...

                            Das Makro macht eigentlich alles allein, das ist ja der Witz an der Sache ;-)

                            Gruß,
                            Bernd

                            Kommentar


                              #15
                              aaahhh, OK Super!!

                              bleibt nur noch:
                              bei "InitRemanentVariables" welche IP-Adresse gibt man da an
                              bzw
                              DebugOut_IP
                              EPIX
                              ...und möge der Saft mit euch sein...
                              Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                              Kommentar

                              Lädt...
                              X