+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    Dec 2014
    Ort
    Nürburgring
    Beiträge
    314

    Question Lösung / Idee für Abbildung von Schicht-Heizkalender gesucht

    "N'abend" Zusammen,

    die Berufsbegleitend-Studierender-Semesterferien haben mich wieder!

    Und damit auch Zeit zum Basteln und optimieren:

    Wie früher des öfteren beschrieben hat meine Freundin auf Intensivstation die wildesten Dienste. (Also einmal ALLES und Kreuz und quer ohne Muster).
    Dazu habt Ihr mir schon geholfen einen Google-Kalender auszulesen um das Schichtkürzel zu finden und dem jew. Tag zuzuordnen.

    Daraufhin habe ich Heizprogramme geschrieben, z.b. in der Woche je "Früh"; "Spät", "Nacht", "Frei" etc. dazu nochmal das ganze für Samstag und nochmal für Sonntag.

    Da ich jetzt nicht allzu elegant programmieren kann bzw. mir auch z.t. Wissen fehlt arbeiten diese relativ "popelig". Für ejden Raum (die werden je nach Zeit unterschiedlich geheizt, z.t. auch überlappend) geht das jeweils gewählte Skript alle Schaltzeiten pro Raum durch und vergleicht diese mit der ist-Zeit. Wenn das passt werden die entsprechenden Temperaturen an der Homematic bzw. der entsprechende Modus am KM200 gesetzt.

    Da der ganze Kram sozusagen Fließtext ist, ist eine Änderung gelinde gesagt ein Krampf. Und Übersichtlich ist ein WOrt welches man kaum damit in Zusammenhang bringen möchte.

    Daher meine Frage, wie würdet Ihr das ganze optimal gestalten - Ich hoffe mal das Eure Erfahrung das was besseres zu Tage bringt als ich gebastelt habe.
    Ich habe mir diverse Sachen im Forum angesehen, finde aber nichts was so richtig zu der Schicht / Google-Kalender / viele verschiedene Varianten Sache passt.

    Damit Ihr ein Bild von dem Elend habt, unten anbei noch ein Script für Frühdienst in der Woche.

    Besten Gruß,
    Matthias

    PHP-Code:
    <?
    #################### Früh Wochentag ######################################
    $time=date('H:i');

    $S_WZ=GetValue(28398 /*[Komponenten\Heizköperthermostate\Raumregler Wohnzimmer\Wunschtemperatur Wohnzimmer]*/  );
    $S_SZ=GetValue(23219 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer\Wunschtemperatur Schlafzimmer]*/ );
    $S_BO=Getvalue(39922 /*[Komponenten\Heizköperthermostate\Thermostat Bad oben\Wunschtemperatur Bad oben]*/);
    $S_KU=Getvalue(18920 /*[Komponenten\Heizköperthermostate\Thermostat Küche\Wunschtemperatur Küche]*/);

    ##########################
    #Wohnzimmer-Temp
    $T_WZ_Low=GetValue(16771 /*[Funktionen Automatik\Temperaturvorwahl\Wohnzimmer Low]*/);
    $T_WZ_Mid=GetValue(14810 /*[Funktionen Automatik\Temperaturvorwahl\Wohnzimmer Mid]*/);
    $T_WZ_High=GetValue(14124 /*[Funktionen Automatik\Temperaturvorwahl\Wohnzimmer High]*/);
    $Min_WZ=GetValue(15069 /*[Absenk. / Heizen\Wohnzimmer]*/ );

    If (
    $Min_WZ >0) {
            
    HM_WriteValuefloat(51674 /*[Komponenten\Heizköperthermostate\Raumregler Wohnzimmer]*/ ,"SET_TEMPERATURE"$T_WZ_High);
            If (
    $Min_WZ >=5){$Min_WZ=$Min_WZ-5;
            
    SetValueFloat(15069 /*[Absenk. / Heizen\Wohnzimmer]*/ ,$Min_WZ);}
            else {
    $Min_WZ=0;
            
    SetValueFloat(15069 /*[Absenk. / Heizen\Wohnzimmer]*/ ,$Min_WZ);}}
        else{
    If (
    $time >= '00:00' && $time <='14:15' && $S_WZ!=$T_WZ_Low) {
    HM_WriteValuefloat(51674 /*[Komponenten\Heizköperthermostate\Raumregler Wohnzimmer]*/ ,"SET_TEMPERATURE"$T_WZ_Low);}
    If (
    $time >= '14:16' && $time <='15:15' && $S_WZ!=$T_WZ_Mid) {
    HM_WriteValuefloat(51674 /*[Komponenten\Heizköperthermostate\Raumregler Wohnzimmer]*/ ,"SET_TEMPERATURE"$T_WZ_Mid);}
    If (
    $time >= '15:16' && $time <='22:00' && $S_WZ!=$T_WZ_High) {
    HM_WriteValuefloat(51674 /*[Komponenten\Heizköperthermostate\Raumregler Wohnzimmer]*/ ,"SET_TEMPERATURE"$T_WZ_High);}
    If (
    $time >= '22:01' && $time <='23:59' && $S_WZ!=$T_WZ_Low) {
    HM_WriteValuefloat(51674 /*[Komponenten\Heizköperthermostate\Raumregler Wohnzimmer]*/ ,"SET_TEMPERATURE"$T_WZ_Low);}}

    ##########################
    #Schlafzimmer-Temp
    $T_SZ_Low=GetValue(43281 /*[Funktionen Automatik\Temperaturvorwahl\Schlafzimmer Low]*/);
    $T_SZ_Mid=GetValue(39789 /*[Funktionen Automatik\Temperaturvorwahl\Schlafzimmer Mid]*/);
    $T_SZ_High=GetValue(12957 /*[Funktionen Automatik\Temperaturvorwahl\Schlafzimmer High]*/);
    $Min_SZ=GetValue(56815 /*[Absenk. / Heizen\Schlafzimmer]*/ );

    If (
    $Min_SZ >0) {
            
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_High);
            If (
    $Min_SZ >=5){$Min_SZ=$Min_SZ-5;
            
    SetValue(56815 /*[Absenk. / Heizen\Schlafzimmer]*/ ,$Min_SZ);}
            else {
    $Min_SZ=0;
            
    SetValue(56815 /*[Absenk. / Heizen\Schlafzimmer]*/ ,$Min_SZ);}}
        else{
    If (
    $time >= '00:00' && $time <='06:45' && $S_SZ!=$T_SZ_Mid) {
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_Mid);}
    If (
    $time >= '06:46' && $time <='07:20' && $S_SZ!=$T_SZ_High) {
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_High);}
    If (
    $time >= '07:21' && $time <='14:30' && $S_SZ!=$T_SZ_Low) {
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_Low);}
    If (
    $time >= '14:31' && $time <='15:30' && $S_SZ!=$T_SZ_High) {
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_High);}
    If (
    $time >= '15:31' && $time <='21:30' && $S_SZ!=$T_SZ_Low) {
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_Low);}
    If (
    $time >= '21:31' && $time <='22:30' && $S_SZ!=$T_SZ_High) {
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_High);}
    If (
    $time >= '22:31' && $time <='23:59' && $S_SZ!=$T_SZ_Mid) {
    HM_WriteValuefloat(20904 /*[Komponenten\Heizköperthermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE"$T_SZ_Mid);}}
    ##########################
    #Bad-Oben-Temp
    $T_BO_Low=GetValue(33378 /*[Funktionen Automatik\Temperaturvorwahl\Bad oben Low]*/ );
    $T_BO_Mid=GetValue(28136 /*[Funktionen Automatik\Temperaturvorwahl\Bad oben Mid]*/ );
    $T_BO_High=GetValue(20372 /*[Funktionen Automatik\Temperaturvorwahl\Bad oben High]*/  );
    $Min_BO=GetValue(26206 /*[Absenk. / Heizen\Bad oben]*/ );

    If (
    $Min_BO >0) {
            
    HM_WriteValuefloat(37551 /*[Komponenten\Heizköperthermostate\Thermostat Bad oben]*/,"SET_TEMPERATURE"$T_BO_High);
            If (
    $Min_BO >=5){$Min_BO=$Min_BO-5;
            
    SetValuefloat(26206 /*[Absenk. / Heizen\Bad oben]*/ ,$Min_BO);}
            else {
    $Min_BO=0;
            
    SetValuefloat(26206 /*[Absenk. / Heizen\Bad oben]*/ ,$Min_BO);}}
        else{
    If (
    $time >= '00:00' && $time <='02:00' && $S_BO!=$T_BO_Mid) {
    HM_WriteValuefloat(37551 /*[Komponenten\Heizköperthermostate\Thermostat Bad oben]*/,"SET_TEMPERATURE"$T_BO_Mid);}
    If (
    $time >= '02:01' && $time <='07:30' && $S_BO!=$T_BO_Mid) {
    HM_WriteValuefloat(37551 /*[Komponenten\Heizköperthermostate\Thermostat Bad oben]*/,"SET_TEMPERATURE"$T_BO_Mid);}
    If (
    $time >= '07:31' && $time <='22:15' && $S_BO!=$T_BO_Low) {
    HM_WriteValuefloat(37551 /*[Komponenten\Heizköperthermostate\Thermostat Bad oben]*/,"SET_TEMPERATURE"$T_BO_Low);}
    If (
    $time >= '22:16' && $time <='23:59' && $S_BO!=$T_BO_Mid) {
    HM_WriteValuefloat(37551 /*[Komponenten\Heizköperthermostate\Thermostat Bad oben]*/,"SET_TEMPERATURE"$T_BO_Mid);}}
    ##########################
    #Kueche-Temp
    $T_KU_Low=GetValue(37162 /*[Funktionen Automatik\Temperaturvorwahl\Küche Low]*/ );
    $T_KU_Mid=GetValue(59287 /*[Funktionen Automatik\Temperaturvorwahl\Küche Mid]*/ );
    $T_KU_High=GetValue(45676 /*[Funktionen Automatik\Temperaturvorwahl\Küche High]*/ );
    $Min_KU=GetValue(48079 /*[Absenk. / Heizen\Küche]*/  );

    If (
    $Min_KU >0) {
            
    HM_WriteValuefloat(41052 /*[Komponenten\Heizköperthermostate\Thermostat Küche]*/ ,"SET_TEMPERATURE"$T_KU_High);
            If (
    $Min_KU >=5){$Min_KU=$Min_KU-5;
            
    SetValuefloat(48079 /*[Absenk. / Heizen\Küche]*/ ,$Min_KU);}
            else {
    $Min_KU=0;
            
    SetValuefloat(48079 /*[Absenk. / Heizen\Küche]*/ ,$Min_KU);}}
        else{
    If ((
    $time >= '00:00') AND ($time <='13:45') AND ($S_KU!=$T_KU_Low)) {
    HM_WriteValuefloat(41052 /*[Komponenten\Heizköperthermostate\Thermostat Küche]*/ ,"SET_TEMPERATURE"$T_KU_Low);}
    If ((
    $time >= '13:46') AND ($time <='14:45') AND ($S_KU!=$T_KU_Mid)) {
    HM_WriteValuefloat(41052 /*[Komponenten\Heizköperthermostate\Thermostat Küche]*/ ,"SET_TEMPERATURE"$T_KU_Mid);}
    If ((
    $time >= '14:46') AND ($time <='18:30') AND ($S_KU!=$T_KU_High)) {
    HM_WriteValuefloat(41052 /*[Komponenten\Heizköperthermostate\Thermostat Küche]*/ ,"SET_TEMPERATURE"$T_KU_High);}
    If ((
    $time >= '18:31') AND ($time <='20:30') AND ($S_KU!=$T_KU_Mid)) {
    HM_WriteValuefloat(41052 /*[Komponenten\Heizköperthermostate\Thermostat Küche]*/ ,"SET_TEMPERATURE"$T_KU_Mid);}
    If ((
    $time >= '20:31') AND ($time <='23:59') AND ($S_KU!=$T_KU_Low)) {
    HM_WriteValuefloat(41052 /*[Komponenten\Heizköperthermostate\Thermostat Küche]*/ ,"SET_TEMPERATURE"$T_KU_Low);}}

    #####################   Warmwasser
    If (($time >= '00:00') AND ($time <='04:20')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,false);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,false);}
    If ((
    $time >= '04:20') AND ($time <='04:45')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,false);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,true);}
    If ((
    $time >= '04:46') AND ($time <='06:40')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,false);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,false);}
    If ((
    $time >= '06:41') AND ($time <='07:15')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,true);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,true);}
    If ((
    $time >= '07:16') AND ($time <='15:00')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,false);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,false);}
    If ((
    $time >= '15:01') AND ($time <='16:30')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,true);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,false);}
    If ((
    $time >= '16:31') AND ($time <='20:00')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,true);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,true);}
    If ((
    $time >= '20:01') AND ($time <='22:00')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,true);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,false);}
    If ((
    $time >= '22:01') AND ($time <='23:59')) {
    SetValueBoolean(57740 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Heizmodus]*/ ,false);
    SetValueBoolean(39461 /*[Funktionen Automatik\Heizmodusregelung / Temperaturkontrolle\Warmwasserbereitstellung]*/ ,false);}
    ?>
    https://maeffjus.de - Wetter-, Feinstaub- und Strahlungsdaten.
    Homematic CCU2 / Buderus MC10 / Buderus KM200 / Buderus RC35 / Homeduino 2.0 / Intel-Server mit Adaptec 5805 SAS 5x3TB RAID6, Windows 2k12R2, / Back-UPS 800VA (Server) / Back-UPS 500CS (Wifi & Router) / Zyxel NAS540 zum Backup auf 2x4TB / Sophos-UTM 9 Firewall

  2. #2
    Registriert seit
    Dec 2014
    Ort
    Nürburgring
    Beiträge
    314

    Hat niemand eine Idee?
    Kann man so etwas mit einer FOR-Schleife machen?
    Ich kenne FOR-Schleifen, allerdings müssten ja die Heiztemperaturen (1=Low, 2=Mid, 3=High) und die Zeit bis oder ab (was wäre besser?) wann diese gelten definiert sein.
    ich denke hier ginge ein String - aber wie kann ich das mittels Webfront in die Variable Schreiben?

    Wenn mir jemand ein wenig Starthilfe gibt - was für euch ja sicher keine große Sache ist würde ich mich gerne selbst weiter bemühen!
    Ich möchte ja nicht, dass mir jemand den Kram kpl. vorkaut - aber ich komme einfach nicht weiter.
    Gruß,
    Matthias
    https://maeffjus.de - Wetter-, Feinstaub- und Strahlungsdaten.
    Homematic CCU2 / Buderus MC10 / Buderus KM200 / Buderus RC35 / Homeduino 2.0 / Intel-Server mit Adaptec 5805 SAS 5x3TB RAID6, Windows 2k12R2, / Back-UPS 800VA (Server) / Back-UPS 500CS (Wifi & Router) / Zyxel NAS540 zum Backup auf 2x4TB / Sophos-UTM 9 Firewall

  3. #3
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,592

    Wenn das viele Räume und unterschiedliche Zeiten sind könnte es sich eventuell lohnen das ganze mit einer Klasse und objektorientierter Programmierung zu lösen.
    Objektorientierte Programmierung in PHP - PHP-Kurs.com - PHP programmieren lernen

    Dann must Du nur noch die Eigenschaften zuweisen und die Methoden sind ja überall die gleichen, dann wird das insgesamt übersichtlicher.

  4. #4
    Registriert seit
    Jan 2013
    Ort
    Altötting
    Beiträge
    173

    Zitat Zitat von Fonzo Beitrag anzeigen
    Wenn das viele Räume und unterschiedliche Zeiten sind könnte es sich eventuell lohnen das ganze mit einer Klasse und objektorientierter Programmierung zu lösen.
    Objektorientierte Programmierung in PHP - PHP-Kurs.com - PHP programmieren lernen

    Dann must Du nur noch die Eigenschaften zuweisen und die Methoden sind ja überall die gleichen, dann wird das insgesamt übersichtlicher.
    Hallo Fonzo,

    danke für den Link.
    Habe gleich mal mein erstes "objektorientierte" Skript geschrieben...
    Es geht sicherlich noch viel eleganter...
    Habe nur das WZ und SZ draufgenommen. Der Rest ist fleißarbeit...
    Hoffe es funktioniert, konnte es nicht testen.

    Viele Grüße
    Wickie

    PHP-Code:
    <?


    $time
    =date('H:i');

    # Festlegung. welche Attribute (Eigenschaften, Variablen) und Methoden (Fähigkeiten, Funktionen) diese Klasse besitzt.
    # Im davon erzeugten Objekt werden die Eigenschaften mit Werten belegt.
    #


    // uebergeordnete Klasse
    class uebergeordneteKlasse {}

    // die Klasse "Klasse" definieren
    class Klasse extends uebergeordneteKlasse // Klasse gehört zur übergeordneten Klasse
    {

        
    // eine Eigenschaft/Attribut festlegen
        
    var $ID_S;    // Variablen-ID der Solltemperatur
        
    var $ID_T_Low;    // Variablen-ID der T_Low
        
    var $ID_T_Mid;
        var 
    $ID_T_High;
        var 
    $ID_Min;     //[Absenk. / Heizen
        
    var $ID_Regler;
        var 
    $Low;
        var 
    $Mid;
        var 
    $High;
        var 
    $time_Low;
        var 
    $time_Mid;
        var 
    $time_High;


        
    // eine Methode festlegen (nennt sich Funktion,
        // ist aber in einer Klasse und
        // wird somit als Methode bezeichnet)
        
    function Methode()
        {
          
    $S Getvalue($this->ID_S);
          
    $T_Low Getvalue($this->ID_T_Low);
          
    $T_Mid Getvalue($this->ID_T_Mid);
          
    $T_High Getvalue($this->ID_T_High);
          
    $Min Getvalue($this->ID_Min);

            If (
    $Min >0)
                {
                
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_High);
                If (
    $Min >=5){$Min=$Min-5;
                    
    SetValueFloat($this->ID_Min ,$Min);}
                else {
    $Min=0;
                    
    SetValueFloat($this->ID_Min ,$Min);}
                }
            else
                {
                If (
    $this->time_Low == && $S!=$T_Low)
                    {
                    
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_Low);
                    }
                elseif (
    $this->time_Mid == && $S!=$T_Mid)
                    {
                    
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_Mid);
                    }
                elseif (
    $this->time_High == && $S!=$T_High)
                    {
                    
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_High);
                    }
                }

        }
    }


    // bisher passiert noch gar nichts,
    // jetzt wird aus der Klasse ein Objekt erzeugt
    $Klasse_WZ = new Klasse;
    // eine Eigenschaft (Attribut) wird definiert
    $Klasse_WZ->ID_S 28398;
    $Klasse_WZ->ID_T_Low 16771;
    $Klasse_WZ->ID_T_Mid 14810;
    $Klasse_WZ->ID_T_High 14124;
    $Klasse_WZ->ID_Min 15069;
    $Klasse_WZ->ID_Regler 51674;
    $Klasse_WZ ->time_Low 0;
    $Klasse_WZ ->time_Mid 0;
    $Klasse_WZ ->time_High 0;
    If (
    $time >= '00:00' && $time <='14:15' || $time >= '22:01' && $time <='23:59')     {
             
    $Klasse_WZ ->time_Low 1;
             }
    elseif(
    $time >= '14:16' && $time <='15:15') {
          
    $Klasse_WZ ->time_Mid 1;
             }
    else{
          
    $Klasse_WZ ->time_High 1;
        }
    // Ende Wohnzimmer

    // Beginn Schlafzimmer
    // jetzt wird aus der Klasse ein Objekt erzeugt
    $Klasse_SZ = new Klasse;
    // eine Eigenschaft (Attribut) wird definiert
    $Klasse_SZ->ID_S 23219;

    $Klasse_SZ->ID_T_Low 43281;
    $Klasse_SZ->ID_T_Mid 39789;
    $Klasse_SZ->ID_T_High 12957;
    $Klasse_SZ->ID_Min 56815;
    $Klasse_SZ->ID_Regler 20904;
    $Klasse_SZ ->time_Low 0;
    $Klasse_SZ ->time_Mid 0;
    $Klasse_SZ ->time_High 0;
    If (
    $time >= '07:21' && $time <='14:30' || $time >=  '15:31' && $time <='21:30' )     {
             
    $Klasse_SZ ->time_Low 1;
             }
    elseif(
    $time >= '00:00' && $time <='06:45'|| $time >=  '22:31' && $time <='23:59') {
          
    $Klasse_SZ ->time_Mid 1;
             }
    else{
          
    $Klasse_SZ ->time_High 1;
        }


    // und nun wird das erste mal die Methode (Funktion) ausgeführt
    $Klasse_WZ->Methode();
    $Klasse_SZ->Methode();

    ?>
    Geändert von Wickie (26.01.16 um 22:24 Uhr)

  5. #5
    Registriert seit
    Dec 2014
    Ort
    Nürburgring
    Beiträge
    314

    Puh - also das sieht ansich gut aus, aber ich Steige nicht so ganz durch:

    In meinen Augen bin ich mir nicht sicher inwieweit ich das umsetzen Soll...
    Ich habe die übergeordnete Klasse, da wären die Objekte die Objekte darunter dann ja die Räume oder?

    Darunter wiederum (also die "untergeordnete Klasse) kämen ja dann die "Schaltzeiten" oder?
    Jetzt bin ich mir nicht so sicher ob die Umsetzung unten (die ja auch nicht für mich direkt ist) nicht besser so wäre:

    PHP-Code:
    <?


    $time
    =date('H:i');

    // uebergeordnete Klasse
    class uebergeordneteKlasse {

    var 
    $Wohnzimmer;
    var 
    $Küche;
    var 
    $Schlafzimmer;
    var 
    $Bad_oben;}

    // die Klasse "Klasse" definieren
    class Klasse extends uebergeordneteKlasse // Klasse gehört zur übergeordneten Klasse
    {

        
    // eine Eigenschaft/Attribut festlegen
        
    var $ID_S;    // Variablen-ID der Solltemperatur
        
    var $ID_T_Low;    // Variablen-ID der T_Low
        
    var $ID_T_Mid;
        var 
    $ID_T_High;
        var 
    $ID_Min;     //[Absenk. / Heizen
        
    var $ID_Regler;
        var 
    $Low;
        var 
    $Mid;
        var 
    $High;
        var 
    $time_Low;
        var 
    $time_Mid;
        var 
    $time_High;


        function 
    Methode()
        {
          
    $S Getvalue($this->ID_S);
          
    $T_Low Getvalue($this->ID_T_Low);
          
    $T_Mid Getvalue($this->ID_T_Mid);
          
    $T_High Getvalue($this->ID_T_High);
          
    $Min Getvalue($this->ID_Min);
    Wäre das dann so Sinnvoll (ich weiß, muss ich ansich selbst entscheiden, aber ich habe keine Ahnung und damit auch keine Meinung...)?

    Und Was ich nicht ganz verstehe:
    PHP-Code:
          $S Getvalue($this->ID_S); 
    Muss ich das dann nicht so schreiben wie üblich, also GetValueFloat(etc.)?
    Ich weiß halt nicht genau wie ich das schreiben / strukturieren soll und ob die Syntax so hinkommt.

    Ich hoffe mal auf etwas Input - habe mir auch Tutorials angesehen, leider sind davon alle nur auf Websitenprogrammierung zugeschnitten...
    Danke & Gurß,

    Matthias
    https://maeffjus.de - Wetter-, Feinstaub- und Strahlungsdaten.
    Homematic CCU2 / Buderus MC10 / Buderus KM200 / Buderus RC35 / Homeduino 2.0 / Intel-Server mit Adaptec 5805 SAS 5x3TB RAID6, Windows 2k12R2, / Back-UPS 800VA (Server) / Back-UPS 500CS (Wifi & Router) / Zyxel NAS540 zum Backup auf 2x4TB / Sophos-UTM 9 Firewall

  6. #6
    Registriert seit
    Jan 2013
    Ort
    Altötting
    Beiträge
    173

    Hallo Matthias,

    setze einfach mal dein Skript als inaktiv und verwende meine vorgeschlagene Variante. Für das Wohn- und Schlafzimmer müsste es unverändert funktionieren.
    Ich kann es leider nicht testen, da ich deine Variablen und Schaltaktoren nicht habe.

    Zu deinen Fragen:
    Die übergeordnete Klasse kannst du komplett entfernen. Habe sie nur von einem Tutorial übernommen. In deinem Fall hat sie keine Funktion. Im angehängten Skript habe ich sie entfernt.
    PHP-Code:
     var $ID_Variable
    braucht man glaube ich auch nicht.

    PHP-Code:
    $this->ID_S 
    bedeutet, dass der Variablen $this der Wert von
    PHP-Code:
    $Klasse_SZ->ID_S 23219
    zugeordnet wird (hier ...SZ).

    Anbei dein "überarbeitetes" Skript:
    PHP-Code:
    <?


    $time
    =date('H:i');

    # Festlegung. welche Attribute (Eigenschaften, Variablen) und Methoden (Fähigkeiten, Funktionen) diese Klasse besitzt.
    # Im davon erzeugten Objekt werden die Eigenschaften mit Werten belegt.
    #

    // die Klasse "Klasse" definieren
    class Klasse 
    {
        
    // eine Methode festlegen (nennt sich Funktion,
        // ist aber in einer Klasse und
        // wird somit als Methode bezeichnet)
        
    function Methode()
        {
          
    $S Getvalue($this->ID_S);
          
    $T_Low Getvalue($this->ID_T_Low);
          
    $T_Mid Getvalue($this->ID_T_Mid);
          
    $T_High Getvalue($this->ID_T_High);
          
    $Min Getvalue($this->ID_Min);

            If (
    $Min >0)
                {
                
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_High);
                If (
    $Min >=5){$Min=$Min-5;
                    
    SetValueFloat($this->ID_Min ,$Min);}
                else {
    $Min=0;
                    
    SetValueFloat($this->ID_Min ,$Min);}
                }
            else
                {
                If (
    $this->time_Low == && $S!=$T_Low)
                    {
                    
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_Low);
                    }
                elseif (
    $this->time_Mid == && $S!=$T_Mid)
                    {
                    
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_Mid);
                    }
                elseif (
    $this->time_High == && $S!=$T_High)
                    {
                    
    HM_WriteValuefloat($this->ID_Regler ,"SET_TEMPERATURE"$T_High);
                    }
                }

        }
    }


    // bisher passiert noch gar nichts,
    // jetzt wird aus der Klasse ein Objekt erzeugt
    $Klasse_WZ = new Klasse;
    // eine Eigenschaft (Attribut) wird definiert
    $Klasse_WZ->ID_S 28398 /*[Objekt #28398 existiert nicht]*/;
    $Klasse_WZ->ID_T_Low 16771 /*[Objekt #16771 existiert nicht]*/;
    $Klasse_WZ->ID_T_Mid 14810 /*[Objekt #14810 existiert nicht]*/;
    $Klasse_WZ->ID_T_High 14124 /*[Objekt #14124 existiert nicht]*/;
    $Klasse_WZ->ID_Min 15069 /*[Objekt #15069 existiert nicht]*/;
    $Klasse_WZ->ID_Regler 51674 /*[Objekt #51674 existiert nicht]*/;
    $Klasse_WZ ->time_Low 0;
    $Klasse_WZ ->time_Mid 0;
    $Klasse_WZ ->time_High 0;
    If (
    $time >= '00:00' && $time <='14:15' || $time >= '22:01' && $time <='23:59')     {
             
    $Klasse_WZ ->time_Low 1;
             }
    elseif(
    $time >= '14:16' && $time <='15:15') {
          
    $Klasse_WZ ->time_Mid 1;
             }
    else{
          
    $Klasse_WZ ->time_High 1;
        }
    // Ende Wohnzimmer

    // Beginn Schlafzimmer
    // jetzt wird aus der Klasse ein Objekt erzeugt
    $Klasse_SZ = new Klasse;
    // eine Eigenschaft (Attribut) wird definiert
    $Klasse_SZ->ID_S 23219 /*[Objekt #23219 existiert nicht]*/;

    $Klasse_SZ->ID_T_Low 43281 /*[Objekt #43281 existiert nicht]*/;
    $Klasse_SZ->ID_T_Mid 39789 /*[Objekt #39789 existiert nicht]*/;
    $Klasse_SZ->ID_T_High 12957 /*[Objekt #12957 existiert nicht]*/;
    $Klasse_SZ->ID_Min 56815 /*[Objekt #56815 existiert nicht]*/;
    $Klasse_SZ->ID_Regler 20904 /*[Objekt #20904 existiert nicht]*/;
    $Klasse_SZ ->time_Low 0;
    $Klasse_SZ ->time_Mid 0;
    $Klasse_SZ ->time_High 0;
    If (
    $time >= '07:21' && $time <='14:30' || $time >=  '15:31' && $time <='21:30' )     {
             
    $Klasse_SZ ->time_Low 1;
             }
    elseif(
    $time >= '00:00' && $time <='06:45'|| $time >=  '22:31' && $time <='23:59') {
          
    $Klasse_SZ ->time_Mid 1;
             }
    else{
          
    $Klasse_SZ ->time_High 1;
        }


    // und nun wird das erste mal die Methode (Funktion) ausgeführt
    $Klasse_WZ->Methode();
    $Klasse_SZ->Methode();

    ?>
    Anbei ein Skript zur Veranschaulichung:
    PHP-Code:
    <?

    // 1.Schritt: Klasse definieren
    class Klasse
    {
        
    // eine Methode festlegen (nennt sich Funktion,
        // ist aber in einer Klasse und
        // wird somit als Methode bezeichnet)
        
        // diese Methode wird bei allen Räumen durchlaufen
        
    function Methode()
        {
            
    $T_Ist GetValue($this->ID_T_Ist);
          
    $T_Soll Getvalue($this->ID_T_Soll);

            If (
    $T_Ist $T_Soll)
                {
                   
    SetValueBoolean($this->ID_Heizung_Schalten ,true); // Heizung einschalten
                
    }
            else
               {
                  
    SetValueBoolean($this->ID_Heizung_Schalten ,false); // Heizung ausschalten
                
    }
        }
    }

    // bisher passiert noch gar nichts,
    // jetzt wird aus der Klasse ein Objekt erzeugt
    $Klasse_Raum01 = new Klasse;
    // eine Eigenschaft (Attribut) wird definiert
    $Klasse_Raum01->ID_T_Ist 15040 /*[Geräte\Sonstiges\Test\Objektorientiert\Test_Heizung\Raum_01\T_Ist_Raum01]*/;
    $Klasse_Raum01->ID_T_Soll 57796 /*[Geräte\Sonstiges\Test\Objektorientiert\Test_Heizung\Raum_01\T_Soll_Raum01]*/;
    $Klasse_Raum01->ID_Heizung_Schalten 33476 /*[Geräte\Sonstiges\Test\Objektorientiert\Test_Heizung\Raum_01\Heizung_Ein_Raum01]*/;

    $Klasse_Raum02 = new Klasse;
    // eine Eigenschaft (Attribut) wird definiert
    $Klasse_Raum02->ID_T_Ist 10039 /*[Geräte\Sonstiges\Test\Objektorientiert\Test_Heizung\Raum_02\T_Ist_Raum02]*/;
    $Klasse_Raum02->ID_T_Soll 13732 /*[Geräte\Sonstiges\Test\Objektorientiert\Test_Heizung\Raum_02\T_Soll_Raum02]*/;
    $Klasse_Raum02->ID_Heizung_Schalten 53587 /*[Geräte\Sonstiges\Test\Objektorientiert\Test_Heizung\Raum_02\Heizung_Ein_Raum02]*/;

    // und nun wird das erste mal die Methode (Funktion) ausgeführt
    $Klasse_Raum01->Methode();
    $Klasse_Raum02->Methode();

    ?>
    Name:  Bildschirmfoto vom 2016-01-30 22:59:01.png
Hits: 374
Größe:  81.5 KB

    Bei Fragen helfe ich dir gerne weiter, so weit ich kann.

    Viele Grüße
    Wickie

  7. #7
    Registriert seit
    Dec 2014
    Ort
    Nürburgring
    Beiträge
    314

    Seeeehr cool, Danke!
    Werde ich nach den Karnevalstagen (jaja - ist halt das Rheinland hier..) mal sofort ansehen!
    Gruß,
    Matthias
    https://maeffjus.de - Wetter-, Feinstaub- und Strahlungsdaten.
    Homematic CCU2 / Buderus MC10 / Buderus KM200 / Buderus RC35 / Homeduino 2.0 / Intel-Server mit Adaptec 5805 SAS 5x3TB RAID6, Windows 2k12R2, / Back-UPS 800VA (Server) / Back-UPS 500CS (Wifi & Router) / Zyxel NAS540 zum Backup auf 2x4TB / Sophos-UTM 9 Firewall

  8. #8
    Registriert seit
    Dec 2014
    Ort
    Nürburgring
    Beiträge
    314

    Hey Wickie,

    nach viel zu langer Zeit nehme ich mich gerade der Sache nochmal an, Ich habe im Studium heute mit VBS rumgefrickelt (kein Kommentar :-) ) und da fiel mir ein, da war doch was...

    Was ich hier noch nicht so ganz verstehe bzw. was im Großen und Ganzen recht ähnlich ist wie vorher (bitte korrigiere mich falls ich das falsch verstanden habe!!!), die Zeiten stehen ja nach wie vor im Code und sind so erst einmal nicht sinnvoll zu ändern.
    Also genau genommen kann meine Freundin hier nichts machen ohne Hilfe (also ohne das ich es mache).

    Irgendwie habe ich mich da am Anfang auch mies ausgedrückt, ich denke nämlich das sinnvollste wäre ein Array aus dem die Zeiten hervorgehen (also irgendwie durchsucht das Script das Array und findet den Tag und die Zeit raus und setzt die Räume entsprechend).

    Z.b.:
    Code:
    #Array Früh_Woche
    ################
    #Küche
    00:00 L
    14:30 M
    15:00 H
    18:00 M
    20:00 L
    
    #Wohnzimmer
    00:00 L
    14:30 M
    15:00 H
    21:00 M
    22:30 L
    Oder hat jemand eine bessere Idee?
    Bestenfalls natürlich vom Webinterface änderbar...

    Schönes Wochenende Miteinander!
    Gruß,
    Matthias
    https://maeffjus.de - Wetter-, Feinstaub- und Strahlungsdaten.
    Homematic CCU2 / Buderus MC10 / Buderus KM200 / Buderus RC35 / Homeduino 2.0 / Intel-Server mit Adaptec 5805 SAS 5x3TB RAID6, Windows 2k12R2, / Back-UPS 800VA (Server) / Back-UPS 500CS (Wifi & Router) / Zyxel NAS540 zum Backup auf 2x4TB / Sophos-UTM 9 Firewall

  9. #9
    Registriert seit
    Dec 2014
    Ort
    Nürburgring
    Beiträge
    314

    Zitat Zitat von Maeffjus Beitrag anzeigen

    Irgendwie habe ich mich da am Anfang auch mies ausgedrückt, ich denke nämlich das sinnvollste wäre ein Array aus dem die Zeiten hervorgehen (also irgendwie durchsucht das Script das Array und findet den Tag und die Zeit raus und setzt die Räume entsprechend).

    Z.b.:
    Code:
    #Array Früh_Woche
    ################
    #Küche
    00:00 L
    14:30 M
    15:00 H
    18:00 M
    20:00 L
    
    #Wohnzimmer
    00:00 L
    14:30 M
    15:00 H
    21:00 M
    22:30 L
    Güatzi Mitanoand - wie man in der Eifel sagt. Nicht. :-)

    Es liegen also wieder Semesterferien vor und ich habe bisher alle möglichen Kleinigkeiten die nicht funktioniert haben behoben und allgemein meinen Code etwas optimiert, aber das Thema hier steht nach wie vor offen.

    Was haltet ihr davon wenn man mittels Web interface die Zeiten irgendwie wählt oder eingibt und dazu Low, Mid, High, Boost?
    (so wie im Beispiel oben.)
    Ideen haben ich zuhauf, aber mir fehlt etwas das Handwerkszeug um das umzusetzen.

    Es wäre ja in zwei Teile zu splitten, das array erstellen (pro Schicht im interface mit den jeweiligen Räumen und einer Zeit dazu)
    Dann als zweites die Daten aus dem array raus lesen und sinnvoll interpretieren.
    If then else usw kann ich natürlich, oder schleifen - evtl könnte man die Räume auch durch nummerieren und dann mit einer for Schleife und der jeweiligen zeit das array durchgehen. Aber dazu müsste ich erst mal eins aus dem web interface hinbekommen. Dann könnte meine Frau nämlich auch was dran ändern.

    Gruß,
    Matthias
    https://maeffjus.de - Wetter-, Feinstaub- und Strahlungsdaten.
    Homematic CCU2 / Buderus MC10 / Buderus KM200 / Buderus RC35 / Homeduino 2.0 / Intel-Server mit Adaptec 5805 SAS 5x3TB RAID6, Windows 2k12R2, / Back-UPS 800VA (Server) / Back-UPS 500CS (Wifi & Router) / Zyxel NAS540 zum Backup auf 2x4TB / Sophos-UTM 9 Firewall

Ähnliche Themen

  1. Lösung für Bewegungsmelder gesucht
    Von mastermind1 im Forum Haustechnik
    Antworten: 4
    Letzter Beitrag: 22.05.15, 12:17
  2. Keymatic & Ips Alarmanlage Idee gesucht?
    Von KrasserMann im Forum HomeMatic
    Antworten: 3
    Letzter Beitrag: 21.05.13, 16:34
  3. Idee für Wassermelder im Wasserbett gesucht
    Von Doctor Snuggles im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 12
    Letzter Beitrag: 06.01.13, 20:23
  4. Für Idee: Kritik & Anregungen gesucht
    Von jwka im Forum Skripte, PHP, SQL
    Antworten: 0
    Letzter Beitrag: 09.12.11, 09:01