Unix Timestamp verarbeiten

Hallo, ich hätte da mal ein Problem:
Ich lese über ModBus den Unix Timestamp meiner Heizungsanlage …angeboten wird er als U32 Unixzeit_high und U32 Unixzeit_Low und sieht so aus:


Kann mir einer den Weg weisen wie ich unter php da jetzt Datum & Uhrzeit im Klartext herausbekomme? Die grundsätzliche Verwendung von ‚date(‚d-m-Y H:i:s‘, $value)‘ ist nicht das Problem …wie baue ich den High und Low Wert zusammen?
Gruß, Michael

Profil zuweisen ~UnixTimestamp

Nach der Zuweisung des Profils kannst du in PHP dann den Wert auch via GetValueFormatted als schönen Text abfragen.

…vielleicht ist es nicht ganz rüber gekommen: das System bietet einen Low und einen High Teil des Unix Timestamps an… die müssen meines Verständnisses erst zusammengebaut werden bevor ich ein Profil drauf los lassen kann (das wäre ja zu einfach gewesen :)).
Aktuell sehen die Daten so aus:


Die ModBus Instanz ist wie folgt eingestellt:

Es geht also um die Zusammenfphrung von Low und High … Ideen, KnowHow dazu?

Hi,
modbus scheint da recht speziell zu sein und es wird nicht DIE Antwort geben. Du musst nachschauen was das Gerät darunter versteht. Siehe

Ralf

Genau das versuche ich ja zu verstehen…Danke für den Link! Obwohl er mir grad nicht die zündende Idee bringt … da sich beide Werte im von mir abgefragtes 5sek Takt deutlich ändern passt auch die Idee, dass einmal das Datum, einmal die Zeit gesendet wird nicht wirklich…

Hi,
ist „Status emulieren“ bei einer Variablen die du nur lesen kannst überhaupt sinnvoll? Wenn man die DWORDs als TimeStamp interpretiert kommt man ins Jahr 2011. Was sagt denn das Handbuch der Heizungsanlage dazu?

Ralf

Das Handbuch zeigt:


… mehr nicht…

Du musst die Bits wieder zusammen bauen… Such Mal nach PHP bit operator.

Könnte etwas sein wie

$highbyte << 8
$tine=$highbyte|$lowbyte

Wenn die aufeinander folgen, kann man auch die nächst größere Gruppe in Symcon als Datentyp auswählen. Also statt zwei Wörter einzeln zu lesen, stattdessen ein REAL. (vier Byte)

Was sagt denn der Herstellersupport? Ist eine Nischenfrage, aber irgendwer dort wird das Thema hoffentlich kennen.

Ich habe auch gerade eine API-Merkwürdigkeit bei Viessmann in Klärung, die haben immerhin einen (in Worten: einen) Experten für sowas. Vielleicht hast du bei deinem Hersteller auch Glück.

@tobias: und wie sage ich es ihm, dass er2 Adressen auslesen soll (die 23477 und die 23478) ?
Im Moment sieht meine Konfiguration so aus:



… wie müsste man konfiguriern um beide hintereinander auszulesen?

@bgersmann: damit hab ich auch schon rumgespielt … ergibt bei mir Nonsense:

$low = GetValue(40820);
$high = GetValue(33846);
echo "Unix Timestamp  ".time(), "\n";
echo "Unix Timestamp Binär  ".decbin(time()), "\n";
$date = date('d-m-Y H:i:s', time());
echo "akt Zeit ".$date, "\n";

echo "Low  ".decbin($low), "\n";
echo "high ".decbin($high), "\n";
$high = $high << 32;
$time= $high | $low;
echo "low & high ".decbin($time), "\n";
$date = date('d-m-Y H:i:s', $time);
echo "DateTime $date", "\n";

grafik

…das wird wohl der nächste Schritt sein … wenn die zündende Idee nicht kommt :slight_smile:

Einerseits frage ich mich, warum den den Unixtimestamp (bis ca. 2037 nur 32 bit) als 64bit auslesen musst, andererseits, kannst du entsprechend dann von DWORD 32bit auf xyz 64bit umstellen. Dann werden automatisch zwei Adressen ausgelesen. Die Umwertung (sprich welche Adresse du dann ggf. einstellen musst, gibt es in entsprechenden Tabellen).

…der Hersteller erwartet wohl (und das will ich schwer hoffen) das meine Hezungsanlage über das Jahr 2037 hinaus funktioniert :slight_smile:

Ich hab scheinbar ein 32bit System, bei mir kommt nach einem „<<32“ nur eine 0 raus :smiley: