berndh
10. Mai 2020 um 19:20
1
Hallo
Ich habe ein Script das ich auf dem Raspi ausführe
pi@raspberrypi:/var/lib/symcon $ ./as1440
usage: ./as1440 -F device -O obisval1[:obisval2...] [-p password ] [-v] [-n] [-e]
-v verbose
-n don't add units
-e endless loop (end with ctrl-c)
pi@raspberrypi:/var/lib/symcon $ ./as1440 -F /dev/ttyUSB0 -O 1.7.0:1.8.0 -v
opening /dev/ttyUSB0
init tty
init tty ok
init
init ok
change baudrate to B9600
change baudrate to B9600 ok
sendpwd
sendpwd ok
readack
readack ok
1.7.0 0.006 kWnotfound
1.8.0 00010078.7 kWhnotfound
hangup
hangup ok
Das ganze sollte in IPS so aufgerufen werden
<?php
$result[] = shell_exec("/var/lib/symcon/scripts/as1440 -F /dev/ttyUSB0 -O 1.7.0:1.8.0 -v");
print_r ($result);
Ich erhalte aber nur
Array
(
[0] =>
)
Wie erhalte ich die Ausgabe wie auf der Console?
Und wie beschneide ich dann direkt, ich denke mal über Trim, sowie hier
$data = trim ( trim ( strstr ($string , '1.8.0(' , false ), ')' ), '1.8.0(' );
Wobei ich noch nicht verstanden habe was und wie der da genau den Text verarbeitet.
In den Orginalscript aus dem ich die Trimzeile habe wird allerdings falsch beschnitten, da kommt satt 10078.7 nur 78.7 raus
damit ich nur die Zahlenwerte in verschiedene Variablen schreiben kann?
Bernd
berndh
10. Mai 2020 um 20:43
2
Sorry… Ich doof
Man sollte schon den Pfad richtig angeben.
Jetzt stehe ich aber vor dem Problem, das er wohl nur eine Zeile ausgibt.
$data[] = shell_exec('/var/lib/symcon/as1440 -F /dev/ttyUSB0 -O 2.8.0:1.8.0 -v');
print_r ($data);
Array
(
[0] => 2.8.0 00007398.2 kWhnotfound
1.8.0 00010088.5 kWhnotfound
)
Wie kann ich die zahlen in Variablen schreiben?
Ich hab schon
$lines = explode(",", strip_tags($data));
print_r($lines); //zeigt in welchen Zeilen was steht.
aus einem anderen Script probiert
aber da in dem Array keine Kommas sind, stehe ich auf dem Schlauch.
Bernd
berndh
10. Mai 2020 um 20:53
3
Versuche ich das mit der Auswertung aus einem anderen Script, das im Original aus einer Registervariable liest.
$data[] = shell_exec('/var/lib/symcon/as1440 -F /dev/ttyUSB0 -O 2.8.0:1.8.0 -v -n');
print_r ($data);
$string = $data;
$header = strstr ($string , '(' , true );
if ($header == '1.8.0')
{
$data = trim ( trim ( strstr ($string , '1.8.0(' , false ), ')' ), '1.8.0(' );
SetValueFloat (47381 /*[Energie\Hausanschluß Haus 16\As1440\Verbrauch Gesamt 1.8.0]*/, $data);
}
if ($header == '2.8.0')
{
$data = trim ( trim ( strstr ($string , '2.8.0(' , false ), ')' ), '2.8.0(' );
SetValueFloat (42257 /*[Energie\Hausanschluß Haus 16\As1440\Einspeisung Gesamt 2.8.0]*/, $data);
Warning: strstr() expects parameter 1 to be string, array given in /var/lib/symcon/scripts/13638.ips.php on line 9
meckert er das es kein String ist, ist ja auch eine Array…
Ich bitte um eure Hilfe
bernd
berndh
11. Mai 2020 um 12:40
4
Kleines Stück weiter?
$data = shell_exec('/var/lib/symcon/as1440 -F /dev/ttyUSB0 -O 2.8.0:1.8.0 -v -n');
list($zeile1, $zeile2) = explode("notfound", $data);
echo trim($zeile1,"2.8.0 notfound");
echo trim($zeile2,"1.8.0 notfound");
Ergibt
7399.5
1.8.0 00010089.5
Warum beschneidet er nur die erste Zeile und nicht mehr die zweite?
berndh
11. Mai 2020 um 22:19
5
Meine Loesung, nicht schoen aber selten.
<?php
$data = shell_exec('/var/lib/symcon/as1440 -F /dev/ttyUSB0 -O 2.8.0:1.8.0:2.7.0:1.7.0 -v -n -t');
//echo $data;
//print_r ($data);
$werte = preg_split("/[\s,]+/", $data);
//print_r($werte);
$temp = ($werte[1]);
$Out180 = trim ($temp, 'notfound');
SetValue (57421 /*[Energie\Hausanschluß Haus 16\Strom\As1440\Bezug Zählerstand 1.8.0]*/, $Out180);
$temp = ($werte[3]);
$In280 = trim ($temp, 'notfound');
SetValue (25607 /*[Energie\Hausanschluß Haus 16\Strom\As1440\Einspeisung Zählerstand 2.8.0]*/, $In280);
$temp = ($werte[5]);
$Out170 = trim ($temp, 'notfound');
SetValue (14160 /*[Energie\Hausanschluß Haus 16\Strom\As1440\Wirkleistung (Out) 1.7.0]*/, $Out170);
$temp = ($werte[7]);
$In270 = trim ($temp, 'notfound');
SetValue (18970 /*[Energie\Hausanschluß Haus 16\Strom\As1440\Wirkleistung (In) 2.7.0]*/, $In270);
?>