Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. tado Heizkörperthermostat in ioBroker

    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

    tado Heizkörperthermostat in ioBroker

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      eXTreMe last edited by Jey Cee

      Hallo zusammen,

      ich habe mir gerade ein Javscript gebastelt, welches ein paar Daten (eingestellte Temperatur, gemessene Raumtemperatur, Luftfeuchtigkeit, Heatingpower und ON/OFF-Status) meiner tado Heizkörperthermostate in iobroker einliest (es sind noch viel viel mehr Werte möglich, habe aber erstmal die für mich wichtigsten 5 genommen).

      Langzeit-Tests stehen noch aus, das Script ist gerade erst fertig geworden, ich wollte es aber dennoch schonmal mit euch teilen.

      Es gibt aktuell noch keine offizielle öffentliche API von tado, ich verwende hier API Abfragen mit Username und Passwort in der URL welche ich in einem Blogeintrag im Netz gefunden habe. Diesem Blogeintrag nach, kann es bei dieser Methode bei geringen Abfrage-Intervallen (der Autor hatte 30sec eingestellt) dazu führen, dass die tado Geräte die Verbindung zum Server verlieren, sämtliche Kommunikation verweigern und manuell neugestartet werden müssen (Bridge & Thermostate).

      Deshalb habe ich das Abfrage-Intervall erstmal auf 10min im Script eingestellt.

      Ich habe nur wenig Ahnung von Javascript und habe mir alles zusammengesucht mit google.

      Der Code ist somit alles andere als perfekt! (Optimierungsvorschläge sind gerne gesehen! Bitte aber dann verständlich für "ganz ganz Dumme" erklären! 🙂 )

      Bekannte Fehler:

      • Beim ersten Scriptdurchlauf wird es zu einem Fehler kommen, da das Script die Datenpunkte erstellt und direkt befüllen möchte. Das klappt meistens nicht. Beim darauffolgenden Durchlauf funktioniert aber alles, da die Datenpunkte dann bereits schon existieren. (Vielleicht kann mir jemand sagen wie ich das umgehen kann?)
      • Wenn ein Thermostat ausgeschaltet ist, dann schlägt die Abfrage der Werte fehl, vermutlich habe ich da einen Datenpunkt falsch konfiguriert, da der zurückgelieferte Wert "null" und keine Zahl ist. Schaue ich die Tage nochmal weiter nach.

      Eine kurze Anleitung befindet sich im oberen Teil des Scriptcodes.

      Hier nun das Script:

      // tado Script für ioBroker
      // Version 0.1
      //
      // Anleitung:
      // 1\. Pro Thermostat muss ein Script erstellt und individuell konfiguriert werden!
      // 2\. Eindeutigen Raumname im Konfig-Bereich des Scripts für das Thermostat angeben. Bei mehreren Thermostaten in einem Raum bitte unterschiedliche Raumnamen verwenden.
      // 3\. Über folgende URL (Nutzername und Passwort in der URL angeben) per WEbbrowser die HomeID ermitteln und in dem Konfigurations-Teil des Scripts eintragen:
      //    https://my.tado.com/api/v2/me?username=USERNAME&password=PASSWORT
      // 4\. Über folgende URL (HOME ID, Nutzername und Passwort in der URL angeben) per Webbrowser die ZoneID ermitteln und in dem Konfigurations-Teil des Scripts eintragen:
      //    https://my.tado.com/api/v2/homes/HOMEID/zones/2/state?username=USERNAME&password=PASSWORT
      //     - Die "2" im Link steht für ZoneID 2, in meinem Fall war das das Thermostat im Wohnzimmer
      //     - am besten unterschiedliche Temperaturen in den Räumen per App einstellen und dann verschiedene Zahlen im Link durchprobieren
      //
      //
      // Quellen die bei der Scripterstellung geholfen haben:
      // http://wirres.net/article/articleview/10326/1/6/
      // http://blog.scphillips.com/posts/2017/01/the-tado-api-v2/
       schedule("*/10 * * * *", function () { // Zeiteinstellung: Script aktualisiert alle 10 Min die Werte. Bei geringeren Abfrageintervallen kann es zu Verbindungsabbrüchen kommen und alle Geräte müssen neugestartet werden!
      
          //[b]Konfiguration:[/b]
          var Raumname = 'Wohnzimmer'; // Der hier angegebene Raumname dient zur Benennung des erzeugten Channel Objekts in ioBroker
          var ZoneID = "2"; // Zonennummer des Raums (muss über API URL ermittelt werden, siehe Anleitung)
          var HomeID = "XXXXX"; // HomeID (muss über API URL ermittelt werden, siehe Anleitung)
          var Username = "USERNAME"; // tado Username (E-Mail Adresse)
          var Password = "PASSWORT"; // tado Passwort (Sonderzeichen müssen entsprechend umgewandelt werden, z.B. # = %23)
      
          // SCRIPTBEGINN - AB HIER NICHTS VERÄNDERN !
      	 var url = "https://my.tado.com/api/v2/homes/"+HomeID+"/zones/"+ZoneID+"/state?username="+Username+"&password="+Password; // API URL
         	//läd die Json herunter
        	var request = require("request");
          request(url, function (error, response, body) {
        	//parst die Json
          var json = JSON.parse(body);
      
          //Datenpunkterstellung:
          createState("tado." + Raumname + ".temperature", 0, false, {type: "number", name: "temperature", desc: "Eingestellte Temperatur", role: "value.temperature", unit: "°C", read: true, write: true});
          createState("tado." + Raumname + ".power", "OFF", false, {type: "string", name: "power", desc: "Aufheizen", read: true, write: true});
          createState("tado." + Raumname + ".inside_temperature", 0, false, {type: "number", name: "inside_temperature", desc: "Gemessene (Raum-)Temperatur", role: "value.temperature", unit: "°C", read: true, write: true});
          createState("tado." + Raumname + ".humidity", 0, false, {type: "number", name: "humidity", desc: "Luftfeuchtigkeit", role: "value.humidity", unit: "%", min: 0, max: 100, read: true, write: true});
          createState("tado." + Raumname + ".heatingpower", 0, false, {type: "number", name: "heatingpower", desc: "Heizkraft", unit: "%", min: 0, max: 100, read: true, write: true});
           //Datenabfrage:
          //Temperatur:
        	setState("javascript.0.tado."+Raumname+".temperature", json.setting.temperature.celsius);
        	log('tado Temperatur '+Raumname+': ' + json.setting.temperature.celsius);
        	//Power:
        	setState("javascript.0.tado."+Raumname+".power", json.setting.power);
        	log('tado Power-Setting '+Raumname+': ' + json.setting.power);
        	//Humidity:
        	setState("javascript.0.tado."+Raumname+".humidity", json.sensorDataPoints.humidity.percentage);
        	log('tado Humidity '+Raumname+': ' + json.sensorDataPoints.humidity.percentage);
        	//Inside Temperature:
        	setState("javascript.0.tado."+Raumname+".inside_temperature", json.sensorDataPoints.insideTemperature.celsius);
        	log('tado Inside Temperature '+Raumname+': ' + json.sensorDataPoints.insideTemperature.celsius);
        	//Heating Power:
        	setState("javascript.0.tado."+Raumname+".heatingpower", json.activityDataPoints.heatingPower.percentage);
        	log('tado Heating Power '+Raumname+': ' + json.activityDataPoints.heatingPower.percentage);
        	});
      }); 
      

      Viel Spaß damit!

      1 Reply Last reply Reply Quote 0
      • S
        senger1985 last edited by

        Hallo eXTreMe,

        ich habe mir jetzt mal dein Script angeschaut und es gestern bei mir aktiviert.

        Wenn ich es aber jetzt starte, wie in der Beschreibung, werden zwar die Objekte angezeigt, aber die Temperatur etc. stehen auf 0 °C, 0%.

        Wo könnte der Fehler liegen?

        P.S.: Das Thermostat ist an.

        1 Reply Last reply Reply Quote 0
        • K
          kaltesbier last edited by

          Hallihallo eXTreMe.

          Dein Script läuft bei mir nun schon seit 3 Wochen recht sauber. gestern habe ich es in VIS eingebunden und da ist mir aufgefallen das ich nur die werte auslesen kann aber keine neuen setzen kann. ist das richtig oder ist da bei mir noch ein Fehler. ich habe es auch direkt in iobroker versucht die soll Temperatur zu ändern doch nach einer weile ist es wieder die eingestellte Temperatur von meiner Tado App. funktioniert das bei dir richtig?

          1 Reply Last reply Reply Quote 0
          • E
            eXTreMe last edited by

            doppelpost, siehe unten

            1 Reply Last reply Reply Quote 0
            • E
              eXTreMe last edited by

              @kaltesbier:

              Hallihallo eXTreMe.

              Dein Script läuft bei mir nun schon seit 3 Wochen recht sauber. gestern habe ich es in VIS eingebunden und da ist mir aufgefallen das ich nur die werte auslesen kann aber keine neuen setzen kann. ist das richtig oder ist da bei mir noch ein Fehler. ich habe es auch direkt in iobroker versucht die soll Temperatur zu ändern doch nach einer weile ist es wieder die eingestellte Temperatur von meiner Tado App. funktioniert das bei dir richtig? `

              das script kann nur werte auslesen

              müss nochmal die script quellen die ich da oben im code mit angegeben hatte genauer durchlesen und testen ob da nicht nur abfragen sondern auch wertänderungen mit funktionieren und dann ggf. das script erweitern.

              edit: Habs nachgelesen, manuelle temperatureingabe ist möglich, wenn ich zeit habe befasse ich mich nochmal damit, werte ändern per javascript ist nämlich noch neuland für mich, bisher hab ich immer nur ausgelesen.

              $ curl -X PUT "https://my.tado.com/api/v2/homes/<homeid>/zones/<zoneid>/overlay" -H "Authorization: Bearer `cat /tmp/tadotoken`" -H "Content-Type:application/json;charset=UTF-8" --data-binary '{"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":21}},"termination":{"type":"MANUAL"}}'</zoneid></homeid>
              

              wenn du es eilig hast und schnell eine lösung suchst die aber umständlich ist:

              mit dem cloud adapter über IFTTT webhooks lässt sich tado ansprechen. nur du müsstest für jeden temperaturwert (und das für jeden raum) in IFTTT ein applet anlegen und ein entsprechendes javascript in iobroker schreiben. Wenn du nur eine hand voll feste werte (z.b. AUS, 20°C und 25°C) anlegst dann ist die arbeit noch überschaubar.

              ich habe es momentan in VIS einfach so gelöst, dass ich die tado webseite als iframe in VIS eingebunden habe. sieht genauso aus wie die app. nimmt nur einiges an platz weg in VIS

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

                Hallo zusammen,

                ich bin jetzt neu bei ioBroker, und versuche auch zu scripten. Das mit dem auslesen der Temperaturen usw. funktioniert super. Ich möchte jetzt die Anwesenheit von den Handys bei Tado auslesen. Habe versucht aus dem vorhandenen Script von eXTreMe abzuleiten, jedoch beim Pfad von den Handys muss ich eine Zahl ->0 der 1 angeben. Das mag das Script garnicht, habe ich jetzt im Beitrag fett, unterstrichen un kursiv hervorgehoben. Bitte um Hilfe

                Das Script:

                schedule("*/10 * * * *", function () { // Zeiteinstellung: Script aktualisiert alle 10 Min die Werte. Bei geringeren Abfrageintervallen kann es zu Verbindungsabbrüchen kommen und alle Geräte müssen neugestartet werden!

                var Username = "xxx"; // tado Username (E-Mail Adresse)

                var Password = "xxx"; // tado Passwort (Sonderzeichen müssen entsprechend umgewandelt werden, z.B. # = %23)

                var url = "https://my.tado.com/api/v2/me?username= … ; // API URL

                //läd die Json herunter

                var request = require("request");

                request(url, function (error, response, body) {

                //parst die Json

                var json = JSON.parse(body);

                //Datenpunkterstellung:

                createState("Anwesenheit Roman",false, {read: true, write: true, name: "Anwesenheit Roman", type: "boolean", def: false});

                //Datenabfrage:

                setState("javascript.0.Anwesenheit Roman", json.mobileDevices.<u>0</u>.location.atHome);

                log(json.mobileDevices.<u>0</u>.location.atHome);

                });

                });

                1 Reply Last reply Reply Quote 0
                • S
                  steckenpferd last edited by

                  Habe es mal als in die Adapter Request Liste aufgenommen:

                  https://github.com/ioBroker/AdapterRequests/issues/71

                  steckenpferd created this issue in ioBroker/AdapterRequests

                  closed Tado Adapter #71

                  1 Reply Last reply Reply Quote 0
                  • S
                    Simon last edited by

                    Hallo zusammen,

                    sehr cooles Script, läuft bei mir seit Tagen stabil. Gibts bzgl. dem Post von Roman und der Anwesenheit einzelner Handys schon einen Lösungsansatz? Ich stehe ebenfalls vor dem Problem mit der besagten "0". Einklammern brachte keinen Erfolg.

                    Gruß

                    Simon

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

                      Hallo Simon,

                      du musst Eckige Klammern benutzen [0] dann klappt es. Bin aber von der Lösung weg, da es zu träge ist. Ich frage jetzt die Anwesenheit über das WLAN ab, ob die Handys zu Hause sind.

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

                        Ab jetzt auch als adapter verfügbar : https://forum.iobroker.net/topic/25723/aufruf-neuer-adaper-tado

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        763
                        Online

                        31.8k
                        Users

                        79.9k
                        Topics

                        1.3m
                        Posts

                        heating javascript template
                        7
                        10
                        6695
                        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