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....
Ankündigung
Einklappen
Keine Ankündigung bisher.
gesucht: IP mit u32 in String und umgekehrt
Einklappen
X
-
Zitat von bmx Beitrag anzeigen@Jambala:
UnixTime Macros waren Teil vom EibPC Wettbewerb und sollten bei den Macros schon dabei sein...
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
-
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
-
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
-
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
-
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
-
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
-
Zitat von Jambala Beitrag anzeigenEntweder fehlt ":return" oder letzte Makro-Zeile enthält keine Anweisung im Makro in >Mak:unixtimetovar==><offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
Enertex Produkte kaufen
Kommentar
-
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
-
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
-
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
-
Hi Michael,
Deine neue Version führt leider zu dem gleichen Fehler wie bei meinen bisherigen Versuchen:
UnixTimeToVar(TestZeit,917868320s32)
(Sonst kann das nicht gehen)
[highlight=epc]
if systemstart() then {
UnixTimeToVar( TestZeit, 917868320s32 ); /* 1.2.1999, 12:25:20) */
} endif
[/highlight]
Gruß,
Bernd
Kommentar
Kommentar