Hallo zusammen,
basierend auf dem LBS 19000589_Easymeter Q3D habe ich einen LBS für einen Q3S in Benutzung.
Leider liefert dieser Baustein nach Edomi-Neustart nur für wenige Tage Werte, dann quittiert er ohne ersichtlichen Grund den Dienst.
im Log stehen dann nur noch die zuletzt gelesenen Daten, der Status des LBS steht auf 60760775.
Ich stehe völlig auf dem Schlauch...
Hat jemand 'ne Idee?
basierend auf dem LBS 19000589_Easymeter Q3D habe ich einen LBS für einen Q3S in Benutzung.
PHP-Code:
###[DEF]###
[name = Easymeter Q3S v0.1 ]
[e#1 = Autostart #init=1]
[e#2 = Loglevel #init=8 ]
[e#3 = Interface #init=/dev/lesekopf1 ]
[a#1 = Zählerstand Summe kWh]
[a#2 = Zählerstand Summe kWh genau ]
[a#3 = Zählerstand Tarif1 kWh]
[a#4 = Zählerstand Tarif1 kWh genau ]
[a#5 = Zählerstand Tarif2 kWh]
[a#6 = Zählerstand Tarif2 kWh genau ]
[a#7 = L1+L2+L3 W ]
[a#8 = L1+L2+L3 W genau ]
[a#9 = Status ]
[v#1 = 0]
[v#100 = 0.1 ]
[v#101 = 19900003 ]
[v#102 = Easymeter Q3S ]
[v#103 = 0 ]
###[/DEF]###
###[HELP]###
Dieser LBS liest die Daten eines Easymeter Q3S über einen an USB angeschlossenen Lesekopf von Volkszähler.org aus und gibt die Werte zurück.
E1: Autostart (1=Autostart mit EDOMI, 0=Kein Autostart, benötigt ein Trigger-KO)
E2: Logging (0-none|1-emerg|2-alert|3-crit|4-err|5-warning|6-notice|7-info|8-debug)
E3: Interface über das der Zähler angesprochen wird (z.B. /dev/ttyUSB0)
A1: Zählerstand Summe ganzzahlig
A2: Zählerstand Summe mit Nachkommastellen
A3: Zählerstand Tarif1 ganzzahlig
A4: Zählerstand Tarif1 mit Nachkommastellen
A5: Zählerstand Tarif2 ganzzahlig
A6: Zählerstand Tarif2 mit Nachkommastellen
A7: Nennleistung Summe L1-L3 ganzzahlig
A8: Nennleistung Summe L1-L3 mit Nachkommastellen
A9: Status des Zählers
V1: stellt sicher, dass der LBS Daemon nur einmal gestartet wird
V100: Version
V101: LBS Number
V102: Log file name
V103: Log level
Changelog:
==========
v0.1: Erste Version
###[/HELP]###
###[LBS]###
<?
function LB_LBSID($id) {
$E=getLogicEingangDataAll($id);
if ($E)
{
setLogicElementVar($id,103,$E[2]['value']); //set loglevel to #VAR 103
if ($E[1]['refresh']==1 && $E[1]['value']==1)
{
if (getLogicElementVar($id,1)!=1) // if not started already
{
// start daemon
setLogicElementVar($id,1,1);
callLogicFunctionExec(LBSID,$id);
}
}
}
}
?>
###[/LBS]###
###[EXEC]###
<?php
require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
set_time_limit(0);
sql_connect();
function logging($id,$msg, $var=NULL, $priority=8)
{
$E=getLogicEingangDataAll($id);
$logLevel = getLogicElementVar($id,103);
if (is_int($priority) && $priority<=$logLevel && $priority>0)
{
$logLevelNames = array('none','emerg','alert','crit','err','warning ','notice','info','debug');
$version = getLogicElementVar($id,100);
$lbsNo = getLogicElementVar($id,101);
$logName = getLogicElementVar($id,102) . ' --- LBS'.$lbsNo;
strpos($_SERVER['SCRIPT_NAME'],$lbsNo) ? $scriptname='EXE'.$lbsNo : $scriptname = 'LBS'.$lbsNo;
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t".$msg);
if (is_object($var)) $var = get_object_vars($var); // transfer object into array
if (is_array($var)) // print out array
{
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t================ ARRAY/OBJECT START ================");
foreach ($var as $index => $line)
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t".$index." => ".$line);
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t================ ARRAY/OBJECT END ================");
}
}
}
$E=getLogicEingangDataAll($id);
if ($E)
{
$interface = $E[3]['value'];
logging($id,'Stromzähler Easymeter Q3S daemon started');
$fp = @fopen($interface, "r");
if ($fp) {
while (getSysInfo(1)>=1)
{
$buffer = fgets($fp, 4096);
if ($buffer !== false) {
logging($id,'Data read: '.$buffer);
if (preg_match('/1\-0\:1\.8\.0\*255/',$buffer)) // Wenn Zeile mit Zählerstand
{
if (preg_match('/([0-9]*\.[0-9]*)\*kWh/', $buffer, $matches))
{
$zaehlerstand = doubleval($matches[1]);
logic_setOutput($id,1,intval($zaehlerstand));
logic_setOutput($id,2,$zaehlerstand);
}
}
elseif (preg_match('/1\-0\:1\.8\.1\*255/',$buffer)) // Wenn Zeile mit Zählerstand Tarif1
{
if (preg_match('/([0-9]*\.[0-9]*)\*kWh/', $buffer, $matches))
{
$zaehlerstand = doubleval($matches[1]);
logic_setOutput($id,3,intval($zaehlerstand));
logic_setOutput($id,4,$zaehlerstand);
}
}
elseif (preg_match('/1\-0\:1\.8\.2\*255/',$buffer)) // Wenn Zeile mit Zählerstand Tarif2
{
if (preg_match('/([0-9]*\.[0-9]*)\*kWh/', $buffer, $matches))
{
$zaehlerstand = doubleval($matches[1]);
logic_setOutput($id,5,intval($zaehlerstand));
logic_setOutput($id,6,$zaehlerstand);
}
}
elseif (preg_match('/1\-0\:1\.7\.0\*255/',$buffer)) // Wenn Zeile mit L1+L2+L3
{
if (preg_match('/([0-9]*\.[0-9]*)\*W/', $buffer, $matches))
{
$zaehlerstand = doubleval($matches[1]);
logic_setOutput($id,7,intval($zaehlerstand));
logic_setOutput($id,8,$zaehlerstand);
}
}
elseif (preg_match('/1\-0\:96\.5\.5\*255/',$buffer)) // Wenn Zeile mit Status
{
if (preg_match('/\(([0-9]*)\)/', $buffer, $matches))
{
$zaehlerstand = doubleval($matches[1]);
logic_setOutput($id,9,intval($zaehlerstand));
}
}
}
usleep(100000);
}
fclose($fp);
}
}
sql_disconnect();
?>
###[/EXEC]###
im Log stehen dann nur noch die zuletzt gelesenen Daten, der Status des LBS steht auf 60760775.
Ich stehe völlig auf dem Schlauch...
Hat jemand 'ne Idee?
Kommentar