Heizungssteuerung mit Parameterdatei

Wenn du nur ein FHT einsetzt kannst du die natürlich weglassen. Wenn du dein System mal erweitern willst solltest du die Abfrage aber drinlassen.

Ich habe derzeit 3 FHT’s und es soll natürlich das Richtige in den Manuell-Mode gebracht werden. Du musst natürlich dann die Variablen in dem Script deinen anpassen, sonst klappts nicht.

Hallo Retarius,

habe leider ein wenig Probleme mit dem Skript.

Habe einen FHT angelegt (funktioniert im Test Modus auch wunderbar) und dein Eventskript (das 2. in diesem Thread) reinkopiert.

Die Parameterdatei wurde angelegt und alle Instanzen und pfade angepasst.

Ebenso habe ich die entsprechenden FLOAT variablen angelegt.

Leider füllt sich meine „FHT_AZ_Temp“ Variable nicht mit dem IST wert.

Ausserdem kriege ich beim ausführen des skripts die meldung

„Error: Call to undefined function FHT_SetTemperature() in line 38“ zurück.

Mein eventskript sieht so aus, ne Idee wo der Fehler steckt ?

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Heizung_AZ.ips.php
Trigger  :
Interval :
*/
$hour=date("H");
$minute=date("i");
$time = $hour.":".$minute;
$heute = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$tag = date("w");

$Temp_Mode=GetValueBoolean("FHT_AZ_Mode");
if($Temp_Mode==False)   //Heizung im Automatikbetrieb
{
   //Alten Zustand einlesen - nur für erste Zeit am Tag wichtig
   $newtemp=GetValueFloat("FHT_AZ_Temp");

   $handle = fopen("F:\Programme\IP-SYMCON\Heizung_AZ.par","r");
   while ($line = fgets($handle, 1000))
   {
     $parameter = explode(";", $line);    //[0]-Tag, [1]-(Ab)Zeit, [2]-Temperatur
     $day=$parameter[0];
      $switchtime=$parameter[1];
      $temp=$parameter[2];
      if($day == $heute[$tag])    //Tag erkannt
      {
         if($time > $switchtime)
            $newtemp = $temp;
     }
   }
   fclose($handle);
   echo "Sollwert Temperatur Bad [°C]: ".$newtemp;
   SetValueFloat("FHT_AZ_TargetTemp", (float)$newtemp);
   FHT_SetTemperature(14826, (float)$newtemp);
}
?>

also ich sehe so auf den ersten und den zweiten Blick keine Fehler…

Sehr komisch kommt mir die Fehlermeldung vor, dass er den Befehl FHT_SetTemperature nicht ausführen will/kann?

schreib doch mal statt dem (float)$newtemp einfach eine Zahl rein.
z.B. FHT_SetTemperature(14826, 23.0);

Der Fehler klingt als würde er den Befehl überhaupt nicht kennen. Das ist sehr seltsam…

Wird denn die Datei (mit den Parametern drin) sicher geöffnet?
Du kannst ins Script ja mal ein paar echos reinpacken um das genauer zu debuggen…

ich habe nochmal 1 zwei sachen umgestellt, da ich versehentlich die instanzen nr. aus dem WZ mit dem AZ vertauscht hab.

jetzt kommt folgende fehlermeldung : „Notice: Undefined offset: 1 in line 27“,
damit meinter die zeile $switchtime=$parameter[1];
so sieht das ganze jetzt aus :

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Heizung_AZ.ips.php
Trigger  :
Interval :
*/
$hour=date("H");
$minute=date("i");
$time = $hour.":".$minute;
$heute = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$tag = date("w");

$Temp_Mode=GetValueBoolean("FHT_WZ_Mode");
if($Temp_Mode==False)   //Heizung im Automatikbetrieb
{
   //Alten Zustand einlesen - nur für erste Zeit am Tag wichtig
   $newtemp=GetValueFloat("FHT_WZ_Temp");

   $handle = fopen("F:\Heizung_WZ.par","r");
   while ($line = fgets($handle, 1000))
   {
     $parameter = explode(";", $line);    //[0]-Tag, [1]-(Ab)Zeit, [2]-Temperatur
     $day=$parameter[0];
      $switchtime=$parameter[1];
      $temp=$parameter[2];
      if($day == $heute[$tag])    //Tag erkannt
      {
         if($time > $switchtime)
            $newtemp = $temp;
     }
   }
   fclose($handle);
   echo "Sollwert Temperatur Wohnzimmer [°C]: ".$newtemp;
   SetValueFloat("FHT_WZ_TargetTemp", (float)$newtemp);
   FHT_SetTemperature(30744, (float)$newtemp);
}
?>

So, mittlerweile laufen beide Test FHTs die Werte durch, welche eingestellt habe.

Leider füllen sich aber weder TEMP noch POS mit Werten… ich habe also die IST Position nicht.

Why ? Gibts nen Trick ?

Dies hat warscheinlich mehr mit deiner Hardware zu tun wie mit das script.

Sehe verschiedene threads die FHZ1000 und FHT probleme beschreiben.

Mein tipp: ruhig abwarten, wenn du die dinger in ruhe lasst kommen die werte von selber. Also keine manuele exec. und schaltzeiten < 30 minuten. Immer langsam. Ich weiss frustrierend … aber es hilft.

Good Luck,
Fredje

Ich habe jetzt mal das ausführende Heizungsskript auf 60 min. hochgesetzt und hab jetzt nix mehr was unter 1std. läuft

Schon komisch… nach 40 std. FHT noch keine POS und TEMP Werte…

Hast du die Instanzen den FHT’s in beide Richtungen mit dem FHZ1000-Modul verbunden?

Hatte den Fehler mit „undefined Offset ebenfalls“.

Soweit ich mich erinnern kann kommen dafür zwei ursachen in Frage (sorry, probier vieleicht beide aus):
(a) Lass Dir bitte den Inhalt von parameter[1] ausgeben und prüfe ob der ggf leer ist. Dadurch könnte es zu einem Typenfehler des Interpreters kommen (der kann dann nicht feststellen ob Du einen String oder Integer zuweisen möchtest.

(b) Weise jeder Variable im Kopf einen Wert zu ($switchtime=0.0;) Damit weis dann auch der Interpreter, dass er es mit einer Integer Varaible zu tun hat und muss dass nicht erst zur Laufzeit ermitteln.

Eine der beiden Lösungen hat bei mir zumindest zum Erfolg geführt - einfach ausprobieren :slight_smile:

MfG
Thomas

@ Retarius : NEIN, hatte ich natürlich nicht :mad:

Das liegt daran das sich TX Instanzen direkt über das TX Feld beiseitig mit der FHZ verknüpfen lassen, FHTs und RX Instanzen müssen einseitig über die jeweilige Instanz, und beidseitig dann über die FHZ verknüpft werden… das wusste ich nicht…

schauen wir mal ob die nächsten stunden was kommt…

danke erstmal für eure prima unterstützung !

PS: MERKEN sich die FHTs jetzt eigentlich den Ablauf (wie bei der FHZ1000 Software) oder spielen Sie verrückt sobald der Server aus ist ?

yo, alle werte sind da !

Da sieht man mal wie einfach die Welt doch sein kann - und immer eins nicht vergessen: „Immer EINFACH denken…“ - das hilft in (fast) allen Lebenslagen :wink:

Wenn das Script (IPS) nicht mehr sendet, machen die FHT’s natürlich nichts weiter.
Hierbei greifen zwei Möglichkeiten.

  1. du hast alle FHT-internen Temp-Programme deaktiviert, dann wird das FHT einfach beim letzten Wert stehenbleiben, den IPS im gesagt hat, bzw. du kannst natürlich am Stellrad jeden Wunschwert einstellen.

  2. deine FHT-internen Programme sind noch aktiv - kollidieren dann hin und wieder mal mit den IPS-Script Werten (z.B. Script sagt um 20:00 Uhr [Atom-PC-Zeit 20:00 Uhr] Temp auf 23°C und FHT sagt dann um 20:00 Uhr [Atom-PC-Zeit 20:03 - FHT geht etwas nach] Temperatur auf 19°C - dann hast du 19°C obwohl du die 23°C vom IPS haben willst…

Ich nutze die erste Variante - mein PC läuft immer und falls er mal abstürzen sollte bleibt entweder die „Wohlfühltemperatur“ oder die kühlere „Absenktemperatur“…
damit kann ich leben.

wie kann ich das an oder ausschalten ?

das kannst du nur am FHT aktivieren bzw. deaktivieren…du musst dazu deine programme im FHT einfach weglöschen (zeiten auf glaube ich 0 Uhr stellen)

Hallo,

die Steuerung des FHT über eine Parameterdatei ist sicherlich eine sehr interessante Sache, falls mein PC aber mal die Grätsche macht sitz ich im Kalten, oder? :smiley: Gibt es eine Möglichkeit mit IPS das interne Wochenprofil des FHT zu verändern, so wie das auch mit der contronics Software möglich ist?

Gruß,
Olaf

nee, gibt es nicht ! Und bei der Con****ics Software funktionniert es auch solàlà. Da ich 11 FHT’s laufen habe, geht es mit deren Software auch nur mässig, ja sogar gar nicht. Wenn man auch nur 2 Reglern ein Wochenprogramm sendet, dann sind die am Nächsten Tag noch nicht durch mit Parametern senden. Die Idee ist gut, nur die Realisation ist quatsch, wieder mal wegen der 1% Regel im 868MHz Bereich !

PS: Du sitzt nicht im Kalten, nur auf dem Wert den Der Computer dem Regler als letztes übermittlet hatte !

mfG Franz

hallo,
habe heute festgestellt das mein heizungsscript nicht richtig funktioniert.
die steuerung mit para läuft super, aber wenn ich am regler ds fht drehe wird der fht auf manu gesetzt und die temp auch. soweit ist alles richtig aber nach der eingestellten zeit wird der regler nicht wieder in den auto modus gesetzt.

mfg uwe

http://www.ipsymcon.de/forum/showpost.php?p=2239&postcount=12

schau dir nochmal diesen Beitrag an - vorallem ganz unten…das ist wichtig die FHT’s wieder in den Auto-Mode zu bringen.
Wenn du Fragen hast auch gerne per PN

Hallo,

mal eine Frage:

Ist es möglich den FHT-Mode-Status vom FHT80b abzufragen?

Gruß

DVB-Freak

man braucht ja doch einen Menge Variablen für das Tolle Script…:wink:

Habe eine kleines Script geschrieben um die Variablen strukturiert „on Block“

anzulegen.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : neu_var_anlegen.ips.php
Trigger  : 
Interval : 
*/


$var = "Hausw";
$String1 = "_FHT_Mode";
$String2 = "_Raum_Status";
$String3 = "_Last_Message";
$String4 = "_FHT_Script_Run";
$String5 = "_FHT_Temp_Soll";
$String6 = "_FHT_Temp_Ist";
$String7 = "_FHT_Pos";
$String8 = "_FHT_Temp_Para";
$t1 = "Integer"  ;
$t2 = "Boolean" ;
$t3 = "String"   ;
$t4 = "Float"    ;

//FHT Mode
If (IPS_VariableExists($var.$String1))
{
echo "Variable .$var.$String1 .vorhanden vom Type $t1
";
}
else
{
IPS_CreateVariable($var.$String1,$t1);
echo "Variable .$var.$String1. nicht vorhanden
";
}


//Raum Status
If (IPS_VariableExists($var.$String2))
{
echo "Variable .$var.$String2 .vorhanden vom Type $t2
";
}
else
{
IPS_CreateVariable($var.$String2,$t2);
echo "Variable .$var.$String2. nicht vorhanden
";
}


//Last Message

If (IPS_VariableExists($var.$String3))
{
echo "Variable .$var.$String3 .vorhanden vom Type $t3
";
}
else
{
IPS_CreateVariable($var.$String3,$t3);
echo "Variable .$var.$String3. nicht vorhanden
";
}


//Script Run

If (IPS_VariableExists($var.$String4))
{
echo "Variable .$var.$String4 .vorhanden vom Type $t3
";
}
else
{
IPS_CreateVariable($var.$String4,$t3);
echo "Variable .$var.$String4. nicht vorhanden
";
}


//Temp Soll

If (IPS_VariableExists($var.$String5))
{
echo "Variable .$var.$String5 .vorhanden vom Type $t4
";
}
else
{
IPS_CreateVariable($var.$String5,$t4);
echo "Variable .$var.$String5. nicht vorhanden
";
}


//Temp ISt

If (IPS_VariableExists($var.$String6))
{
echo "Variable .$var.$String6 .vorhanden vom Type $t4
";
}
else
{
IPS_CreateVariable($var.$String6,$t4);
echo "Variable .$var.$String6. nicht vorhanden
";
}



//FHT Pos

If (IPS_VariableExists($var.$String7))
{
echo "Variable .$var.$String7 .vorhanden vom Type $t4
";
}
else
{
IPS_CreateVariable($var.$String7,$t4);
echo "Variable .$var.$String7. nicht vorhanden
";
}


//Temp Para

If (IPS_VariableExists($var.$String8))
{
echo "Variable .$var.$String8 .vorhanden vom Type $t4
";
}
else
{
IPS_CreateVariable($var.$String8,$t4);
echo "Variable .$var.$String8. nicht vorhanden
";
}
?>

Aber Achtung bin PHP Newbie…

Gruß Jürgen