Zählerablesung EasyMeter Q3D per Infrarot
In der vergangenen Woche haben wir gezeigt, wie man an die Daten eines Wechselrichters per Bluetooth kommen kann. Heute geht es darum, die Daten eines EasyMeter Q3D per IR (Infrarot) Schnittstelle auszulesen. Dieser ist, in unserer Konfiguration, als Zähler für die Erzeugungsleistung einer Photovoltaik-Anlage verbaut.
Als zusätzliche Hardware haben wir uns einen Optokoppler der Fa. co.met GmbH besorgt. Die Teile sind im vergleich zu anderen Herstellern relativ günstig und werden mit einem Seriell to USB Adapterkabel geliefert. So kann man bequem auf den COM-Port zugreifen. Letztendlich liegt der Materialwert im einstelligen Eurobereich, aber leider sind wir elektrotechnisch nicht sehr bewandert und wir haben uns für die kaufbare Variante entschieden. Der Rest unseres Versuchsaufbaus entspricht der Konfiguration aus der vergangenen Woche (Netbook, PHP aus XAMPP).
Zum Ablauf:
Wir öffnen aus der PHP-Umgebung heraus den COM-Port und schon fängt er an zu plappern, ohne wieder auszuhören 😉
Dann lesen wir einfach die vom Zähler gesendeten Daten, bis zum letzten „!“. Dies ist das Daten-Ende-Zeichen und suchen uns dann den relevanten Zählerstand.
Parameter für die Schnittstelle:
Baudrate: 9600
Parität: Even
Datenbits: 7
Stopbits: 1
XOn: Aus
DTR: An
Wer möchte, kann das Ganze mit einem Terminalprogramm wie z.B. HTERM testen.
Hier das Script:
<?php
$resultRenewable = -1;
// Über die Systemebene die Parameter für den COM-Port setzen
exec(‚mode com3:BAUD=9600 PARITY=E DATA=7 STOP=1 XON=OFF DTR=ON‘);
// Öffnen des COM-Port als Filehandle
$handle = fopen(„com3“,’w+‘);
if (!$handle) {
die(‚Kann nicht geoeffnet werden!‘);
} else {
// Lesen des ersten Zeichens
$char = fgetc($handle);
$string = $char;
// Weiterlesen der Daten bis zum „!“
while($char != ‚!‘) {
$char = fgetc($handle);
$string .= $char;
}
fclose($handle);
// Ausgabe des Ergebnisses
echo $string . „n“;
// Durchsuchen des Ergebnisses nach den gewünschten Daten
$array = explode(chr(13) . chr(10),$string);
foreach($array as $value) {
if(substr($value,4,5) == ‚1.8.0‘) {
$resultRenewable = intval(substr($value,14,8));
}
}
}
?>
Neue Kommentare