Ankündigung

Einklappen
Keine Ankündigung bisher.

eibpc2 eibstudio logiken objekt ga manuell festlegen dpt datum/zeit

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

    eibpc2 eibstudio logiken objekt ga manuell festlegen dpt datum/zeit

    mangels ETS6 support kann ich im eibstudio Projekte nicht importieren und muss daher u.a. in Logiken GA manuell festlegen.

    Ich möchte, dass der eibpc2, der seine interne systemzeit von einem NTP-server (Fritzbox) bezieht periodisch die systemzeit des enertex dual power supply setzt.

    ich füge also ein GA-Objekt zur Logik hinzu, stelle die GA manuell ein, kann aber beim Datenpunkttyp als einziges 3-Byte-Format u24 auswählen.
    Der Knoten "aktuelle Zeit" aber gibt t24 aus. Ich muss also wohl eine typkonvertierung von t24 nach u24 vornehmen um damit die GA beschreiben zu können, sehe ich das richtig? Oder übersehe ich einen t24-DPT?

    Selbiges ist auch beim Datum der Fall?


    Danke
    Tab

    #2
    und dazu eine Folgefrage:

    Eine Uhrzeitkonstante anzulegen geht ja auch nicht, weil es eben nur den DTP u24 gibt, nicht aber t24.
    Also wollte ich eine u24 Konstante anlegen, mit Wert h030000 (=196608Dez = 03:00:00 Uhr) und diese per Typkonvertierung nach t24 bringen. Da meckert aber der Parser:

    Code:
    Syntaxfehler in Zeile:[72]
    >INT_N_0ac1f3c0_5825_11ec_93dd_816e95330dbb_out_0=convert(INT_N_0ac1f3c0_5825_11ec_93dd_816e95330dbb_in_0, 0*)<
    OHNE dass ich den Ausgang des Typkonvertieres überhaupt verbunden habe...

    Kommentar


      #3
      und noch eine Frage:

      die Projekteinstellungen sind so, dass das Programm erst nach NTP-Sync startet. Die Projektzeit ist synchron, kann vom NTP geholt werden, alles passt.
      Die Logik ist derzeit so, dass das bei Systemstart die aktuelle Uhrzeit geschrieben wird. Die wird aber immer auf "00:00:00" geschrieben.
      Ich verwende das Objekt "Aktuell" in der Logik und wähle "Uhrzeit".

      Mach ich was falsch?

      Kommentar


        #4
        Hi,

        Zitat von TabSel Beitrag anzeigen
        typkonvertierung von t24 nach u24
        Nein, das wird auch die Ursache für die "00:00:00" sein.

        Dass der Datentyp bei dem Objekt nicht gewählt werden kann, liegt daran, dass wir d24 und t24 aktuell nicht "numerisch" in der EibPC-Logik verarbeiten können, sondern die Typen nur zum Senden der aktuellen Systemzeit als Telegramm oder zum Setzen der aktuellen Systemzeit aus einem Telegramm heraus verwendet werden können.

        Das soll nicht so bleiben, sondern wir möchten hier die Zeittypen auch selbst konfigurierbar machen, so dass man also zB auch eine "beliebige" Zeit als t24 bzw Datum als d24 auf den bus senden kann.

        Das einfachste für den Moment ist, du schreibst ein kurzes Expertenprogramm:
        Code:
        if systemstart() or htime(0,0,0) then write('3/5/3'd24, setdate()) endif
        
        if systemstart() or htime(0,0,0) then write('3/5/4't24, settime()) endif

        Kommentar


          #5
          genau so hab ich’s jetzt gemacht, und wohl einen Bug entdeckt:

          Code:
          if systemstart() or htime(0,0,0) then {
          write(‘0/0/1't24, settime());
          write(‘0/0/2'd24, setdate());
          } endif
          funktioniert.

          Pack ich ein Semikolon hinter das endif, dann wird zwar das Telegramm gesendet, das dual power supply aber scheint das Datum nicht zu setzen, ein anschließendes ValueReadRequest auf die GA liefert das “alte” Datum…


          Kommentar


            #6
            Hi,

            das muss eine andere Ursache haben, es wird ein 100% identisches Programm generiert - ob mit oder ohne ;

            Das PowerSupply aktualisiert die Zeit, die vom Bus kommt, intern auch unmittelbar.

            Kommentar


              #7
              jetzt wird das Datum gar nicht mehr gesetzt, ob mit oder ohne Semikolon?!?

              siehe Anhang, Ich habe die Telegramme im Gruppenmonitor in der ETS mitgeschnitten:
              #1-3: ich hab das aktuelle Datum aus dem DualPowerSupply ausgelesen: 01.12.2021
              Dann hab ich das das Eibstudio-Programm kompiliert und den eibpc neu gestartet:
              #4-5: Uhrzeit und Datum werden geschrieben
              anschließend wieder ein GroupValueRead:
              #6-7: Datum immer noch 1.12.2021

              das DualPowerSupply zeigt im OLED auch 1.12.2021

              was mach ich falsch?


              Angehängte Dateien

              Kommentar


                #8
                also das ist komisch: heute Nacht um 03:00Uhr lief die Logik und hat das Datum in der PowerSupply korrekt gesetzt.
                Ich hab eben das Datum nochmal afu 1.12. gesetzt und den eibpc2 neu gestartet und auch jetzt hat das Setzen des Datums wieder funktioniert.

                Also es scheint mal zu funktionieren, und mal nicht, bisher nicht reproduzierbar. Ich bilde mir das sicher nicht ein


                BTW: wann und wie oft synced der eibpc2 denn seine interne Uhr per NTP?

                Kommentar


                  #9
                  Evtl ein Problem beim PS1280, falls die Werte zu schnell hintereinander kommen. Schauen wir uns mal an.

                  Falls dem so ist, kannst du als Workaround auch mal Datum und Uhrzeit mit kurzer Verzögerung setzen, zB

                  Code:
                  if systemstart() or htime(0,0,0) then { write(‘0/0/1't24, settime()); } endif
                  if after(systemstart(), 1000u64) or htime(0,0,1) then { write(‘0/0/2'd24, setdate()); } endif
                  Zitat von TabSel Beitrag anzeigen
                  BTW: wann und wie oft synced der eibpc2 denn seine interne Uhr per NTP?
                  Beim Start zwangsweise und danach gleitend zwischen 64 und 1024 Sekunden.

                  Kommentar


                    #10
                    mit DatumZeit 8Byte (DTP y64) hab ich hier auch nur Probleme:

                    eine Anweisung:
                    Code:
                    if eventread( '0/0/3'y64 ) then write( '0/0/3'y64, settimedate() ) endif
                    führt beim kompilieren zu "unerwartetem Fehler beim kompilieren des Programms. Prüfen sie Pfad und Berechtigungen im Projektverzeichnis und die Logdatei.

                    und im Log steht dann:
                    Unexpected error TypeError: object null is not iterable (cannot read property Symbol(Symbol.iterator))

                    Kommentar


                      #11
                      und die nächste Frage: gibt es eine Möglichkeit sich an die (erstmalige) Synchronisation via NTP anzuhängen?

                      Grund: ich möchte den eibpc2 so schnell wie möglich (neu)starten können, daher möchte ich explizit NICHT das Programm erst starten nach einem NTP-Sync, was bei erfolglosem Sync auch schonmal 5 Minuten dauern kann...

                      Stattdessen möchte ich, dass beim Systemstart Datum/Uhrzeit erstmal aus dem DualSupply gelesen werden. Erst wenn (asynchron) irgendwann mal die eibpc2-interne Uhr (erstmals) via NTP synchronisiert wird, erst DANN soll Datum/Uhrzeit des KNX-Bus/DualPowerSupply auch gesetzt werden, ebenso jede Nacht um 03:00.

                      Ich könnte nun natürlich auf das erstmalige NTP-Sync verzichten und nur jede Nacht um 03:00 den Bus mit dem eibpc2 syncen. Wenn aber das PowerSupply "keine Uhrzeit (mehr) hat", dann würde der eibpc2 bis zur nächsten Nacht um 03:00 mit "keinem Datum/Uhrzeit" arbeiten, das wär doof.

                      ich brauch also analog zur Funktion "systemstart()" eine Funktion "NTPSync()", die "true" liefert wenn der NTP sync erfolgreich war AND ( Datum <> eibpc-datum OR Uhrzeit <> eibpc-Uhrzeit ), ansonsten "false", dann könnte man sich auch das periodische syncen je de Nacht um 03:00 sparen.

                      gibts so eine Möglichkeit?

                      Kommentar


                        #12
                        Zitat von TabSel Beitrag anzeigen
                        unerwartetem Fehler beim kompilieren des Programms.
                        Kann ich nachvollziehen. Kommt vom eventread mit dem y64-Typ. Schauen wir uns an.

                        Zitat von TabSel Beitrag anzeigen
                        gibts so eine Möglichkeit
                        Nein.

                        Was ist denn der Hintergrund des ganzen? Ein längerer Stromausfall? Der EibPC hat bei Spannungsausfall eine Überbrückungszeit von einigen Stunden, bis er die Uhrzeit verliert, das PS etwa 24 Stunden. Somit hätte ich keine Bedenken, das Warte auf den NTP-Sync auszuschalten, falls du möglichst schnell wieder einsatzbereit sein willst.

                        Falls es nur um kurze Ausfälle geht, spielt es keine Rolle.

                        Kommentar


                          #13
                          Hintergrund ist
                          a) schnellstmögliches (neu)starten des eibpc2 und
                          b) setzen des „besten“ Datums (desjenigen Geräts dessen Batterie am längsten datum/uhrzeit puffern kann, also „am größten“ ist, seit 0.0.0 00:00) und
                          c) durchsyncen des Datums mit allen Geräten am Bus via NTP

                          Kommentar


                            #14
                            Zitat von foobar0815 Beitrag anzeigen

                            Kann ich nachvollziehen. Kommt vom eventread mit dem y64-Typ. Schauen wir uns an.
                            ist bei d24 und t24 das Gleiche

                            Kommentar

                            Lädt...
                            X