Einrichtung der WLAN Verbindung per Script

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mondy
User
Beiträge: 6
Registriert: Donnerstag 5. April 2018, 12:50

Hallo,

ich möchte einen Pi so ausliefern, dass man nach dem Booten die Zugangsdaten für das WLAN eingeben kann. Dafür möchte ich die notwendigen Dinge abfragen und in der entsprechenden config abspeichern. Anschließend soll dann automatisch eine bestimmte Internet Seite im Kiosk Modus aufgerufen werden.
Ist Python hier der richtige Ansatz, oder sollte man so etwas lieber anders angehen?

Danke und Gruß,
Mondy
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Prinzipiell kann man das mit Python machen. Aber wenn du eh in eine GUI bootest, fuer den Kiosk-Modus, kannst du doch auch den Network-Manager benutzen? Bis du eine GUI so weit poliert hast, bis sie aehnlich gut ist und auch das richtige an die richtigen Stellen schreibt, nimm doch was es gibt.

Eine andere Moeglichkeit (die ich auch nutze) besteht darin, die SD-Karte zu manipulieren. Fast jeder Computer kann SD-Karten lesen (mit Adapter). Die FAT-Partition des PIs koennte dann eine WIFI-settings-Datei enthalten, deren Daten du nach dem Booten in die entsprechende Konfiguration schreibst.
Mondy
User
Beiträge: 6
Registriert: Donnerstag 5. April 2018, 12:50

Das soll für den Benutzer sagen wir mal Idiotensicher sein. Daher habe ich an eine geführte Installation gedacht. Für den Browser benötigt man eine GUI, oder?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Wenn man etwas Idiotensicher macht, wird einfach ein neuer Idiot erfunden.

Der Benutzer muss eine Tastatur anschließen, um den Schlüssel eingeben zu können.
D.h. der Benutzer wird ggf. auch eine Maus benötigen, wenn der Fokus nicht im Fenster/Eingabefeld liegt.

Die Möglichkeiten sind vielfältig.
Du kannst...
  • Dem Kunden einmal zeigen wo man auf das WLAN-Symbol klicken muss, um eine Verbindung aufzubauen und wo man dann das Passwort eingeben muss. Das würde dir Zeit sparen. Gleichzeitig hat das den Vorteil, dass der Kunde auch noch etwas lernt.
  • GUI Anwendung, die beim ersten booten geöffnet wird, die WLAN-Hotspots anzeigt und nach dem Passwort fragt. Der Schwierigkeitsgrad wäre da nicht besonders groß. Tkinter würde für diese Aufgabe ausreichen.
  • Webanwendung: Hat den Vorteil, dass man diese ggf. auch nach dem einbinden woanders aufrufen kann.
  • Beim ersten Bootvorgang in der Konsole nach der SSID und dem Passwort fragen (Fehleranfällig, sieht hässlich aus)
Es gibt noch andere Möglichkeiten. Mir sind die Ideen ausgegangen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

Noch mal eine weitere Idee:
Wenn es auch Lua sein darf (und nicht Raspbian sein muss), wäre ACF für/von Alpine Linux vielleicht einen Blick wert. ACF ist ein Framework, mit dem man web-basierte Konfigurationsoberflächen, ähnlich wie man sie z.B. von Routern kennt, bauen kann. Du könntest deine Konfiguration als Modul realisieren und beim Erststart einen Browser zu dieser Seite öffnen. Diese Variante bietet sich primär an, wenn du noch ein paar der weiteren Features von ACF gebrauchen kannst; ansonsten ist die Variante von __deets__ m.M.n. zielführender.
Mondy
User
Beiträge: 6
Registriert: Donnerstag 5. April 2018, 12:50

Das mit der Webanwendung (lokaler Webserver, HTML, PHP, JavaScript) gefällt mir am besten.
Kann man damit denn die WLAN-Hotspots auslesen, und anzeigen lassen?
Und kann man mit einer Webanwendung z.B. das Gerät neu booten?

Danke und Gruß,
Mondy
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die webanwendung läuft ja auf einem Server auf dem Pi. Und ein Server ist ein Programm wie jedes andere. Also ja.
Mondy
User
Beiträge: 6
Registriert: Donnerstag 5. April 2018, 12:50

Ja schon, aber mir ist jetzt im Moment keine Möglichkeit bekannt, mit Webmitteln die verfügbaren WLANs auslesen kann. Oder wie ich z.B. dem Pi sagen kann, dass er booten soll.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Mondy: eine lokale Webanwendung sollte eher so aussehen: Python, HTML, JavaScript oder wenn Du auf node.js setzt nur JavaScript und HTML.
Einen eigenen Webserver braucht man nicht, weil Python oder node.js schon einen mitbringen. PHP für neue Projekte einzusetzen würde ich nicht empfehlen.

Da alles lokal läuft, hat der Server-Part (Python oder node.js) vollen Zugriff auf das Gerät.
Mondy
User
Beiträge: 6
Registriert: Donnerstag 5. April 2018, 12:50

Ich habe bis jetzt immer nur PHP programmiert. Wie starte ich am besten mit Python, HTML und Javascript? Gibt es da sinnvolle Tutorials, in Verbindung mit dem Pi?

Danke :-)
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit dem PI hat Webentwicklung ja erstmal nichts zu tun. Es gibt viele Tutorials dazu, wie man da sein Python macht. Ich würde aber erstmal recherchieren, was du tun musst um zB die Liste der SSIDs zu bekommen, oder noch wichtiger eine gegebene Konfiguration zu setzen.

Worin dann die Anwendung Programmierung wird ist zweitrangig. Ich würde es auch nicht in PHP machen, aber ich würde auch nicht nur aus Prinzip eine neue Sprache lernen, wenn das Problem auch mit der schon beherrschten lösbar ist. Und das sollte es in diesem Fall.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ein normaler Webserver (Apache2, nginx) liefert erstmal nur Dateien aus (html, png, jpg, css, js usw...).

Also GET-Request kommt rein, Webserver antwortet, sieht nach ob die Datei vorhanden ist und überträgt sie dann einfach.
Wenn du jetzt die Website so ausliefern willst, dass z.B. Hotspots angezeigt werden, muss der Webserver das selbst machen.
Die Informationen werden im Hintergrund abgefragt, das HTML-Template wird durch Substitution mit dem Inhalt gefüllt und letztendlich zum Client übertragen.

Mal ein kleines Beispiel mit Flask, dass einfach die Uhrzeit als Text ausgibt:

Code: Alles auswählen

from datetime import datetime as dt
from flask import Flask

app = Flask('__name__')

# hier wird die route definiert
@app.route('/')
def root():
    # hier wird der Inhalt als str zum Client übertragen
    # in diesem Fall einfach das aktuelle Datum+Uhrzeit als string
    jetzt = dt.now()
    return str(jetzt)


# hier wird eine Schleife gestartet
# und der app wartet auf eingehende Request
# bei jedem Request wird die zugeordnete Funktion der Route aufgerufen
app.run()
Es gibt auf jeden Fall viel zu lernen.
Ich würde mal behaupten, dass es für den Anfang etwas zu viel aufeinmal ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Mondy
User
Beiträge: 6
Registriert: Donnerstag 5. April 2018, 12:50

Das ist nicht zu viel. Das ist ein Weg zu einem Ziel :-)
Danke zunächst.
Antworten