Skip to content

Commit e18d638

Browse files
author
Stefan Kuper
committed
added temperature calls
1 parent f548da8 commit e18d638

File tree

3 files changed

+81
-39
lines changed

3 files changed

+81
-39
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ Following functions have been implemented:
2222
<dd>Get total energy since last reset in Wh</dd>
2323
<dt>getTemperature</dt>
2424
<dd>Get temperature in °C</dd>
25+
<dt>getSwitchName</dt>
26+
<dd>Get name of an actor</dd>
27+
<dt>getThermostatNominalTemperature</dt>
28+
<dd>Get nominal temperature of thermostat (8: &lt;= 8°C, 28: &gt;= 28°C, 100: max, 0: off)</dd>
29+
<dt>getThermostatComfortTemperature</dt>
30+
<dd>Get comfort temperature of thermostat (8: &lt;= 8°C, 28: &gt;= 28°C, 100: max, 0: off)</dd>
31+
<dt>getThermostatReducedTemperature</dt>
32+
<dd>Get reduced temperature of thermostat (8: &lt;= 8°C, 28: &gt;= 28°C, 100: max, 0: off)</dd>
33+
<dt>setThermostatNominalTemperature</dt>
34+
<dd>Set nominal temperature of thermostat (8: &lt;= 8°C, 28: &gt;= 28°C, 100: max, 0: off)</dd>
2535

2636
# Error handling
2737

src/ArduinoFritzApi.cpp

Lines changed: 54 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -116,45 +116,50 @@ double FritzApi::getTemperature(String ain) {
116116
return atof(result.c_str()) / 10;
117117
}
118118

119-
//getswitchlist Liefert die kommaseparierte AIN/MAC Liste aller bekannten Steckdosen
120-
//getswitchpresent Ermittelt Verbindungsstatus des Aktors
121-
//getswitchpower Ermittelt aktuell über die Steckdose entnommene Leistung (Leistung in mW, "inval" wenn unbekannt)
122-
//getswitchenergy Liefert die über die Steckdose entnommene Ernergiemenge seit Erstinbetriebnahme oder Zurücksetzen der Energiestatistik (Energie in Wh, "inval" wenn unbekannt)
123-
//getswitchname Liefert Bezeichner des Aktors Name
124-
//getdevicelistinfos Liefert die grundlegenden Informationen aller SmartHome-Geräte (xml)
125-
126-
127-
//gethkrtsoll Für HKR aktuell eingestellte Solltemperatur Temperatur-Wert in 0,5 °C,
128-
// Wertebereich: 16 – 56, 8 bis 28°C, 16 <= 8°C, 17 = 8,5°C...... 56 >= 28°C, 254 = ON , 253 = OFF
129-
//gethkrkomfort Für HKR-Zeitschaltung eingestellte Komforttemperatur Temperatur-Wert in 0,5 °C,
130-
// Wertebereich: 16 – 56, 8 bis 28°C, 16 <= 8°C, 17 = 8,5°C...... 56 >= 28°C, 254 = ON , 253 = OFF
131-
//gethkrabsenk Für HKR-Zeitschaltung eingestellte Spartemperatur Temperatur-Wert in 0,5 °C,
132-
// Wertebereich: 16 – 56, 8 bis 28°C, 16 <= 8°C, 17 = 8,5°C...... 56 >= 28°C, 254 = ON , 253 = OFF
133-
//sethkrtsoll HKR Solltemperatur einstellen. Temperatur-Wert in 0,5 °C,
134-
// Wertebereich: 16 – 56
135-
// Wertebereich: 16 – 56, 8 bis 28°C, 16 <= 8°C, 17 = 8,5°C...... 56 >= 28°C, 254 = ON , 253 = OFF
136-
137-
/*
138-
* Get list getThermostatList - polyfill
139-
Set target temperature setTempTarget, supports 'ON'/'OFF' to enable/disable thermostat
140-
Get target temperature getTempTarget
141-
Get comfort temperature getTempComfort
142-
Get night temperature getTempNight
143-
Get battery charge getBatteryCharge (uses UI scraping, may be unstable)
144-
Get window open getWindowOpen (uses UI scraping, may be unstable)
145-
WLAN functions
146-
Get the guest wlan settings getGuestWlan
147-
Set the guest wlan setGuestWlan
148-
149-
Get the Fritz!OS version getOSVserion
150-
Get the session ID getSessionID
151-
Get device list as XML getDeviceListInfos >Fritz!OS 6.10
152-
Get device list getDeviceList >Fritz!OS 6.10
153-
Get device list with filter criteria applied getDeviceListFiltered >Fritz!OS 6.10
154-
Get device getDevice >Fritz!OS 6.10
155-
Get temperature getTemperature - polyfill
156-
Get presence getPresence - polyfill
157-
*/
119+
String FritzApi::getSwitchName(String ain) {
120+
return executeRequest("getswitchname&sid=" + _sid + "&ain=" + String(ain));
121+
}
122+
123+
double FritzApi::getThermostatNominalTemperature(String ain) {
124+
String result = executeRequest("gethkrtsoll&sid=" + _sid + "&ain=" + String(ain));
125+
if (result == "inval") {
126+
throw FRITZ_ERR_VALUE_NOT_AVAILABLE;
127+
}
128+
return convertTemperature(result);
129+
}
130+
131+
double FritzApi::getThermostatComfortTemperature(String ain) {
132+
String result = executeRequest("gethkrkomfort&sid=" + _sid + "&ain=" + String(ain));
133+
if (result == "inval") {
134+
throw FRITZ_ERR_VALUE_NOT_AVAILABLE;
135+
}
136+
return convertTemperature(result);
137+
}
138+
139+
double FritzApi::getThermostatReducedTemperature(String ain) {
140+
String result = executeRequest("gethkrabsenk&sid=" + _sid + "&ain=" + String(ain));
141+
if (result == "inval") {
142+
throw FRITZ_ERR_VALUE_NOT_AVAILABLE;
143+
}
144+
return convertTemperature(result);
145+
}
146+
147+
double FritzApi::setThermostatNominalTemperature(String ain, double temp) {
148+
int param;
149+
if (temp == FRITZ_OFF_TEMPERATURE) {
150+
param=253;
151+
} else if (temp == FRITZ_ON_TEMPERATURE) {
152+
param=254;
153+
} else if (temp < 8.0f) {
154+
param=16;
155+
} else if (temp > 28.0f) {
156+
param=56;
157+
} else {
158+
param = 2*temp;
159+
}
160+
String result = executeRequest("sethkrtsoll&sid=" + _sid + "&ain=" + String(ain) + "&param=" + param);
161+
return temp;
162+
}
158163

159164
String FritzApi::executeRequest(String request) {
160165
String result;
@@ -175,3 +180,13 @@ String FritzApi::executeRequest(String request) {
175180
throw httpStatus;
176181
}
177182
}
183+
184+
double FritzApi::convertTemperature(String result) {
185+
double temp = atof(result.c_str());
186+
if (temp == 254) {
187+
return FRITZ_ON_TEMPERATURE;
188+
} else if (temp == 253 ){
189+
return FRITZ_OFF_TEMPERATURE;
190+
}
191+
return temp/2;
192+
}

src/ArduinoFritzApi.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
#define FRITZ_ERR_INVALID_SID -1005
1111
#define FRITZ_ERR_VALUE_NOT_AVAILABLE -1006
1212

13+
#define FRITZ_ON_TEMPERATURE 100.0f
14+
#define FRITZ_OFF_TEMPERATURE 0.0f
15+
1316
class FritzApi {
1417
public:
1518
// Constructor: FB user, FB password, FB address (ip or 'fritz.box')
@@ -34,6 +37,19 @@ class FritzApi {
3437
int getSwitchEnergy(String ain);
3538
// Get temperature in °C
3639
double getTemperature(String ain);
40+
// Get name of an actor
41+
String getSwitchName(String ain);
42+
43+
// Get nominal temperature of thermostat (8 = <= 8°C, 28 = >= 28°C, 100 = max, 0 = off)
44+
double getThermostatNominalTemperature(String ain);
45+
// Get comfort temperature of thermostat (8 = <= 8°C, 28 = >= 28°C, 100 = max, 0 = off)
46+
double getThermostatComfortTemperature(String ain);
47+
// Get reduced temperature of thermostat (8 = <= 8°C, 28 = >= 28°C, 100 = max, 0 = off)
48+
double getThermostatReducedTemperature(String ain);
49+
// Set nominal temperature of thermostat (8 = <= 8°C, 28 = >= 28°C, 100 = max, 0 = off)
50+
double setThermostatNominalTemperature(String ain, double temp);
51+
52+
3753

3854
private:
3955
const char* _user;
@@ -45,6 +61,7 @@ class FritzApi {
4561
String getChallengeResponse();
4662
String getSID(String response);
4763
String executeRequest(String request);
64+
double convertTemperature(String result);
4865

4966
};
5067

0 commit comments

Comments
 (0)