RFID & PHP & HTML

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    Für meine nächste Mission muss ich eine Benutzeroberfläche für RFID Scanner erschaffen.

    Nun dies würde ja mit Python wunderbar Funktionieren, nur würde ich dies gerne in PHP & HTML machen.
    Ist es möglich, die gescannte id an den Webbrowser weiter zu geben? Sodass ich z.b. nach dem Scannen eine URL aufrufen kann?
    Es soll keine neue Webbrowser Instanz erstellt werden, die Parameter sollen an den geöffneten Webbrowser weitergeleitet werden.


    Gruss Schnibli

    Ready when you are :bravo2:

  • Es wäre einfacher das direkt in Python zu machen und für den Webpart zB tornado oder bottle zu verwenden.

    Das Problem ist nämlich eine Schnittstelle zwischen Python und Javascript zu erschaffen, die einzige sinnvolle Möglichkeit hierfür wäre WebSocket.
    PHP wird nur Serverseitig ausgeführt, Javascript Clientseitig.
    Mir ist keine RFID Class für PHP bekannt. Also womit handhabst du den RFID Reader?

    Dazu gesagt habe ich für einen anderen Forum Member solch eine WebSocket Sache schon mal gebastelt, was auch reibungslos funktioniert - trotzdem erachte ich mittlerweile den zuerst erwähnten Part leichter.... JavaScript kann nur WebSockets und dafür brauchst du sowas wie tornado oder bottle - also kannst du den Rest (Darstellung/Generierung/Rendern der Seiten) auch gleich mit tornado/bottle umsetzen. Einfügen der Werte des RFID Scanners in die Webseiten ist dann auch recht einfach und funktioniert direkter als eine Kombination von JavaScript sowie PHP zur Generierung der HTML Ausgabe..

  • Also,

    Mir Schwirrt Folgende Idee im Kopf:
    ---> Python erkennt RFID Tag
    ---> Python öffnet einen Link im Aktuell geöffneten Browser und übergibt Daten mit $Get
    ---> Button's ect. über Html bis zu Datenspeicherung
    ---> Anschliessend wieder Standard-Seite in Webbroser öffen.

    Sollte So Funktionieren oder? :s

    Ready when you are :bravo2:

  • Das wird aber immer mindestens ein neues Tab oeffnen - das ist damit (quasi) eine neue Webbrowser-Instanz. Ich bin da bei meigrafd: Python im Backend mit RFID-Reader + Websocket ist der richtig weg.

  • Ich habe dazu schonmal einen kleinen Workaround gebastelt, der funktioniert im Prinzip genau so. Sonderlich toll ist das ganze nicht, es funktioniert aber schon..

    1) RFID Leser wird über Python gesteuert und schreibt jede Aktion direkt in eine MySQL-Datenbank (Tags_read)
    2) Ein PHP-Skript wird per Browser von dem User aufgerufen (oder auch aufgelassen!)
    3) Das PHP Skript fordert (ich glaube jede Sekunde oder auf Event, das weiß ich gerade nicht) per AJAX einen DIV-Inhalt von einem anderen Script an
    4) Das andere Script baut eine Verbindung zur Datenbank auf und ließt immer den zuletzt gelesenen Tag aus der Datenbank aus und gibt dieses an das andere Skript (Sichtbare Website) zurück.

    Somit hast du bei jedem Scannen einen aktuellen Inhalt und könntest darauf weiter mit Buttons o.ä. reagieren.

    Aber:
    - Bislang keinen Dauerlauf getestet, keine Ahnung ob das stabil auf Dauer funktioniert
    - Man müsste Exceptions einbauen, dass während ein Knopf gedrückt wurde o.ä. kein Content nachgeladen wird, sonst sind alle Eingaben o.ä. weg

    BTW: Ich bin mir gerade garnicht genau sicher, aber man könnte mit Python doch auch ein Script anstoßen oder? Also nicht den Weg über die DB-Abfrage machen, sondern bei einem Lesevorgang ein PHP-Script anstoßen, welches seine Daten per AJAX sendet o.ä... Gibt da bestimmt noch sowas ;)

    Websocket wäre der elegante und sichere weg, oder aber alles in Python, bottle oder sowas wie meigrafd alles schon genannt hat. Der Programmierumfang wird ähnlich sein, auch wenn jemandem PHP/JS vielleicht besser liegt.

  • Wenn ich das ganze in Python machen möchte bräuchte ich einen Anstoss da mir PHP und MySQL viel Besser liegt xD...
    Kenn jemand ein Beispiel:
    -Python mit Tkinter
    -Wartet auf den Tag
    -Sobald der Tag gescannt ist, soll ein Text erscheinen (z.b. Hallo Welt)

    Auf diesem könnte ich den Rest Programmieren xD....

    Gruss Roger

    Ready when you are :bravo2:

  • Was genau möchtest du denn machen bzw was soll das spätere Ziel sein?

    MySQL in Python zu integrieren ist das einfachste... Den RFID Scanner zu handhaben eigentlich auch. Das schwierigste wir die Handhabung der Webseiten sein sowie das rendern der Seiten mit den veränderten Informationen...

    Fang doch erst mal damit an ein Python Script zu erstellen was dir mithilfe von bottle oder tornado eine Webseite darstellt und arbeite dich dort ein - templates erstellen sowie veränderbare Variablen ins template einfügen. Wenn du das soweit verstanden und umgesetzt hast kann man darauf aufbauen

  • Um das noch mal aufzugreifen:

    Möchte man einige Stellen einer Seite, zum Beispiel einen Wert, dynamisch verändern aber ohne die komplette Seite neu zu laden, muss man AJAX verwenden. Das Prinzip dahinter ist das eine Javascript Funktion regelmäßig zum Beispiel jede Sekunde ausgeführt wird und eine Anfrage an den Server sendet. Diese Anfrage wird verarbeitet und ein Wert oder Text etc zurück gegeben, was dann vom Clientseitig laufendem JavaScript an die dafür vorgesehene Stelle in der Seite einfügt. Wie gesagt läuft Javascript auf seiten des Clients, also im Browser des Clients.
    Es macht weniger Traffic AJAX zu nutzen und ist auch eleganter als ständig die komplette Seite neu zu laden - hat aber auch den Vorteil das zB zuvor gesetzte POST/GET Geschichten nicht resettet werden (sofern man keine Session nutzt)...

    Angenommen du hast verschiedene Artikel und möchtest das dein Browser den jeweiligen Artikel mit ein paar Informationen anzeigt sobald du diesen einscannst... Da stellt sich dann halt die Frage wie man das erreichen kann _ohne_ jedesmal die Seite neu zu laden.

    Zu klären wäre wie die Interaktion zwischen "Darsteller" und "Erfasser" stattfindet. Läuft beides auf einem Computer oder soll der Pi übers Netzwerk angesprochen werden?
    Ist der Scanner beim Client oder beim Server angeschlossen? Was das ^ etwas verändern würde...

    TKinter zu verwenden beschränkt die Anwendungsmöglichkeit und liest sich jetzt auch nur so als wär das ein Ausweg für dich um es leichter zu haben :fies: Eine Client<->Server Struktur ist damit nur auf Basis eines Sockets o.ä. möglich - was wieder zur Klärung führt ob es ein Client<->Server Konstrukt sein soll.... Denn wenn dem so ist kommt es letztlich aufs gleiche wie ein Browser<->Websocket Konstrukt heraus, vereinfacht also eigentlich nichts.

    Du merkst also es wären mehr Details wichtig um Für Dich passende Tipps geben zu können. Wir wissen nicht was dein späteres Ziel sein soll - nur das du einen RFID Scanner nutzen willst..... Aber wir haben keine Ahnung was du dir vorstellst, was genau dein Vorhaben ist, wie du das umsetzen möchtest etc.

  • Ich würde gerne einen Artikel Scannen, dann soll es mir im "Webbroser" oder wo auch immer Informationen anzeigen. Anschliessend kann ich den Preis ändern oder Hinzufügen wenn noch keiner erfasst wird.
    Warum ich das ganze in "HTTP &PHP" Programmieren will ist, weil ich das System ev. noch auf anderen "Platformen" (Windows & Anroid) Nutzen will.

    Ready when you are :bravo2:

  • Leider bleibt die Frage offen:
    Fungiert der Pi nur als Server und die Betrachtung findet auf einem anderen Rechner statt?

    Wenn der Scanner zwar direkt am Pi angeschlossen ist, aber kein Monitor am Pi dran ist, muss die Betrachtung ja auch einem anderen Gerät erfolgen.
    Zum Beispiel surfst du den Pi an, scannst was ein und siehst dann im Browser das Ergebnis. Wenn das dein Ziel sein soll handelt es sich um ein Client<->Server Konstrukt.
    Wenn aber direkt am Pi sowohl Monitor als auch Scanner angeschlossen ist und LXDE läuft, brauch man nicht unbedingt ein Server<->Client Konstrukt.

    Windows oder Android ist aber auch sone Sache. Android ist eher speziell, darauf läuft nicht wirklich das selbe wie auf Raspbian oder gar Windows... Stichwort Äpfel mit Birnen vergleichen, beides ist Obst aber trotzdem verschieden.
    PHP ist wie gesagt nur etwas was auf dem Server ausgeführt wird. Das zeigt nichts an. Dem Betrachter nur HTML angezeigt. Soweit mir bekannt ist gibt es nur über extreme Umwege PHP für Android.

    Bevor man also anfängt irgendwas zu programmieren sollte man solche Sachen klären. Es bringt nichts auf ein Server<->Client Konstrukt zu verzichten aber in 2 Monaten auf Android wechseln zu wollen... Warum auch immer du das in Betracht ziehst - leider fehlen mir auch weiterhin genauere Informationen um gezielt helfen zu können, schade eigentlich hätt ich grad Lust drauf...

  • Der Server (Datenbank und die ganzen Web-Dokumente) Liegen auf einem Synology Nas.
    Der Pi dient zur Visualisierung und änderung der Daten.

    Am Pi wird ein Offizielles Raspberry pi Display montiert inkl. RFID Scanner.

    Eigentlich kann meiner Meinung nach die Visualisierung auch unter Android verwendet werden, da sie ja wie eine Normale Homepage aufgebaut ist. (Sein sollte)

    Ready when you are :bravo2:

  • Na dann versuch mal PHP auf Android ans laufen zu kriegen - viel Erfolg.

    Android ist primär ein Betriebssystem für Smartphones. Auf einem Smartphone wird kein Webserver installiert oder betrieben, dementsprechend gibt es dafür offiziell auch keine Unterstützung. Webseiten betrachten ist wie gesagt etwas völlig anderes.

    Davon abgesehen erkenne ich nicht den Grund wieso du Android und nicht Raspbian verwenden willst?

  • Kann es sein, dass ihr euch massiv missversteht? Ich glaube nicht, dass schnibli die Anwendung auf Android laufen lassen will, sondern mit dessen Chrome-Browser den PI ansurfen & bedienen moechte. Es wuerde ja ander auch schon alleine am RFID-Reader scheitern. Wo soll der dran?

  • Wieso möchte er dann an den Pi ein offizielles Display anbringen und dort das ganze visualisieren? :s

    Daher glaube ich schon das er auf dem Pi Android laufen lassen möchte - an dem der Scanner und ein Display angeschlossen ist.

  • Ein voll funktionsfaehiges Terminal wuerde ja auch Sinn machen, und er spricht neben Android auch von Windows. Letztlich kann ich das aber gar nicht beurteilen, mir geht's nur darum, aufzuzeigen, dass du die ganze Zeit von einer Komplettinstallation under Android redest, und ich seine Aussagen eher in Richtung "web-basiert, dann kann es auch von anderen Systemen benutzt werden" interpretiere. Wenn diese Frage beantwortet ist, kann man sich wieder anderem zuwenden :)


  • Letztlich kann ich das aber gar nicht beurteilen, mir geht's nur darum, aufzuzeigen, dass du die ganze Zeit von einer Komplettinstallation under Android redest, und ich seine Aussagen eher in Richtung "web-basiert, dann kann es auch von anderen Systemen benutzt werden" interpretiere.

    Davon rede ich nicht die ganze Zeit. Ich hab ihn 2x gefragt wie es aufgebaut sein soll, auf Server/Client Basis (Web-Basiert) oder eben nicht...

    Er spricht nur davon das er es in einem Browser öffnen möchte, nicht aber ob das Gerät welches den Browser laufen hat auch das Programm laufen und den Scanner angeschlossen hat - beziehungsweise seine letzte Antwort sagt aus das er am Pi sowohl Display als auch Scanner anschließen will, also läuft es dann Meines Erachtens nicht auf Server/Client-Basis und daraus resultiert das Android die falsche Wahl wäre. Desweiteren begründet er Android anscheint damit das die Visualisierung wie eine Homepage aufgebaut sein soll, da er es ja mit HTML&PHP umzusetzen gedenkt.

    Ob mit Windows ein anderer Rechner gemein ist lässt sich auf der derzeitigen Informationsbasis auch nicht sicher sagen - es könnte auch Windows IoT auf dem Pi gemeint sein.

    Derzeit wird also IMHO einiges durcheinander gewürfelt und zB "Visualisierung" nicht eindeutig definiert ob es nur auf einem Display am Pi oder auch von einem anderen Netzwerk-Gerät aus bedient werden soll..

    Solange das nicht geklärt wurde kann man nicht gezielt Hilfestellung geben da es beispielsweise zu viel Aufwand wäre wenn es sich _nicht_ um ein Server/Client Konstrukt handelt, stattdessen könnte auch schon eine TKinter GUI auf dem Pi reichen. Zumindest ist das meine Einschätzung, da ich weiß wie viel Zeit ich in das letzte Projekt dieser Art investieren musste bis es zufriedenstellend auf Server/Client Basis funktionierte.

  • Ich hab eingetnlich schon die Antwort gegeben:
    - Komplette PHP, HTML und DB Server liegen auf einem Synology.

    - Raspberry pi ist ein client und muss Daten eintragen können am liebsten über php und html da ich dies auch bei Android clienten und Windows clienten ohne weiteres einsetzen kann.

    Die Frage ist nur wie kann ich entweder im Browser ein tab aktualisieren (mit python)
    Oder ein neues Tab öffnen und anschießend dies Automatisch wieder Schließen.

    Ready when you are :bravo2:

  • Das was du da sagst ergibt keinen Sinn. Wenn der PI ein Client fuer PHP und HTML sein soll, dann laeuft auf ihm ein Webbrowser, der fuehrt dann ggf Javascript aus. Wenn der PI dann *selber* wieder PHP und HTML verwenden soll wie du oben schreibst, dann ist der PI auch selbst Webserver, nicht nur Browser. Und dann sind wir wieder bei meigrafd's richtiger Bemerkung, dass das auf Android/Windows wieder ganz anders ausschaut, das da zum laufen zu bekommen.

    Und die Frage, wie man mit Python arbeitet hat meigrafd auch schon beantwortet - statt da irgendwie Tabs zu oeffnen (was noch geht), und zu schliessen (was nicht geht, jedenfalls nicht so ohne weiteres) schreibst du einen Webserver in Python, der gleichzeitig auch den RFID-Leser bedient, und zB mit Websockets dessen Ausgabe an den Browser schickt.

    Alternativ kannst du den Python-RFID-Ausleser auch dazu bringen, eine PHP Seite aufzurufen (da muss kein Browser fuer ran, httplib/urllib/requests oder mechanize tun das), und dann ist es die Aufgabe von PHP das irgendwie an den zeitgleich geoeffneten Browser zu leiten. Keine Ahnung, ob und wie das geht - zu meiner Zeit konnte PHP so etwas nicht, aber das entwickelt sich ja auch weiter.

    Es klingt ein bisschen so, als ob dieses Szenario das ist, was dir da im Kopf rumspukt mit Tab oeffnen und schliessen. Ist aber halt gar nicht notwendig. Ein HTTP-Request kann man auch ohne Browser absetzten, mit den gerade erwaehnen Bibliotheken.

    http://docs.python-requests.org/en/master/user…#make-a-request

  • Eigentlich weis ich nicht was so schwirig zu verstehen ist!
    Der Raspberry pi soll wenn ein Tag gescannt wird sachen in eine DB eintragen.
    Um zum Beispiel eine Stückzahl einzutragen, würde ich gerne:
    - Tag Scannen
    - Webbrwoser auf dem Pi öffnet den Artikel
    - Stückzahl einschreiben
    - Speichern
    -Fertig

    Damit ich dies im Webbrowser erledigen kann, würde ich mit Post Arbeiten, jedoch ist ja das Problem das ein Python Script (welches den Tag gescannt hat) immer ein neues Browser Tab öffnet und das möchte ich irgendwie umgehen.

    Mit TKinter möchte ich nicht arbeiten da mit Python und Tkinter die Funktionieren beschränkt sind.

    Ready when you are :bravo2:

    Einmal editiert, zuletzt von schnibli (9. April 2016 um 13:40)

  • Was so schwierig ist sind deine 4! Plattformen, die du durch die Gegend jonglierst. Synology, PI, Android, Windows, alles irgendwie mit PHP & HTML programmiert.

    Aber fuer dieses letzte Szenario habe ich dir die Loesung schon in meinem vorherigen Post genannt: statt mit Python einen Browser zu oeffnen, schickst du das POST-request mit Python direkt zum Server (wo auch immer du den laufen lassen willst, ist mir immer noch unklar).

    Duemmstenfalls schreibt man dann das gerade gescannte Tag in die Datenbank mit PHP, und der Browser pollt regelmaessig, ob was da ist. Cleverer ist es, mit Websockets vom Server gleich dem Browser bescheid zu geben - aber wie das mit PHP geht weiss ich nicht, meigrafd hat deshalb zu Recht Tornado als Webserver-Plattform ins Spiel gebracht.

Jetzt mitmachen!

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