";
return ("Antwort: ".$Temp[1].$Text[0].$Text[2]."\r\n");
}
function hexString2String($hexString)
{
$return = '';
foreach(str_split($hexString, 2) as $pair)
{
$return .= chr(hexdec($pair));
}
return $return;
}
function buildScommand($Raum)
{
// $Message = $Raum["Temperatur"];
$Temp="000440000000";//BaseString Temperatur & Mode
// echo $Raum["RFAdress"]."
";
$Temp.=$Raum["RFAdress"];
// echo ($Raum["raumId"])."
";
if (strlen($Raum["raumId"])==1) $Temp.="0";
$Temp.=($Raum["raumId"]);
// echo dechex(($Raum["Temperatur"]*2)+64).""."
";
$Temp.=dechex(($Raum["Temperatur"]*2)+64)."";//Temperatur * 2 + 64 für Manuell
// echo $Temp." ";
$Temp=hexString2String($Temp);
$Temp=base64_encode($Temp);
$Message="s:".$Temp."\r\n";//Abschluss
$str = base64_decode(substr($Message,2,strlen($Message)));
$pos = 0;
$readlen = 1; $Temp= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1)))."";
$Temp2=(ord(substr($str,$pos,1))&(255-64-128))/2;
// $Message." => ".$Temp." = ".($Temp2)." Gewollt: ".$Raum["Temperatur"]."
";
return $Message;
}
function buildScommand2()
{
$Temp="0feac1";
// echo ($Raum["raumId"])."
";
$Temp=hexString2String($Temp);
$Temp=base64_encode($Temp);
$Message="T:01,1,".$Temp."\r\n";//Abschluss
//echo $Message." => ".$Temp." = ".($Temp2)." Gewollt: ".$Raum["Temperatur"]."
";
return $Message;
}
function anMaxSenden($CubeRooms)
{
foreach($CubeRooms as $room => $Value)// alle Räume prüfen ob auf manu und Solltemparatur passen
{
//sendCommand("192.168.2.101",buildScommand2());
//echo $CubeRooms[$room]["SendTemperature"]."
";
if(!isset($CubeRooms[$room]["Window"]))$CubeRooms[$room]["Window"] ="closed"; // wenn vom Fenster keine Meldung dann zu annehmen
if (trim($CubeRooms[$room]["Window"])=="open")// Wenn Fenster offen Warunung ausgeben und keine Änderungen senden
{
// echo $room. " Fenster offen!
";
$link2=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link2)// ohne Datenbank keine Fehlererkennung
{
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link2);
$sql="SELECT RoomCube,LastSend,SendTemperature From ". $_SESSION['HeizungTabelle'].'_Archiv'." WHERE RoomCube="."'".$room."'";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
mysql_query("UPDATE ".$_SESSION['HeizungDatenbank']."_Archiv". " SET LastSend=0 WHERE RoomCube='$room'");
mysql_close($link2);
}
}
else // Fenster ist zu, weiter prüfen
{
//echo "Raum: ".$room. " Mode: ".$CubeRooms[$room]["Mode"]. " aktuelle SollTemp: ".$CubeRooms[$room]["SollTemperature"]. " geforderte Solltemp: ".$CubeRooms[$room]["SollTemperature"]."
";
if (!isset($CubeRooms[$room]["Mode"]))$CubeRooms[$room]["Mode"]="manu"; //kein Mode vorhanden manu annehmen
if ($CubeRooms[$room]["Mode"]!="vacation"&&isset($CubeRooms[$room]["SollTemperature"]))// bei vacation keine Änderungen senden
{
if (isset($CubeRooms[$room]["SollTemperature"])&&$CubeRooms[$room]["SollTemperature"]!=0) // ohne Solltemperatur keine Änderungen
{
if(!isset($CubeRooms[$room]["LastSend"]))
$CubeRooms[$room]["LastSend"]=0;
if ($CubeRooms[$room]["SollTemperature"]!=$CubeRooms[$room]["Temperatur"]||$CubeRooms[$room]["Mode"]!="manu")// Solltemperatur nicht im Max oder mode nicht manu = senden
{
/////////////////////// Störung im Raum erkennen ////////////////////////////////////
$link2=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link2)// ohne Datenbank keine Fehlererkennung
{
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link2);
$sql="SELECT RoomCube,LastSend,SendTemperature From ". $_SESSION['HeizungTabelle'].'_Archiv'." WHERE RoomCube="."'".$room."'";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
$row = mysql_fetch_assoc($result);
$CubeRooms[$room]["SendTemperature"]=$row["SendTemperature"];
$CubeRooms[$room]["LastSend"]=$row["LastSend"];
if ($CubeRooms[$room]["Temperatur"]==$CubeRooms[$room]["SendTemperature"])
{// Temperatur wurde schonmal gesendet
if ($CubeRooms[$room]["LastSend"]<$_SESSION['jetzt']-900 &&$CubeRooms[$room]["LastSend"]!=0)
{
//echo "Raum gehorcht nicht
";
if (!isset($CubeRooms[$room]["Bemerkung"]))$CubeRooms[$room]["Bemerkung"]="";
$CubeRooms[$room]["Bemerkung"].="Raum gehorcht seit über 15min nicht
";
//echo $CubeRooms[$room]["Bemerkung"]."
";
}
}
else
{//Temperatur wurde noch nicht gesendet
//echo "Neu senden
";
$sql=("UPDATE ".$_SESSION['HeizungDatenbank']."_Archiv". " SET LastSend=".$_SESSION['jetzt'].", SendTemperature=".$CubeRooms[$room]["Temperatur"]." WHERE RoomCube='$room'");
//echo $sql."
";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
}
mysql_close($link2);
}
else echo "keine Verbindung zur Datenbank in SendMax Temperatur !=
";
if(!isset($_SESSION['Dummy']))
$sendspool[$CubeRooms[$room]["RaumIP"]][$room]=buildScommand($CubeRooms[$room]);
}
else // gewünschte Temperatur ist bereits gesetzt
{
if ($CubeRooms[$room]["LastSend"]!=0) // Temperatur wurde übernommen alten Wert löschen
{
//echo "Alten Wert löschen
";
$link2=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link2)// ohne Datenbank keine Fehlererkennung
{
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link2);
$sql="SELECT RoomCube,LastSend,SendTemperature From ". $_SESSION['HeizungTabelle'].'_Archiv'." WHERE RoomCube="."'".$room."'";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
mysql_query("UPDATE ".$_SESSION['HeizungDatenbank']."_Archiv". " SET LastSend=0 WHERE RoomCube='$room'");
mysql_close($link2);
}
else echo "keine Verbindung zur Datenbank in SendMax Temperatur ==
";
}
}
}
// else
// echo "Keine Solltemperatur! Raum: ". $room."
" ;
}
}
}
if (isset($sendspool))
{
if(!isset($_SESSION['Dummy']))
echo "Gesendete Befehle:
";
// var_dump($sendspool);
// echo "
";
foreach($sendspool as $Cube => $Value)
{
// $fp=openCube($Cube);
if ($_SESSION["fp".str_replace(".","",$Cube)])
{
$_SESSION["CubeSendelast"][$Cube]["Sendelast"]="0";
foreach ($sendspool[$Cube] as $room => $Value)
{
// echo $Cube." : ".$room." => ". $sendspool[$Cube][$room]."
";
////////////////// Für Testausgabe ////////////////////////////////
$Message=$sendspool[$Cube][$room];
$str = base64_decode(substr($Message,2,strlen($Message)));
$pos = 0;
$readlen = 1; $Temp= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $Temp.= dechex(ord(substr($str,$pos,1)))."";
$Temp2=(ord(substr($str,$pos,1))&(255-64-128))/2;
//////////////////////////////////////////////////////////////////////////////////////////
if(!isset($_SESSION['Dummy']))
{
if((int)$_SESSION["CubeSendelast"][$Cube]["Sendelast"]<90)
{
if(!isset($_SESSION["Transmissions"]))$_SESSION["Transmissions"]="";
echo "$Cube. ". $room. " ändern von ".$CubeRooms[$room]["SollTemperature"]." auf".$Temp2. " Grad. ====>";
$_SESSION["Transmissions"].= "$Cube. ". $room. " ändern von ".$CubeRooms[$room]["SollTemperature"]." auf".$Temp2. " Grad. ====>";
$_SESSION["Transmissions"].= sendCommand($Cube,$sendspool[$Cube][$room]);
}
else
{
echo "Dutysycle! Folgender Befehl wäre gesendet worden: ".$Cube. " ". $room. " ändern ändern von ".$CubeRooms[$room]["SollTemperature"]." auf".$Temp2. " Grad.
";
$_SESSION["Transmissions"].= "$Cube. DUTYCYCLE! Nicht gesendet:". $room. " ändern von ".$CubeRooms[$room]["SollTemperature"]." auf".$Temp2. " Grad.
";
}
}
else
{
echo "Folgender Befehl wäre gesendet worden: ".$Cube. " ". $room. " ändern ändern von ".$CubeRooms[$room]["SollTemperature"]." auf".$Temp2. " Grad.
";
}
// getCubeData($Cube);
}
fclose($_SESSION["fp".str_replace(".","",$Cube)]);
unset($_SESSION["fp".str_replace(".","",$Cube)]);
}
}
}
return $CubeRooms;
}
function readArchivTemperature($CubeRoom,$key)
{
//echo "Für folgenden Raum wurde keine Temperatur gemessen: ".$key."
";
//echo "Read Archiv
";
$tabelle= $_SESSION['HeizungTabelle'].'_Archiv' ;
$link=mysql_connect($_SESSION["Heizungssteuerunghost"], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link)
{
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link);
$sql="SELECT RoomCube,timestamp,IstTemp FROM ". $tabelle." WHERE RoomCube='$key'";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result)
{
$row = mysql_fetch_assoc($result);
{
if ($row["timestamp"]>=$_SESSION['jetzt']-(3600))
{
$CubeRoom["IstTemperature"]=$row["IstTemp"];
$CubeRoom["IstTemperatureText"]=$CubeRoom["IstTemperature"]. " (veraltet)";
//echo "aus Datenbank: ".$key.$CubeRoom["IstTemperature"]."
";
}
else
{
//echo "Temperatur veraltet: ".$key." ".$row["IstTemp"]." von: ".date("d.m.Y H:i:s",$row["timestamp"])."
";
$Zuordnungsdabelle=getMaxRooms();// die Configuration einlesen
foreach($Zuordnungsdabelle as $key2 => $Value)
{
$Zuordnungsdabelle[$Zuordnungsdabelle[$key2]["RoomCube"]]=$Zuordnungsdabelle[$key2];
unset ($Zuordnungsdabelle[$key2]);// erstes Feld ist jetzt CubeRaum
}
$CubeRoom["IstTemperature"]=$Zuordnungsdabelle[$key]["EcoTemp"];
$CubeRoom["IstTemperatureText"]=$CubeRoom["IstTemperature"]. " (Ersatzwert)";
}
//echo "Standart eco: ".$key.$CubeRoom["IstTemperature"]."
";
}
}
// $result = mysql_close($link);
}
else
{
echo "Datenbank archivtempeartur lesen fehlgeschlagen
";
$CubeRoom["IstTemperature"]=$Zuordnungsdabelle[$key]["EcoTemp"];
}
return $CubeRoom;
}
function writeArchiv($CubeRoom,$key)
{
//echo "write Archiv
";
//////////////////////////////// zuerst letzten gemessenen Wert mit timestamp hinterlegen
$tabelle= $_SESSION["HeizungTabelle"].'_Archiv' ;
$link=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link)
{
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link);
$sql="SELECT RoomCube,timestamp,IstTemp FROM ". $tabelle." WHERE RoomCube='$key'";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result)
{
$row = mysql_fetch_assoc($result);
{
if ($row["RoomCube"]==$key)
{
//echo "gefunden".$key.$CubeRoom["IstTemperature"]."
";
mysql_query("UPDATE ".$tabelle. " SET timestamp=".$_SESSION['jetzt']. ", IstTemp=".$CubeRoom["IstTemperature"]. " WHERE RoomCube='$key'");
// mysql_query("UPDATE ".$tabelle. " SET IstTemp=".$CubeRoom["IstTemperature"]. " WHERE RoomCube='$key'");
}
else
{
//echo "nicht gefunden".$key.$CubeRoom["IstTemperature"]."
";
$result = mysql_query("INSERT INTO ".$tabelle." (RoomCube)
VALUES ('$key')", $link);
mysql_query("UPDATE ".$tabelle. " SET timestamp=".$_SESSION['jetzt']. ", IstTemp=".$CubeRoom["IstTemperature"]. " WHERE RoomCube='$key'");
// mysql_query("UPDATE ".$tabelle. " SET IstTemp=".$CubeRoom["IstTemperature"]. " WHERE RoomCube='$key'");
}
}
}
$result = mysql_close($link);
}
//////////////////////////////////// jetzt Daten für die Messungen verarbeiten und sammeln ///////////////////////////////
if (isset($CubeRoom["IstTemperature"]))
{
$tabelle= $_SESSION["HeizungTabelle"].'_Power' ;
$link=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link)
{
/////////////////////////// prüfen ob gerade gemessen wird ////////////////////////////
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link);
$sql="SELECT Bereich,timestamp,15,16,17,18,19,20,21 FROM ". $tabelle." WHERE RoomCube='$key'";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result)
{
$row = mysql_fetch_assoc($result);
{
if ($row["RoomCube"]==$key)
{
//echo "gefunden".$key.$CubeRoom["IstTemperature"]."
";
$bereich=$row["Bereich"];
$start=$row["timestamp"];
if (!isset($bereich)) $bereich=0;
if ($bereich!=0) // Messung läuft
{
if(isset($CubeRoom["VentilMin"]))
{
$bereich=floor($CubeRoom["IstTemperature"]);
$daueralt=$row[$bereich];
if($CubeRoom["VentilMin"]>80)
{
if (floor($CubeRoom["IstTemperature"])==$CubeRoom["IstTemperature"]) // Startbedingung für eine Messung
{
$dauerneu= ($_SESSION['jetzt'] - $start)/60;
if ($dauerneu>$daueralt)
{
mysql_query("UPDATE ".$tabelle. " SET $bereich=".$dauerneu." WHERE RoomCube='$key'");
file_put_contents("Max_update_log.txt","Neue Berechnung :".$key. " Breich:".$bereich. "Dauer: ".$dauerneu."\r\n", FILE_APPEND);
}
}
}
else // messung abbrechen
{
if ($CubeRoom["IstTemperature"]+.3>=$CubeRoom["Temperatur"]) // kurz vor Endtemperatur
{
$dauerneu= ($_SESSION['jetzt'] - $start)/60;
if ($dauerneu>$daueralt)
{
mysql_query("UPDATE ".$tabelle. " SET $bereich=".$dauerneu.", Bereich=0 WHERE RoomCube='$key'");
file_put_contents("Max_update_log.txt","Neue Berechnung :".$key. " Breich:".$bereich. "Dauer: ".$dauerneu."\r\n", FILE_APPEND);
}
}
else // zu weit von Endtemperaur entfernt
{
mysql_query("UPDATE ".$tabelle. " SET Bereich=0 WHERE RoomCube='$key'");
file_put_contents("Max_update_log.txt","Berechnung abgebrochen :".$key. " Breich:".$bereich. "Dauer: ".$dauerneu."\r\n", FILE_APPEND);
}
}
}
}
else // aktuell keine Messung
{
if(isset($CubeRoom["VentilMin"]))
{
if($CubeRoom["VentilMin"]>80)
{
if (floor($CubeRoom["IstTemperature"])==$CubeRoom["IstTemperature"]) // Startbedingung für eine Messung
{
$bereich=floor($CubeRoom["IstTemperature"]);
mysql_query("UPDATE ".$tabelle. " SET timestamp=".$_SESSION['jetzt']. ", Bereich=".$bereich. " WHERE RoomCube='$key'");
file_put_contents("Max_update_log.txt","Messung gestartet :".$key. " Breich:".$bereich."\r\n", FILE_APPEND);
}
}
}
}
}
}
}
}
$result = mysql_close($link);
}
}
function archiviereMax($CubeRooms)
{
foreach($CubeRooms as $key => $Value)
{
if (isset($CubeRooms[$key]["IstTemperature"]))
{
if (($CubeRooms[$key]["IstTemperature"])==0)
{
$CubeRooms[$key]=readArchivTemperature($CubeRooms[$key],$key);
//echo "Standart eco: ".$key.$CubeRooms[$key]["IstTemperature"]."
";
}
else
{
writeArchiv($CubeRooms[$key],$key);
$CubeRooms[$key]["IstTemperatureText"]=$CubeRooms[$key]["IstTemperature"];
}
}
else
$CubeRooms[$key]=readArchivTemperature($CubeRooms[$key],$key);
}
return $CubeRooms;
}
function Heizstartsetzen($CubeRooms)
{
$Zuordnungsdabelle=getMaxRooms();// die Configuration einlesen
foreach($Zuordnungsdabelle as $key => $Value)
{
$Zuordnungsdabelle[$Zuordnungsdabelle[$key]["RoomCube"]]=$Zuordnungsdabelle[$key];
unset ($Zuordnungsdabelle[$key]);// erstes Feld ist jetzt CubeRaum
}
foreach ($CubeRooms as $key => $Value)
{
//echo $key.$CubeRooms[$key]["Temperatur"]."
";
$CubeRooms[$key]["ColurSollTemp"]="";
if (isset($CubeRooms[$key]["Status"]))
{
$CubeRooms[$key]["Heizstart"]=$_SESSION['jetzt'];
}
else
{
if (isset($CubeRooms[$key]["next_date"]))
{
if ($CubeRooms[$key]["next_date"]<=$_SESSION['jetzt'])
$CubeRooms[$key]["Heizstart"]=$_SESSION['jetzt'];
else
{
$deltatemp=$CubeRooms[$key]["Temperatur"] - $CubeRooms[$key]["IstTemperature"];
$deltatime=$deltatemp * $Zuordnungsdabelle[$key]["power"]*60;
$CubeRooms[$key]["Heizstart"]=$CubeRooms[$key]["next_date"]-$deltatime;
if ($CubeRooms[$key]["Heizstart"]>$_SESSION['jetzt'])
{
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["EcoTemp"];
$CubeRooms[$key]["ColurSollTemp"]="";
}
}
}
else
{
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["EcoTemp"];
$CubeRooms[$key]["ColurSollTemp"]="";
//echo $key.$CubeRooms[$key]["Temperatur"]."
";
}
if(isset($_SESSION['HeiuzungAus']))
{
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["EcoTemp"];
$CubeRooms[$key]["ColurSollTemp"]="";
}
}
//echo $key.$CubeRooms[$key]["Temperatur"]."
";
//echo Zuordnungsdabelle[$key]["Following"]."
";
//echo "Ziel: ". $CubeRooms[$key]["Temperatur"]. " Ist: ".$CubeRooms[$key]["IstTemperature"]."
";
}
return $CubeRooms;
}
function TermineZuordnen($CubeRooms,$PlanRoomsTermine)//CubeRooms=Räume von Max PlanRomsTermine=Termine vom Plan
{
$Zuordnungsdabelle=getMaxRooms();// die Configuration einlesen
foreach($Zuordnungsdabelle as $key => $Value)
{
$Zuordnungsdabelle[$Zuordnungsdabelle[$key]["RoomCube"]]=$Zuordnungsdabelle[$key];
unset ($Zuordnungsdabelle[$key]);// erstes Feld ist jetzt CubeRaum
}
// var_dump($Zuordnungsdabelle);
foreach($CubeRooms as $key => $Value) //für jeden Cube Raum ermitteln wann der nächste Termin ansteht
{
unset($CubeRooms[$key]["Temperatur"]);
//echo $key."
";
//////////////////////////////Direkte Zuordnung//////////////////////////////////////////////
if ($Zuordnungsdabelle[$key]["RoomPlan"]!="")//Raum ist direkt zugeordent
{
//echo "Direkte Zuordnung
";
//echo $Zuordnungsdabelle[$key]["RoomPlan"]."
";
if (isset($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["status"])) // Termin läuft
{
$CubeRooms[$key]["next_date"]=$_SESSION['jetzt'];
if (!isset($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"]))
$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"]=0;
if ($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"]!=0)
{
$CubeRooms[$key]["Temperatur"]=$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"];
}
else
{
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["ComfortTemp"];
//echo "Comfort ".$Zuordnungsdabelle[$key]["ComfortTemp"]."
";
}
}
else
{
if (isset($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["last_date"]))
{ //wenn vorhanden letzten Termin übernehmen
$CubeRooms[$key]["last_date"]= $PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["last_date"];
}
{
if (isset($CubeRooms[$key]["nextDate"])) // um Fehlermeldungen zu vermeiden darf nur mit gesetzten Variablen verglichen werden
{ // es wurde schon eine Zeit ermittelt, wenn die neue Zeit vorher liegt aktualisieren
//echo $key."
";
if (isset($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["next_date"])&&$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["next_date"]<$CubeRooms[$key]["nextDate"])
{
$CubeRooms[$key]["next_date"]=$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["next_date"];
if ($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"]!=0)
$CubeRooms[$key]["Temperatur"]=$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"];
else
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["ComfortTemp"];
}
}
else
{// Wurde vorher noch nicht gesetzt als Termin auf jeden Fall übernehmen
if (isset($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["next_date"]))
{
//echo "Erste direkte Zuordnung ". $key." = ".$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["next_date"]."
";
$CubeRooms[$key]["next_date"]=$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["next_date"];
if (isset($PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"]))
$CubeRooms[$key]["Temperatur"]=$PlanRoomsTermine[$Zuordnungsdabelle[$key]["RoomPlan"]]["Temperatur"];
else
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["ComfortTemp"];
}
}
}
}
}
else
{
//echo "Indirekte Zuordnung
";
/////////////////////////////////Abhängige Zuordnung////////////////////////////////////////////
//echo $Zuordnungsdabelle[$key]["Following"]."
";
$depending=explode(",",$Zuordnungsdabelle[$key]["Following"]);// alle abhängigen Räume expandieren
foreach($depending as $key3 => $Value)
{
//echo $key."
";
if (isset($PlanRoomsTermine[$depending[$key3]]["status"])) //Termin läuft
{
$CubeRooms[$key]["next_date"]=$_SESSION['jetzt'];
//echo $key." Abhängigkeit Laufender Termin: ".date("d.m.Y H:i:s",$CubeRooms[$key]["next_date"])."
";
if (!isset($CubeRooms[$key]["Temperatur"]))
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["ComfortTemp"];
}
else
{
if (isset($PlanRoomsTermine[$depending[$key3]]["last_date"]))
{ //wenn vorhanden letzten Termin übernehmen
if (isset($CubeRooms[$key]["last_date"]))
{// wenn bereits einmal übernommen erst vergelichen
if ($PlanRoomsTermine[$depending[$key3]]["last_date"]>$CubeRooms[$key]["last_date"])
$CubeRooms[$key]["last_date"]= $PlanRoomsTermine[$depending[$key3]]["last_date"];
}
else// wurde noch nicht gesetzt also übernehmen
$CubeRooms[$key]["last_date"]= $PlanRoomsTermine[$depending[$key3]]["last_date"];
} // last_date ist nun auf dem aktuellen Stand
{
if (isset($CubeRooms[$key]["next_date"])) // um Fehlermeldungen zu vermeiden darf nur mit gesetzten Variablen verglichen werden
{ // es wurde schon eine Zeit ermittelt, wenn die neue Zeit vorher liegt aktualisieren
//echo $key." Abhängigkeit NeuerFund unverändert ".date("d.m.Y H:i:s",$CubeRooms[$key]["next_date"])."
";
if (isset($PlanRoomsTermine[$depending[$key3]]["next_date"]))
{
if ($PlanRoomsTermine[$depending[$key3]]["next_date"]<$CubeRooms[$key]["next_date"])
{
$CubeRooms[$key]["next_date"]=$PlanRoomsTermine[$depending[$key3]]["next_date"];
//echo $key." Abhängigkeit NeuerFund ".date("d.m.Y H:i:s",$CubeRooms[$key]["next_date"])."
";
if (!isset($CubeRooms[$key]["Temperatur"])) $CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["ComfortTemp"];
}
}
}
else
{// Wurde vorher noch nicht gesetzt als Termin auf jeden Fall übernehmen
//var_dump($PlanRoomsTermine[$key3]);
//echo $depending[$key3]."
";
if (isset($PlanRoomsTermine[$depending[$key3]]["next_date"]))
{
$CubeRooms[$key]["next_date"]=$PlanRoomsTermine[$depending[$key3]]["next_date"];
//echo $key." Abhängigkeit erster Fund ".date("d.m.Y H:i:s",$CubeRooms[$key]["next_date"])."
";
if (!isset($CubeRooms[$key]["Temperatur"])) $CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["ComfortTemp"];
}
}
}
}
}
}
if (isset($CubeRooms[$key]["last_date"],$CubeRooms[$key]["next_date"]))
{
if ($CubeRooms[$key]["next_date"]-$CubeRooms[$key]["last_date"]<=$_SESSION["HeizungHaltezeit"]*60)
$CubeRooms[$key]["next_date"]=$_SESSION['jetzt'];
}
$CubeRooms[$key]["TemperaturAnhang"]="";
if (!isset($CubeRooms[$key]["Temperatur"]))
$CubeRooms[$key]["Temperatur"]=$Zuordnungsdabelle[$key]["EcoTemp"];
else
{
//echo $key. " MaxSetPoint= ".$CubeRooms[$key]["MaxSetPointTemperature"]." gesetzt: ". $CubeRooms[$key]["Temperatur"]."
";
if (isset($CubeRooms[$key]["MaxSetPointTemperature"]))
{
if ($CubeRooms[$key]["Temperatur"]>$CubeRooms[$key]["MaxSetPointTemperature"])
{
$CubeRooms[$key]["Temperatur"]=$CubeRooms[$key]["MaxSetPointTemperature"]; // die Temperatur darf nicht höher gestellt werden als die Maximale Temperatur die in den Thermostaten eingetragen ist
$CubeRooms[$key]["TemperaturAnhang"]=" im Thermostat begrenzt";
}
}
}
//echo "Terminzuordnen - ". $key." : ". $CubeRooms[$key]["Temperatur"]."
";
}
return $CubeRooms;
}
function Raumzuordnen($CubeRoomsTermine)
{
//echo "Raumzuordnen
";
// var_dump($CubeRoomsTermine);
if ($CubeRoomsTermine!="")
{
$tabelle= $_SESSION['BelegungsplanTabelle'].'room' ;
$link=mysql_connect($_SESSION['Belegungsplanhost'], $_SESSION['BelegungsplanDatenbankBenutzer'], $_SESSION['BelegungsplanDatenbankPassword']);
if ($link)
{
foreach ($CubeRoomsTermine as $key => $Value)
{
$db_selected = mysql_select_db($_SESSION['BelegungsplanDatenbank'], $link);
$sql="SELECT id,room_name FROM ". $tabelle." WHERE id=".$key;
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result)
{
$row = mysql_fetch_assoc($result);
$CubeRoomsTermine[$row["room_name"]]=$CubeRoomsTermine[$key];
unset ($CubeRoomsTermine[$key]);
}
}
$result = mysql_close($link);
}
}
return $CubeRoomsTermine;
}
function findeTermine ()
{
//echo "Finde Termine
";
$tabelle= $_SESSION["BelegungsplanTabelle"].'entry' ;
echo date("d.m.Y H:i:s",$_SESSION['jetzt'])."
";
$link=mysql_connect($_SESSION["Belegungsplanhost"], $_SESSION["BelegungsplanDatenbankBenutzer"], $_SESSION["BelegungsplanDatenbankPassword"]);
if ($link)
{
$db_selected = mysql_select_db($_SESSION["BelegungsplanDatenbank"], $link);
$sql="SELECT start_time,end_time,room_id,Temperatur FROM ". $tabelle;
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result)
{
while ($row = mysql_fetch_assoc($result))
{
$raum_id=$row["room_id"];
//laufende Termine ermitteln
if($row["start_time"]<=$_SESSION['jetzt']&&$row["end_time"]>=$_SESSION['jetzt'])
{
$Raum[$raum_id]["status"]="läuft";
if($row["Temperatur"]!=0)$Raum[$raum_id]["Temperatur"]=$row["Temperatur"];
//echo $raum_id."
";
}
else
// unset($Raum[$raum_id]["status"]);
if ($row["end_time"]<$_SESSION['jetzt']&&$row["end_time"]>$_SESSION['jetzt']+($_SESSION["HeizungHaltezeit"]*60))//letzten abgelaufenen Termin finden
{
if(!isset($Raum[$raum_id]["last_date"]))
{
$Raum[$raum_id]["last_date"]=$row["end_time"];
if($row["Temperatur"]!=0)$Raum[$raum_id]["Temperatur"]=$row["Temperatur"];
}
else
if ($row["end_time"]>$Raum[$raum_id]["last_date"])
{
$Raum[$raum_id]["last_date"]=$row["end_time"];
if($row["Temperatur"]!=0)$Raum[$raum_id]["Temperatur"]=$row["Temperatur"];
}
}
if ($row["start_time"]>=$_SESSION['jetzt']&&$row["start_time"]<=$_SESSION['jetzt']+8*3600) //nächsten Termin finden
{
if(!isset($Raum[$raum_id]["next_date"]))
{
$Raum[$raum_id]["next_date"]=$row["start_time"];
//echo $row["Temperatur"]."
";
if($row["Temperatur"]!=0)$Raum[$raum_id]["Temperatur"]=$row["Temperatur"];
}
else
{
if ($row["start_time"]<$Raum[$raum_id]["next_date"])
{
$Raum[$raum_id]["next_date"]=$row["start_time"];
//echo $row["Temperatur"]."
";
if($row["Temperatur"]!=0)$Raum[$raum_id]["Temperatur"]=$row["Temperatur"];
}
}
}
}
}
else echo "keine Daten
";
$result = mysql_close($link);
}
else echo "keine Verbindung zur Datenbank
";
if (!isset($Raum))
$Raum="";
return $Raum;
}
function getPlanRooms() // Array der Räume des Belegungsplanes zurückgeben
{
// echo "getPlanRooms
";
$count=0;
$tabelle= $_SESSION['BelegungsplanTabelle'].'room' ;
$status=0;
$link=mysql_connect($_SESSION['Belegungsplanhost'], $_SESSION['BelegungsplanDatenbankBenutzer'], $_SESSION['BelegungsplanDatenbankPassword']);
if ($link)
{
$db_selected = mysql_select_db($_SESSION['BelegungsplanDatenbank'], $link);
$sql="SELECT room_name FROM ". $tabelle;
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result)
{
while ($row = mysql_fetch_assoc($result))
{
$Raum[$count]=$row["room_name"];
$count ++;
}
}
$result = mysql_close($link);
}
// echo "getPlanRooms Ende
";
return $Raum;
}
function getMaxRooms() // Array der Räume des Belegungsplanes zurückgeben
{
// echo "GetMaxRooms".$_SESSION['Heizungssteuerunghost']." : ". $_SESSION['HeizungssteuerungDatenbankBenutzer']." : ". $_SESSION['HeizungssteuerungDatenbankPassword']."
";
$count=0;
//echo $_SESSION['Heizungssteuerunghost']." ".$_SESSION['HeizungssteuerungDatenbankBenutzer']." ". $_SESSION['HeizungssteuerungDatenbankPassword']."
";
$link=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link)
{
$tabelle= $_SESSION['HeizungTabelle'].'_Cube' ;
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link);
$sql="SELECT RoomCube,RoomPlan,Following,EcoTemp,ComfortTemp,power FROM ". $tabelle;
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result)
{
while ($row = mysql_fetch_assoc($result))
{
$Raum[$count]["RoomCube"]=$row["RoomCube"];
$Raum[$count]["RoomPlan"]=$row["RoomPlan"];
$Raum[$count]["Following"]=$row["Following"];
$Raum[$count]["EcoTemp"]=$row["EcoTemp"];
$Raum[$count]["ComfortTemp"]=$row["ComfortTemp"];
$Raum[$count]["power"]=$row["power"];
$count ++;
}
}
}
else echo mysql_error();
$result = mysql_close($link);
// echo "GetMaxRooms Ende
";
return $Raum;
}
function getRooms()
{
$Cubes = getIPs();
// returns Array[Cubecount]["IP"]
// [Serialnumber]
$SCube= count ($Cubes)-1; // extract number of found cubes
for ($FCube=0; $FCube < count ($Cubes); $FCube++) // recieve and decode Data and put into array
{
$Cube[$FCube]= getCubeData($Cubes[$FCube]["IP"]);
$Cube[$FCube]["CubeIP"]=$Cubes[$FCube]["IP"];
}
if ($SCube<1)
{
echo 'Kein Antwort: '. socket_strerror(socket_last_error()). "
";
}
$raumnr=0;
foreach ($Cube as $i => $Value) // große Schleife alle Cubes durchlaufen
{
// if (isset($Cube [$i]["data"]))
{
//var_dump($Cube [$i]["data"]);
foreach ($Cube [$i]["data"]["rooms"] as $i2 => $Value) // alle Räume des Cubes durchlaufen
{
$devicenr=0;
if (isset($Cube [$i]["data"]["rooms"][$i2]["RoomName"]))
{
$link2=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link2)
{
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link2);
$sql="SELECT RoomCube,LastSend,SendTemperature From ". $_SESSION['HeizungTabelle'].'_Archiv'." WHERE RoomCube="."'".$Cube [$i]["data"]["rooms"][$i2]["RoomName"]."'";
//echo $Cube [$i]["data"]["rooms"][$i2]["RoomName"]."
";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
$row = mysql_fetch_assoc($result);
if ($row["RoomCube"]==$Cube [$i]["data"]["rooms"][$i2]["RoomName"])
{
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["LastSend"] =$row["LastSend"];
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["SendTemperature"] =$row["SendTemperature"];
}
mysql_close($link2);
}
else echo "Keine Verbindung zur Datenbank in GetRooms Archiv lesen
";
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["raumId"]=$Cube [$i]["data"]["rooms"][$i2]["RoomID"];
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["RaumIP"]=$Cube [$i]["CubeIP"];
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["VentilMin"]=100;
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["VentilMax"]=0;
foreach ($Cube[$i]["data"]["rooms"][$i2]["Devices"] as $i3 => $Value) // alle devices eines Raumes durchlaufen
{
if(isset($erwartet[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]))
unset($erwartet[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]);
// letzten Empfang in Datenbank ablegen
//echo $_SESSION['Heizungssteuerunghost']." ".$_SESSION['HeizungssteuerungDatenbankBenutzer']." ". $_SESSION['HeizungssteuerungDatenbankPassword']."
";
$link=mysql_connect($_SESSION['Heizungssteuerunghost'], $_SESSION['HeizungssteuerungDatenbankBenutzer'], $_SESSION['HeizungssteuerungDatenbankPassword']);
if ($link)
{
$db_selected = mysql_select_db($_SESSION['HeizungDatenbank'], $link);
$sql="SELECT RfAdress,RaumID,Roomname,Type,Name,LastRead,LowBattSince,MaxSetPointTemperature,Temperature,ValvePos,ActualTemp,Window,Mode From ". $_SESSION['HeizungTabelle'].'_LastRead'." WHERE RfAdress="."'".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]."'";
//echo $sql."
";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
$row = mysql_fetch_assoc($result);
if ($row["RfAdress"]==$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]) // device bereits in Datenbank vorhanden, also nur Updaten
{
if (!isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["LowBatt"]))
$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["LowBatt"]=0;
if ($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["LowBatt"]==1) //Batterie ist schwach
{
if ($row["LowBattSince"]!=0)
{
$LowBatt=$row["LowBattSince"];
// echo "Gefunden: ".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["Name"]." ".date("d.m.Y H:i:s",$LowBatt)."
";
}
else
$LowBatt=$_SESSION['jetzt'];
$sql=("UPDATE ".$_SESSION['HeizungTabelle'].'_LastRead'. " SET LastRead=".$_SESSION['jetzt']. ', LowBattSince='. $LowBatt. ', RaumID='. $i2." WHERE RfAdress="."'".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]."'");
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
}
else
{
$LowBatt=0;
if ($row["LowBattSince"]!=0)
{
$sql=("UPDATE ".$_SESSION['HeizungTabelle'].'_LastRead'. " SET LastRead=".$_SESSION['jetzt']. ', LowBattSince='. $LowBatt." WHERE RfAdress="."'".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]."'");
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
// echo "Gefunden: ".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["Name"]." ".date("d.m.Y H:i:s",$LowBatt)."
";
}
}
//echo $_SESSION['jetzt']."
";
//echo $sql."
";
}
else
{
if ($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["LowBatt"]==1)
$LowBatt=$_SESSION['jetzt'];
else
$LowBatt=0;
$sql=("INSERT INTO ".$_SESSION['HeizungTabelle'].'_LastRead'." (RfAdress, Name, LastRead, LowBattSince) VALUES ("."'".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]."'".", "."'".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["Name"]."'".", ".$_SESSION['jetzt'].", ".$LowBatt.")");
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
}
}
else echo "Keine Verbindung
";
$sql="UPDATE ".$_SESSION['HeizungTabelle'].'_LastRead'. " SET Type=".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["DeviceType"].", Roomname='".$Cube [$i]["data"]["rooms"][$i2]["RoomName"]."', LastRead=".$_SESSION['jetzt'];
$sql.=", LastIP='".$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["RaumIP"]."'";
if ($Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["DeviceType"]==1) //Heizkörperthermostat
if ((isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Mode"]))&&($Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["DeviceType"]==1||$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["DeviceType"]==3))
{
$sql.=", Mode='".$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Mode"]."'";
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Mode"]=$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Mode"];
}
if (isset($Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Bemerkung"]))// Meldungen sammeln und anhängen
{
if ($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["LowBatt"]==1)
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Bemerkung"].=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["Name"]." Batterie schwach seit ".date("d.m.Y H:i:s",$LowBatt)."
";
if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"]))
if ($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"]=="open")
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Bemerkung"].=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["Name"]." offen
";
}
else // Meldungen sammeln und als ersten Eintrag übernehmen
{
if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["LowBatt"]))
if ($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["LowBatt"]==1)
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Bemerkung"]=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["Name"]." Batterie schwach seit ".date("d.m.Y H:i:s",$LowBatt)."
";
if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"]))
if ($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"]=="open")
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Bemerkung"]=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["Name"]." offen
";
}
if ($Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["DeviceType"]==1) //Heizkörperthermostat
{
if(isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["MaxSetPointTemperature"]))
{
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["MaxSetPointTemperature"]=$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["MaxSetPointTemperature"];//die Maximale Temperatur aus den Thermostaten übertragen
$sql.=", MaxSetPointTemperature=".$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["MaxSetPointTemperature"];
}
if(!isset($Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["RFAdress"]))
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["RFAdress"]=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]; //Eine RF Adresse für den Raum bereitstellen
if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Temperature"]))
{
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["SollTemperature"]=$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Temperature"];
$sql.=", Temperature=".$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["SollTemperature"];
}
if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ValvePos"]))
{
if($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ValvePos"]<$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["VentilMin"])$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["VentilMin"]=$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ValvePos"];
if($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ValvePos"]>$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["VentilMax"])$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["VentilMax"]=$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ValvePos"];
$sql.=", ValvePos=".$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ValvePos"];
}
if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ActualTemp"]))
{
if ($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ActualTemp"]!=0)
{
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["IstTemperature"]= $Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ActualTemp"];
$sql.=", ActualTemp=".$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["IstTemperature"];
// echo "Heizkörperthermostat - ".$Cube [$i]["data"]["rooms"][$i2]["RoomName"]." ". $Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["IstTemperature"]."
";
}
}
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Heizung"][$devicenr]=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"];
$devicenr ++;
}
if ($Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["DeviceType"]==3) //Wandthermostat
{
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["RFAdress"]=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]; //Eine RF Adresse für den Raum bereitstellen
//echo "Wandthermostat: ".$Cube [$i]["data"]["rooms"][$i2]["RoomName"].": ".$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ActualTemp"]. "
";
// if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ActualTemp"]))
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["IstTemperature"]=$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["ActualTemp"];
$sql.=", ActualTemp=".$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["IstTemperature"];
// if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Temperature"]))
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["SollTemperature"]=$Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Temperature"];
$sql.=", Temperature=".$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["SollTemperature"];
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Wandthermostat"]=$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"];
$devicenr ++;
}
if ($Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["DeviceType"]==4)
{
//echo $Cube [$i]["data"]["rooms"][$i2]["RoomName"].":
";
if (isset($Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"]))
{
if (!isset($Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Window"]))
{
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Window"]= $Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"];
}
else
{
if ($Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Window"]!="open")
$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Window"]= $Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"];
}
//echo $Cube [$i]["deviceconf"][$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]]["Window"]."
";
$sql.=", Window='".$Raum[$Cube [$i]["data"]["rooms"][$i2]["RoomName"]]["Window"]."'";
}
$devicenr ++;
}
$sql.=" WHERE RfAdress="."'".$Cube [$i]["data"]["rooms"][$i2]["Devices"][$i3]["RFAdress"]."'";
//echo $sql. "
";
if ($link) $result = mysql_query($sql) or die('Query failed: ' . mysql_error());
mysql_close($link);
}
$raumnr ++;
}
}
}
}
//var_dump($Raum);
return $Raum;
}
function getIPs()
{
// returns array [laufende nr.][Serial]
// ["IP"]
$port = 23272; //port for global call
$package="eQ3Max*\0**********I";
$host = "224.0.0.1"; // IP for global call
$Versuche=0;
while ($Versuche <3)
{
$Erfolg=0;
try
{
$socket = fsockopen('udp://'.$host. ':'.$port);
fputs($socket, $package);
fclose($socket);
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if (!$socket)
{
// echo 'Unable to create socket '. $port. ".". socket_strerror(socket_last_error()). "
";
$Versuche++;
}
if (!socket_bind($socket, $_SERVER["SERVER_ADDR"], $port))
{
// echo 'Unable to bind socket '. $port. ".". socket_strerror(socket_last_error()). "
";
$Versuche++;
}
else
{
$Versuche =3;
$Erfolg=1;
}
}
catch (Exception $e)
{
}
if ($Versuche <3) sleep(3);
}
if ($Erfolg) //get IP and serial
{
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 4, "usec" => 0));
$SCube=0;
$antwort="dummy"; //set to enter the while loop
while ($antwort)
{
$antwort="";
try
{
if (!(socket_recvfrom($socket, $antwort, 20, 0, $from[$SCube], $port))) throw new Exception('Division durch Null.');
}
catch (Exception $e)
{
}
if($antwort!="")
{
$result[$SCube]["Serial"]=$antwort;
$result[$SCube]["IP"]=$from[$SCube];
//echo $from[$SCube]. "
";
$SCube++;
}
}
}
socket_close($socket);
return $result;
}
function getCubeData($host)
{
//returns
# Datenstruktur
#
# $Cube [Nummer]["data"][sys]["SerialNumber"]
# [RFAdress]
# [Firmware]
# [1?]
# [HTTP-ConnID]
# [2?]
# [3?]
# [Date]
# [Time]
# [Timestamp]
#
# $Cube [Nummer]["data"]["rooms"][RoomID]
# ["RoomNameLength"]
# ["RoomName"]
# ["RFAdress(?)"]
# ["Devices"]["DeviceType"]
# ["RFAdress"]
# ["SerialNumber"]
# ["NameLength"]
# ["Name"]
# ["RoomID"]
# $Cube [Nummer]["data"]["devices"]["098234"]["?1"] DeviceTyp 0
# ["RFAdress"]
# ["DeviceType"]
# ["?2"]
# ["SerialNumber"]
# ["PortalEnabled"]
# ["?3"]
# ["?4"]
# ["?5"]
# ["?6"]
# ["?7"]
# ["?8"]
# ["PortalURL"]
# ["?9"]
# ["?A"]
# ["?B"]
# ["?C"]
# ["?D"]
# ["?E"]
# $Cube [Nummer]["data"]["devices"]["098234"]["?1"] DeviceTyp 1
# ["RFAdress"]
# ["DeviceType"]
# ["?2"]
# ["SerialNumber"]
# ["ComfortTemperature"]
# ["ComfortTemperature"]
# ["MaxSetPointTemperature"]
# ["MinSetPointTemperature"]
# ["TemperatureOffset"]
# ["WindowOpenTemperature"]
# ["WindowOpenDuration"]
# ["Boost"]
# ["BoostDuration"]
# ["BoostValue"]
# ["Decalc"]
# ["DecalcDay"]
# ["DecalcTime"]
# ["MaximumValveSetting"]
# ["ValveOffset"]
# ["WeeklyProgramm1deg"][0] - [12]
# ["WeeklyProgramm1time"][0] - [12]
# ["WeeklyProgramm2deg"]
# ["WeeklyProgramm2time"]
# .
# .
# .
# ["WeeklyProgramm7deg"]
# ["WeeklyProgramm7time"]
#
#
#
#
#
$count=0; //counting cubes
$port = "62910";#"62910";
$_SESSION["fp".str_replace(".","",$host)] = @fsockopen($host, $port, $errno, $errstr, 5);//open socket, cube will answer
$test=0;
if (!$_SESSION["fp".str_replace(".","",$host)]|$test)
{
if ($errno == 111) echo "Local software is running - ".$errstr;
elseif ($errno == 113) echo "No Connection - ".$errstr;
elseif ($test) echo "Testmodus - ";
else echo $errno." Connection Error - ".$errstr;
}
else //sucsess
{
socket_set_blocking($_SESSION["fp".str_replace(".","",$host)],false);
sleep(1);
$finished = 0;
$jetzt = time();
$buff = "";
while (!feof($_SESSION["fp".str_replace(".","",$host)]) && time() < $jetzt+20 && $finished == 0)
{
$line = fgets($_SESSION["fp".str_replace(".","",$host)]);
if (strpos($line,"L:") !== false) $finished = 1;
if ($line != "") $buff .= $line."\n";
//sleep(1);
}
// fclose($_SESSION["fp".str_replace(".","",$host)]);
if ($finished != 1) echo "\nNo Connection";
else
{
$arr = explode("\n\n",$buff);
foreach ($arr as $v)
{
if (substr($v,0,2) == "H:")
{
$allData["data"]["sys"] = decodeMessageH ($v);
}
if (substr($v,0,2) == "M:")
{
// if (count($allData["data"]["rooms"])==0)
if (!isset($allData["data"]["rooms"]))
{
// echo "Message:
";
$Message = explode(',',substr($v,2,strlen($v)));
$str = base64_decode($Message[2]);
$count=0;
$ausgabe="";
$return = '';
$return2="";
foreach(str_split($str, 32) as $line)
{
$text[$count]="";
foreach(str_split($line, 1) as $single)
{
$text[$count] .= chr(ord($single));
}
$count ++;
}
foreach(str_split($str, 1) as $single)
{
$return .= dechex(ord($single))."";
}
foreach(str_split($return,2) as $single)
{
$return2 .= $single." ";
}
$return = '';
$count=0;
foreach(str_split($return2,96) as $single)
{
$return .= $single." ". $text[$count]."
";
$count ++;
}
// echo $return."
";
$allData= decodeMessageM ($v,$allData);
}
else
{
// echo "Message:
";
$Message = explode(',',substr($v,2,strlen($v)));
$str = base64_decode($Message[2]);
$count=0;
$ausgabe="";
$return = '';
$return2="";
foreach(str_split($str, 32) as $line)
{
$text[$count]="";
foreach(str_split($line, 1) as $single)
{
$text[$count] .= chr(ord($single));
}
$count ++;
}
foreach(str_split($str, 1) as $single)
{
$return .= dechex(ord($single))."";
}
foreach(str_split($return,2) as $single)
{
$return2 .= $single." ";
}
$return = '';
$count=0;
foreach(str_split($return2,96) as $single)
{
$return .= $single." ". $text[$count]."
";
$count ++;
}
// echo $return."
";
}
}
if (substr($v,0,2) == "C:")
{
$allData=decodeMessageC ($v,$allData);
}
if (substr($v,0,2) == "L:")
{
$allData=decodeMessageL ($v,$allData);
}
}
}
}
// var_dump($allData);
return $allData;
}
function decodeMessageH($v)
{
$arr2 = explode(',',substr($v,2,strlen($v)));
$str = base64_decode($arr2[2]);
$data["sys"]["SerialNumber"] = $arr2[0];
$data["sys"]["RFAdress"] = $arr2[1];
$data["sys"]["Firmware"] = $arr2[2];
$data["sys"]["1?"] = $arr2[3]; //00000000
$data["sys"]["HTTP-ConnID"] = $arr2[4];
$data["sys"]["2?"] = $arr2[5];
$data["sys"]["3?"] = $arr2[6]; //31
$data["sys"]["Date"] = hexdec(substr($arr2[7],4,2)).".".hexdec(substr($arr2[7],2,2)).".".hexdec(substr($arr2[7],0,2));
$data["sys"]["Time"] = hexdec(substr($arr2[8],0,2)).":".hexdec(substr($arr2[8],2,2));
$data["sys"]["Timestamp"] = mktime(hexdec(substr($arr2[8],0,2)),hexdec(substr($arr2[8],2,2)),0,hexdec(substr($arr2[7],2,2)),hexdec(substr($arr2[7],4,2)),hexdec(substr($arr2[7],0,2)));
return $data["sys"];
}
function decodeMessageM($v)
{
$arr2 = explode(',',$v);
$str = base64_decode($arr2[2]);
echo $str."
";
$pos = 0;
$readlen = 1; $allData["data"]["meta"]["?1"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $allData["data"]["meta"]["?2"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $allData["data"]["meta"]["RoomCount"] = (ord(substr($str,$pos,1))).""; $pos += $readlen;
for($j = 1 ; $j <= $allData["data"]["meta"]["RoomCount"] ; $j++)
{
$readlen = 1; $RoomID = (ord(substr($str,$pos,1)))."";$allData["data"]["rooms"][$RoomID]["RoomID"] = $RoomID; $pos += $readlen;
$readlen = 1; $allData["data"]["rooms"][$RoomID]["RoomNameLength"] = htmlentities(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = $allData["data"]["rooms"][$RoomID]["RoomNameLength"];
$allData["data"]["rooms"][$RoomID]["RoomName"]="";
for($i = $pos; $i < $readlen+$pos ; $i++) $allData["data"]["rooms"][$RoomID]["RoomName"] .= htmlentities(substr($str,$i,1)).""; $pos += $readlen;
$allData["data"]["rooms"][$RoomID]["RFAdress(?)"]="";
$readlen = 3; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["data"]["rooms"][$RoomID]["RFAdress(?)"] .= str_pad(dechex(ord(substr($str,$i,1))),2,"0",STR_PAD_LEFT).""; $pos += $readlen;
}
$readlen = 1; $allData["data"]["meta"]["DevCount"] = (ord(substr($str,$pos,1))).""; $pos += $readlen;
for($j = 1 ; $j <= $allData["data"]["meta"]["DevCount"]; $j++)
{
unset($hilf);
$readlen = 1; $hilf["DeviceType"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$hilf["RFAdress"]="";
$readlen = 3; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["RFAdress"] .= str_pad(dechex(ord(substr($str,$i,1))),2,"0",STR_PAD_LEFT).""; $pos += $readlen;
$hilf["SerialNumber"]="";
$readlen = 10; $hilf["SerialNumber"] .= htmlentities(substr($str,$pos,10)).""; $pos += $readlen;
$readlen = 1; $hilf["NameLength"] = htmlentities(ord(substr($str,$pos,1))).""; $pos += $readlen;
$hilf["Name"]="";
$readlen = $hilf["NameLength"]; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["Name"] .= htmlentities(substr($str,$i,1)).""; $pos += $readlen;
$readlen = 1; $hilf["RoomID"] = (ord(substr($str,$pos,1))).""; $pos += $readlen;
if (isset($allData["data"]["rooms"][$hilf["RoomID"]]["Devices"]))
$j2= count($allData["data"]["rooms"][$hilf["RoomID"]]["Devices"]);
else
$j2=0;
$allData["data"]["rooms"][$hilf["RoomID"]]["Devices"][$j2]["DeviceType"] = $hilf["DeviceType"];
$allData["data"]["rooms"][$hilf["RoomID"]]["Devices"][$j2]["RFAdress"] = $hilf["RFAdress"];
$allData["data"]["rooms"][$hilf["RoomID"]]["Devices"][$j2]["SerialNumber"] = $hilf["SerialNumber"];
$allData["data"]["rooms"][$hilf["RoomID"]]["Devices"][$j2]["NameLength"] = $hilf["NameLength"];
$allData["data"]["rooms"][$hilf["RoomID"]]["Devices"][$j2]["Name"] = $hilf["Name"];
$allData["data"]["rooms"][$hilf["RoomID"]]["Devices"][$j2]["RoomID"] = $hilf["RoomID"];
}
//var_dump($allData);
return $allData;
}
function decodeMessageC($v,$allData)
{
$arr2 = explode(',',$v);
$str = base64_decode($arr2[1]);
unset($hilf);
$pos = 0;
$readlen = 1; $hilf["?1"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$hilf["RFAdress"]="";
$readlen = 3; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["RFAdress"] .= str_pad(dechex(ord(substr($str,$i,1))),2,"0",STR_PAD_LEFT).""; $pos += $readlen;
$readlen = 1; $hilf["DeviceType"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$hilf["?2"]="";
$readlen = 3; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["?2"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$readlen = 10; $hilf["SerialNumber"] = htmlentities(substr($str,$pos,10)).""; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?1"] = $hilf["?1"];
$allData["deviceconf"][$hilf["RFAdress"]]["RFAdress"] = $hilf["RFAdress"];
$allData["deviceconf"][$hilf["RFAdress"]]["DeviceType"] = $hilf["DeviceType"];
$allData["deviceconf"][$hilf["RFAdress"]]["?2"] = $hilf["?2"];
$allData["deviceconf"][$hilf["RFAdress"]]["SerialNumber"] = $hilf["SerialNumber"];
switch($allData["deviceconf"][$hilf["RFAdress"]]["DeviceType"])
{
case "0":
// Cube
$readlen = 1; for($i = $pos; $i < $readlen+$pos ; $i++) $deviceconf[$hilf["RFAdress"]]["PortalEnabled"] = dechex(ord(substr($str,$i,1))).""; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?3"]="";
$readlen = 4; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?3"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?4"]="";
$readlen = 8; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?4"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?5"]="";
$allData["deviceconf"][$hilf["RFAdress"]]["?5"]="";
$readlen = 21; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?5"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?6"]="";
$readlen = 4; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?6"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?7"]="";
$readlen = 8; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?7"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?8"]="";
$readlen = 21; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?8"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["PortalURL"]="";
$readlen = 36; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["PortalURL"] .= htmlentities(substr($str,$i,1)).""; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?9"]="";
$readlen = 60; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?9"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?A"]="";
$readlen = 33; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?A"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?B"]="";
$readlen = 3; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?B"] .= htmlentities(substr($str,$i,1)).""; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?C"]="";
$readlen = 9; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?C"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?D"]="";
$readlen = 4; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?D"] .= htmlentities(substr($str,$i,1)).""; $pos += $readlen;
$allData["deviceconf"][$hilf["RFAdress"]]["?E"]="";
$readlen = 9; for($i = $pos; $i < $readlen+$pos ; $i++) $allData["deviceconf"][$hilf["RFAdress"]]["?E"] .= dechex(ord(substr($str,$i,1)))." "; $pos += $readlen;
break;
case "1":
// Thermostat
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["ComfortTemperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["EcoTemperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["MaxSetPointTemperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["MinSetPointTemperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["TemperatureOffset"] = (ord(substr($str,$pos,1)))/2-3.5.""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["WindowOpenTemperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["WindowOpenDuration"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["Boost"] = str_pad(decbin(ord(substr($str,$pos,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["BoostDuration"] = bindec(substr($allData["deviceconf"][$hilf["RFAdress"]]["Boost"],0,3))*5;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["BoostValue"] = bindec(substr($allData["deviceconf"][$hilf["RFAdress"]]["Boost"],3,5))*5;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["Decalc"] = str_pad(decbin(ord(substr($str,$pos,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["DecalcDay"] = bindec(substr($allData["deviceconf"][$hilf["RFAdress"]]["Decalc"],0,3));
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["DecalcTime"] = bindec(substr($allData["deviceconf"][$hilf["RFAdress"]]["Decalc"],3,5));
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["MaximumValveSetting"] = dechex(ord(substr($str,$pos,1)))*(100/255).""; $pos += $readlen;
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["ValveOffset"] = dechex(ord(substr($str,$pos,1)))*(100/255).""; $pos += $readlen;
for ($j = 1 ; $j <= 7 ; $j++)
{
$readlen = 26;// Sat, Sun, Mon, Tue, Weg, Thu, Fri
for($i = $pos; $i < $readlen+$pos ; $i+=2)
{
$bin = str_pad(decbin(hexdec(dechex(ord(substr($str,$i,1))))),8,"0",STR_PAD_LEFT).str_pad(decbin(hexdec(dechex(ord(substr($str,$i+1,1))))),8,"0",STR_PAD_LEFT);
$deg = bindec(substr($bin,0,7));
$min = bindec(substr($bin,7,9));
$allData["deviceconf"][$hilf["RFAdress"]]["WeeklyProgramm".$j."deg"][] = ($deg/2);
$allData["deviceconf"][$hilf["RFAdress"]]["WeeklyProgramm".$j."time"][] = number_format(($min*5/60),2);
}
$pos += $readlen;
}
break;
case "3":
// Wandthermostat
break;
case "4":
// if(!isset($_SESSION["Windowcount"]))
// $_SESSION["Windowcount"]=1;
// $_SESSION["Windowcount"] += 1;
// echo $_SESSION["Windowcount"].", ";
// Fensterkontakt
break;
case "5":
// Eco-Taster
break;
default:
// Other
echo ''.$allData["deviceconf"][$hilf["RFAdress"]]["DeviceType"].'
';
break;
}
return $allData;
}
function decodeMessageL($v,$allData)
{
$v = substr($v,2,strlen($v));
$str = base64_decode($v);
$pos = 0;
for($j = 1 ; $j <= $allData["data"]["meta"]["DevCount"]; $j++)//all devices
{
unset($hilf);
//byte 0 The first byte of the L: message after "L:"
$readlen = 1; $hilf["ReadLength"] = htmlentities(ord(substr($str,$pos,1))).""; $pos += $readlen;
$readlen = 3;
$hilf["RFAdress"]="";
for($i = $pos; $i < $readlen+$pos ;$i++)
{
//byte 1-3
$hilf["RFAdress"] .= str_pad(dechex(ord(substr($str,$i,1))),2,"0",STR_PAD_LEFT)."";
}
$pos += $readlen;
//byte 4
$readlen = 1; $hilf["?1"] = dechex(ord(substr($str,$pos,1))).""; $pos += $readlen;
//byte 5
$hilf["Data1"]="";
$readlen = 1; $hilf["Data1"] .= str_pad(decbin(ord(substr($str,$pos,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
//byte 6
$hilf["Data2"]="";
$readlen = 1; $hilf["Data2"] .= str_pad(decbin(ord(substr($str,$pos,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
if($hilf["ReadLength"] == 11 || $hilf["ReadLength"] == 12) //Heater or Wallthermostat
{
//byte 7
$readlen = 1; $hilf["ValvePos"] = ord(substr($str,$pos,1));
$pos += $readlen;
$hilf["DateUntil"]="";
$hilf["TimeUntil"]="";
if ($allData["deviceconf"][$hilf["RFAdress"]]["DeviceType"]==1) //heater thermostat
{
if (substr($hilf["Data2"],6,2)=="00")//device in auto mode
{
// $readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"] += (ord(substr($str,$pos,1))/10); $pos += $readlen;
// $readlen = 1; $hilf["Temperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;if($hilf["Temperature"]>=64) { $hilf["Temperature"]-=64;$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]=25.5;}
//byte 8
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["Temperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;if($allData["deviceconf"][$hilf["RFAdress"]]["Temperature"]>=64) { $allData["deviceconf"][$hilf["RFAdress"]]["Temperature"]-=64;$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]=25.5;}// the highest bit is MSB ob actual temperature
//byte 9
$readlen = 1; $meinhilft1= ord(substr($str,$pos,1)); $pos += $readlen;// if in automode and set to 1, actual temperature >25.5 this is MSB
//byte 10
$readlen = 1;$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]= ord(substr($str,$pos,1))/10; $pos += $readlen;
if ($meinhilft1==1) $allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]+= 25.5;//add the MSB to the ActualTemp
if ($allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]==0) unset ($allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]);// if 0, temperature is not received
//byte 11
$readlen = 1; $meinhilft2= (ord(substr($str,$pos,1))); $pos += $readlen;// to keep reading. unused
//if(isset($allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]))
//echo "Heizkörperthermostat: ".$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]."
";
// if ($allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]) echo " Byte8: ". $hilf["Temperature"]. " Byte9: ". $meinhilft1. " Byte10: ". $allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]. " Byte11: ". $meinhilft2. "
";
}
else //not in automode, no actual temperature
{
//byte 8
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["Temperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;if($allData["deviceconf"][$hilf["RFAdress"]]["Temperature"]>=64) { $allData["deviceconf"][$hilf["RFAdress"]]["Temperature"]-=64;$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]=25.5;}
//byte 9-10
$allData["deviceconf"][$hilf["RFAdress"]]["DateUntil"]="";
$readlen = 2; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["DateUntil"] .= str_pad(decbin(ord(substr($str,$i,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
//byte 11
$readlen = 1; $hilf["TimeUntil"] = (ord(substr($str,$pos,1))*0.5).""; $pos += $readlen;
}
}
else // not heaterthermostat
{
//byte 8
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["Temperature"] = (ord(substr($str,$pos,1))/2).""; $pos += $readlen;if($allData["deviceconf"][$hilf["RFAdress"]]["Temperature"]>=64) { $allData["deviceconf"][$hilf["RFAdress"]]["Temperature"]-=64;$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]=25.5;} else $allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]=0;
//byte 9-10
$readlen = 2; for($i = $pos; $i < $readlen+$pos ; $i++) $hilf["DateUntil"] .= str_pad(decbin(ord(substr($str,$i,1))),8,"0",STR_PAD_LEFT).""; $pos += $readlen;
//byte 11
$readlen = 1; $hilf["TimeUntil"] = (ord(substr($str,$pos,1))*0.5).""; $pos += $readlen;
}
if($hilf["ReadLength"] == 12) // wall mounted thermostat
{
//byte 12
$readlen = 1; $allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"] += (ord(substr($str,$pos,1))/10); $pos += $readlen;// temperature added, because if MSB set, value is already 25.5
//echo "Temperature Messagedecode: ".$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]."
";
//echo "Jetzt Temperatur".$allData["deviceconf"][$hilf["RFAdress"]]["ActualTemp"]."
";
}
}
else //shutter contact
{
$Check=$hilf["Data2"]& 2;
//echo "Fensterkontakt". $hilf["Data2"]. "
";
if($Check==2)
{
$allData["deviceconf"][$hilf["RFAdress"]]["Window"]="open";
// foreach ($allData["data"]["rooms"] as $raum => $Value)
// {
// foreach($allData["data"]["rooms"][$raum]["Devices"] as $device => $Value)
// {
// if ($allData["data"]["rooms"][$raum]["Devices"][$device]["RFAdress"]==$hilf["RFAdress"])
// echo "Fenster offen :".$allData["data"]["rooms"][$raum]["RoomName"]. " ".$allData["data"]["rooms"][$raum]["Devices"][$device]["Name"]."
";
// }
// }
// echo "Fensterkontakt". $hilf["RFAdress"]. "
";
}
else
$allData["deviceconf"][$hilf["RFAdress"]]["Window"]="closed";
}
// else echo "Wert: ". $hilf["ValvePos"]."
";
$allData["deviceconf"][$hilf["RFAdress"]]["LiveReadLength"] = $hilf["ReadLength"];
$allData["deviceconf"][$hilf["RFAdress"]]["LiveRFAdress"] = $hilf["RFAdress"];
$allData["deviceconf"][$hilf["RFAdress"]]["Live?1"] = $hilf["?1"];
if($hilf["ReadLength"] == 11 || $hilf["ReadLength"] == 12)
{
$allData["deviceconf"][$hilf["RFAdress"]]["ValvePos"] = $hilf["ValvePos"];
// $allData["deviceconf"][$hilf["RFAdress"]]["Temperature"] = $hilf["Temperature"];
$allData["deviceconf"][$hilf["RFAdress"]]["DateUntil"] = $hilf["DateUntil"];
$year = substr($allData["deviceconf"][$hilf["RFAdress"]]["DateUntil"],-6,6);
$month = substr($allData["deviceconf"][$hilf["RFAdress"]]["DateUntil"],0,3).substr($hilf["DateUntil"],8,1);
$day = substr($allData["deviceconf"][$hilf["RFAdress"]]["DateUntil"],3,5);
$allData["deviceconf"][$hilf["RFAdress"]]["DateUntil"] = bindec($day).".".bindec($month).".".bindec($year);
$allData["deviceconf"][$hilf["RFAdress"]]["TimeUntil"] = $hilf["TimeUntil"];
$allData["deviceconf"][$hilf["RFAdress"]]["TimestampUntil"] = mktime(floor($hilf["TimeUntil"]),($hilf["TimeUntil"]-floor($hilf["TimeUntil"]))*60,0,bindec($month),bindec($day),bindec($year));
}
$allData["deviceconf"][$hilf["RFAdress"]]["valid"] = substr($hilf["Data1"],3,1);
$allData["deviceconf"][$hilf["RFAdress"]]["Error"] = substr($hilf["Data1"],4,1);
$allData["deviceconf"][$hilf["RFAdress"]]["isAnswer"] = substr($hilf["Data1"],5,1);
$allData["deviceconf"][$hilf["RFAdress"]]["initialized"] = substr($hilf["Data1"],6,1);
$allData["deviceconf"][$hilf["RFAdress"]]["LiveData7"] = substr($hilf["Data1"],7,1);
$allData["deviceconf"][$hilf["RFAdress"]]["LowBatt"] = substr($hilf["Data2"],0,1);
$allData["deviceconf"][$hilf["RFAdress"]]["LinkError"] = substr($hilf["Data2"],1,1);
$allData["deviceconf"][$hilf["RFAdress"]]["PanelLock"] = substr($hilf["Data2"],2,1);
$allData["deviceconf"][$hilf["RFAdress"]]["GatewayOK"] = substr($hilf["Data2"],3,1);
$allData["deviceconf"][$hilf["RFAdress"]]["DST"] = substr($hilf["Data2"],4,1);
$allData["deviceconf"][$hilf["RFAdress"]]["Not used"] = substr($hilf["Data2"],5,1);
switch (substr($hilf["Data2"],6,2))
{
case "00" : $allData["deviceconf"][$hilf["RFAdress"]]["Mode"] = "auto"; break;
case "01" : $allData["deviceconf"][$hilf["RFAdress"]]["Mode"] = "manu"; break;
case "10" : $allData["deviceconf"][$hilf["RFAdress"]]["Mode"] = "vacation"; break;
case "11" : $allData["deviceconf"][$hilf["RFAdress"]]["Mode"] = "boost"; break;
}
}
return $allData;
}
?>