Zustände der Funksteckdosen abfragen


10.05.2016  |  Smarthome Server, Tutorial

In einer der letzten Anleitungen wurde bereits ein Skript geschrieben, dass Funksteckdosen schaltet und den neuen Zustand in eine Datenbank schreibt (Zum Tutorial: Funksteckdosen per Internet schalten). Im heutigen Tutorial wird ein Skript erstellt, dass den aktuellen Zustand bzw. die aktuellen Zustände der Funksteckdosen abfragt und zurückgibt. Dieses Tutorial ist also eine Vorbereitung für die folgenden Tutorials, da dort unter anderem der aktuelle Wert einer Funksteckdose benötigt wird. Außerdem ist dieses Skript eine wichtige Schnittstelle für die Smarthome-App die bald programmiert wird. Damit du diesem Tutorial folgen kannst, solltest du zuerst diese Anleitungen lesen:

Tabelle in der Datenbank erweitern

Um die Tabelle erweitern zu können, musst du in deinem Browser die folgende Adresse aufrufen:
http://[IP DES RASPBERRY]/database/phpliteadmin.php
Dort klickst du im Haupt-Frame des Fensters bei der Tabelle "funksteckdosen" auf "Structure", wie im Bild zu sehen.
Struktur der Tabelle bearbeiten.
Im neuen Fenster gibst du bei "Add 1 field(s) at end of table" eine 2 in das Textfeld ein und klickst anschließend auf "Go".
Mit einem Klick auf
Die beiden neuen Felder definierst du wie im Bild zu sehen: Beide Felder haben den Typ "Text" und heißen "ICON" und "NAME". Diese Felder werden ebenfalls später für die App benötigt, da im Feld "ICON" ein Key für das Bild des Gerätes abgelegt wird (also z.b. "licht", wenn es sich um eine Lampe handelt), welche in der App angezeigt wird und im Feld "NAME" wird der Name des Gerätes abgespeichert, der ebenfalls in der App angezeigt wird.
Jetzt werden die Felder
Anschließend klickst du auf "Add fields", um der Tabelle die Felder hinzuzufügen.

Skript für Abfrage der Zustände

Wie oben schon erwähnt, dient das Skript später auch als eine Schnittstelle für die Smarthome-App. Dabei wird es eingesetzt, um die Zustände der Funksteckdosen einzeln bzw. gruppiert abzufragen. Das Skript besteht aus 3 Blöcken:
  • Verbindungsherstellung mit Datenbank
  • Vorgehensweise, wenn die Variable 'device' nicht definiert wurde
  • Vorgehensweise, wenn sie definiert wurde
Um das Skript anzulegen, legst du im Hauptverzeichnis deines Servers eine Datei names 'getModes.php' an und fügst den folgenden Quellcode ein:
<?php
 
function getModes($room, $device, $db){
     
    if($device==''){
        //Daten des gesuchten Raumes aus der Datenbank laden
        $results = $db->prepare("SELECT * FROM 'funksteckdosen' WHERE ROOM == :room");
        $results->execute(array('room' => $room));
         
        $modi = array();
         
        foreach($results->fetchAll(PDO::FETCH_ASSOC) as $row){
            $mode_item = array('device' => $row['DEVICE'], 'mode' => $row['ZUSTAND'], 'icon' => $row['ICON'], 'name' => $row['NAME']);
            array_push($modi, $mode_item);
        }
         
        header('Content-type: application/json');
        return json_encode(array('modi' => $modi));
    }
    else{
        //Schaltzustand aus Datenbank laden
        $results = $db->prepare("SELECT * FROM 'funksteckdosen' WHERE ROOM == :room AND DEVICE == :device");
        $results->execute(array('room' => $room, 'device' => $device));
         
        foreach($results->fetchAll(PDO::FETCH_ASSOC) as $row){
            return $row['ZUSTAND'];
        }
    }
}
   
?>

Erklärung

Dem Skript werden 2 Parameter übergeben:
  • room: Der Raum, in dem sich die Geräte (bzw. das Gerät) befinden
  • device (optional): Das abzufragende Gerät
Wenn 'device' mit einem Wert definiert wird, so wird lediglich '1' bzw. '0' zurückgegeben - je nach Zustand des abgefragten Geräts. Wird 'device' stattdessen nicht definiert, so wird ein JSON-Objekt mit allen Zuständen, Namen, Keys und Iconkeys der Geräte des gesuchten Raumes zurückgegeben.

Verwendung des Skripts

Das Skript kann später über eine Schnittstelle verwendet werden, die zur Programmierung der Android-App angelegt wird.

Das Tutorial als Video

Über den Autor


Sascha Huber

Hallo, ich bin Sascha, der Gründer von Smarthome Blogger.

Mit einer Leidenschaft für Technologie und einem Hintergrund als Software Engineer habe ich 2016 Smarthome Blogger gegründet. Mein Ziel war es schon immer, innovative Lösungen zu entdecken, die unser Leben einfacher und intelligenter gestalten können. In meinem beruflichen Leben arbeite ich täglich mit Software und Technik, aber auch in meiner Freizeit bin ich stets auf der Suche nach neuen technischen Spielereien und Möglichkeiten, mein Zuhause zu automatisieren und zu verbessern.

Auf Smarthome Blogger teile ich mein Wissen, meine Erfahrungen und meine Begeisterung für alles rund um das Thema Smarthome.



Dieser Beitrag hat dir gefallen?

Dann abonniere doch unseren Newsletter!