+ Antworten
Seite 1 von 8 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 72
  1. #1
    Registriert seit
    Apr 2005
    Ort
    Hessen - nähe Gießen
    Beiträge
    330

    Post Heizungssteuerung mit Parameterdatei

    Das Script steuert die Heizung mittels FHT-Modul(e). Es ist damit möglich, über eine einfache ASCII-Datei das Temperaturprofil für den Tag, bzw. die ganze Woche vorzugeben.
    Die Parameterdatei (in diesem Falle "Heizung_Bad.par) für das Bad-Temperatur-Profil sieht folgendermaßen aus:
    Code:
    Montag;07:00;16.0
    Montag;21:30;22.5
    Montag;22:10;16.0
    Dienstag;06:00;22.5
    ... usw.
    Die Datei ist einfach erweiterbar - einfach an irgendeine Stelle einen neuen Temperaturumschaltpunkt in der gleichen Form einfügen.

    Wichtig für die Funktion: Das Script führt man als Eventscript (Heizungssteuerung) ein und erstellt, z.B. mit dem Timer-Wizard, ein zusätzliches Timer-Event, welches z.B. alle 30 min. das Script (Heizungssteuerung) ausführt.

    PHP-Code:
    $hour=date("H");
    $minute=date("i");
    $time $hour.":".$minute;
    $heute = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
    $tag date("w");

    $handle fopen("D:\Heizung_Bad.par","r");
    while (
    $line fgets($handle1000))
    {
        
    $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 
    $newtemp;
    SetValueFloat("Bad_Temp_Soll", (float)$newtemp);
    FHT_SetTemperature(18958, (float)$newtemp); 
    dies war der erste Schuss die Steuerung umzusetzen - ich werde versuchen das alles noch etwas zu verfeinern. Für Vorschläge und Ideen bin ich immer offen.

  2. #2
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,816

    Hallo Retiarius

    habe jetzt jetzt mal angefangen zu üben und versuche gerade mit deinem Script meine Heizung im Bad zu steuern.

    Aber leide bekomme ich wenn ich das Scprit ausführe folgende Meldung im Output-Fenster:

    Warning: Unable to locate IPSVariable: Bad_Temp_Soll in line 31

    Da ich ja blutiger Anfänger bin hoffe ich auf eine Tip von Dir was da noch falsch laufen könnte.

    Vielen dank im voraus

    Gruss
    Horst

  3. #3
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,816

    Hab's glaube ich schon selber gefunden,
    man muss natürlich auch eine variable haben

    Gruss
    Horst

  4. #4
    Registriert seit
    Jul 2005
    Ort
    Roeselare - Belgium
    Beiträge
    1,394

    Standard Heizungssteurung

    Hallo Fruende ...

    Probier mal dies hier ...

    PHP-Code:
    <?
    /*
    *******************************
     IP-SYNCOM Event Scripting
    *******************************
    */
    //File: GetTemp.ips.php
    //
    if (!defined(sdefined)){
       include_once(
    "scripts/GlobalDefines.ips.php");
    }
    // ********** USER SETTINGS *******************************************
       // see this file for additional explanation
       
    $tempfilepath=__myhome."tempsettings.ini";

       
    // use this switch weather or not to overrule general settings
       // the effect is that if IPS-variable "__imhome" = true
       // the default + (high) temperature is sent as the result of
       // this function
       
    $use_imhome false;
    // ********** END OF USER SETTINGS ************************************

    //debug
    #$thisinstanz = "vliv_temp";
    //END DEBUG

    // MODIFIE BEYOND THESE LINE ON OWN RISK
    //
    $ldebug GetValueBoolean("__debug");
    $handle=fopen("$tempfilepath""r");
    if (!
    $handle){
       
    // error cannot open file
       
    echo("ERROR : CANNOT OPEN FILE : '$tempfilepath'\r\n");
    }
    $now getdate();
    $isholiday false;
    $holiday="";
    $season "";
    $today="";
    $alldays="";
    $weekend="";
    $imhome=false;
    if (
    $use_imhome$imhome GetValueBoolean("__imhome");
    while(!
    feof($handle)) {
       
    $buffer fgets($handle);
       Switch (
    substr($buffer,0,1)) {
       case 
    "@":
          
    //general settings
          
    if (substr($buffer,1,7) == "season=") {
             
    $season substr($buffer,8,1);
          }
          if (
    substr($buffer,1,1) == "H") {
             
    // HOLIDAY SCHEISS compare today with holidays
             
    if (($now["mon"]."/".$now["mday"] == substr($buffer,2,-2)) or ($now["mon"]."/".$now["mday"]."/".$now["year"] == substr($buffer,2,-2))) {
                   
    $isholiday true;
             }
          }
          break;
       case 
    "D":
          
    //DEFAULT lines
          
    if (substr($buffer,1,1) == "$season"$default substr($buffer,27,48);
          break;
       case 
    "H":
          
    //HOLIDAY table entries
             
    if ($isholiday) {
                if (
    substr($buffer,1,1) == "$season"$holiday substr($buffer,27,48);
             }
          break;
       case 
    "I":
          
    //Table entries
          
    if (chop(substr($buffer,4,14)) == $thisinstanz) {
             if ((
    substr($buffer,1,1) == "$season") and (substr($buffer,2,1) == "9")) $alldays substr($buffer,27,48);
             if ((
    substr($buffer,1,1) == "$season") and (substr($buffer,2,1) == "7") and (($now["wday"]+0) > 4)) $weekend substr($buffer,27,48);
             if ((
    substr($buffer,1,1) == "$season") and (substr($buffer,2,1) == $now["wday"])) $today substr($buffer,27,48);
          }
          break;
       default:
          
    //only thing to expect are comments '#' and temp settings
          
    if (substr($buffer,0,1) <> "#") {
             
    $temp[substr($buffer,0,1)] = substr($buffer,1,5);
          }
       }
    }
    fclose($handle);
    if (
    $ldebug) {
    $thisday $now["wday"];
    echo(
    "\r\nRESULT\r\n--------\r\n");
    echo(
    "thisinstanz     :'$thisinstanz'\r\n");
    echo(
    "now             :'"$now["hours"] .":"$now["minutes"] . "'\r\n");
    echo(
    "today is nr#    : $thisday\r\n");
    echo(
    "season          : $season\r\n");
    echo(
    "Is it a holiday : $isholiday\r\n");
    echo(
    "Check precendence hereunder\r\n");
    echo(
    "holiday         : $holiday\r\n");
    echo(
    "today           : $today\r\n");
    echo(
    "weekends        : $weekend\r\n");
    echo(
    "alldays         : $alldays\r\n");
    echo(
    "default rule    : $default\r\n");
    echo(
    "Am I home ?     : $imhome\r\n");
    if (
    $holiday == "") {
       if (
    $today == "") {
          if (
    $weekend == "") {
             if (
    $alldays == "") {
                
    $result $default;
             } else {
                
    $result $alldays;
             }
          } else {
             
    $result $weekend;
          }
       } else {
          
    $result $today;
       }
    } else {
       
    $result $holiday;
    }
    echo(
    "I did choose    : '$result'\r\n");
    // here we get the temperature out of string
    $pos $now["hours"]*floor($now["minutes"]/30);
    $soll $temp[substr($result,$pos,1)];
    if (
    $use_imhome and $imhome) {
       
    $soll $temp["+"];
       
    $status "OVERRULED  set to";
    } elseif (
    $use_imhome) {
       
    $soll $temp["-"];
       
    $status "OVERRULED  set to";
    } else {
       
    $status substr($result,$pos,1)."     : ";
    }
    echo(
    "SOLLwert $status'"$soll ."'\r\n");
    SetValueFloat("vliv_temp_soll",($soll+0));

    ?>

    und weiter diesem datei : $__myhome/tempsettings.ini

    PHP-Code:
    #            *******************
    #            *  IPS Timetable  *
    #            *******************
    #
    #    by GGGss under GPL license
    #    31/07/2005
    #    used in gettemp.ips.php version 0.1 rev 0
    #  
    #
    #    lines starting with '#' are not taken into consideration
    #    these settings use 3 'chapters'
    #      * settings      -> user definable settings
    #      * holidays      -> the dates used to trigger 'H'-lines in timetable
    #      * timetable     -> settings in a 30 min. timeframe
    #      * temperatures  -> the symbols used in timetable get their values here
    #
    #    ************   Settings   *************
    //    season : S (summer) or W (winter)
    @season=W
    #
    #     *************  Holidays  *****************
    #
    #      Start the line with 'H' and date
    #      mm/dd  for fixed dates (recurring every year)
    #      or mm/dd/yyyy
    #
    #  BELGIAN HOLIDAYS
    @H12/31    #    Newyear's eve
    @H01/01     #      Newyear
    @H03/20    #    My birthday  yihaah 
    @H05/01    #    workers holiday
    @H07/11    #    Flemish holiday
    @H07/21    #    National holiday
    @H11/01    #    All saints
    @H11/11    #    End of WW1
    @H12/25    #    Christmasday
    @H04/16/2006    #    Easter
    @H05/25/2006    #    Jezus goes up the stairs ;-)
    @H06/04/2006    #    and orders the appostels to continue his work
    @H08/15/2006    #    Maria goes up the stairs
    #
    #    ************  Time table  *************
    #
    #     Season : W for Winter; S for Summer; H for holiday rules
    #     Day    : 0 to 6 for mo - su
    #              7 for weekends (sa & su)
    #              9 for everyday
    #     Sensor : name of the FHT 8(0)b to be triggered
    #     Use Symbols to fill the timetable 
    #     they switch to corresponding temp. settings - > See #temperatures
    #     if it can't find an applicable rule it will take the Default 'D' one
    #     D = Default  - ALWAYS USE
    #     (precedence rule)
    #     season & holiday -> season & day -> season & weekends -> season & everyday -> season & default
    #
    #Season            T T   H 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 
    #| day             1 2   O 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 
    #|| sensor         x x   U 030303030303030303030303030303030303030303030303
    #|| |              x x   R 000000000000000000000000000000000000000000000000
    DS  default        x x     --------------+++++------------------+++++++----
    DW  default        x x     -------------++++++----------------+++++++++----
    IS9 vliv_temp      x x     |||||||||||||||OOO||||||||||||||||||XXXXXXXXX|||
    IW2 vliv_temp      x x     OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    HS9 vliv_temp      x x     
    ||||||||||||||||XXXXOOOOOOOOOOOOOOOOOOOOXXXXXX||
    HW9 vliv_temp      x x     ||||||||||||||||XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX||
    #
    #     ************  Temperatures  *************
    #
    #      Use symbol in table and start the line with that symbol
    #      DO NOT USE D, W, S, H or T or I symbols
    #      - default min. temp
    #      + default max. temp
    #
    -15.50
    +20.00
    |15.00
    O19.00
    X21.00
    #
    #      END WITH BLANK LINE (CR/LF) 
    Nur noch welche variablen in GlobalDefine-script eingeben aund fixie
    * __myhome
    * __debug
    (Bei bedarf sende ich gerne meine GlobalDefines...)

    PS: Beta ... habe noch ein macken mit 'IAmHome' (Ich Bin Zuhause).
    Brauche eure __Inteligenz__

    PS2: Möchte dies gerne in die 'Beispiele'-Forum reingeben ... aber lieber erst Ihre Kommentare

    Grusse,
    Fredtchen (aka gggss)
    Geändert von GGGss (12.08.05 um 11:03 Uhr)

  5. #5
    Registriert seit
    Apr 2005
    Ort
    Hessen - nähe Gießen
    Beiträge
    330

    Standard etwas modifiziert

    Hallo Hort...
    ich habe das Script mittlerweile noch etwas modifiziert.

    PHP-Code:
    $hour=date("H");
    $minute=date("i");
    $time $hour.":".$minute;
    $heute = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
    $tag date("w");

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

       
    $handle fopen("C:/Programme/IP-SYMCON/web/Parameter/Heizung_Bad.par","r");
       while (
    $line fgets($handle1000))
       {
         
    $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("Bad_Temp_Soll", (float)$newtemp);
       
    FHT_SetTemperature(18958, (float)$newtemp);

    die Erweiterung besteht lediglich darin, dass wenn du dein Heizungsmodul auf Manuell stellst (via IPS und dann auch die Variable "Bad_Temp_Mode" auf true setzt) die Heizungssteuerung ignoriert wird. Bsp: "Party-Taste" an der normalen Heizung - du willst mal Abends länger warm haben. Modul auf Manuell, Temperatur vorgeben und fertig - die Heizungssteuerung setzt dann erst wieder ein wenn du zurück in den Automatikmodus gehst.

    Ich werde auf jeden Fall noch weiter an der Steuerung basteln, da es an einigen Stellen noch nicht ganz "wasserdicht" ist. Hab nur derzeit wenig Zeit dafür. Wenn du Fragen hast kannst du dich aber gerne melden.
    Cu René

  6. #6
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,816

    @Retiarius

    werde Dein neues script mal ausprobieren.
    Allerdings habe ich noch ein Problem, fang ja erst mit IP-Syncon an und habe absolut keine Ahnung von PHP

    Du hast geschrieben man sollte einen Timer Event mit dem Wizard erstellen der z.b. alle 30 min. das Heizungs-Script startet und genau da liegt mein Problem.

    Wie kann ich denn im Timer Wizard angeben das dass Script Heizung alle 15 oder 30min. ausgeführt wird

    Habe leider mit der Suchfunktion keine Beschreibung finden können.

    Gruss

    Horst

    Wenn ich das Script v

  7. #7
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,673

    Standard Script - Timer

    Hallo Horst,

    um ein Skript alle 15 bzw. 30 Minuten auszuführen, benutzt man besser die „Timer Settings“
    des betreffenden Skripts: STRG + T
    Für 15 Minuten trägt man dann 900 (15 * 60) in „Timer Settings“ ein und schließt anschließend das
    Fenster mit [X]

    Gruß MST

    PS: die Online-Hilfe wird überarbeitet … bei Fragen also ruhig melden…

  8. #8
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,816

    @Steiner

    Danke werde mal versuchen ob ich das hinbekomme

    … bei Fragen also ruhig melden…
    das werde ich sicher noch oft machen

    Gruss
    Horst

  9. #9
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,673

    Standard eine kleine Übung

    Hallo Horst,

    hier eine noch kleine Übung:

    Vorher:
    Eine Variable vom Typ “Integer” mit dem Namen “Zähler” hinzufügen
    (in „Variables“ rechte Maustaste, „Add Variable“).
    Die „Timer Settings“ des Skripts: STRG + T auf 1 setzen
    und anschließend das Fenster mit [X] schließen


    PHP-Code:
    <?
    /*
    *******************************
     IP-SYMCON Event Scripting
    *******************************
    */
    //File: Plus_Eins.ips.php
    $zaehler GetValueInteger("Zähler");
    $zaehler $zaehler +1;
    echo 
    $zaehler;
    SetValueInteger("Zähler"$zaehler);
    ?>
    Die Variable sollte nun jede Sekunde um eins erhöht werden (in „Variables“)
    und im „Kernel“ im Reiter „Debug“ sollte auch ein entsprechender Hinweis stehen.

    Gruß MST

  10. #10
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,816

    @Steiner,

    feine Übung, hat geklappt.


    Gruss
    Horst