Hallo Zusammen,
ich möchte Hexwerte aus einer Registervariablen verarbeiten
und dreh mich seit zwei Tagen nurnoch im Kreis und komm nicht weiter…
Folgendes möchte ich machen:
Ein paar Statuswerte aus einer Ledatronic (Abbrandsteuerung von Leda für einen Kamineinsatz) auslesen und visualisieren.
Die Verbindung über einen Client Socket steht und ich bekomme fleißig meine Werte (siehe Anhänge)
Die einfachen Statuswete wie „Betrieb“, „Tür offen“, usw. kann ich schon auslesen und verarbeiten.
Als Grundlage habe ich das Beispiel aus der Dokumentation genommen und für mich abgepasst.
Jetzt mein Problem:
Es gibt noch einen Temeraturwert und die Klappenstellung in %
Aus den Hexwerten von den Debuggern habe ich auch lokalisiert um welche es sich handelt, alles gut soweit
Aber ich kann sie nicht vernünftig verarbeiten, weil die Werte, die ich aus der Registervariablen lese keine Hex-werte sind sondern Text…??? Über Online-Hex De/Encoder passen die (Text)Zeichen auch alle, soweit also auch okay. Aber wie verarbeite ich diese weiter??
Hier ist mein Skript und im Anhang einige Screenshots…
Wäre Super, wenn mir jemand helfen könnte
Vielen Dank schonmal im Voraus!
Gruß
David
<?php
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable") {
// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
$data = RegVar_GetBuffer($_IPS['INSTANCE']);
// neu empfangene Daten an $data anhängen
$data .= $_IPS['VALUE'];
// wenn $data mindestens 33 Zeichen lang ist
if (strlen($data) >= 33) {
// $data in Blöcke von einem Zeichen zerlegen
$datasets = str_split($data, 1);
// $data leeren
$data = "";
// alle Datensätze durcharbeiten
for ($i = 0; $i < count($datasets); $i++) {
// vollständige Datensätze (ein Zeichen lang) ausgeben
if (strlen($datasets[$i]) == 1) {
// Temperatur auslesen, Datensatz 3 - Datensatz-Nummerierung beginnt mit "0"!!!!!!!
if ($i == 3) {
$hex_dec = hexdec($datasets[$i]);
var_dump ($hex_dec); /* zum Anzeigen unter "Meldungen" */
var_dump ($datasets[$i]); /* zum Anzeigen unter "Meldungen" */
SetValue(41027, $hex_dec);
}
// - Platzhalter - Klappenstellung auslesen, Datensatz 4 - (Analog zu Temp. auslesen)
// Status/Betriebsart auslesen, Datensatz 5
if ($i == 5) {
if ($datasets[$i] == "\x00") {SetValue(34896, "Bereit");}
if ($datasets[$i] == "\x3E") {SetValue(34896, "Heizbetrieb");}
if ($datasets[$i] == "\x47") {SetValue(34896, "Anheizen");}
if ($datasets[$i] == "\x64") {SetValue(34896, "Tür offen");}
if ($datasets[$i] == "\x46") {SetValue(34896, "Heizfehler");}
if ($datasets[$i] == "\x01") {SetValue(34896, "Grundglut");}
}
} else {
// Unvollständige Datensätze in $data schreiben
$data = $datasets[$i];
}
}
}
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
}
?>