Frage zu explode Befehl

Ich hab meine Frage im falschen Bereich gepostet… daher nun hier …

Ich bin nun endlich soweit dass ich die Canbus Daten meiner Stiebel WPL gerne durch IPS einlesen und visualisieren möchte.

Ein paar kleine Spielereien wie Kühlung an / aus im Sommer funktionert per Bashroutine schon mal.

Nun habe ich verständnsiprobleme mit dem verarbeiten von Arrays per „explode Befehl“

Meine Kommandozeilenausgabe auf dem Raspi sieht wie im Anhang aus.

In einem anderen Zusammenhang nütze ich dazu explode wie folgt:

$wert=  system("/home/pi/airsensor/airsensor -o");
$wert1=explode(' ', $wert);
$wert2=$wert1[3];
$wert3=explode(',', $wert2);
$wert4=$wert3[0];
settype($wert4,"Integer"); 
Setvalue($luftqid, $wert4);  

Aber wie baue ich das jetzt sinnvoll auf meine neue Canbusausgabe um?

canbus.JPG

Das wirkt weniger so, als wenn sich explode anbieten würde. Kannst du eigentlich nicht direkt mehrere Werte anfragen? Ansonsten wirst du das CAN tool recht oft aufrufen, oder?

paresy

Ich kann entweder Werte von einem bestimmten Wert (wäre mir mir am liebsten - wie oben angedeutet) oder ein ganzen Indizes abrufen.
Dieser Abruf beinhaltet dann etwa 1000Zeilen(=1000werte) und dauert etwa 15Minuten.

Der Einzelabruf (wie oben) reicht mir alle 15 - 30 Minuten. Also nichts sekundengenaues…

Ich möchte 4 - 5 Werte gelegentlich abrufen. Nichts Ressourcen hungriges :wink:

Gesendet von meinem Redmi Note 2 mit Tapatalk

Mit ein bisschen spielen… denke ist das ganz o.k? Oder spricht da technisch/logisch was dagegen?

Abfrage (Beispiel):

<?
$wert=  system("/home/pi/can_progs/can_scan can0 680 301.0011");//
var_dump( explode( ' ', $wert) );
?>

Ergebnis:

elster-kromschröder can-bus address scanner and test utility
copyright (c) 2015 Jürg Müller, CH-5524

value: 00fe  (RAUMISTTEMP  25.4)
array(6) {
  [0]=>
  string(6) "value:"
  [1]=>
  string(4) "00fe"
  [2]=>
  string(0) ""
  [3]=>
  string(12) "(RAUMISTTEMP"
  [4]=>
  string(0) ""
  [5]=>
  string(5) "25.4)"
}

D.h. für mich sind meine relevanten Daten sind immer in Array 6(5).
Wie selektiere ich das direkt aus?
D.h. der System befehl inkl. explode und direktem Sprung in Array 6,5 ?

Ja. Das geht natürlich. Ich dachte da eher an RegEx :slight_smile: Schau mal hier: RegEx Beispiel

paresy

@paresy

TOP - mit der Onlinehilfe krieg das sogar ich hin.:smiley:

Vielen Dank…

Stiebel Eltron WPL13 goes IPS :slight_smile:

Quick & Dirty ist mir aufgefallen, dass meine gewünschten WErte immer die letzten x Zeichen betreffen.

Ich mache es nun so:


//Raumisttemperatur
$raumist=  system("/home/pi/can_progs/can_scan can0 680 301.0011");
$raumist1=substr($raumist,-5,-1);
SetValue(32781,$raumist1);
//Rücklaufisttemperatur
$rlist=  system("/home/pi/can_progs/can_scan can0 680 180.0016");
$rlist1=substr($rlist,-5,-1);
SetValue(35916,$rlist1);
// Waermepumpen VORLAUF IST
$wpvorlauf=  system("/home/pi/can_progs/can_scan can0 680 180.01d6");
$wpvorlauf1=substr($wpvorlauf,-5,-1);
SetValue(33862,$wpvorlauf1);
// Aussentemperatur
$aussentemp=  system("/home/pi/can_progs/can_scan can0 680 180.000c");
$aussentemp1=substr($aussentemp,-5,-1);
SetValue(35284,$aussentemp1);

D.h. es wird der fünftletzte Werte bis zum vorletzten Wert ausgefiltert. Der Letzte WErt wäre die Klammer gewesen.
Und schon habe ich die Werte zum wegschreiben in eine Variable.

Bei Werten die zwischen 1 und 4 stellig wechseln, passt das natürlich nicht.:banghead:
(Die Aussentemperatur beispielsweise variiert zwischen -20Grad bis + 35Grad. - Schreibweise -20.0 bis 35.9)

Hier darf ich weiterüberlegen :slight_smile:

Eine Frage noch zum Linux ‚System‘ befehl.
Kann ich die Ausgabe irgendwie unterdrücken?

Hier noch die Werte in der Übersicht.

Mit strlen die Länge der Zeichenkette prüfen und davon abhängig dann ausschneiden, die Länge unterscheidet sich ja um 1.

@ davor.

Danke, dann schaue ich mir mal „strlen“ an…

das @vor „System“ funktioniert leider nicht… nach kurzer Google suche… ersetze „System“ durch „exec“ :smiley:

<?
//Raumisttemperatur
$raumist=exec("/home/pi/can_progs/can_scan can0 680 301.0011");
$raumist1=substr($raumist,-5,-1);
SetValue(32781,$raumist1);
//Rücklaufisttemperatur
$rlist=exec("/home/pi/can_progs/can_scan can0 680 180.0016");
$rlist1=substr($rlist,-5,-1);
SetValue(35916,$rlist1);
// Waermepumpen VORLAUF IST
$wpvorlauf=exec("/home/pi/can_progs/can_scan can0 680 180.01d6");
$wpvorlauf1=substr($wpvorlauf,-5,-1);
SetValue(33862,$wpvorlauf1);
// Aussentemperatur
$aussentemp=exec("/home/pi/can_progs/can_scan can0 680 180.000c");
$aussentemp1=substr($aussentemp,-5,-1);
SetValue(35284,$aussentemp1);
?>