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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • 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

      Hallo,

      ich habe es mittlerweile geschafft, meine Thermostate "automatisch" zu regeln.

      Die Thermostate werden morgens nach einzustellender Zeit hochgefahren und abends nach einzustellender Zeit wieder auf Absenkmodus geschaltet.

      Das Ganze wird beeinflusst durch Anwesenheitserkennung. Falls wir alle aus dem Haus sind, wird die Temperatur in den Absenkmodus gefahren und bei Ankunft im Haus wieder automatisch auf Komfortmodus.

      Da der automatische Beginn der Komforttemperatur aber nun bsp 8 Uhr beträgt, aber wird manchmal Schicht haben und um 6 Uhr aufstehen müssen (oder früher), suche ich nach einer Möglichkeit, nach "Schichtplan" die Heizung kurzzeitig etwas hochzufahren und nach bestimmter Zeit wieder abzusenken.

      Da die Schichten unregelmäßig sind, würde ich dies gern in Google- oder NextcloudKalender eintragen, den ich dann per ical-Adapter abfrage.

      Mein Problem ist, wie ich die States des ical-Adapters abfragen kann ob "heute" (oder mittles anderer Variable) Frühschicht ist und die Heizung früher eingeschaltet werden soll.

      Ich kenn mich nur ein wenig mit Blockly aus und habe hier nichts gefunden…

      Grüße

      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        Hast du mal das Heizung Steuerung Skript von looxer probiert das kann al das

        –-----------------------

        Send from mobile device

        Das schöne ios hat Auto Korrektur zum k****

        Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

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

          Das Script habe ich mir schon angeschaut und es gefällt mir sehr gut.

          Allerdings benötige ich ja lediglich den Schichtplan. Alles andere habe ich mir ja schon selbst gebastelt 🙂

          1 Reply Last reply Reply Quote 0
          • Dutchman
            Dutchman Developer Most Active Administrators last edited by

            Dan hast du 2 Möglichkeiten:

            • deine scripte erweitern

            • deine scripte ersetzen

            🙂

            –-----------------------

            Send from mobile device

            Das schöne ios hat Auto Korrektur zum k****

            Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

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

              erweitern möchte ich 🙂

              Nur weiß ich leider nicht, wie ich aus dem ical-Adapter die Infos extrahieren kann

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

                Kleiner Denkanstoß..

                Abends prüfen:

                Wenn für morgen Frühschicht im Kalender steht, Heizung um 6 hochfahren….

                oder so:

                Wenn für morgen Frühschicht mit Uhrzeit 06:00 als Startzeitpunkt im Kalender steht, Heizung 1 Stunde vorher hochfahren..

                :lol:

                Ohne zu wissen wie genau deine Einträge im Kalender für Frühschicht aussehen, oder wie dein Heizungsscript generell aussieht ist eine konkrete Aussage eher schwierig. 🙂

                Gruß

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

                  naja…

                  Die Scripte für das automatische Einschalten der Heizung und der Anwesenheitserkennung kann ja davon unabhängig sein.

                  Ich brauche einfach die Möglichkeit, dass wenn für morgen im Kalender "Frühschicht" steht, wird die Heizung zur festgelegten Zeit hochgefahren.

                  Also das Ganze unabhängig von den anderen Scripten....

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

                    Na dann legst du ein Script an welches über ein Schedule Abends um 22 Uhr prüft ob im ical Datenpunkt für morgen Frühschicht steht..

                    Und wenn ja, dann setzt du im Script ein Schedule welches dann um 5 Uhr die Heizung auf die gewünschte Temperatur stellt.

                    Gruß

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

                      ` > Na dann legst du ein Script an welches über ein Schedule Abends um 22 Uhr prüft ob im ical Datenpunkt für morgen Frühschicht steht..

                      Und wenn ja, dann setzt du im Script ein Schedule welches dann um 5 Uhr die Heizung auf die gewünschte Temperatur stellt. `

                      und genau das bekomme ich nicht hin, da ich nur etwas mit Blockly kann. Javascript ist für mich noch zuuu neu.

                      Aber genau so etwas suche ich.

                      Kannst du mir da helfen?

                      Grüße

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

                        Klar, wie genau sieht denn dein Eintrag für die Frühschicht aus im Kalender? Und um wie viel Uhr willst du bei Frühschicht die Heizung hochfahren?

                        Gruß

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

                          Danke 🙂

                          Der Eintrag heißt einfach "Frühschicht" in der Zeit von 6-15 Uhr.

                          Einschalten der Heizung um 4:45 Uhr für 40min.

                          Aber wenn ich deine Vorlage habe, kann ich das bestimmt anpassen 🙂

                          Grüße

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

                            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ß[/i][/i][/i][/i][/i][/i]
                            
                            1 Reply Last reply Reply Quote 0
                            • R
                              rudiraz last edited by

                              Dankeschön 🙂

                              das werde ich mal testen.

                              Ich muss zwei Thermostate hochfahren, aber da kann ich ja deine Variable kopieren.

                              Wo in dem Script steht die Einschaltdauer?

                              EDIT: Ah ich denke, hier steht die Einschaltdauer in Millisekunden oder:
                              > setStateDelayed(tempdatenpunkt, tempbevor, 2700000)

                              🙂

                              Grüße

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

                                Korrekt, das ist die Dauer in Millisekunden bis die Temperatur zurück gesetzt wird.

                                Gruß

                                1 Reply Last reply Reply Quote 0
                                • 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
                                            • First post
                                              Last post

                                            Support us

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

                                            824
                                            Online

                                            31.9k
                                            Users

                                            80.3k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            34
                                            4542
                                            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