Compare commits

..

No commits in common. "master" and "refactoring" have entirely different histories.

2 changed files with 33 additions and 75 deletions

View File

@ -1,5 +1,5 @@
#===============================================================================
# $Id: 98_TadoAPI.pm 107 2023-12-16 16:11:28Z psycho160 $
# $Id: 98_TadoAPI.pm 105 2019-12-27 15:58:26Z psycho160 $
#
# FILE: 98_TadoAPI.pm
#
@ -13,10 +13,12 @@
# JSON
#
# BUGS: ---
# NOTES: https://git.wolfmajer.at
# NOTES: ---
# AUTHOR: Philipp Wolfmajer
# ORGANIZATION:
# VERSION: 0.6
# CREATED: 04/12/2019
# REVISION: 12/10/2019
#===============================================================================
package main;
@ -559,7 +561,7 @@ sub TadoAPI_NewTokenRequest {
close($TOKENFILE);
# token lifetime management
if ( defined($decoded_data->{'expires_in'}) ){
if (defined($decoded_data)){
$hash->{TOKEN_LIFETIME} = gettimeofday() + $decoded_data->{'expires_in'};
}
$hash->{TOKEN_LIFETIME_HR} = localtime( $hash->{TOKEN_LIFETIME} );
@ -708,13 +710,13 @@ sub TadoAPI_SetZoneOverlayById {
my $dt = time();
$dt += $duration if defined($duration);
delete( $hash->{helper}{LockedZones}{$zoneID} );
# remove overlay & lock
# remove overlay
if ( $setting eq "remove" ) {
$method = "DELETE";
Log3 $name, 3,
"TadoAPI $name" . ": " . "Deleting Overlay for Zone $zoneID";
delete( $hash->{helper}{LockedZones}{$zoneID} );
}
# turn heating of
@ -776,7 +778,7 @@ sub TadoAPI_SetZoneOverlayById {
Log3 $name, 3, "TadoAPI $name" . ": "
. "Set Timer Overlay for Zone $zoneID with $duration seconds expire.";
# set lock for this zone
# seet lock for this zone
$hash->{helper}{LockedZones}{$zoneID} = "locked";
}
else {
@ -983,12 +985,16 @@ sub TadoAPI_UpdateAllZoneReadingsCallback {
= TadoAPI_GetZoneReadingsById( $hash, $zoneID );
# updates zone readings
readingsBulkUpdate( $hash, "ZoneID_" . $zoneName, $zoneID );
readingsBulkUpdate( $hash, "Temperatur_" . $zoneName, $temperature );
readingsBulkUpdate( $hash, "Luftfeuchtigkeit_" . $zoneName, $humidity );
readingsBulkUpdate( $hash, "Heizleistung_" . $zoneName, $currentHeatingPower );
readingsBulkUpdate( $hash, "OverlayType_" . $zoneName, $overlay );
readingsBulkUpdate( $hash, "DesiredTemp_" . $zoneName, $desiredTemp );
readingsBulkUpdate( $hash, "Temperatur_" . $zoneName,
$temperature );
readingsBulkUpdate( $hash, "Luftfeuchtigkeit_" . $zoneName,
$humidity );
readingsBulkUpdate( $hash, "Heizleistung_" . $zoneName,
$currentHeatingPower );
readingsBulkUpdate( $hash, "OverlayType_" . $zoneName,
$overlay );
readingsBulkUpdate( $hash, "DesiredTemp_" . $zoneName,
$desiredTemp );
# iterate through all devices in zone
my $devices = $zone->{'devices'};
@ -998,11 +1004,6 @@ sub TadoAPI_UpdateAllZoneReadingsCallback {
"Battery_" . $device->{'serialNo'},
$device->{'batteryState'}
);
readingsBulkUpdate(
$hash,
"ChildLockEnabled_" . $device->{'serialNo'},
$device->{'childLockEnabled'}
);
}
}
readingsEndUpdate( $hash, 1 );
@ -1841,7 +1842,7 @@ sub TadoAPI_readPassword {
=item summary_DE Anbindung der Tado Heizungssteuerung über API
=begin html
<a name="TadoAPI" id="TadoAPI"></a>
<a name="TadoAPI"></a>
<h3>TadoAPI</h3>
<ul>
The TadoAPI module connects your tado devices to FHEM. Most zone readings are shown and desired temperature for a zone can be set.<br>
@ -1852,7 +1853,7 @@ sub TadoAPI_readPassword {
Please install the module (e.g. with <code>sudo apt-get install libjson-perl</code>) or the correct method for the underlying platform/system.</li>
</ul>
<a name="TadoAPIdefine" id="TadoAPIdefine"></a>
<a name="TadoAPIdefine"></a>
<b>Define</b>
<ul>
The username and password must match the username and password used on the Tado website.<br>
@ -1866,7 +1867,7 @@ sub TadoAPI_readPassword {
<br>
</ul>
<a name="TadoAPIset" id="TadoAPIset"></a>
<a name="TadoAPIset"></a>
<b>Set</b>
<ul>
<li>
@ -1894,7 +1895,7 @@ sub TadoAPI_readPassword {
</ul>
<br>
<a name="TadoAPIattr" id="TadoAPIattr"></a>
<a name="TadoAPIattr"></a>
<b>Attributes</b>
<ul>
<li>homeID<br>
@ -1912,21 +1913,5 @@ sub TadoAPI_readPassword {
=end html
=for :application/json;q=META.json 98_TadoAPI.pm
{
"author": [
"Philipp Wolfmajer <philipp@wolfmajer.at>"
],
"x_fhem_maintainer": [
"psycho160"
],
"keywords": [
"Heating",
"Tado",
"Heatingcontrol"
]
}
=end :application/json;q=META.json
# Ende der Commandref
=cut

View File

@ -1,8 +1,7 @@
# FHEM-Tado
FHEM Modul für [tado](https://www.tado.com/at/) Heizungssteuerung.
Für Fragen / Anliegen bin ich im FHEM-Forum (https://forum.fhem.de/index.php/topic,116764) oder unter philipp@wolfmajer.at erreichbar.
Bin unter philipp@wolfmajer.at erreichbar.
## Was wird unterstützt?
* Übersicht aller Tado Zonen
@ -11,30 +10,6 @@ Für Fragen / Anliegen bin ich im FHEM-Forum (https://forum.fhem.de/index.php/to
* aktuelle Heizleistung
* Wunschtemperatur
* Overlays (static & timer)
* ChildLock Status (nur Reading)
## Installation
1. Wechsle mit der Console (SSH) in dein FHEM Installationsverzeichnis (Pfad ggf. anpassen):
`cd /opt/fhem/FHEM/`
2. Lade die aktuellste Modulversion auf dein FHEM herunter:
`wget https://git.wolfmajer.at/Public/FHEM-Tado/raw/branch/master/98_TadoAPI.pm`
3. Zur Sicherheit noch die Berechtigungen anpassen:
`sudo chown fhem:dialout 98_TadoAPI.pm`
`sudo chmod 644 98_TadoAPI.pm`
5. FHEM neu starten.
`sudo systemctl restart fhem.service`
6. Fertig, weiter geht´s in FHEM mit der Definition
## Definition & Funktion
@ -57,32 +32,30 @@ Standardmäßig aktualisiert das Modul alle 5 Minuten die folgenden Werte:
Sämtliche externen Aufrufe sind *nonblocking* ausgeführt.
### Overlay für Zone setzen
`set <name> setZoneOverlay <zonenID> <Wunschtemperatur> [Dauer des Overlay in Sekunden]`
`set setZoneOverlay <zonenID> <Wunschtemperatur> [Dauer des Overlay in Sekunden]`
**INFO:** unterstützte Werte der Wunschtemperatur: `remove=delete overlay; 0=heating power off; 1<=desired temperature (overlay)`
<img src="https://git.wolfmajer.at/Public/FHEM-Tado/raw/branch/master/doc/so.PNG" width="500" />
<img src="https://home.wolfmajer.at/wolfgit/Public/FHEM-Tado/raw/branch/master/doc/so.PNG" width="500" />
#### Info für Overlay mit Timer
Kann entweder mit wie oben beschrieben oder, für Widgets von Tablet UI interessant, mit `set <name> timedZoneOverlay <zonenID> <Dauer des Overlay in Sekunden> <Wunschtemperatur>` gesetzt werden.
Kann entweder mit wie oben beschrieben oder, für Widgets von Tablet UI interessant, mit `set timedZoneOverlay <zonenID> <Dauer des Overlay in Sekunden> <Wunschtemperatur>` gesetzt werden.
Bei einem Timer Overlay erscheint in den tado Readings ein neuer Wert `Zone<ID>Lock`. Zusätzlich ist in den Internals noch ein Helper mit der Info welche Zone gesperrt ist. Das kann man in FHEM dann in eigenen Scripts weiterverarbeiten. (z.B. Anwesenheitserkennung soll Overlay nicht überschreiben wenn Timer...)
### Overlay für alle Zonen setzen
`set <name> setAllOverlays <Wunschtemperatur> [Dauer des Overlay in Sekunden]`
`set setAllOverlays <Wunschtemperatur> [Dauer des Overlay in Sekunden]`
**INFO:** unterstützte Werte der Wunschtemperatur: `remove=delete overlay; 0=heating power off; 1<=desired temperature (overlay)`
### Tado Geräte anzeigen (z.B. Battery State)
`get <name> getZoneDevices`
<img src="https://git.wolfmajer.at/Public/FHEM-Tado/raw/branch/master/doc/gzd.PNG" width="500" />
<img src="https://home.wolfmajer.at/wolfgit/Public/FHEM-Tado/raw/branch/master/doc/gzd.PNG" width="500" />
## Screenshots
### Modulübersicht
<img src="https://git.wolfmajer.at/Public/FHEM-Tado/raw/branch/master/doc/Modul1.PNG" width="500" />
<img src="https://home.wolfmajer.at/wolfgit/Public/FHEM-Tado/raw/branch/master/doc/Modul1.PNG" width="500" />
## Verwendung in FHEM
@ -90,11 +63,11 @@ Bei einem Timer Overlay erscheint in den tado Readings ein neuer Wert `Zone<ID>L
### FHEM Tablet-UI
Im Tablet UI lassen sich alle Readings des tado FHEM Modul anzeigen:
<img src="https://git.wolfmajer.at/Public/FHEM-Tado/raw/branch/master/doc/tablet-ui-readings.PNG" width="500" />
<img src="https://home.wolfmajer.at/wolfgit/Public/FHEM-Tado/raw/branch/master/doc/tablet-ui-readings.PNG" width="500" />
Auch lassen sich im Tablet UI mit einem Thermostat Widget alle Zonen steuern:
<img src="https://git.wolfmajer.at/Public/FHEM-Tado/raw/branch/master/doc/tablet-ui-thermostat.PNG" width="500" />
<img src="https://home.wolfmajer.at/wolfgit/Public/FHEM-Tado/raw/branch/master/doc/tablet-ui-thermostat.PNG" width="500" />
Code Snippet für einen Thermostat Widget:
```
@ -124,7 +97,7 @@ if (Value("Bewohner") eq "absent" && ReadingsVal("mytd","OverlayType_<zonenName>
GPlot-Beispiel:
<img src="https://git.wolfmajer.at/Public/FHEM-Tado/raw/branch/master/doc/Modul2-SVG.PNG" width="500" />
<img src="https://home.wolfmajer.at/wolfgit/Public/FHEM-Tado/raw/branch/master/doc/Modul2-SVG.PNG" width="500" />
```
# Created by FHEM/98_SVG.pm, 2019-10-20 03:52:15
@ -163,7 +136,7 @@ Zuerst wird ein Token (mit Username und Passwort) von tado angefordert der ca. 1
Pfad des Token ist im Modul fix eingestellt `/fhem-root/FHEM/FhemUtils/TadoAPI_token_<fhem-devicename>`
## Credits
##Credits
Thx to: