seydx / homebridge-tado-thermostat

Homebridge plugin for controlling Tado smart thermostats with Fakegato History
MIT License
11 stars 26 forks source link

Anzeige des Öffnungszustands des Ventils #10

Open benno666 opened 6 years ago

benno666 commented 6 years ago

Hey Seyd,

schon mal vielen Dank für deine Mühen mit dem Plugin! Das Ganze läuft ziemlich einwandfrei bei mir, bloß ist mir aufgefallen, dass der CurrentHeatingCoolingState nicht ganz korrekt ausgelesen wird.

Wenn ich mich richtig erinnere, dann kann man in HomeKit zwar den TargetHeatingCoolingState zwischen 0, 1, 2 und 3 wählen (OFF, HEAT, COOL, AUTO), der CurrentHeatingCoolingState kennt jedoch nur 0, 1 und 2, also kein AUTO. Daher erscheint das Icon in der Home-App schwarz und zeigt nicht den tatsächlichen Zustand an.

Ich habe die Thermostat.js ein wenig angepasst und sie wie folgt geändert:

1.) Da ein Thermostat von Tado nicht kühlen kann, habe ich die validValues der Characteristic.TargetHeatingCoolingState auf 0, 1 und 3 beschränkt. Das wird in der Home-App auch übernommen und es erscheint nur noch Aus, Heizen und Automatisch.

2.) Das Thermostat kann den tatsächlichen Ventilzustand anzeigen, so dass der CurrentHeatingCoolingState korrekt (wie beispielsweise bei Verwendung über die Tado-Bridge) dargestellt wird. Folgende Fälle werden dann im Symbol der Home-App unterschieden:

grau: Heizung aus orange: Heizung an (aktiv), Ventil offen -> Ist-Temperatur unter Zieltemperatur (HEAT) grün: Heizung an (inaktiv), Ventil geschlossen -> Zieltemperatur erreicht (OFF)

3.) Hiervon unabhängig wird der targetstate ausgelesen, der (analog zu 1.) nur noch die Zustände OFF, HEAT und AUTO kennt.

So sieht meine self.getContent.... dann unter anderem aus:

            if (result.sensorDataPoints != undefined) {

                self.humidity = result.sensorDataPoints.humidity.percentage;

                // Getting current state

                if (result.activityDataPoints.heatingPower.percentage == 0) {
                  self.currentstate = 0; // OFF
                } else {
                  self.currentstate = 1; // HEAT
                }

                // Getting target state and target temperature

                if (result.setting.power == "OFF") {
                  self.targetstate = 0; // OFF

                  if (self.tempUnit == "CELSIUS") {
                      self.currenttemp = result.sensorDataPoints.insideTemperature.celsius;
                      self.targettemp = result.sensorDataPoints.insideTemperature.celsius;
                  } else {
                      self.currenttemp = result.sensorDataPoints.insideTemperature.fahrenheit;
                      self.targettemp = result.sensorDataPoints.insideTemperature.fahrenheit;
                  }

                } else {
                  if (result.overlayType == null) {
                    self.targetstate = 3; // AUTO
                  } else {
                    self.targetstate = 1; // MANUAL / HEAT
                  }

                  if (self.tempUnit == "CELSIUS") {
                      self.currenttemp = result.sensorDataPoints.insideTemperature.celsius;
                      self.targettemp = result.setting.temperature.celsius;
                  } else {
                      self.currenttemp = result.sensorDataPoints.insideTemperature.fahrenheit;
                      self.targettemp = result.setting.temperature.fahrenheit;
                  }
                }

Was hältst du davon?

Beste Grüße, Benno

seydx commented 6 years ago

Hallo Benno,

Danke dir für die Mühe, ich werde es mir mal anschauen wenn ich etwas mehr Zeit habe und werde es dann in der neuen Version evtl mit aufnehmen, für die neue Version habe ich vor das Plugin umzuschreiben auf 'dynamic platform'

Lg