Ankündigung

Einklappen
Keine Ankündigung bisher.

gesucht: IP mit u32 in String und umgekehrt

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

    #16
    Also das mit der festen IP fällt bei mir weg und wie oft ein Hänger vorkommt, hmm... Sporadisch aus dem Stegreif würde ich sagen einmal im Monat.... Werde zunächst als Backup zusätzlich das auf dem QNAP installieren, aber eine Meldung via Email vom EIBPC wäre schon eine nette Rückversicherung um gegen Murphy was zu tun. Steht bei mir aber als Prio Ultralow ganz hinten in dem Berg von Aktivitäten an. Auf das Backup mit der QNAP bin ich auch nur per Zufall gestossen, da unser altes NAS in Rauch aufgegangen ist und nun die QNAP IBS die letzten drei Wochen damit dominiert hat....

    Kommentar


      #17
      Zitat von bmx Beitrag anzeigen
      @Jambala:
      UnixTime Macros waren Teil vom EibPC Wettbewerb und sollten bei den Macros schon dabei sein...
      Hallo Bernd,

      ist das Makro UnixTimeToVar von Dir?

      Ich bekomme das bisher nicht eingebunden.

      Hast Du ein Beispiel wie Du das Makro in den EPC Code einbindest?

      Viele Grüße

      Michael

      Kommentar


        #18
        Hallo Michael,

        hier ein wenig zusammengesuchter Code auf die Schnelle...
        Achtung: Daylight Saving Time ist NICHT beruecksichtigt im Code

        [highlight=epc]
        UnixTime()

        UnixTimeToVar( TestZeit, 917868320s32 ); /* 1.2.1999, 12:25:20) */
        y = ToUnixTime( 1970u16, 10u08, 09u08, 21u08, 08u08, 00u08)

        UnixTimeToVar( TestZeitY, y )

        x = utNow

        if cycle(0,1) then pdisplay(WEBID_UnixTime,convert( x, $$),DATE,INACTIVE,GREY,WEBPageAllgemein) endif


        DBG_Heartbeat = EIN


        FlashSetAndSaveS16(FlashID_S16_Heartbeat_Minutes,H eartbeat_Minutes,1s16,1440s16,60s16)

        if systemstart() or change(DBG_Heartbeat) and DBG_Heartbeat then {
        DebugC14( $HeartB0NewTime$c14 );
        HeartBeatUnixTime = utNow + convert( Heartbeat_Minutes, 0s32)*60s32;
        DebugC14( $HeartB0NewTime$c14 )
        } endif

        if utNow >= HeartBeatUnixTime and (DBG_Heartbeat == EIN) then {
        DebugC14( $Heart0SendMail$c14 );
        HeartBeatUnixTime = utNow + convert( Heartbeat_Minutes, 0s32)*60s32;
        MailMessage( $EibPC Heartbeat$, $EibPC Heartbeat at $+convert(settime(),$$) + $\nHeartBeatUnixTime: $+convert(HeartBeatUnixTime,$$) + $\nutNow: $+convert(utNow,$$) );
        DebugC14( $Heart1SendMail$c14 )
        } endif

        [/highlight]

        Gruß,
        Bernd

        Kommentar


          #19
          Hallo Bernd,

          irgendwie stehe ich voll auf dem Schlauch.

          Ich ziehe mit meinem Code aus dem Buffer_WP Unixzeiten und möchte diese mit Deinem Makro umwandeln:

          [highlight=epc]
          UnixTime=$$
          Zeitpunkt=0s32
          // Parsen der einzelnen Fehlerzeiten
          if change(Buffer_WP) and Buffer_WP!=$$ then \\
          UnixTime=split(Buffer_WP,392u16,395u16); \\
          UnixTimeToVar(Zeitpunkt,UnixTime); \\
          WP_Fehler_Zeitpunkt0=Day+$.$+Month+$.$+Year+$ $+Hour+$.$+Minute \\
          endif
          [/highlight]

          Ich bekomme jedoch immer die folgende Fehlermeldung:

          Entweder fehlt ":return" oder letzte Makro-Zeile enthält keine Anweisung im Makro in >Mak:unixtimetovar==>< in >UnixTime=split(Buffer_WP,392u16,395u16)--Set;< in >if_then change(Buffer_WP)andBuffer_WP!=$$<
          ID:6

          Was läuft hier falsch?

          Viele Grüße

          Michael

          Kommentar


            #20
            Hi Michael,

            Dein String muß zunächst in einen u32 überführt werden. Der beinhaltet dann die Unix Zeitmessung (=Sekunden seit 1970).


            UnixTimeS=$$
            UnixTime = 0u32
            // Zeitpunkt ist der Name für die Einzelvariablen s.u.

            // Parsen der einzelnen Fehlerzeiten
            if change(Buffer_WP) and Buffer_WP!=$$ then \\
            UnixTimeS=split(Buffer_WP,392u16,395u16); \\
            UnixTime=convert(UnixTimeS, 0u32); \\
            UnixTimeToVar(Zeitpunkt,UnixTime); \\
            WP_Fehler_Zeitpunkt0=Zeitpunkt_Day+$.$+Zeitpunkt_Month+$.$+Zeitpunkt_Year+$ $+Zeitpunkt_Hour+$.$+Zeitpunkt_Minute \\
            endif

            Ich kann den Code leider nicht testen derzeit ...

            Gruß,
            Bernd

            Kommentar


              #21
              Hi Bernd,

              ich habe Deine Anregungen eingearbeitet und die Zeitangaben noch in $$ konvertiert:

              [highlight=epc]
              UnixTime=0u32
              Unix=0s32
              WP_Date=$$
              WP_Time=$$
              // Parsen der einzelnen Fehler
              if change(Buffer_WP) and Buffer_WP!=$$ then \\
              UnixTime=convert(split(Buffer_WP,392u16,395u16),0u 32); \\
              UnixTimeToVar(Unix,UnixTime); \\
              WP_Date=convert(Unix_Day,$$)+$.$+convert(Unix_Mont h,$$)+$.$+convert(Unix_Year,$$); \\
              WP_Time=convert(Unix_Hour,$$)+$.$+convert(Unix_Min ute,$$); \\
              WP_Fehler_Zeitpunkt0=WP_Date+$ $+WP_Time \\
              endif
              [/highlight]

              Die Fehlermeldung bleibt jedoch unverändert:

              Entweder fehlt ":return" oder letzte Makro-Zeile enthält keine Anweisung im Makro in >Mak:unixtimetovar==><

              Ist das Makro in der Lib 1.013 vielleicht nicht in der letzten Version?

              Viele Grüße

              Michael

              Kommentar


                #22
                Hi Michael,
                so aus der Hüfte:

                Nachdem ich gerade an einer ähnlichen Baustelle arbeite habe ich kurzer Hand das ganze mal in meinen Code auch eingebaut... Naja, eher reingewurschtelt als Stand-Alone-Routine... letzten Endes gebe ich oben den Demo-Wert von Bernd als String mit (Buffer_WP=$917868320$) und dann prüfe ich über den Debugger die Variablen...
                Basis: Bernd's Makros aus dem Wettbewerb und Dein EPC-Code.
                Hatte anfangs allerdings Probleme mit den Variablen Unix_Day usw.
                Woher kommt der _? Habe das ganze nun ohne _ verwendet und dann funktioniert es bei mir, zumindest im Demo...

                Könnte dies der Fehler sein? Im Makro baut Bernd ja die Variable mit ^zusammen. Woher kommt dann im Programm der _?
                Keine Ahnung, vielleicht ist das ja das Problem?
                Viele Grüße,
                Oliver

                P.S.: Hatte bis zu dieser Änderung zahlreiche Fehler-Meldungen, unter anderem auch die von Dir gepostete Meldung.

                Kommentar


                  #23
                  Zitat von Jambala Beitrag anzeigen
                  Entweder fehlt ":return" oder letzte Makro-Zeile enthält keine Anweisung im Makro in >Mak:unixtimetovar==><
                  Was ist an der Fehlermeldung unklar?
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #24
                    Hi Michael,

                    sorry, das Makro ist nicht als Inline Makro aufgebaut sondern als GlobalMakro. Das bedeutet eine Verwendung innerhalb der if then Konstrukte ist nicht vorgesehen. Du kannst das Makro aber "umrüsten" indem Du im Makro Code änderst:

                    :begin

                    :return { hier code rein }
                    :end

                    Dann wird alles, was zwischen den Klammern steht auch im Code genau an der Stelle substituiert, wo das Makro aufgerufen wird.
                    Wenn Du bis zum Wochenende warten kannst, mache ich das mal ansonsten: Selbst ist der Mann

                    Gruß,
                    Bernd

                    Kommentar


                      #25
                      Hi Bernd,

                      wäre prima wenn Du Dir dies am Wochenende einmal anschauen könntest.

                      Nach Einbau des Returns bekomme ich nun noch mehr Fehlermeldungen zum Makro. Ich habe leider noch nicht viel Erfahrung mit Makros.

                      Vielen Dank

                      Michael

                      Kommentar


                        #26
                        Hallo Bernd,

                        hast Du Dir das Makro UnixTimeToVar noch einmal anschauen können?

                        Meine Versuche dies zum Inline Makro umzubauen waren bisher erfolglos.

                        Viele Grüße

                        Michael

                        Kommentar


                          #27
                          Probier mal dies hier: BMXTimeDate2.zip

                          [highlight=epc]
                          utNow = 0s32

                          UnixTime( utNow )

                          y = 0s32

                          if systemstart() then {
                          UnixTimeToVar( TestZeit, 917868320s32 ); /* 1.2.1999, 12:25:20) */
                          } endif

                          if systemstart() then {
                          ToUnixTime( 1970u16, 10u08, 09u08, 21u08, 08u08, 00u08, y)
                          } endif

                          if change( y ) then {
                          UnixTimeToVar( TestZeitY, y )
                          } endif
                          [/highlight]

                          Ich mußte doch einiges umbauen ...

                          Getestet habe ich es nicht. Das kannst Du mal mit überprüfen.

                          Gruß,
                          Bernd

                          Kommentar


                            #28
                            Hallo Bernd,

                            Deine neue Version führt leider zu dem gleichen Fehler wie bei meinen bisherigen Versuchen:

                            UnixTimeToVar(TestZeit,917868320s32)

                            Syntaxfehler in Zeile:[255]
                            >UnixTimeToVar(TestZeit,917868320s32)< in der Datei "./tmpApp.txt"
                            Deklaration der Variable muss eindeutig sein in >__UnixTimeToVar_1__unixtime=convert(917868320s32, 0s32)< in >{< in >Mak:unixtimetovar==><
                            ID:35

                            Ich habe sowohl 917868320s32, als auch 917868320u32 und 917868320 probiert, aber immer der gleiche Fehler.

                            Viele Grüße

                            Michael

                            Kommentar


                              #29
                              Hi Michael,

                              Deine neue Version führt leider zu dem gleichen Fehler wie bei meinen bisherigen Versuchen:

                              UnixTimeToVar(TestZeit,917868320s32)
                              Du hast das aber in einer If-Abfrage so wie untern drin, oder?
                              (Sonst kann das nicht gehen)

                              [highlight=epc]
                              if systemstart() then {
                              UnixTimeToVar( TestZeit, 917868320s32 ); /* 1.2.1999, 12:25:20) */
                              } endif
                              [/highlight]

                              Gruß,
                              Bernd

                              Kommentar


                                #30
                                Hallo Bernd,

                                ich hatte die Abfrage zuerst in einer sehr umfangreichen if-Abfrage drin und habe es nach der ersten Fehlermeldung dann einzeln versucht.

                                Ich probiere es heute Abend noch einmal mit einer ganz simplen if-Abfrage.

                                Vielen Dank

                                Michael

                                Kommentar

                                Lädt...
                                X