Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. tado Heizkörperthermostat in ioBroker

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

tado Heizkörperthermostat in ioBroker

tado Heizkörperthermostat in ioBroker

Scheduled Pinned Locked Moved Skripten / Logik
javascriptheatingtemplate
10 Posts 7 Posters 7.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    eXTreMe
    wrote on last edited by Jey Cee
    #1

    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
    0
    • S Offline
      S Offline
      senger1985
      wrote on last edited by
      #2

      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
      0
      • K Offline
        K Offline
        kaltesbier
        wrote on last edited by
        #3

        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
        0
        • E Offline
          E Offline
          eXTreMe
          wrote on last edited by
          #4

          doppelpost, siehe unten

          1 Reply Last reply
          0
          • E Offline
            E Offline
            eXTreMe
            wrote on last edited by
            #5

            @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
            0
            • R Offline
              R Offline
              Romka1983
              wrote on last edited by
              #6

              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
              0
              • S Offline
                S Offline
                steckenpferd
                wrote on last edited by
                #7

                Habe es mal als in die Adapter Request Liste aufgenommen:

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

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  Simon
                  wrote on last edited by
                  #8

                  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
                  0
                  • R Offline
                    R Offline
                    Romka1983
                    wrote on last edited by
                    #9

                    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
                    0
                    • DutchmanD Online
                      DutchmanD Online
                      Dutchman
                      Developer Most Active Administrators
                      wrote on last edited by
                      #10

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

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      616

                      Online

                      32.4k

                      Users

                      81.3k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe