Servus aus Franken,
…Ich habe noch zwischendrin immer wieder Fehlermeldungen („Puffer zu kurz“ bzw. )
"A non-numeric value encountered in " .
Blockzitat
Warning: A non-numeric value encountered in /var/lib/symcon/scripts/SCR_EtaFunctions.ips.php on line 371
und ein paar Beispiele aus dem Puffer:
{MC=p<e KM§ N p Y X j N i My}
{MC%ë<!!e!P[- p¸}. (Lesefehler?)
{MC=<!!! A a @Qfh@WR}
Vielleicht sind es ja aber auch nur Übertragungsfehler?
Hat jemand ein paar Gedanken dazu?
Gruß Konny
hier der angepasste Cutter (symcon 6) von Joachim:
<?
/*
+------------------------+
Joachim Mistlbacher
www.joko.at
+------------------------+
ETA2IPS Cutter
Version 1.000
+------------------------+
21.01.2011
Da der IPS Cutter nicht den Umfang mitbringt die ETA Datensätze korrekt zu behandeln, musste ein neuer Cutter her.
+------------------------+
*/
require 'SCR_EtaFunctions.ips.php';
// Prueft ob der Datensatz im Buffer vollstaendig ist.
function DatensatzVollstaendig()
{
//Anzahl der NutzdatenBytes + 6 Bytes fuer Start, Pruefsumme, Endzeichen usw..
$NutzdatenTemp = (int)(ord(substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),3,1)))+6;
if ($NutzdatenTemp == strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))))
{
return true;
}
else
{
return false;
}
}
//Buffer Timeout, Buffer wird geleert.
if($_IPS['SENDER'] == "TimerEvent")
{
// loesche Buffer
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
IPS_SetScriptTimer($_IPS['SELF'],0);
echo "Buffer Timeout";
} else {
$ETA_ComID = GetObjectID("ETA_COM_Port"); //Instances ID des COM-Ports
$COM_String = RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_COM_RegisterVariable"));
$COM_String .= @$_IPS['VALUE'];
//echo "$COM_String";
//IPS_LogMessage(" SCR_Cutter1 "," $COM_String ");
if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) == 0)
{
//echo "Puffer leer";
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),$COM_String); //Buffer ist leer, neue Daten einfuegen
} else { //Ueberpruefung des neuen Daten Blocks
if (substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),0,1) == "{") //Wurde ein StartZeichen gefunden?
{
//echo "Startzeichen";
// Ist der Buffer laenger wie 3 Bytes?
if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) > 3)
{
//echo "Pufferlaenge";
//Wurde der gesamte Datensatz uebertragen?
if (DatensatzVollstaendig() == true)
{
//echo "Datensatz vollstaendig";
// Datensatz vollstaendig
} else {
//echo "Datensatz unvollstaendig";
// Datensatz unvollstaendig
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
}
} else { // Buffer ist zu kurz fuer gueltigen Datensatz
//echo "Puffer zu kurz";
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
}
} else { //Loesche Buffer = fehlerhafte Daten
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
//echo "loesche Puffer";
IPS_LogMessage(" SCR_Cutter "," fehlerhaft = :$ETA_ComID ");
}
}
if (DatensatzVollstaendig() == true)
{
// Datensatz vollstaendig
IPS_RunScriptWait(GetObjectID("ETA/Scripts/SCR_ComStringZerlegen"));
//echo "Run script SCR_ComStringZerlegen";
// loesche Buffer
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
} else {
IPS_SetScriptTimer($_IPS['SELF'],5);
}
}
?>
und der Teil der Eta Functions…
//Diese Funktion überprüft die Auswahl der Monitor Parameter und schreibt sie in die Arrays
function ETA_ParameterAuswahlAnalyse()
{
global $ParameterBlockAnzahl;
global $ETA_MLP, $ETA_MLP_0, $ETA_MLP_1, $ETA_MLP_2, $ETA_MLP_3, $ETA_MLP_4, $ETA_MLP_5;
$AnalyseFehler = false;
$vars = GetObjectList(GetObjectID("ETA/Variablen/Monitor Liste"));
// print_r($vars); //nummer der Variablen ausgeben
$ETA_MLP = array();
//print_r ($ETA_MLP);
// Alle Objekte die aktiviert sind in ein Array schreiben
foreach($vars as $var)
//print_r($var);
{
$GetvarName = IPS_GetObject($var);
if ($GetvarName['ObjectType'] == 2) //Nur ausführen wenn ObjectType eine Variable ist
{
$GetvarType = IPS_GetVariable($var);
//print_r ($GetvarType);
if (($GetvarType['VariableValue'] == 1) AND (substr($GetvarName['ObjectInfo'],0,8) == 'ETA_MLP_'))
// if (($GetvarType['VariableValue']['ValueType'] == 1) AND (substr($GetvarName['ObjectInfo'],0,8) == 'ETA_MLP_') AND ($GetvarType['VariableValue']['ValueInteger'] == 1))
{
//$IDTemp = substr($GetvarName['ObjectName'],8,3);
$IDTemp = substr($GetvarName['ObjectInfo'],8,3);
//nullen vorne entfernen
if ((substr($IDTemp,0,1) == 0))
{
$IDTemp = substr($IDTemp,1,2);
if ((substr($IDTemp,0,1) == 0))
{
$IDTemp = substr($IDTemp,1,1);
}
}
// $array[] = $x;
$ETA_MLP[] = $IDTemp;
// print_r ($ETA_MLP);
// array_push($ETA_MLP,$IDTemp); //original $array[] = $x;
}
}
}
//grösse überprüfen
if (count($ETA_MLP) == 0) {
write_error("WARNUNG: Mindestens einen Monitor Parameter auswaehlen!", 1);
$AnalyseFehler = true;
} elseif (count($ETA_MLP) > 120) {
write_error("Warnung: Maximal 120 Monitor Parameter auswählen! Derzeit sind ".count($ETA_MLP)." ausgewaehlt", 1);
$AnalyseFehler = true;
} else {
// Auf doppelte einträge prüfen
//konny : wo ist der Knoten (0,24,32,33) für verschiedee Platinen mit gleicher Namesbezeichnung aber verschiedener Nutzung Thermostat-0 Thermostat -1?
$tempArray = array();
foreach($ETA_MLP as $ETA_MLP_tempID)
{
$tempArray[$ETA_MLP_tempID] = MonitorXMLAuslesen(1,$ETA_MLP_tempID, 0, 0).MonitorXMLAuslesen(2,$ETA_MLP_tempID, 0, 0);
}
$DoppelteIDs = array_not_unique($tempArray);
if (!count($DoppelteIDs) == 0)
{
//Doppelte Einträge vorhanden
$AnalyseFehler = true;
write_error("Error: Abfrage kann nicht gestartet werden!",1); // 2= General 1= ETA Alarm
write_error("Folgende ausgewaehlte Monitor Parameter haben gleiche Zieldaten (Knoten/Index): ",1); // 2= General 1= ETA Alarm
SetValueBoolean(GetObjectID("ETA/Meldungen/ETA Status"),false);
foreach (array_keys($DoppelteIDs) as $DoppelteID)
{
// ergänzung konny knoten/erweiterung
write_error("ID: ".$DoppelteID."knoten".MonitorXMLAuslesen(6,$DoppelteID, 0, 0)." Name: ".MonitorXMLAuslesen(6,$DoppelteID, 0, 0),1); // 2= General 1= ETA Alarm
}
} else {
//keine doppelte Einträge vorhanden
$AnalyseFehler = false;
//Bloecke Arrays befüllen
$ETA_MLP_0 = array();
//Block1 Array befüllen
for($count = 1; ($count <= count($ETA_MLP)) and ($count <= 20); $count++)
{
array_push($ETA_MLP_0,$ETA_MLP[$count-1]);
}
//Block2 Array befüllen
if (count($ETA_MLP) > 20) {
$ETA_MLP_1 = array();
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
for($count = 21; ($count <= count($ETA_MLP)) and ($count <= 40); $count++)
{
array_push($ETA_MLP_1,$ETA_MLP[$count-1]);
}
}
//Block3 Array befüllen
if (count($ETA_MLP) > 40) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_2 = array();
for($count = 41; ($count <= count($ETA_MLP)) and ($count <= 60); $count++)
{
array_push($ETA_MLP_2,$ETA_MLP[$count-1]);
}
}
//Block4 Array befüllen
if (count($ETA_MLP) > 60) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_3 = array();
for($count = 61; ($count <= count($ETA_MLP)) and ($count <= 80); $count++)
{
array_push($ETA_MLP_3,$ETA_MLP[$count-1]);
}
}
//Block5 Array befüllen
if (count($ETA_MLP) > 80) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_4 = array();
for($count = 81; ($count <= count($ETA_MLP)) and ($count <= 100); $count++)
{
array_push($ETA_MLP_4,$ETA_MLP[$count-1]);
}
}
//Block6 Array befüllen
if (count($ETA_MLP) > 100) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_5 = array();
for($count = 101; ($count <= count($ETA_MLP)) and ($count <= 120); $count++)
{
array_push($ETA_MLP_5,$ETA_MLP[$count-1]);
}
}
}
}
return $AnalyseFehler;
// print $AnalyseFehler;
}