Rob204
15. November 2019 um 15:26
1
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.0 00(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
Rob204
15. November 2019 um 17:32
3
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
Rob204
15. November 2019 um 17:54
4
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.0 00(000737.48)
// string aufteilen in Bezug und Einspeisung
$s = „1.8.000(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]);
SetValueFloat (19243 /[Strom est1] /,$f1);
?>?
Das"1.8.000(014775.47)<CR><LF>2.8.0 00(006865.49)<CR> <LF>C.2.1" muss immer durch die RegVar aktualisiert werden.
Danke lg
Rob
Rob204
15. November 2019 um 20:06
5
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.
weiss ich nicht ob $s so immer den Inhalt der RegVar bekommt
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
Rob204
16. November 2019 um 09:10
6
Hab es geschafft
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);
?>