433 MHz Funksteckdosen über Webinterface steuern

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo liebe Community,

    ich habe nun erfolgreich nach dieser Anleitung meine Funksteckdosen auf Basis von 433 MHz über meinen Raspberry Pi schalten können ...

    http://www.raspiprojekt.de/anleitungen/sc…n-schalten.html

    Nun möchte ich gerne hergehen und selber ein kleines Webinterface basteln welches folgende Funktionen besitzt:

    • Hinzufügen von Buttons + System-Code & Empfänger

    Löschen von Buttons


    Die Buttons sollen je nach Zustand der Schaltung mit An/Aus beschriftet sein


    Das Problem ist ich kenne mich mit PHP nicht so gut aus. Daher frage ich einfach mal in die Runde ob jemand für mich ein paar Anregungen etc. hat? Ich möchte gerne eine eigene Lösung basteln und nicht auf fertige Lösungen zurückgreifen :helpnew:


    Ich bin dankbar für jede Antwort ;)


    :danke_ATDE:



  • Versuch es mal mit Power Pi. Es funktioniert einwandfrei! Und du hast die Möglichkeit, Voraus gesetzt du hast PHP-Kenntnisse, das webinterface nach deinen wünschen zu gestalten! Einziges kleines Manko ist das nur ELRO-Funksteckdosen genutzt werden können!

    Ansonsten hab ich auch viel positives über FHEM gelesen!
    Wenn ich das richtig gelesen habe kannst du dort mehrer verschiedene Marken betreiben!

    Beide Tutorials findest du hier im Board!

    Gruß Sven

    [Co|xY|sa] ein aus Frankfurt stammendes Erdenwesen!

    >>HIER<< gibt's ordentlich was auf die Ohren !

  • Ich weiß nicht ob ich hier richtig bin ich habe eime send.php auf den raspberry pi die meine funksteckdosen schaltet die sicht so aus
    <?php
    $output .= exec('/usr/local/bin/send '.
    $_GET['housecode'] .' '.
    $_GET['id']. ' ' .
    $id = $_POST["id"];



    echo "<pre>$output</pre>";
    if(isset ($_GET["ststus"]))

    ?>

    Ist es möglich die Wert wieder zurück zu krigen in eine empfenger.php datei.
    Mein ziel ist den status jeden schalter abzufragen ich habe mir ein app gebaut für android und brauche den Rückgabe wert für den Status ob der schalter an =1 oder aus =0 ist . Danke im voraus[/quote][/code]

  • Du kannst den "Zustand" von Null oder Eins in eine Textdatei schreiben lassen und diese dann per App auswerten.... aber verlassen solltest Du Dich darauf nicht!

    Wenn Du Geräte fernschaltest kann es durchaus vorkommen das es ein Problem bei der Funkübertragung gibt (Nachbar funkt gleichzeitig sein Garagentor auf oder 'ne dicke Brummfliege hockt auf dem Sensor und was weiß ich was alles noch stören kann!). In einem solchen Fall wird das Script ohne Fehler abgearbeitet und meldet den entsprechenden Zustand obgleich dieser am Ziel nicht erreicht wurde.

    Eine (einfache) Lösung gibt es für das Problem nicht, denn die Empfänger geben kein Signal zurück. Mann muss also selber gucken (sei es Vorort oder via Webcam) ob der Befehl korrekt am Empfänger angekommen ist...

  • Ich hatte mich in das Thema schon vor einiger Zeit etwas eingelesen...

    Wenn ich nicht irre, dann hast bei den billigen Funksteckdosen keine Rückmeldung ob der Schaltbefehl auch wirklich von der Funksteckdose ausgeführt wurde.

    Also, der RasPi schickt den FunkCode raus, und alles ist fertig. Da ich selbst Funksteckdosen nur für Lichter verwenden will, kann ich je selbst sehen was die Lampen machen.

    Mein Lösungsansatz wäre daher:

    Für jede Funksteckdose ein Formular mit PHP/HTML erstellen, und da eben 2 Buttons..
    1x für EIN 1x für AUS.

    [code=php]<form action="<?php echo $_SERVER['PHP_SELF']; ?>"........[/php]
    so ruft sich das Formular selbst auf...

    und wenn die Datei "Funksteckdosen.php" wieder angezeigt wird, dann wird geprüft, welcher Button geklickt wurde...
    (ja, das kann man sicher viel eleganter machen!!! aber ich denke es ist hier mal eine leicht nachvollziehbare Variante für Einsteiger!!)

    Beispiel: http://jm.maiparty.at/Funksteckdosen.php

    und zum kopieren der ganze Code:
    [code=php]<!DOCTYPE html>
    <html>
    <head>
    <title>Beispiel</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=0.9, user-scalable=no">
    <!--http://html5-mobile.de/blog/meta-view…bile-anpassen-->
    </head>
    <body>

    <?php

    // einfache formatierte Ausgabe von $_GET
    // zum aktivieren bei den nächsten 3 Zeilen die 2 Schrägstiche löschen<br>
    // echo "<pre>";
    // print_r ($_GET);
    // echo "</pre>";


    // hier wird geprüft ob ein Button geklickt wurde...

    if (isset($_GET[funk_001_EIN])) {

    // hier den Befehl zum Einschalten der Funksteckdose 001 einfügen
    echo 'Funksteckdose 001 ist eingeschalten (Homecode) "10101 1 1"';
    }

    if (isset($_GET[funk_001_AUS])) {

    // hier den Befehl zum Einschalten der Funksteckdose 001 einfügen
    echo 'Funksteckdose 001 ist ausgeschalten (Homecode) "10101 1 0"';
    }

    if (isset($_GET[funk_002_EIN])) {
    // hier den Befehl zum Einschalten der Funksteckdose 002 einfügen
    echo 'Funksteckdose 002 ist eingeschalten (Homecode) "10101 2 1"';
    }

    if (isset($_GET[funk_002_AUS])) {
    // hier den Befehl zum Einschalten der Funksteckdose 002 einfügen
    echo 'Funksteckdose 002 ist ausgeschalten (Homecode) "10101 2 0"';
    }


    ?>

    <div align="center"><!-- damit alles schön mittig sitzt..-->

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" name="funksteckdose_001" target="_self">

    <input name="funk_001_EIN" type="submit" value="EIN"> 001
    <input name="funk_001_AUS" type="submit" value="AUS">
    <br>
    <input name="funk_002_EIN" type="submit" value="EIN"> 002
    <input name="funk_002_AUS" type="submit" value="AUS">
    <br>

    </form>

    </div>
    </body>
    </html>
    [/php]

    (in eigener Sache: wie kann ich im Forum einen Spoiler erstellen??)

    wenn das Beispiel gefällt, dann kann ich es gerne noch ein wenig trickreicher umbauen

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

  • in der folgenden Version übergebe ich beim Abschicken des Formulars (=Button klicken)
    auch den Status des 2. Kanals mit versteckten Formularfeldern...

    Beispiel 02: --> jm.maiparty.at/Funksteckdosen_02.php

    [code=php]<!DOCTYPE html>
    <html>
    <head>
    <title>Beispiel</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=0.9, user-scalable=no">
    <!--http://html5-mobile.de/blog/meta-view…bile-anpassen-->
    </head>

    <body>
    <?php
    // einfache formatierte Ausgabe von $_GET
    // zum aktivieren bei den nächsten 3 Zeilen die 2 Schrägstiche löschen<br>
    // echo "<pre>";
    // print_r ($_GET);
    // echo "</pre>";

    // hier setze ich die Status-Variablen mit den Werten aus den versteckten Formularfeldern

    $status_001 = $_GET[status_001];
    $status_002 = $_GET[status_002];

    // hier wird geprüft ob ein Button geklickt wurde...

    if (isset($_GET[funk_001_EIN])) {
    // hier den Befehl zum Einschalten der Funksteckdose 001 einfügen
    echo 'Funksteckdose 001 ist eingeschalten (Homecode) "10101 1 1"';
    $status_001 = 'EIN';
    echo '<br>Status von Funksteckdose 001 --> '.$status_001;
    echo '<br>Status von Funksteckdose 002 --> '.$status_002;
    }

    if (isset($_GET[funk_001_AUS])) {
    // hier den Befehl zum Einschalten der Funksteckdose 001 einfügen
    echo 'Funksteckdose 001 ist ausgeschalten (Homecode) "10101 1 0"';
    $status_001 = 'AUS';
    echo '<br>Status von Funksteckdose 001 --> '.$status_001;
    echo '<br>Status von Funksteckdose 002 --> '.$status_002;

    }

    if (isset($_GET[funk_002_EIN])) {
    // hier den Befehl zum Einschalten der Funksteckdose 002 einfügen
    echo 'Funksteckdose 002 ist eingeschalten (Homecode) "10101 2 1"';
    $status_002 = 'EIN';
    echo '<br>Status von Funksteckdose 001 --> '.$status_001;
    echo '<br>Status von Funksteckdose 002 --> '.$status_002;

    }

    if (isset($_GET[funk_002_AUS])) {
    // hier den Befehl zum Einschalten der Funksteckdose 002 einfügen
    echo 'Funksteckdose 002 ist ausgeschalten (Homecode) "10101 2 0"';
    $status_002 = 'AUS';
    echo '<br>Status von Funksteckdose 001 --> '.$status_001;
    echo '<br>Status von Funksteckdose 002 --> '.$status_002;

    }

    ?>
    <div align="center"><!-- damit alles schön mittig sitzt..-->

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" name="funksteckdose_001" target="_self">

    <input name="status_001" type="hidden" value="<?php echo $status_001; ?>">
    <input name="status_002" type="hidden" value="<?php echo $status_002; ?>">

    <input name="funk_001_EIN" type="submit" value="EIN"> 001
    <input name="funk_001_AUS" type="submit" value="AUS">
    <br>
    <input name="funk_002_EIN" type="submit" value="EIN"> 002
    <input name="funk_002_AUS" type="submit" value="AUS">
    <br>

    </form>

    </div>
    </body>
    </html>
    [/php]

    diese Methode könnte nun eigentlich das Ablegen der Status-Variablen in einer eigenen Datei ersetzen...

    aber das ist sicher noch nicht die optimale Lösung!

    Denn wenn 2 verschiedene Personen von verschiedenen Handys schalten, dann kommt es unweigerlich zu Überschneidungen!!

    edit:
    eine weitere Schwachstelle hier ist die Tatsache, dass beim 1. Aufruf der Status nicht bekannt ist!! und daher sicher irgendwann falsche Werte in den Status-Variablen stehen.

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (7. Juni 2014 um 11:56)

  • Leider such ich nach eine bessere Lösung da muß ich mir noch Gedanken machen wie ich das mache oder ich baue mir einen empfenger der die sende daten empfangen und die dan an meine app zurück gibt wenn jemand par Vorschläge hat her damit. danke dir

    Einmal editiert, zuletzt von a.g (7. Juni 2014 um 12:15)

  • allgemeine Fragen:
    ...was kann deine APP besonders gut? (ich möchte das Teil nicht bei mir testen, da ich nicht weiß, was das Teil macht...)
    ...und warum willst unbedingt den Status der Funksteckdosen wissen?
    ...wie viele Leute sollen die Funksteckdosen bedienen?

    solange wir keine Funkempfänger benutzen, die eine Antwort zurückschicken... wird der Status immer eine "Vermutung" bleiben..
    (das bleibt auch so, wenn du nun versuchst mit einem 2. Empfänger die gesendeten Befehle auswertest, und die dann speicherst)

    mit den billigen Funksteckdosen ist es halt immer so!!

    Beispiel aus dem echten Leben:

    der RasPi ruft quasi ganz laut (so wie die Mama am Abend) "ZÄHNEPUTZEN und ab ins BETT"... hat aber keine Rückmeldung, ob die Anweisungen ausgeführt wurden..

    da hilft es Dir auch nicht, wenn ein anderer Empfänger (z.B. der PAPA) dann sagt: "JA, ich habe dich rufen gehört..."

    -------
    unterm Strich musst du immer daran glauben, dass der Befehl erhört wurde...

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (7. Juni 2014 um 14:57)

  • Version 3 von meiner Variante...

    schreibt nun den letzten bekannten Status der Funksteckdosen in die Datei:
    funksteckdosen_status.php .. diese liegt im selben Ordner wie die Datei funksteckdosen_03.php

    wenn ich nun die funksteckdosen_03.php in einem Browser aufrufe, dann hole ich mir über die Zeile:
    [code=php]include 'funksteckdosen_status.php';[/php]
    die Werte wieder, und erstelle mit den Daten das Formular.

    Inhalt in der Datei...
    [code=php]<?php
    $status_001 = "0";
    $status_002 = "1";
    $status_003 = "0";
    ?>[/php]


    weiters habe ich mir 2 kleine "Icons" für die Lampen erstellt,
    eine gelbe für EIN --------> lampe_45_1.png
    und eine graue für AUS --> lampe_45_0.png

    diese kleinen Grafiken füge ich nun über folgende Zeile ein..
    [code=php]<img src="lampe_45_<?php echo $status_001; ?>.png">[/php]

    und in Abhängigkeit von aktuellen Status wird die passende Grafik verlinkt.. <?php echo $status_001; ?>

    Auch die Buttons hab ich jetzt etwas größer gemacht, damit ich die am Smarty besser antippen kann.. (..kann man später noch mit CSS aufpeppen!)

    hier auch gerne noch der ganze PHP-Code zum kopieren...

    Spoiler anzeigen


    [code=php]<!DOCTYPE html>
    <html>
    <head>
    <title>03 Beispiel</title>
    <meta charset="UTF-8"><br>
    <meta http-equiv="refresh" content="15; URL=<?php echo $_SERVER['PHP_SELF']; ?>">
    <meta name="viewport" content="width=device-width, initial-scale=0.9, user-scalable=no">
    <!--http://html5-mobile.de/blog/meta-view…bile-anpassen-->
    </head>

    <body>
    <?php

    // hier setze ich die Status-Variablen mit den Werten aus den versteckten Formularfeldern

    //$status_001 = $_GET[status_001];
    //$status_002 = $_GET[status_002];
    //$status_003 = $_GET[status_003];

    include 'funksteckdosen_status.php';

    $output = exec('/usr/local/bin/send '.$_GET['housecode'] .' '. $_GET['id']. ' ' . $_GET['status']);
    echo "<pre>$output</pre>";

    // hier wird geprüft ob ein Button geklickt wurde...

    if (isset($_GET[funk_001_EIN])) {
    // hier den Befehl zum Einschalten der Funksteckdose 001 einfügen
    echo 'Funksteckdose 001 wird eingeschalten (Homecode) "10101 1 1"';
    $status_001 = '1';
    }

    if (isset($_GET[funk_001_AUS])) {
    // hier den Befehl zum Einschalten der Funksteckdose 001 einfügen
    echo 'Funksteckdose 001 wird ausgeschalten (Homecode) "10101 1 0"';
    $status_001 = '0';
    }

    if (isset($_GET[funk_002_EIN])) {
    // hier den Befehl zum Einschalten der Funksteckdose 002 einfügen
    echo 'Funksteckdose 002 wird eingeschalten (Homecode) "10101 2 1"';
    $status_002 = '1';
    }

    if (isset($_GET[funk_002_AUS])) {
    // hier den Befehl zum Einschalten der Funksteckdose 002 einfügen
    echo 'Funksteckdose 002 wird ausgeschalten (Homecode) "10101 2 0"';
    $status_002 = '0';
    }

    if (isset($_GET[funk_003])) {
    if ($_GET[funk_003]=="EIN") {
    $status_003 = "1";
    // hier den Befehl zum Einschalten der Funksteckdose 003 einfügen
    echo 'Funksteckdose 003 wird eingeschalten (Homecode) "10101 3 1"';
    }
    else{
    $status_003 = "0";
    echo 'Funksteckdose 003 wird ausgeschalten (Homecode) "10101 3 0"';
    }
    }

    // die aktuellen Status-Variablen in Datei "funksteckdosen_status.php" schreiben


    $dateihandle = fopen("funksteckdosen_status.php","w"); //

    fwrite($dateihandle, "<?php");
    fwrite($dateihandle, "\n$".'status_001 = "'.$status_001.'";');
    fwrite($dateihandle, "\n$".'status_002 = "'.$status_002.'";');
    fwrite($dateihandle, "\n$".'status_003 = "'.$status_003.'";');
    fwrite($dateihandle, "\n?>");

    fclose($dateihandle);


    ?>
    <div align="center"><!-- damit alles schön mittig sitzt..-->
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" name="funksteckdose_001" target="_self">

    <input name="status_001" type="hidden" value="<?php echo $status_001; ?>">
    <input name="status_002" type="hidden" value="<?php echo $status_002; ?>">
    <input name="status_003" type="hidden" value="<?php echo $status_003; ?>">

    <table width="150" border="1" cellpadding="9" cellspacing="0">
    <tr>
    <td><input name="funk_001_EIN" type="submit" value="EIN" style="width:70px;height:45px;"></td>
    <td><img src="lampe_45_<?php echo $status_001; ?>.png"></td>
    <td><input name="funk_001_AUS" type="submit" value="AUS" style="width:70px;height:45px;"></td>
    </tr>
    <tr>
    <td><input name="funk_002_EIN" type="submit" value="EIN" style="width:70px;height:45px;"></td>
    <td><img src="lampe_45_<?php echo $status_002; ?>.png"></td>
    <td><input name="funk_002_AUS" type="submit" value="AUS" style="width:70px;height:45px;"></td>
    </tr>
    <tr>
    <td><input name="funk_003" type="submit" value="EIN" style="width:70px;height:45px;"></td>
    <td><img src="lampe_45_<?php echo $status_003; ?>.png"></td>
    <td><input name="funk_003" type="submit" value="AUS" style="width:70px;height:45px;"></td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    </tr>
    </table>


    </form>

    <?php

    // einfache formatierte Ausgabe von $_GET
    // zum aktivieren bei den nächsten 3 Zeilen die 2 Schrägstiche löschen<br>
    // echo "<pre>";
    // print_r ($_GET);
    // echo "</pre>";

    // folgende Zeilen sind nur zum Testen nötig.. kann auskommentiert werden...
    echo '<br>Status von Funksteckdose 001 --> '.$status_001;
    echo '<br>Status von Funksteckdose 002 --> '.$status_002;
    echo '<br>Status von Funksteckdose 003 --> '.$status_003;


    ?>

    </div>
    </body>
    </html> [/php]

    gerne nehme ich Tipps und Verbesserungsvorschläge mit... :)

    die Screens gefallen mir... :)

    hat sich leider mit meinem Beitrag überschnitten...

    ------
    über die Funktionen ALLES EIN und ALLES AUS hatte ich auch schon nachgedacht ( ..kommt noch.. :)

    bin jetzt noch daran, die Schaltbefehle für deinen Fall anzupassen.. dann kannst es gerne mal bei DIR testen..
    (benötigt dann nur 2 php-Dateien, und eben die beiden Lampen-Grafiken...)

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (7. Juni 2014 um 17:21)

  • momenterl.. muss noch nachbessern..

    so..
    also folgende Bilder:
    http://jm.maiparty.at/lampe_45_0.png
    http://jm.maiparty.at/lampe_45_1.png

    und dann noch 2 PHP-Dateien erstellen...

    1. funksteckdosen_03.php mit dem Code aus dem Spioler oben..


    und.

    2. funksteckdosen_status.php da habe ich die Dateirechte auf 777 gesetzt...

    [code=php]<?php
    $status_001 = "1";
    $status_002 = "1";
    $status_003 = "0";
    ?>[/php]

    alle 4 Dateien dann in einem Ordner unter /www am RasPi einfügen..

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (7. Juni 2014 um 18:41)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!