Register Variable auswerten

Hallo zusammen,

ich bin dabei meinen Stromzähler per IR Lesekopf auszulesen.
Nachdem die ersten Problem überwunden sind, und ich werte vom Zähler bekomme, und diese von einem Cutter zerlegt werden ( mit hilfe des forums ) habe ich nun folgendes im Debug der Registervariabeln stehen.

1.8.000(014775.47)<CR><LF>2.8.000(006865.49)<CR><LF>C.2.1

1.8.0 ist der Bezug und 2.8.0 die Lieferung-

Wie bekommen ich die werte in den Klammern jeweils in Variablen?
Habe folgendes Script probiert ( nach Forum vorlage )
aber das passt noch nicht.

<?
// für Pafal-Zähler 20EC3gr

    $WertRegVar = $_IPS['SENDER'];
// RegVar Handler result: 1.8.0*00(003145.25)2.8.0*00(000737.48)

// string aufteilen in Bezug und Einspeisung
    $subBezug = substr($WertRegVar,9,9);
    $subEinspeisung = substr($WertRegVar,30,9);

// string in float umwandeln
    $Bezug = floatval($subBezug);
    $Einspeisung = floatval($subEinspeisung);

    SetValueFloat (19243 /*[Strom	est1]*/,$Bezug);
    SetValueFloat (23069 /*[Strom	est2]*/,$Einspeisung);

?>

Hat ihr eine Idee??

Danke

Rob

Hallo Rob,

sind die Werte in Klammern immer an der gleichen Stelle und haben das gleiche Format, dann kannst Du mit substrings arbeiten. Ist die nicht der Fall, würde sich beispielsweise ‚explode‘ anbieten:


<?php
$s = "1.8.0*00(014775.47)<CR><LF>2.8.0*00(006865.49)<CR> <LF>C.2.1";
$a = explode('(', $s);
$a1 = explode(')', $a[1]);
$f1 = floatval($a1[0]);

den 2.Wert bekommst Du über $a[2] …

Grüße, Gerhard

Hi Gerhard,

ja, die Werte in Klammern sind immer an der gleichen Stelle und haben das gleiche Format.

das ausklammern verstehe ich, aber mit welchen Code gebe ich die werte in eine Variable weiter?

lg

Rob

Hallo nochmal,

das ausklammern und in Variable schreiben klappt mit folgendem Script.
aber es wird nicht der aktualisierte Wert aus der RegVar übernommen.
Er schreibt in nachfolgendem beispiel immer die 14775,47 in die Variable .

<?
// für Pafal-Zähler 20EC3gr

$WertRegVar = $_IPS['SENDER'];

// RegVar Handler result: 1.8.000(003145.25)2.8.000(000737.48)
// string aufteilen in Bezug und Einspeisung

$s = „1.8.000(014775.47)<CR><LF>2.8.000(006865.49)<CR> <LF>C.2.1“;
$a = explode(’(’, $s);
$a1 = explode(’)’, $a[1]);
$f1 = floatval($a1[0]);
SetValueFloat (19243 /[Strom est1]/,$f1);

?>?

Das"1.8.000(014775.47)<CR><LF>2.8.000(006865.49)<CR> <LF>C.2.1" muss immer durch die RegVar aktualisiert werden.

Danke lg

Rob

so sieht mein Script bisher aus.

<?
// für Pafal-Zähler 20EC3gr
//$WertRegVar = $IPS_VALUE;
$WertRegVar = $_IPS['SENDER'];
// RegVar Handler result: 1.8.0*00(003145.25)2.8.0*00(000737.48)
// string aufteilen in Bezug und Einspeisung

// Inhalt RegVar als Hex:
// 31 2E 38 2E 30 2A 30 30 28 30 31 34 37 38 34 2E 39 34 29 0D 0A 32 2E 38 2E 30 2A 30 30 28 30 30 36 38 36 35 2E 34 39 29 0D 0A 43 2E 32 2E 31  
// Inhalt regVar als text:
// 1.8.0*00(014775.47)<CR><LF>2.8.0*00(006865.49)<CR> <LF>C.2.1


$s = "1.8.0*00(014799.47)<CR><LF>2.8.0*00(006865.49)<CR> <LF>C.2.1";

$a = explode('(', $s);
$a1 = explode(')', $a[1]);
$f1 = floatval($a1[0]); 
SetValueFloat (19243 /*[Strom	est1]*/,$f1);


?>

Die Variable 19243 wird nicht aktualisiert.
Ich glaube es sind zwei punkte nicht korrekt.

  1. weiss ich nicht ob $s so immer den Inhalt der RegVar bekommt
  2. weiss ich niccht ob der inhalt der RegVar noch von Hex in text umgwandeltet werden muss.

Wäre toll wenn wir da jemand helfen kann. Bin mit ´meinen nicht vorhandenen PHP Kenntnissen am Ende.

Danke

Hab es geschafft :smiley:

so sieht mein script jetzt aus:

<?
// für Pafal-Zähler 20EC3gr Stromzähler Werte ermitteln

$WertRegVar = $_IPS['SENDER'];
// RegVar Handler result: 1.8.0*00(003145.25)2.8.0*00(000737.48)
// string aufteilen in Bezug und Einspeisung

// Inhalt RegVar als Hex:
// 31 2E 38 2E 30 2A 30 30 28 30 31 34 37 38 34 2E 39 34 29 0D 0A 32 2E 38 2E 30 2A 30 30 28 30 30 36 38 36 35 2E 34 39 29 0D 0A 43 2E 32 2E 31  
// Inhalt regVar als text:
// 1.8.0*00(014775.47)<CR><LF>2.8.0*00(006865.49)<CR> <LF>C.2.1


$s .= $_IPS['VALUE']; // inhalt von RegVar einlesen

$a = explode('(', $s);
$a1 = explode(')', $a[1]);
$f1 = floatval($a1[0]); 
SetValueFloat (19243 /*[Strom\Netz-Bezug]*/,$f1);

$a = explode('(', $s);
$a1 = explode(')', $a[2]);
$f1 = floatval($a1[0]); 
SetValueFloat (23069 /*[Strom\Netz-Einspeisung]*/,$f1);


?>