PIR GPIO PIN Status permanent aktualisiert auf PHP Seite anzeigen

  • Hey ihr RasPi Junks...

    ...in Sachen PHP & RasPi bin ich noch totaler Neuling. Seit 6 Wochen bin ich stolzer Besitzer zweier RasPis (B & B+). Jetzt habe ich meinen B+ ins Kinderzimmer an einen LED Strip und zwei PIR Modulen verbaut. Das Ganze habe ich mit dem einfachen PIRI Skript von E.F. Engelhardt und PI-Blaster kombiniert. Soweit läuft alles super. Bis auf ein kleines Problem beim Starten von PIRI Service über Daemon. Bei jedem Neustart schalten sich der LED Stripe an. Obwohl im Skript eindeutig aus steht.

    Naja, jetzt zu meinem eigentlichen Problem. Ich würde mir gerne auf meinen gebastelten PHP Webfrontend den Status vom PIR Modul anzeigen lassen. Also quasi sobald das PIR Modul eine Bewegung erkennt, soll mir im Webfrontend diese direkt angezeigt werden.
    Informationen zum Auslesen von GPIOs habe ich schon gefunden. Nur fehlt mir jetzt noch die permanente Aktualisierung, bzw. die regelmäßige Abfrage des Status.
    Hier hätte ich zwei Lösungsansätze.

    ANSATZ 1:
    Ich würde versuchen mit Daemon, einem Service Skript und einem Loop den GPIO Status direkt in meine PHP Seite zu schreiben.
    Wobei ich denke dass dann immer noch nicht die Seite aktualisiert ist.

    ANSATZ 2:
    Wäre über eine Funktion in der PHP Seite die auch regelmäßig über einen weiteren Befehl aktualisiert wird.
    Doch mit dem Thema Funktionen tue ich mich noch ein bisschen schwer.

    Kann mir jemand da weiterhelfen?

    Gruss

  • PIR GPIO PIN Status permanent aktualisiert auf PHP Seite anzeigen? Schau mal ob du hier fündig wirst!

  • Hi zunächst mal,

    was hat das jetzt mit E-Technik zu tun :fies:
    Das gehört ja wohl eindeutig in die Ecke Web-Programmierung.

    Kleiner Tipp als Lösungs-Ansatz: Forensuche und mal ein wenig blättern.
    Du wirst es zwar nicht für möglich halten, aber Du bist nicht der erste, der Stati des Raspi als dynamische Inhalte auf einer Website darstellen will ... :angel:

    cu,
    -ds-

  • Die Kategorie ist GPIO, ganz klarer Fall. Gerade wenn man die Unterkategorie "Web-Programmierung" nicht auf den ersten Blick sieht. :stumm:

    Ja nee is kla dass es sich um einen dynamischen Inhalt handelt. Soweit bin ich auch schon gewesen (siehe Ansatz 1 Subtext).

    Also ich finde da nicht konkretes zum Thema. Es kann aber daran liegen dass ich mich hier schon richtig müde gelesen habe.

    Link zum Thread würde mir schon reichen. :thumbs1:

    Asö, bevor ich es vergesse. Wenn möglich würde ich gerne auf JS oder andere Skriptsprachen verzichten wollen.

    Einmal editiert, zuletzt von JenselBensel (2. November 2014 um 04:35)

  • Abgesehen, dass das hier wirklich die falsch Sektion ist, schreibe ein php-Script, welches bei Aufruf den GPIO abfragt. Erstelle dann eine HTML-Seite, in der Du entweder per Java mit Ajax diese Script in dem von Dir gewünschten intervall aufrufst. Eine andere Möglichkeit ist, das php-script gleich in die Seite einzubinden und mit einem meta-tag zu refreshen:

    Code
    <meta http-equiv="refresh" content="3">

    Beispiel ist für alle 3 Sekunden. Alle Varianten erzeugen eine Menge Traffic


  • Abgesehen, dass das hier wirklich die falsch Sektion ist, schreibe ein php-Script, welches bei Aufruf den GPIO abfragt. Erstelle dann eine HTML-Seite, in der Du entweder per Java mit Ajax diese Script in dem von Dir gewünschten intervall aufrufst. Eine andere Möglichkeit ist, das php-script gleich in die Seite einzubinden und mit einem meta-tag zu refreshen:

    Code
    <meta http-equiv="refresh" content="3">

    Beispiel ist für alle 3 Sekunden. Alle Varianten erzeugen eine Menge Traffic

    Vielen Dank erstmal.

    Ich werde beim nächsten Mal drauf achten in die richtigen Sektion zu posten.

    Also die Meta-Tag Variante funktioniert. Leider ist diese Lösung nicht das gelbe vom Ei.
    Wäre es nicht besser wenn ich die GPIO Abfrage und den Intervall als Javascript in meine PHP/HTML schreibe?

    Bin ich mit

    Code
    body onload

    und

    Code
    window.set.Timeout

    auf dem richtigen Weg?

    Einmal editiert, zuletzt von JenselBensel (12. November 2014 um 01:29)

  • Die "optimale" Lösung wäre AJAX bzw. xhtmlrequest.

    Meta-Refresh lädt immer die gesamte Seite neu, was man auch optisch schon daran merkt, das sie vom Browser neu gerendert wird.

  • Wäre die "optimale" Lösung nicht Websockets? Bei Ajax hast du doch immer das Problem dass du ständig prüfen musst ob sich was geändert hat, mit Websockets hat man (soweit ich das verstanden habe) die möglichkeit sich über bestimmte Ereignisse "informieren" (callback oder interrupt oder so) zu lassen. Das spart Ressourcen. Ist dafür aber um einiges aufwändiger zu programmieren.
    Ich hab da gerade letztens einen Interessanten "Artikel" dazu entdeckt.

    DON'T PANIC!

  • Vielen Dank für eure Antworten.

    Ich habe es jetzt so gelöst:


    Code
    <head> 
     <script type="text/javascript">
         $(document).ready(function() {
           $("#refresh").load("status_gpio.php");
           var refreshId = setInterval(function() {
              $("#refresh").load('status_gpio.php?' + 1*new Date());
           }, 1000);
        });
    </script>
    </head>

    und:

    Code
    <div id="refresh" style="text-align:center;"></div>

    Meine status_gpio.php (provisorisch):


    Ich denke so wurde es mir hier auch geraten.

    Einmal editiert, zuletzt von JenselBensel (14. November 2014 um 01:54)

Jetzt mitmachen!

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