Raspberry Pi Kasa

Mit Raspberry Pi und Python Kasa Steckdosen steuern

Funksteckdosen waren einmal, mit der zunehmenden Digitalisierung ziehen auch immer mehr smarte Dinge ins Zuhause ein. Ganz oben auf der Liste stehen bei mir smarte Steckdosen. Die Auswahl ist groß und die Anwendungsmöglichkeiten sind schier unendlich. Herstellerunabhängigkeit ist mir dabei besonders wichtig, daher steht auf meiner Liste die Steuerung via Raspberry Pi gleich in der ersten Spalte. Das perfekte System habe ich für mich noch nicht gefunden, deswegen probiere ich Vieles aus und nehme euch auf meine Reise mit.

Die Kasa-Steckdosen kommen vom Hersteller TP-Link und sind im Schnitt für 15-20 € erhältlich. Die smarten Steckdosen benötigen keine zentrale Station und können auch ganz ohne Account im heimischen W-LAN mit der Kasa-App gesteuert werden. Das sind ideale Voraussetzungen für die Steuerung mit einem Raspberry Pi. Außerdem können die Kasa-Steckdosen auch mit Amazons Alexa kommunizieren, leider hat dies bei mir allerdings nicht so gut funktioniert.

In dieser Anleitung werde ich nicht darauf eingehen, wie Raspberry Pi OS installiert wird. Ich arbeite mit einem Windows 10 PC und einem Raspberry Pi 3 auf dem Raspberry Pi OS Lite läuft.

Wir benötigen:

  • Raspberry Pi egal welches Modell
  • TP-Link Kasa Steckdose
  • Texteditor wie Notepad++
  • Putty mit SSH zugrifft auf den Pi
  • FTP Client wie Filezilla und FTP Server auf dem Pi

01. Bibliothek

Um die Steckdosen steuern zu können, benötigen wir die kostenlose Python Bibliothek “pyHS100” die wir mit “pip3” installieren. Das gesamte Projekt wurde in Python 3 programmiert, das ist für unseren Raspberry kein Problem, wir müssen es ihm nur sagen. Damit wir mit “pip3” arbeiten können, müssen wir es zuerst einrichten, das machen wir mit diesem Befehl:

sudo apt install python3-pip

Nachdem wir “pip3” installiert haben, können wir endlich die Bibliothek “pyHS100” auf unseren Raspberry Pi laden, dafür geben wir Folgendes ein:

pip3 install pyHS100

Wenn alles geklappt hat, können wir schon mit dem Skript beginnen.

02. Das Netzwerk Scannen

Schaut man in die Dokumentation der “pyHS100” Bibliothek findet man eigentlich alles Wichtige um die Kasa-Steckdosen steuern zu können. Dennoch wollen wir jetzt Stück für Stück alle Befehle durchgehen und am Ende ein Testskript schreiben.

Als Erstes müssen wir unsere Steckdosen im Netzwerk finden. Dafür erstellen wir eine neue Datei namens “tpkasa-scan.py”. Mit einem Text-Editor wie “Notepad++” öffnen wir die Datei und fügen folgenden Code ein:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from pyHS100 import Discover

# ONLY PYTHON 3
# https://github.com/GadgetReactor/pyHS100


for plug in Discover.discover().values():
     print("-----------------------")
     print("Alias: %s" % plug.alias)
     print("Host: %s" % plug.host)
     print("Current state: %s" % plug.state)
     print("Current time: %s" % plug.time)
     print("Timezone: %s" % plug.timezone)
     print("Location: %s" % plug.location)

Nach dem Speichern laden wir unsere Datei in das “/home/pi/” Verzeichnis via FTP und starten unseren SSH Client. Da die Bibliothek “pyHS100” mit Python 3 erstellt wurde, müssen wir unser Script auch mit Python 3 ausführen, das machen wir so:

python3 /home/pi/tpkasa-scan.py

Jetzt listet unser Raspberry alle Kasa-Steckdosen auf, die sich im Netzwerk befinden. Wichtig für uns sind dabei die IP-Adressen, damit sagen wir im nächsten Schritt, welche Steckdose was machen soll.

03. Es werde Licht

Nachdem wir jetzt genau wissen unter welchen Adressen sich die Steckdosen im Netzwerk angemeldet haben, können wir einen Einschaltbefehl versenden.

Dafür erstellen wir wieder eine neue Datei und nennen diese “tpkasa-on.py”, anschließend fügen wir folgenden Code ein:

#!/usr/bin/python3
# -*- coding: utf-8 -*-


from pyHS100 import SmartPlug


myipaddress = "xxx.xxx.xxx.xx"
plug = SmartPlug(myipaddress)
plug.turn_on()

print("Your plug is now %s " % plug.state)

Natürlich muss noch die IP-Adresse geändert werden. Der Befehl “plug.turn_on()” schaltet unsere Steckdose ein, mit “plug.turn_off()” können wir auch wieder einen Ausschaltbefehl senden.

04. Test Skript

Zum Schluss habe ich noch ein kleines Skript geschrieben, das alle Befehle kombiniert, um die Bibliothek “pyHS100” zu testen.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from pyHS100 import SmartPlug, SmartBulb, Discover
from pprint import pformat as pf

# ONLY PYTHON 3
# https://github.com/GadgetReactor/pyHS100

print("")
print("-----------------------")
print("Welcome to TP-Link Kasa test")
print("-----------------------")
print("")
print("")
print("Scan Network...")
print("")

for plug in Discover.discover().values():
     print("-----------------------")
     print("Alias: %s" % plug.alias)
     print("Host: %s" % plug.host)
     print("Current state: %s" % plug.state)
     print("Current time: %s" % plug.time)
     print("Timezone: %s" % plug.timezone)
     print("Location: %s" % plug.location)
     
print("-----------------------")
print("")
print("")

print('>>> Please enter ip-address:')
powerplug = input()
plug = SmartPlug(powerplug)

print("")
print("-----------------------")
print("Successfully found")
print("Alias: %s" % plug.alias)
print("Current state: %s" % plug.state)
print("-----------------------")
print("")

print('>>> Turn [ON/OFF]:')
turnplug = input()

if (turnplug == "ON"):
     plug.turn_on()
elif (turnplug == "OFF"):
     plug.turn_off()


print("")
print("-----------------------")
print("Sent successfully, the plug is now %s" % plug.state)
print("-----------------------")
print("")
zip-file-icon

artsblog-tpkasa-master.zip

Filesize: 0,02 mb
Related Posts