Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Steuerung Heizung nach Schichtplan

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Steuerung Heizung nach Schichtplan

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      rudiraz last edited by

      also ich muss sagen…es funktioniert super 🙂

      Das weckt natürlich jetzt Begehrlichkeiten. Vielleicht werde ich noch die Uhrzeit vom Hochfahren bis zum Runterfahren der Heizung in Variablen setzen, damit ich das Ganze per Vis steuern kann

      Grüße

      1 Reply Last reply Reply Quote 0
      • T
        tempestas last edited by

        @BuZZy:

        So müsste es gehen:

        Sollte eigentlich relativ selbsterklärend sein.. Falls du Fragen hast, zögere nicht..

        Anzupassen sind Zeile 1-4 im Script. Habe Zeile 1-4 jetzt nur mit Beispielwerten gefüllt.

        Sobald du das Script startest sollte eine Ausgabe im Log zu sehen sein, solange du "logging" auf true lässt.

        Desweteren sollte auch jeden Abend um 22 Uhr die Logausgabe auftauchen.

        Beachte, das Skript sucht im Kalender nach dem Wort "Morgen" .. Also muss im iCal Adapter die Option "Ersetze Datum mit Worten:" aktiviert sein.

        1. Kalender-Table Datenpunkt (ical.0.data.table)

        2. Datenpunkt in welchem die Temperatur gesetzt wird. (hm-rpc.0.OEQ0XXXXXXX.2.SET_TEMPERATURE)

        3. Welche Temperatur soll gesetzt werden? (22)

        4. Log ausgaben vom Script aktiviert. (true)

        `var kalenderinhalt = getState('ical.0.data.table').val;                 // Kalender.data.table Datenpunkt Value
        var tempdatenpunkt = 'hm-rpc.0.OEQ0XXXXXXX.2.SET_TEMPERATURE';          // Datenpunt für die Temperatur
        var temperatur = 22;                                                    // Gewünschte Temperatur um 04:45
        var logging = true;                                                     // Logging. (Auf false setzen um Logausgaben zu deaktivieren.)
        
        var schedfs = null;
        var morgenfs = null;
        var tempbevor = null;
        
        function icalheating(obj){
                    var datestring="date";
                    var eventstring="event";
                    morgenfs = false;
                    for(var i = 0; i < obj.length; i++) {
                        if (obj[i][datestring].indexOf('Morgen') === 0 && obj[i][eventstring].indexOf('Frühschicht') === 0) {
                            if(logging) log('Für Morgen (' + obj[i][datestring] + ') steht ein passendes Event (' + obj[i][eventstring] + ') im Kalender!');
                            morgenfs = true;
                        } else { 
                            if(logging) log('Event im Kalender (' + obj[i][datestring] + ' ' + obj[i][eventstring] + ') passt nicht - wird ignoriert!'); }
                    }
                    if (morgenfs) {
                        if(logging) log('Morgen steht Frühschicht im Kalender.. Erstelle Schedule für 04:45.');
                        if(schedfs) clearSchedule(schedfs);                
                        schedfs = schedule('0 45 4 * * *', cb(function(){                    
                            tempbevor = getState(tempdatenpunkt).val;
                            setState(tempdatenpunkt,temperatur);
                            clearStateDelayed(tempdatenpunkt);
                            setStateDelayed(tempdatenpunkt, tempbevor,  2700000);
                        }));
                    } else {
                        if(logging) log('Morgen keine Frühschicht! Eventuell vorhandener Schedule wird gelöscht.');
                        if(schedfs) clearSchedule(schedfs);
                    }
                }
                
        schedule("0 0 22 * * *", function () { icalheating(kalenderinhalt); });
        icalheating(kalenderinhalt);`
        
        Gruß
        
        Hallo Buzzy,
        
        ich hänge mich mal ran, allerdings, weil ich JS wieder etwas mehr verstehen will.
        
        Diesen Teil
        
        `~~[code]~~var datestring="date";
        var eventstring="event";[/code]`
        
        verstehe ich nicht wirklich. Sind "date" und "event" im iCal definierte Dinge? Ich arbeite immer nur mit der html, nicht mit dem Table (da steht bei mir immer [object object] drin). 
        
        Grds verstehe ich, dass du im "Datumbereich" nach dem Wort morgen suchst und nach Frühschicht im Event Bereich. Allerdings ist mir eben diese Unterscheidung nicht bekannt aus dem iCal. Und wird nicht mit dem o.g. Code einfach der Variablen ein String mit dem Inhalt "Date" zugewiesen? wie funktioniert dann dieser Teil:
        
        `~~[code]~~obj[i][datestring]` 
        
        Danke für deine Erläuterungen, würds gerne verstehen[/i][/code][/i][/i][/i][/i][/i][/i]
        ``` ` 
        1 Reply Last reply Reply Quote 0
        • BuZZy
          BuZZy last edited by

          @tempestas:

          Diesen Teil````
          var datestring="date";
          var eventstring="event";

          
          Grds verstehe ich, dass du im "Datumbereich" nach dem Wort morgen suchst und nach Frühschicht im Event Bereich. Allerdings ist mir eben diese Unterscheidung nicht bekannt aus dem iCal. Und wird nicht mit dem o.g. Code einfach der Variablen ein String mit dem Inhalt "Date" zugewiesen? wie funktioniert dann dieser Teil:```
          `obj[i][datestring]` 
          
          Guten Morgen,
          
          der Datenpunkt ical.0.data.table enthält ein Array in welchem sich wiederum Objekte befinden.
          
          Die Variablen datestring und eventstring habe ich nur definiert damit man "an einer Stelle schnell was ändern kann"..
          
          Man kann statt die Variablen zu benutzen auch einfach mit "obj_~~[i]~~.date" und "obj_~~[i]~~.event" die entsprechenden Werte abrufen.
          
          Arrays sind getrennte Werte die man einzeln abrufen kann sozusagen ..__ `~~[code]~~// Hier ist ein Array
          var beispiel = ["Wert0", "Wert1", "Wert2"];[/code]`Objekte wiederum beinhalten Werte mit dazugehörigen Namen. `~~[code]~~// Hier ist ein Objekt
          var beispiel2 = {name:"Peter", alter:"29"};[/code]`
          
          Hab dir schnell mal ein kleines Script zusammengekloppt welches dir mit Logausgaben zeigt was Sache ist..`~~[code]~~// Hier ist der ical.0.data.table Datenpunkt in Klartext
          log(JSON.stringify(getState('ical.0.data.table').val));
          
          // Hier bauen wir ein Array mit 3 Werten.
          var beispiel = ["Test1", "Test2", "Test3"];
          // Und geben dann Wert 1, 2 und 3 im Log aus.
          log(beispiel[0] + ' ' + beispiel[1] + ' ' + beispiel[2]);
          // Hier prüfen wir, wie viele Werte überhaupt im Array stehen?
          log('Es stehen --' + beispiel.length + '-- Werte im Array!');
          log('----------------------------------------------------');
          
          // Hier bauen wir ein Objekt mit 2 Werten
          var beispiel2 = {name:"Peter", alter:"29"};
          // Hier prüfen wir welchen Wert alter hat
          log('Alter hat im Objekt beispiel2 den Wert ---' + beispiel2.alter + '---!');
          
          // Hier bauen wir ein Array mit 2 Objekten als Inhalt (genau wie der iCal Adapter sie erzeugt)
          var icalbeispiel = [{"name":"TestName0","event":"TestEvent0"},{"name":"TestName1","event":"TestEvent1"}];
          // Und die ausgabe von den Events
          log('Event an Position 0: ' + icalbeispiel[0].event);
          log('Event an Position 1: ' + icalbeispiel[1].event);[/code]`
          
          Schau dir mal die Logausgabe an wie das [object Object] vom Kalender wirklich aussieht..
          
          Es ist ein Array [] in dem Objekte {} untergebracht sind.. 
          
          "[{"date":"Morgen","event":"Restmüll"},{"date":"In einer Woche ","event":"Gelber Sack"}]"
          
          Hoffe das ist verständlich genug. Bin selber erst seit 6 Monaten mit JavaScript unterwegs.  :lol: 
          
          Falls du noch Fragen hast, gerne her damit. :)
          
          Gruß[/i][/i][/i]
          ``` ` 
          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            Danke.

            Du lernst aber viel schneller als ich, wie es scheint. :idea: 😄

            Das ical.0.data.table ein Array ist, kann ich bei mir eben nicht sehen. Das hat schon sehr geholfen 🙂

            1 Reply Last reply Reply Quote 0
            • BuZZy
              BuZZy last edited by

              @tempestas:

              Das ical.0.data.table ein Array ist, kann ich bei mir eben nicht sehen. Das hat schon sehr geholfen 🙂 ` Überall wo "object Object" auftaucht kannst du mit

              JSON.stringify(.....)
              ````also für ical.0.data.table:````
              JSON.stringify(getState('ical.0.data.table').val)
              ````in Klartext darstellen was sich hinter "object Object" verbirgt. :)
              
              Gruß
              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                Danke für den Hinweis. Werde ich mal testen.

                1 Reply Last reply Reply Quote 0
                • R
                  rudiraz last edited by

                  @BuZZy

                  Kannst du mir nochmal behilflich sein?

                  Wenn ich nun zwei Thermostate zur Frühschicht schalten will, wie sieht das dann aus?

                  Eine zweite Variable anlegen für das Thermostat ist ja nicht das Problem.

                  Aber das Delay funktioniert dann doch nicht so oder?

                  Grüße

                  1 Reply Last reply Reply Quote 0
                  • BuZZy
                    BuZZy last edited by

                    @rudiraz:

                    Wenn ich nun zwei Thermostate zur Frühschicht schalten will, wie sieht das dann aus?

                    Eine zweite Variable anlegen für das Thermostat ist ja nicht das Problem.

                    Aber das Delay funktioniert dann doch nicht so oder? `
                    Du kannst einfach alles mit "tempdatenpunkt" und "tempbevor" auf eine Variable "tempdatenpunkt2" und "tempbevor2" kopieren..

                    Man könnte auch den Weg über eine Aufzählung gehen oder die Datenpunkte in ein Objekt/Array schreiben..

                    Hier der Weg über "tempdatenpunkt2"..

                    `var kalenderinhalt = getState('ical.0.data.table').val;                 // Kalender.data.table Datenpunkt Value
                    var tempdatenpunkt = 'hm-rpc.0.OEQ0XXXXXXX.2.SET_TEMPERATURE';          // Datenpunt für die Temperatur
                    var tempdatenpunkt2 = 'hm-rpc.0.OEQ0XXXXXXX.2.SET_TEMPERATURE';         // Zweiter Datenpunt für die Temperatur
                    var temperatur = 22;                                                    // Gewünschte Temperatur um 04:45
                    var logging = true;                                                     // Logging. (Auf false setzen um Logausgaben zu deaktivieren.)
                    
                    var schedfs = null;
                    var morgenfs = null;
                    var tempbevor = null;
                    var tempbevor2 = null;
                    
                    function icalheating(obj){
                                var datestring="date";
                                var eventstring="event";
                                morgenfs = false;
                                for(var i = 0; i < obj.length; i++) {
                                    if (obj[i][datestring].indexOf('Morgen') === 0 && obj[i][eventstring].indexOf('Frühschicht') === 0) {
                                        if(logging) log('Für Morgen (' + obj[i][datestring] + ') steht ein passendes Event (' + obj[i][eventstring] + ') im Kalender!');
                                        morgenfs = true;
                                    } else { 
                                        if(logging) log('Event im Kalender (' + obj[i][datestring] + ' ' + obj[i][eventstring] + ') passt nicht - wird ignoriert!'); }
                                }
                                if (morgenfs) {
                                    if(logging) log('Morgen steht Frühschicht im Kalender.. Erstelle Schedule für 04:45.');
                                    if(schedfs) clearSchedule(schedfs);                
                                    schedfs = schedule('0 45 4 * * *', cb(function(){
                                    // Hier beginnt der Abschnitt für das erste Thermostat					
                                        tempbevor = getState(tempdatenpunkt).val;
                                        setState(tempdatenpunkt,temperatur);
                                        clearStateDelayed(tempdatenpunkt);
                                        setStateDelayed(tempdatenpunkt, tempbevor,  2700000);
                                    // Hier beginnt der Abschnitt für das zweite Thermostat.
                                        tempbevor2 = getState(tempdatenpunkt2).val;
                                        setState(tempdatenpunkt2,temperatur);
                                        clearStateDelayed(tempdatenpunkt2);
                                        setStateDelayed(tempdatenpunkt2, tempbevor2,  2700000);
                                    }));
                                } else {
                                    if(logging) log('Morgen keine Frühschicht! Eventuell vorhandener Schedule wird gelöscht.');
                                    if(schedfs) clearSchedule(schedfs);
                                }
                            }
                    
                    schedule("0 0 22 * * *", function () { icalheating(kalenderinhalt); });
                    icalheating(kalenderinhalt);`
                    
                    Gruß[/i][/i][/i][/i][/i][/i]
                    
                    1 Reply Last reply Reply Quote 0
                    • R
                      rudiraz last edited by

                      Dankeschön 🙂

                      werde ich einbauen

                      Grüße

                      1 Reply Last reply Reply Quote 0
                      • T
                        Torsten_MG last edited by

                        Ich muß mich hier auch mal anhängen, obwohl der Beitrag schon Staub ansetzt 😄

                        JavaScript ist für mich auch noch komplettes neuland und ich verstehe jetzt gar nicht was ich damit anfangen kann.

                        @BuZZy:

                        @tempestas:

                        Das ical.0.data.table ein Array ist, kann ich bei mir eben nicht sehen. Das hat schon sehr geholfen 🙂 Überall wo "object Object" auftaucht kannst du mit…

                        Wo genau muß ich das einsetzen, damit ich das wo in Klarschrift sehe?

                        ` > ````

                        JSON.stringify(.....)
                        also für ical.0.data.table:
                        JSON.stringify(getState('ical.0.data.table').val)
                        ````in Klartext darstellen was sich hinter "object Object" verbirgt. 🙂 `

                        Danke schonmal!!

                        1 Reply Last reply Reply Quote 0
                        • BuZZy
                          BuZZy last edited by

                          Hi,

                          wie weit bist du denn jetzt?

                          Was genau möchtest du erreichen?

                          Wie sieht dein Script bis jetzt aus?

                          Gruß

                          1 Reply Last reply Reply Quote 0
                          • T
                            Torsten_MG last edited by

                            @BuZZy:

                            Hi,

                            wie weit bist du denn jetzt?

                            Was genau möchtest du erreichen?

                            Wie sieht dein Script bis jetzt aus?

                            Gruß ` Das Sript selber kann ich noch nicht gebrauchen. Noch kein Thermostat. Ich möchte aber schon mal lernen das zu verstehen, darum die vorige Frage

                            Gesendet von Unterwegs mit Tapatalk

                            1 Reply Last reply Reply Quote 0
                            • T
                              Torsten_MG last edited by

                              Du hattest mal geschrieben, dass man mit````
                              JSON.stringify(getState('ical.0.data.table').val)

                              
                              Ich gehe jetzt mal davon aus, dass das in ein JavaScript eintragen werden muß. Wo wird mir aber das dann in Klartext angezeigt?
                              1 Reply Last reply Reply Quote 0
                              • BuZZy
                                BuZZy last edited by

                                JSON.stringify(getState('ical.0.data.table').val)
                                

                                Wandelt nur ein Object in ein String um.

                                Du musst mit diesem String dann natürlich "weiter Arbeiten"..

                                So pauschal kann ich dir da jetzt keine Antwort geben wenn ich nicht weiß was du überhaupt vor hast. :lol: 😄

                                Gruß

                                1 Reply Last reply Reply Quote 0
                                • T
                                  Torsten_MG last edited by

                                  Du warst jetzt schneller als ich, der Groschen war in der zwischenzeit gefallen :roll:

                                  Ich wollte mir eigentlich nur den String anzeigen lassen um das zu verstehen, wie das geht habe ich jetzt verstanden

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    Torsten_MG last edited by

                                    Ich habe jetzt mal Testweise dein Script vom 17.01.2018, 13:57 geladen und gestartet. Ich habe für morgen einen Termin mit dem Text Frühschicht in den Kalender geschrieben, aber aus irgendeinem Grund erkennt er es anscheinend nicht.
                                    9214_heizungssteuerung.jpg

                                    1 Reply Last reply Reply Quote 0
                                    • BuZZy
                                      BuZZy last edited by

                                      Aktivier mal in den Einstellungen vom iCal adapter die option "Ersetze Datum mit Worten" danach das Script nochmal starten, dann sollte es funktionieren..

                                      Das Script sucht nach dem Wort "Morgen" und "Frühschicht".. Das Wort "Morgen" taucht aber nur mit der oben genannten Einstellung im iCal Adapter auf..

                                      Gruß

                                      1 Reply Last reply Reply Quote 0
                                      • T
                                        Torsten_MG last edited by

                                        @BuZZy:

                                        Aktivier mal in den Einstellungen vom iCal adapter die option "Ersetze Datum mit Worten" danach das Script nochmal starten, dann sollte es funktionieren..

                                        Das Script sucht nach dem Wort "Morgen" und "Frühschicht".. Das Wort "Morgen" taucht aber nur mit der oben genannten Einstellung im iCal Adapter auf..

                                        Gruß `

                                        OK funktioniert. Nur steht jetzt im vis auch morgen, übermorgen, in 2 Tagen … im Plan, Das wollte ich ja eigentlich nicht

                                        1 Reply Last reply Reply Quote 0
                                        • BuZZy
                                          BuZZy last edited by

                                          Dann musst du das Script abändern - so dass statt nach "Morgen" + "Frühschicht" nach "Datum heute + 1 Tag" also nach "11.11.2018" + "Frühschicht" gesucht wird..

                                          Gruß

                                          1 Reply Last reply Reply Quote 0
                                          • T
                                            Torsten_MG last edited by

                                            ich habe es jetzt anders gelöst bekommen.

                                            Statt nach date schaue ich jetzt nach _class

                                            Hier die geänderten Zeilen:

                                            function icalheating(obj){
                                            var datestring="_class";
                                            
                                            
                                            `if (obj[i][datestring].indexOf('ical_Schicht Torsten ical_tomorrow') === 0 && obj[i][eventstring].indexOf('Frühschicht') === 0) {` [/i][/i]
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            847
                                            Online

                                            32.0k
                                            Users

                                            80.4k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            34
                                            4570
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo