Hallo Zusammen,
die ersten Gehversuche in PHP habe ich jetzt hinter mir.
Anbei setzte ich Euch einmal die ersten Module rein.
Ich bitte nicht gleich von den Profis zerissen zu werden
Aber nachdem ich auch durch die verschiedensten Beiträge hier mein Wissen angeeignet habe, möchte ich mein Wissen auch weitergeben.
Der Ablauf ist schön nach dem Ablaufdiagramm (ACHTUNG: wird bei Fehlererkennung angepasst)im ersten Beitrag nachvollziehbar.
Folgende Lektüren habe ich verwendet:
- Das Forum mit den Quellscripten
- IPS Variablen
- PHP Befehle
- PHP-Befehle und MySQL-Anbindung
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Trimatik-MC_Steuerung.ips.php
Trigger :
Interval :
*/
//Constanten
define("TEMPDIFFMAX", 2);
define("TEMPSOLLTAG", 18);
define("TEMPFROST", -9);
define("TEMPWARM", 14);
define("UHRTAGMIN", "05:00");
define("UHRTAGMAX", "23:00");
define("WARTEMIN", 3);
define("WARTEMAX", 10);
define("BRENNER_SM4_HZG_1", 22705);
define("BRENNER_SM4_HZG_2", 40269);
define("BRENNER_TIME", 900);
//Variablen
$WHZIstTemp =0;
$AlexIstTemp = 0;
$VaneIstTemp = 0;
$WHZSollTemp =0;
$AlexSollTemp = 0;
$VaneSollTemp = 0;
$WHZIstPos =0;
$AlexIstPos = 0;
$VaneIstPos = 0;
$AussIstTemp = 0;
$Uhrzeit = date("H:i");
$TempDiff = 0;
$TempSOLL = 0;
$TempAussen = 0;
$UhrModus = 0;
$Heizung = 0;
$G_Heizung = 0;
$Heizung_refresh = 0;
$HzgSteuerung = 0;
// Einlesen der einzelnen Werte
$WHZIstTemp = getvaluefloat("Wohnzimmer_FHT_IST_Temp.");
$AlexIstTemp = getvaluefloat("Alexandra_FHT_IST_Temp.");
$VaneIstTemp = getvaluefloat("Vanessa_FHT_IST_Temp.");
$WHZSollTemp = getvaluefloat("Wohnzimmer_FHT_Target_Temp.");
$AlexSollTemp = getvaluefloat("Alexandra_FHT_Target_Temp.");
$VaneSollTemp = getvaluefloat("Vanessa_FHT_Target_Temp.");
$WHZIstPos = getvaluefloat("Wohnzimmer_FHT_IST_Pos.");
$AlexIstPos = getvaluefloat("Alexandra_FHT_IST_Pos.");
$VaneIstPos = getvaluefloat("Vanessa_FHT_IST_Pos.");
$AussIstTemp = getvaluefloat("HMS_Aussen_IST_Temp.");
// Auswertung der temp.Differenz in den Rumen
if ($WHZSollTemp - $WHZIstTemp > TEMPDIFFMAX) {$TempDiff = "gross";}
elseif ($AlexSollTemp - $AlexIstTemp > TEMPDIFFMAX) {$TempDiff = "gross";}
elseif ($VaneSollTemp - $VaneIstTemp > TEMPDIFFMAX) {$TempDiff = "gross";}
else {$TempDiff = "klein";}
// Auswertung der Soll.Temp. fr Absenkung
if (($WHZSollTemp == TEMPSOLLTAG) or ($WHZSollTemp > TEMPSOLLTAG)) {$TempSOLL = "Normal";}
elseif (($AlexSollTemp == TEMPSOLLTAG) or ($AlexSollTemp > TEMPSOLLTAG)) {$TempSOLL = "Normal";}
elseif (($VaneSollTemp == TEMPSOLLTAG) or ($VaneSollTemp > TEMPSOLLTAG)) {$TempSOLL = "Normal";}
else {$TempSOLL = "Absenk";}
// Auswertung der Aussentemp. fr Kesselabschaltung
if (($AussIstTemp == TEMPFROST) or ($AussIstTemp < TEMPFROST)) {$TempAussen = "Frost";}
elseif (($AussIstTemp == TEMPWARM) or ($AussIstTemp > TEMPWARM)) {$TempAussen = "Warm";}
else {$TempAussen = "Normal";}
// Auswertung der Ventil-Positionen
if ($WHZIstPos <> 0) {$VentilPos = "auf";}
elseif ($AlexIstPos <> 0) {$VentilPos = "auf";}
elseif ($VaneIstPos <> 0) {$VentilPos = "auf";}
else {$VentilPos = "zu";}
// Auswertung des Tagesmodus
If (($Uhrzeit > UHRTAGMIN) and ($Uhrzeit < UHRTAGMAX)) {$UhrModus = "Tag";}
Else {$UhrModus = "Nacht";}
//Heizungssteuerungsroutinen
//Ventil ZU Modus
if ($VentilPos == "zu"){
if ($TempAussen == "Frost"){
$Heizung = "NACHT";}
elseif ($TempSOLL == "Normal") {
$Heizung = "NACHT";}
else {
$Heizung = "AUS";}
;}
//Ventil AUF und Absenktemperatur Modus
if ($VentilPos == "auf"){
if ($TempSOLL == "Absenk"){
$Heizung = "NACHT";}
;}
//Ventil AUF und Normaltemeratur Modus
if ($VentilPos == "auf"){
if ($TempSOLL == "Normal"){
if ($TempAussen == "Frost"){
$Heizung = "TAG";}
elseif ($TempDiff == "klein") {
$Heizung = "NACHT";}
elseif ($TempAussen == "Warm"){
$Heizung = "NACHT";}
else {
$Heizung = "TAG";}
;}
;}
//Warteschleife fr die zwei Timer
$G_Heizung = getvaluestring("G_Brenner_Status");
$Heizung_refresh = (time() - IPS_GetUpdatetime("G_Brenner_Status"))/60;
if ($Heizung <> $G_Heizung){
if ($TempDiff == "gross"){
if (($Heizung_refresh == WARTEMIN) or ($Heizung_refresh > WARTEMIN)) {
$HzgSteuerung = "AN";
SetValueString("G_Brenner_Status", $Heizung);}
else {
$HzgSteuerung = "AUS";}
;}
;}
elseif (($Heizung == $G_Heizung) or ($TempDiff == "klein")) {
if (($Heizung_refresh == WARTEMAX) or ($Heizung_refresh > WARTEMAX)) {
$HzgSteuerung = "AN";
SetValueString("G_Brenner_Status", $Heizung);}
else {
$HzgSteuerung = "AUS";}
;}
//Ansteuerung des Brenners (Doppeltes Senden)
if ($HzgSteuerung == "AN"){
if ($Heizung == "TAG"){
FS20_SwitchDuration(BRENNER_SM4_HZG_1, True, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, FALSE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_1, True, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, FALSE, BRENNER_TIME);}
elseif ($Heizung == "NACHT"){
FS20_SwitchDuration(BRENNER_SM4_HZG_1, FALSE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, TRUE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_1, FALSE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, TRUE, BRENNER_TIME);}
elseif ($Heizung == "AUS"){
FS20_SwitchDuration(BRENNER_SM4_HZG_1, TRUE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, TRUE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_1, TRUE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, TRUE, BRENNER_TIME);}
elseif ($Heizung == "AUTO"){
FS20_SwitchDuration(BRENNER_SM4_HZG_1, FALSE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, FALSE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_1, FALSE, BRENNER_TIME);
FS20_SwitchDuration(BRENNER_SM4_HZG_2, FALSE, BRENNER_TIME);}
//;}
// Testausgabe ob alles passt :-)
$TXT_Inhalt = (date("d.m.y").
" ".
date("H:i:s").
";".
$TempDiff.";".
$TempSOLL.";".
$TempAussen.";".
$VentilPos.";".
$UhrModus.";".
$Heizung.";".
$G_Heizung.";".
$HzgSteuerung.";".
$Heizung_refresh.
"
");
$handle = fopen("D:/Trimatik-MC.txt","a");
fwrite($handle, $TXT_Inhalt);
fclose($handle);
;}
?>
PS: Die Constanten möchte ich noch über eine INI-datei abfahren, weiss bloss noch nicht wie das genau geht
.