Python – monitorujeme aktuální spotřebu přes chytrou zásuvku P110

Zásuvka Tapo P110 je jedním z produktů od společnosti TP-Link, který umožňuje smart ovládání přes WiFi. Jedna z výhod této zásuvky je, Dnes se podíváme na tuto chytrou zásuvku, kterou budeme na dálku ovládat a měřit spotřebu. Jednou z výhod této zásuvky oproti nižšímu modelu P100 je monitorování spotřeby elektrické energie. To nám umožní sledovat kolik elektřiny jednotlivá zařízení spotřebovávají.

Dnešní řešení provedeme v programovací m jazyce Python s využitím knihovny PyP100. Nenechte se zmást názvem knihovny PyP100, tato knihovna umí pracovat i se zásvkou P110.

Neprve zapojte zásuvku do elektřiny, přidejte si ji do vaší domácnosti a zprozněte v aplikaci TAPO.

Zásuvka komunikuje s okolím přes WiFi, tekže zařízení kterým budete zásvuku ovládat / monitorovat odběr přes zásuvku musí být ve stejné síti. V mém případě se jedná o Raspberry.

V apliakci je pořeba zjistit IP adresu zásvuky. Provedete to v detailu zásuvky -> Info o zařízení -> IP adresa.

Instalace Python na Raspberry Pi

Na Raspberry Pi mám Ubuntu:

sudo apt update 
sudo apt upgrade
sudo apt install python3
python3 --version

Programujeme

Použijeme Python s knihovnu https://pypi.org/project/PyP100/

sudo pip install PyP100

V případě chyby:

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.

sudo pip install PyP100 --break-system-packages

Pak už jen napíšeme kód pro ovládání zásvuky. Nezapomeňte, že zásuvku musíte mít přidanou ve va3i aplikaci, protože pro ovládání zásuvky bude potřeba jméno a heslo k vašemu účtu TAPO.

from PyP100 import PyP110

p110 = PyP100.P110("192.168.X.X", "email@email.cz", "heslo") #IP adresa zasuvky, email, heslo

p110.handshake() #cookies pozadavek
p110.login()


p110.getEnergyUsage() #aktualni spotreba zasuvky

#sprace se stavy zasuvky
p110.turnOn() #Zapne zasuvku
p110.turnOff() #Vypne zasuvku
p110.toggleState() #zmeni stav zasuvky na opacny zapne/vypne

p110.turnOnWithDelay(10) #zapne se zpozdenim 10s
p110.turnOffWithDelay(10) #vypne se zpozdenim 10s

p110.getDeviceInfo() #informace o zasuvce
p110.getDeviceName() #jmeno zasuvky