TAPO P100

Begonnen von heig, 24 März 2021, 17:30:26

Vorheriges Thema - Nächstes Thema

heig

Hallo zusammen,

hat sich von euch schonmal jemand mit der TAPO P100 Steckdose beschäftigt? Ich habe gesehen, dass die Schnittstelle wohl komplett anders ist als die der HS100 von TP-Link.

Es gibt wohl auch schon ein Python Modul für die Steuerung: https://github.com/fishbigger/TapoP100 - allerdings habe ich keine Skills um das in PERL nachzubauen... Daher - vielleicht hat sich ja schon jemand dran gemacht? Über die Suche habe ich leider nichts gefunden :(

Danke


brembs

Habe auch gesucht und nichts gefunden. Sieht wohl schlecht aus...

Batocin

Also in NodeRed kann man die P100 steuern...dafür einfach node-red-contrib-tplink-tapo-connect-api installieren
Und NodeRed und FHEM kommunizieren dann mittels Mqtt

erdferkel

Hallo,

ich habe mir aus dem Python Code eine Perl Lib gebaut, die ich zum Schalten der P100 verwende.
Mit den FHEM Modulen kenne ich mich leider nicht aus, um das direkt in FHEM einzubauen. Aber vielleicht hilft der Code ja trotzdem irgend jemandem. ;)

Die Lib kann z.B. so genutzt werden:

use TapoP100;

my $p100=TapoP100->new('steckdose.mylan.de');
$p100->login('mail@example.org', 'secret');
$p100->switch(1);
print $p100->name().': '.($p100->isOn() ? 'on' : 'off')."\n";


Viele Grüße, Peter

jnewton957

Das klingt ja schon super.

Kannst (jemand) hier bitte etwas genauer post, wie man nun die Steckdosen einbindet und die defines macht.

Danke
Jörg
FHEM6.2 auf Pi5
V 1.66 nanoCUL 433 (IT)
V 1.66 nanoCUL868 (HM)
sqlite3 LogDb
ELRO AB440, DECT200,  TFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo),tibber Pulse, Kostal Pico, cfos Wallbox, Modbus TCP

erdferkel

Hallo Jörg,

wie ich geschrieben hatte, kenne ich mich mit der Struktur/API der FHEM Module leider nicht aus, daher kann man die Steckdosen mit dieser Lib auch nicht direkt aus FHEM ansteuern.
Ich schalte die Dosen einfach per cronjob, was für meine Zwecke völlig ausreichend ist.
Aber vielleicht erbarmt sich ja irgend jemand und macht ein FHEM Modul daraus. ;)

Grüße, Peter

erdferkel

Hallo,

ich habe mich jetzt doch mal näher mit den FHEM Modulen beschäftigt und die Bibliothek entsprechend umgebaut.
Diese Perl Datei kann in den FHEM Ordner kopiert werden und nach Neustart sollte es möglich sein, die Steckdose einzubinden:
define <name> TapoP100 <hostname/IP> <username> <password>

Die Werte des Geräts werden regelmäßig ausgelesen und in Readings gespeichert. Geschaltet werden kann natürlich auch.

Gerne testen und berichten... :)

  Grüße, Peter

derHeimwerker

Hallo,
ich bekomme diese Fehlermeldung

Can't locate Crypt/CBC.pm in @INC (you may need to install the Crypt::CBC module) (@INC contains: /opt/fhem ./lib ./FHEM . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/arm-linux-gnueabihf/perl5/5.28 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base ./FHEM/lib) at ./FHEM/99_TapoP100.pm line 16.
BEGIN failed--compilation aborted at ./FHEM/99_TapoP100.pm line 16.


erdferkel

Hallo,

das Modul benötigt verschiedene Bibltiotheken, von denen manche evtl. nicht installiert sind.
Die folgenden Pakete werden verwendet (dahinter jeweils der Paketname unter Debian/Ubuntu):
Crypt::CBC -> libcrypt-cbc-perl
Crypt::Cipher::AES -> libcryptx-perl
Crypt::OpenSSL::RSA -> libcrypt-openssl-rsa-perl
Digest::SHA -> libperl5.32
JSON -> libjson-perl
LWP -> libwww-perl
MIME::Base64 -> libperl5.32
UUID -> libuuid-perl

  Grüße, Peter

derHeimwerker

funktioniert wunderbar!!
Danke

derHeimwerker

muss mich leider korrigieren...
Seitdem funktioniert mein firmata device, der als Lichtschalter fungier,t nicht mehr :-(
Kannst du da weiter helfen?

erdferkel

#11
Firmata sagt mir jetzt leider gar nichts.
Ist das auch irgendwie mit dem Tapo Switch verbunden?
Funktioniert der Lichtschalter, wenn Du das Tapo Device wieder entfernst?

Ich habe noch verschiedene ZWave Sensoren und Steckdosen in FHEM eingebunden. Bisher konnte ich noch keine Probleme feststellen, seitdem das Tapo Device aktiv ist.

derHeimwerker

Sorry, da hatte ich noch einen anderen Fehler im System. Läuft jetzt alles. Vielen Dank!

erdferkel

Nachdem mir doch endlich die Entwickler Doku im Wiki begegnet ist 8) , habe ich das Modul nochmal überarbeitet.
Da es schon eine fertige Routine für HTTP Requests im Hintergrund gibt, ist der bisher verwendete BlockingCall nicht nötig.
Außerdem sollte der Dateiname nicht mit "99_" beginnen, da das Modul sonst auch ohne entsprechendes Device geladen wird.

Neue set-Funktionen: on-for-timer, off-for-timer, nickname, reboot

PS: Meine Schaltdosen haben bisher immer nach 49 Tagen den Dienst mit Fehlercode "9999" eingestellt. Evtl. kann man das mit einem regelmäßigen Reboot umgehen - habe ich aber noch nicht testen können. Die Funktion 'set ... reboot' gibt es jetzt jedenfalls im Modul.


chriskl

Hallo,
Da bin ich auch interessiert :)
Unterstützt das Modul auch die TAPO P110 bzw. P115? Also mit Energiemessung?

Danke vor ab

Christoph

erdferkel

Ich habe nur die P100 Version, daher kann ich zu den anderen Modellen leider nichts sagen.
Wenn sich das Protokoll nicht geändert hat, sollten die Werte aber mit allen anderen Readings ausgelesen werden.

chriskl

Dann bestell ich mal und melde das Ergebnis  ;D

neo_28

Hallo,

die Integration einer P110 funktioniert soweit, aber leider werden die Energiewerte nicht übermittelt.

Gruß

Neo28

chriskl

Ich habe gestern meine P115 bekommen :)
Wie neo28 schon berichtet hat funktioniert das problemlos, bis auf die Energiewerte  >:(
Ich hab das von https://github.com/fishbigger/TapoP100 mal probiert und siehe da das funktioniert:

>>> p110.getEnergyUsage()
{'result': {'today_runtime': 160, 'month_runtime': 188, 'today_energy': 0, 'month_energy': 0, 'local_time': '2023-04-04 11:44:09', 'electricity_charge': [0, 0, 0], 'current_power': 0}, 'error_code': 0}

Da stellt sich die Frage ob man erdferkel zu einer Erweiterung bewegen kann  ;)

Ich fände das super.

neo_28

Darüber würde ich mich auch riesig freuen>!

Mir fehlt es da leider am KnowHow :-\

chriskl

Hi,
ich hab mir das Modul mal angeschaut und eine Möglichkeit gefunden die Energiewerte zu erhalten.
Leider ist das nicht die optimale Lösung, funktioniert aber für mich ;D

Ich habe 00_TapoP100.pm nach 00_TapoP110.pm kopiert und dort folgende Änderungen gemacht:
- ersetze alle "P100" durch "P110"
- ersetze "get_device_info" durch "get_energy_usage"

Nach einem Restart von FHEM lässt sich zusätzlich zum TapoP100-Device ein TapoP110-Device erstellen.
Hier landen dann die Energie-Werte.
Mit den userReadings erreiche ich gleiche Readings wie bei meinen bisher genutzten TPLink KASA KP115 ;)

defmod P115_01 TapoP100 ip user password
defmod P115_01_energy TapoP110 ip user password
attr P115_01_energy userReadings daily_total:today_energy.* {sprintf("%.3f", ReadingsVal($name,"today_energy","0")/1000)},\
power:current_power.* {sprintf("%.3f", ReadingsVal($name,"current_power","0")/1000)}
attr P115_01_energy webCmd :

Ich hab auch versucht die Methode get_energy_usage zusätzlich ins Modul TapoP100.pm einzubauen, bin dabei aber kläglich gescheitert :'(

Gruß

Christoph

erdferkel

Hallo,
leider bekomme ich anscheinend keine Benachrichtigung mehr über neue Beiträge...  >:(

Ich habe mir jetzt auch von den P115 bestellt und erweitere das Modul, sobald die da sind. Ohne Testobjekt ist das sonst etwas schwierig.

Eigentlich wollte ich kurz mitteilen, dass die 49 Tage Grenze durch den Reboot wieder neu gestartet wird. Mir war beim Testen ein Stromausfall dazwischen gekommen. ;)  Also z.B. einmal im Monat per Timer rebooten und dann sollte es keine Ausfälle mehr geben.

Grüße, Peter

erdferkel

Die Steckdosen sind angekommen und das Modul erweitert.  ;D

Wenn das Modell P110 oder P115 erkannt wird, erfolgt jetzt automatisch im Anschluß an das Update eine Abfrage der Energiewerte und wird einfach mit allen anderen Readings aktualisiert.
Den P110 habe ich nicht, gehe aber davon aus, dass es damit genauso wie mit dem P115 funktioniert.

PS: Hat jemand eine Idee, was "electricity_charge" sein soll?

Grüße, Peter

chriskl

Hallo Peter,
DANKE für das Update.
Funktioniert bei mir  ;D

electricity charge = Stromgebühr.
Könnte mir vorstellen dass man den Preis pro kWh irgendwo einstellen kann und dann € angezeigt werden?
Hab in der App aber auch nix gefunden  :(

Ich habe bei power " W" rausgenommen, passt so besser bei mir rein.

Hast du eine Idee warum stateFormat nicht in der Attr-Liste ist? Würde das gerne nutzen.

Gruß

Christoph

erdferkel

Hallo Christoph,

danke für den Tipp mit der Preisberechnung, das könnte natürlich sein.

Warum "stateFormat" nicht automatisch bei den Attributen auftaucht, weiß ich auch nicht - es ist ja ein "framework" Attribut. Wenn man es aber im Initialize einfach ergänzt, scheint es zu funktionieren.
$hash->{AttrList}='interval power_divisor timeout verbose:0,1,2,3,4,5'
  .' event-on-change-reading event-on-update-reading timestamp-on-change-reading stateFormat';

  Grüße, Peter

chriskl

Hallo Peter,
ich hab mal in anderen Modulen "geschnaust" und hab das bei mir so geändert:
 $hash->{AttrList}='interval power_divisor timeout ' .
        "$readingFnAttributes";

Gruß

Christoph

erdferkel

Hallo Christoph,

Super - danke, das war mir irgendwie entgangen.  :)
Hier ist eine neue Version mit dieser Änderung.

Grüße, Peter

donaldo

Kann mir vielleicht jemand helfen ? Komme nicht weiter.

Habe alle hier empfohlenen Pakete nachinstalliert. Bekomme beim Installationsversuch  die Fehlermeldung :

"Can't locate UUID.pm in @INC (you may need to install the UUID module) (@INC contains: ./FHEM/lib ./lib ./FHEM . /etc/perl /usr/local/lib/aarch64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/aarch64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/aarch64-linux-gnu/perl-base /usr/lib/aarch64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at ./FHEM/00_TapoP100.pm line 22.
BEGIN failed--compilation aborted at ./FHEM/00_TapoP100.pm line 22."

Die Datei UUID.pm befindet sich bei mir im Verzeichnis: /usr/lib/aarch64-linux-gnu/perl5/5.32/Data/UUID.pm

Wenn ich die ins /opt/fhem/FHEM kopiere und define <name> TapoP100 <hostname/IP> <username> <password> ausführe, stürzt bei mir FHEM ab.

Gruß
Martin

erdferkel

Hallo Martin,

unter Debian gibt es zwei Pakete mit der Datei "UUID.pm": libdata-uuid-perl und libuuid-perl. Beim ersten liegt die Datei im Unterverzeichnis Data/ und müsste über "use Data::UUID" eingebunden werden. Da ich aber nicht weiß, ob das damit funktioniert, solltest Du noch das zweite Paket "libuuid-perl" installieren. Wenn Du kein Debian hast, heißt das Paket evtl. auch anders.

Grüße, Peter

donaldo

vielen Dank, mit der Installation von libuuid-perl hat es geklappt !

donaldo

Plötzlich kriege ich keinen Zugang mehr zur TAPOP100. In den Readings kommt die Fehlermeldung: "state
Invalid cookie header". Kann jemand damit was anfangen ? Finde keine Hinweise im Internet was damit gemeint ist.

erdferkel

Bei mir funktionieren die Geräte (Hardware V1.20) wie bisher.
Hast Du evtl. eine neue Firmware installiert? Ich habe eben gesehen, dass es für die Hardware V2 eine neue vom 12.09.2023 gibt. Vielleicht hat sich damit etwas geändert.

donaldo

Ja, ich hatte automatisches Update Download an. Toll, jetzt sind die Schalter mit fhem nicht nutzbar. Und die alte Firmware kann man nicht manuell installieren. Auch mit Home Assistant funktionieren die nicht mehr. Wer billig kauft, kauft doppelt  :'(

donaldo

Meine Firmware scheint vom August zu sein:
1.2.1 build 230894 rel 190902

erdferkel

Du kannst evtl. probieren, ob es nur an dem Cookie Header hängt.
Z.B. in der 00_TapoP100.pm Datei, dieses vor Zeile 196 einfügen und FHEM neu starten:
Log3($hash->{NAME}, 1, 'HTTP Header: '.$param->{httpheader});Dann sollte die aktuelle Antwort vom Gerät im FHEM Log stehen. Wenn sich etwas geändert hat, den Regex in der Prüfung danach entsprechend anpassen.

Meine Schalter sind alle in einem VLAN ohne Internetzugang - die machen keine ungewollten Updates. ;)

donaldo

Habe ich gemacht. Nach Anlegen des Devices bekomme ich in Log Datei die Meldung:

2023.10.03 12:31:18 1: HTTP Header: HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Server: SHIP 2.0
Content-Length: 19
2023.10.03 12:31:18 1: Tapo100_1 Invalid cookie header
2023.10.03 12:31:23 1: RMDIR: ./restoreDir/save/2023-09-29

Nach drücken auf on:

2023.10.03 12:34:45 3: Tapo100_1 set on
2023.10.03 12:34:45 1: HTTP Header: HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Server: SHIP 2.0
Content-Length: 19
2023.10.03 12:34:45 1: Tapo100_1 Invalid cookie header



donaldo

was auf ein Problem mit Update hindeutet ist, dass ich auch mit Home Assistant die TAposP100 nicht mehr einbinden kann. Habe das an 2 Stücke ausprobiert. Die P115 funktionieren in fhem und HA weiterhin

erdferkel

Das sieht aus, als ob gar kein Cookie gesetzt wird - ohne das kann eigentlich ein Login nicht funktionieren.
Evtl. passiert es aber erst später oder die haben irgendwas ganz anderes gebastelt.

Du kannst mal diese Änderung ab Zeile 194 probieren, ich denke aber nicht, dass es funktioniert. Damit wird das Cookie gespeichert sobald eines übermittelt wird, es gibt aber keinen Fehler mehr, wenn nicht.
  if (!defined $hash->{priv}{COOKIE}) {
    # store cookie for further requests
    $hash->{priv}{COOKIE}=$1 if ($param->{httpheader}=~/^Set-Cookie: (TP_SESSIONID=\w+)/m);
  }

Groby

Hallo Zusammen,

ich habe mal den Support von TP-Link bemüht und folgende Antwort erhalten:
Zitat"Die neue Firmware unserer IOT-Geräte hat die Verschlüsselung verbessert, was dazu führen kann, dass sie nicht in der Lage sind, mit nicht autorisierten Anwendungen von Drittanbietern zu arbeiten."
Vielleicht kann ja jemand damit etwas anfangen...

MfGroby

Groby

Hallo Zusammen,

ich habe den Black-Friday genutzt, um günstig einen Lichtstreifen (LS900) zu bekommen. Ich habe das Gerät in der FritzBox über die MAC-Adresse angemeldet, die Internet Sperre für das Gerät aktiviert und siehe da, sie lässt sich einbinden und über fhem an- und ausschalten.

Also bleibt es ein Glücksspiel mit den Tapo Lagerbeständen. Hoffen das man eine alte Firmware erwischt, sofern niemand das Problem mit der Verschlüsselung löst. Denn ein Firmware Downgrade ist technisch nicht möglich oder seitens TP-Link nicht gewollt:
Zitat...Ich habe mit unserem leitenden Ingenieur gesprochen und wir können kein Downgrade anbieten...

MfGroby