Habe etwas wieder zurück gedreht - damit er nicht die Variable flutet - geht auch.
if(strpos($datastr, "2" ) == 0 and (strlen($datastr) >= 35)) {
Aber nu kommt:
14.02.2022, 17:15:32 | Register Variable |
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Warning: Zeitüberschreitung beim Warten auf Antwort in C:\ProgramData\Symcon\scripts\28602.ips.php on line 63
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
Notice: Undefined variable: datastring in C:\ProgramData\Symcon\scripts\28602.ips.php on line 53
CODE:
<?php
$confarray = array(
array(11, 58812, "extern bereit"),
array(29, 58270, "intern bereit"),
array(21, 48587, "intern scharf"),
//array(21, 33544, "extern scharf"),
//array("21f1f280330111910000000000000001001911910043", 32662, "OG: Notruf"),
//array("21f1f280330111910000000000000000101911910043", 11163, "EG: Notruf"),
array(26, 30617, "KG: Büro/Gäste/Vorrat"),
array(25, 26610, "KG: Abstell/HWR"),
array(14, 21234, "EG: Eingang"),
array(15, 11540, "EG: Küche"),
array(16, 41463, "EG: Essen"),
array(17, 14293, "EG: Wohnen"),
array(18, 31717, "EG: Gästebad"),
array(19, 53013, "EG: Büro"),
array(20, 31254, "OG: Elternbad"),
array(21, 57272, "OG: Ankleide"),
//array(21, 50950, "OG: Schlafen"),
array(22, 38621, "OG: Kinderbad"),
array(23, 29071, "OG: Sophia"),
array(24, 41380, "OG: Sarah")
//array("21f1f280330111910000000000010000011911910053", 26768, "OG: Sophia Seite"),
//array("21f1f280330111910000000000001000011911910053", 57710, "OG: Sarah Seite"),
);
//if($_IPS['SENDER'] == "Execute"){
RegVar_SetBuffer(32952, ""); // Aufräumen, wenn über Konsole gestartet
//}
if($_IPS['SENDER']== "RegisterVariable"){
// bereits im Puffer der Instanz vorhandene Daten in $data kopieren HIER AUSKOMMENTIEREN
$data = RegVar_GetBuffer($_IPS['INSTANCE']);
// neu empfangene Daten an $data anhängen
$data .= $_IPS['VALUE'];
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
// Daten in hex umwandeln
$datastr = strToHex($data);
IPS_LogMessage($_IPS['SENDER'], "". $datastr);
if(strpos($datastr, "2" ) == 0 and (strlen($datastr) >= 35)) {
//IPS_LogMessage("MC1200", "".$datastr);
RegVar_SetBuffer($_IPS['INSTANCE'], ""); // Registervariable aufräumen
// String in Variable ausgeben wenn mit 2 beginnt und gößer gleich 35 lang
SetValue(21051 , $datastr); // eigentlich nicht nötig
// übergibt zusätzlich noch gesamten string an KNX als text
// KNX_WriteDPT16(21274, $datastr); // Verhindert KNX Fehler, weil Daten zu lang
foreach($confarray as $conf){
$substr = substr($datastring, $conf[0], 1);
$newvalue = ($substr == "1") ? true : false;
$variableID = IPS_GetObjectIDByIdent("Value", $conf[1]);
$oldvalue = GetValueBoolean($variableID);
if($newvalue && !$oldvalue){
// neuer Wert true, alter Wert false, daher Änderung schreiben
SetValue(30068, $conf[2]);
KNX_WriteDPT1($conf[1], true);
}elseif(!$newvalue && $oldvalue){
// neuer Wert false, alter Wert true, daher Änderung schreiben
KNX_WriteDPT1($conf[1], false);
}
// Else: aktuell nichts zu tun
}// Ende foreach
} /// Ende if len>=35
} // Ende if RegisterVariable
function strToHex($string)
{
$hex='';
for ($i=0; $i < strlen($string); $i++)
{
IPS_sleep(25); // Wofür steht das?
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
?>