Hallo,
ein Atmel Kontroller hängt über RS232 an einem Raspi.
Via Ser2net steuere ich diesen fern (Console).
Auf dem PI läuft auch ein Webserver.
Ich möchte nun über den Wenserver ein primitives HTML Interface bauen,
mit welchem ich die Konfigdatei auf dem PI in /etc/ser2net.conf anpassen
kann.
HTML und son Gesummsel zählt nicht zu meinen Stärken.
Wie geht mann da grunsätzlich vor (Beispiel)?
Ferner muß es doch wohl eine freie Software geben, mit welcher ich
grafisch eine einfache web-GUI realiesren kann, zum Beispiel mit Drop
Down Menüs, Radio Buttons etc... und optimalerweise mit einem
"Steuerelement" zum Zugriff auf lokale Dateien?!
Ich suche mir einen Wolf und finde da einfach nichts.
Danke
>Ich suche mir einen Wolf und finde da einfach nichts.
Nicht mal einen Wolf ? .. es sollte ein Interface zur Hardware geben. zB
kann man mit einem aus : (php, JS, Ajax, Java) eine Serial Library
ansprechen.
um /etc/irgendwas verändern zu können müsste der webserver-user
superuser rechte haben, das ist eine gaanz schlechte idee.
ich würde da eher eine datei im document root ablegen in der eine (nicht
die echte) config geschrieben wird.
diese wird dann von einem cronjob (anderer user!) geöffnet, geprüft und
bei bedarf und erfolg nach /etc übernommen.
WYSIWYG mit html gibts schon seit urzeiten - allerdings meistens mit
eher zweifelhaftem erfolg.
schau dir mal eins von den beiden an
http://foundation.zurb.com/http://getbootstrap.com/
und probier das ganze zu fuß zu schreiben, dabei lernst du mehr als mit
klicki-bunti-zeug.
um die datei zu erstellen brauchst du eine server-scriptsprache - html
kann da nix.
Wie wäre es mit folgender "erfüllt seinen Zweck"-Lösung:
Ein kleines PHP o.Ä.-Script, das auf dem rPi läuft und eine HTML-Seite
mit einem Formular erzeugt:
Ein mehrzeiliges Text-Eingabe-Feld, das den aktuellen Inhalt der
besagten Datei als Text enthält. Den Inhalt des Text-Eingabe-Feldes kann
man verändern, und wenn man auf einen "Submit"-Button unten drunter
klickt, wird der Inhalt des Text-Eingabefeldes per HTTP POST an den
Server bzw. das PHP-Script übertragen; das PHP-Script überschreibt dann
einfach den Inhalt der Datei.
Das von df311 angesprochene Problem mit den Zugriffsrechten ist zwar ein
gewisses Problem - aber könnte man das nicht einfach dadurch lösen,
indem man User/Group oder Zugriffsrechte der Datei /etc/ser2net.conf
entsprechend ändert, dass "www-user" (oder wie auch immer der User
heisst, unter dem der Webserver läuft) Schreibzugriff hat?
absolutkeineahnungnomenestomen schrieb:> Nur einen Möglichkeit die Konfig Dateien zu "editieren"..
Eine "Serial Library" hat nichts mit der Schnittstelle zu tun. Siehe
z.B. https://en.wikipedia.org/wiki/YAML
Es gibt viele unterschiedliche Formate für Config-Dateien. In diesem
Bereich wird häufg mit Perl gearbeitet, da gibt es auf CPAN verschiedene
Libraries.
Ob es tatsächlich ein Tool um "grafisch eine einfache web-GUI" mit der
genannten Funktionalität zu erstellen gibt, weiß ich nicht. Es gibt
einzelne Pakete wie File Manager etc. und natürlich auch Basis-Libaries
für die GUI Elemente. Ggf. mal die gängigen PHP IDEs ansehen.
PHP ist für diesen Zweck sicher geeignet und leichter zu lernen als die
Web-Frameworks für "Erwachsene" (z.N. aus dem Java Umfeld).
Schau Dir mal ein PHP Tutorial an.
Aber mache bitte nicht den Fehler, die Sicherheit zu untergraben, indem
Du dem (Apache-)Webserver oder dem Script root Rechte gibst.
Ich persönlich finde Go sehr elegant. Hier ein Beispiel für ein
Web-Wiki/Blog, in dem man neue Seiten erstellen und Seiten verändern
kann. Die einzelnen Seiten werden als einfache .txt-Dateien gespeichert:
https://golang.org/doc/articles/wiki/
Hier der komplette Quellcode:
https://golang.org/doc/articles/wiki/final.go
Da fehlen nur noch die HTML Templates aber die sind in dem Artikel drin.
Schönen Guten Morgen,
hab mich mal ran gesetzt und eben ein kleines PHP Script gebastelt,
welches den 1. Schritt deines Vorhabens abdecken könnte.
Einfach die Datei in einen beliebigen Ordner im htdocs des Apache
reinprügeln
und fertig ist der lack.
Die erstellten Dateien landen dann im selbigen Ordner, in welchem auch
das Script abgelegt ist.
Schritt 2 wäre dann ein Script, welches die erstellte Datei
weiterverarbeitet (Überprüfung und dann in die richtige Config
übernehmen, dies könntest du zB auf Shell oder Python basiert umsetzen
[beim Raspi gern genommen])
Hoffe das bringt dich einen Schritt weiter Richtung Ziel :)
Gruß Mathias
PS: PHP Erweiterung im Apache vorausgesetzt (getestet unter Linux Debian
mit PHP 5.6)
PPS: Das Script bietet keinerlei Eingabeüberprüfung, ist also für den
Alltag im Privaten Bereich bestimmt, sobald jemand außenstehendes
Zugriff auf deinen Webserver hat würde ich entweder einen Verzeichnis
Schutz (zB via .htaccess) oder anderweitige Passwort-Sicherung sowie
eine Eingabeüberprüfung empfehlen!
Lieber Matthias,
das ist absolut zuvorkommend von Dir.
Vielen, lieben Dank.
Wenn ich mir das Skript anschaue, kann ich es in groben Zügen
nachvollziehen.
Habe gestern auch ein paar Stunden bei "Selfhtml" die Zusammenhänge mit
PHP nachgelesen und es dämmert so langsam.
Heute bin ich leider beruflich gebunden, werde am Abend aber einmal den
gestern gelieferten RASPI III in Betrieb nehmen und mit Deinem Skript
experimentieren.
Natürlich melde ich mich mit Feedback zurück.
VIELEN DANK,
tolle Hilfe!
Eventuell möchtest du erstmal auf einem Windows Computer üben, falls das
für Dich einfacher ist. In diesem Fall empfehle ich Dir das
Programmpaket XAMPP.
Das ist ein Apache Webserver mit PHP und weiteren nützlichen Programmen,
die in diesem Umfeld sehr oft gebraucht werden. Sie sind alle so
vorkonfiguriert, dass sie miteinander arbeiten - so wie man das auch von
Linux gewohnt ist.
Stefan,
Xampp läuft schon unter Windows bei mir.
Ist das dem PHP denn völlig egal auf welchem OS es läuft?
Ich dachte es gibt hier Abhängigkeiten.
Sind doch auch völlig unterschiedliche shells unter der Haube, CDM vs.
bash etc..
Spätestens wenn shellfunktionen aufgerufen werden muss es doch
Unterschiede geben.
Ob das Beispiel von Matthias da schon Probleme bekommt??
Danke für Euer Engagement!
Vorerst würd ich gern mit einem "t" geschrieben werden, ist
persönlicher, haha danke :D
Also an sich ist es deinem PHP Script bei solch einfachen Anwendungen
vollkommen Banane, ob es unter Windows oder Linux läuft, da das
umstellen auf die entsprechenden Dateisysteme usw. intern von der PHP
Lib übernommen werden (daher kann man ja auch kein PHP Server von
Windows auf Linux kopieren, da die ja anders arbeiten)
Wo du recht hast, wäre bei den auszuführenden Anwendungen...
Es ist z.B. möglich, dass dein PHP Server andere Skripte startet (z.B.
war es bei mir ein Python Script, welches gestartet wurde um die Zahl
die ich an den Server sende, auf einer 7segmetn Anzeige darzustellen)
hier würde ich das Ganze dann auf den Raspi verfrachten, da du natürlich
unter Windows keine .sh Skripte (z.B. ausführen kannst) und auch die
Funktion von z.B. umschalten von GPIO etc. natürlich schlecht simulieren
kannst.
An sich wäre das auch kein Problem, einfach einen SambaServer
fertigmachen, dann den Raspi als Netzlaufwerk anbinden und
programmieren, als wären die Dateien auf deinem Windows PC, nur, dass
sie in Wahrheit direkt auf dem Gerät landen wo Sie hingehören.
Bei umfangreicheren Skripten würde ich grundsätzlich immer auf dem
Endsystem testen, da gerade PHP sehr viele Einstellmöglichkeiten hat.
XAMPP bietet dem Nutzer nun einen Ausgewogenen Mittelweg zwischen
grundliegender Sicherheit, hat aber im Wesentlichen alle Funktionen
aktiviert, sodass eben keine Einschränkungen entstehen (z.B. Lib's
aufgrund von Sicherheitseinstellungen geblockt werden).
----
Bezüglich deines Skriptes, falls du diesen 2-Wege Plan fahren möchtest,
also ein PHP Script und ein weiteres z.B. Shell Skript, dann wäre
natürlich noch interessant, wie genau dein PHP Script aussehen soll:
Denkbar wäre hier z.B., dass er beim Aufruf der Seite automatisch eine
Datei einliest und den Inhalt in die Text-Box schreibt (quasi wie ein
webbasierter Editor) oder du zumindest die Möglichkeit hast eine Datei
auszuwählen die eingelesen werden soll.
Dies ist von Nöten, wenn du z.B. nur eine Zeile ändern möchtest, da das
Script, wie es jetzt ist, stets die komplette Datei neu schreibt, sofern
sie bereits vorhanden war.
Auch so Späßle wie Überprüfen ob die Datei bereits vorhanden ist und
ggf. fragen wegen Überschreiben wären denkbar.
Gruß, Mathias
Da goldenhunter97 ja so nett war bereits ein komplettes PHP-Script zu
schreiben und ich die Idee grundsätzlich recht nützlich fand, habe ich
mir sein Script mal etwas angepasst (siehe Anlage):
Der Unterschied besteht im Wesentlichen nur darin, dass
- Der aktuelle Inhalt der zu editierenden Datei gleich im Eingabefeld
angezeigt wird
- der Name/Pfad der zu editierenden Datei am Anfang des Scripts als
kleine Sicherheitsmassnahme fest eingestellt werden muss
- Am Anfang des Scripts ein Passwort eingestellt werden kann, wenn man
das möchte; wenn ein Passwort eingestellt ist, so ist noch ein
Eingabefeld für das Passwort vorhanden und die Datei wird nur
gespeichert/geändert, wenn das richtige Passwort eingegeben wurde
Mathias, Joachim,
danke für die Hilfe.
Ich schreibe hier schon vom eingerichteten PI.
Mit lighttpd und PHP.
Die Beispiele laufen im Browser, erzeugen aber keine Datei und berichten
auch keine Fehler.
Habt Ihr eine Idee fürs troubleshooting?
Sorry, das es bei mir nicht funktioniert...
absolutkeineahnungnomenestomen schrieb:> Die Beispiele laufen im Browser, erzeugen aber keine Datei und berichten> auch keine Fehler.>> Habt Ihr eine Idee fürs troubleshooting?>> Sorry, das es bei mir nicht funktioniert...
Falls Du mein Script ausprobiert hast: Wurde da im Browser zumindest der
aktuelle Inhalt der Datei /etc/ser2net.conf angezeigt?
Ansonsten besteht halt bei meinem Script noch das Problem, dass es wie
gesagt natürlich nur dann funktioniert, wenn Du die
Zugriffsberechtigungen der Datei /etc/ser2net.conf angepasst hast.
Bei mir gibt er zwar eine Fehlermeldung aus, falls er keine
Schreibberechtigung auf die Datei hat, aber das könnte auch einfach an
unterschiedlichen Webserver/PHP-Konfigurationen liegen.
Um auszuschliessen, dass es daran liegt, könntest Du testweise einfach
mal mit dem Befehl
1
sudo chmod 666 /etc/ser2net.conf
temporär beliebigen Zugriff auf die Datei zulassen.
absolutkeineahnungnomenestomen schrieb:> Hatte schon chmod 777 versucht...
777 sollte zwar auch funktionieren, ist aber trotzdem Käse: Die Datei
/etc/ser2net.conf ist weder eine ausführbare Datei noch ein Verzeichnis.
Ausserdem nochmal meine Frage:
Joachim S. schrieb:> Falls Du mein Script ausprobiert hast: Wurde da im Browser zumindest der> aktuelle Inhalt der Datei /etc/ser2net.conf angezeigt?
Ansonsten:
absolutkeineahnungnomenestomen schrieb:> Und das Script von Matthias legt keine Datei an..
Warum sollte es überhaupt eine Datei anlegen? Ich denke die besagte
Datei /etc/ser2net.conf existiert bereits, und Du willst sie nur
bearbeiten?
Joachim S. schrieb:> absolutkeineahnungnomenestomen schrieb:>> Hatte schon chmod 777 versucht...>> 777 sollte zwar auch funktionieren, ist aber trotzdem Käse: Die Datei> /etc/ser2net.conf ist weder eine ausführbare Datei noch ein Verzeichnis.
Ok, liegt aber damit nicht an Zugriffsrechten
>> Ausserdem nochmal meine Frage:>> Joachim S. schrieb:>> Falls Du mein Script ausprobiert hast: Wurde da im Browser zumindest der>> aktuelle Inhalt der Datei /etc/ser2net.conf angezeigt?>
Ja, das funktioniert super.
> Ansonsten:>> absolutkeineahnungnomenestomen schrieb:>> Und das Script von Matthias legt keine Datei an..>> Warum sollte es überhaupt eine Datei anlegen? Ich denke die besagte> Datei /etc/ser2net.conf existiert bereits, und Du willst sie nur> bearbeiten?
Matthias PHP Script lässt eine beliebige Datei zu, schau mal rein..
absolutkeineahnungnomenestomen schrieb:> Matthias PHP Script lässt eine beliebige Datei zu, schau mal rein..
Ja, das habe ich gesehen. Ich bin aber eben einfach davon ausgegangen,
dass Du mit seinem Script ebenfalls genau die besagte Datei
/etc/ser2net.conf bearbeiten/verändern wolltest; und die existiert ja
schon, muss also nicht angelegt werden - daher halt meine Verwunderung.
Wenn das jetzt aber eine Fehlannahme meinerseits war - welche Datei hast
Du dann eben versucht, mit seinem Script anzulegen? Was hattest Du da in
das "Dateiname"-Eingabefeld eingetragen, als es keine Datei angelegt
hat?
Joachim,
Dein Script funktioniert wie eine 1!!!
Habe den PI mal rebooted, nachdem ich wirklich viel installiert und
gespielt habe.
Fragt sich warum das von Matthias nicht funzt.
Letztlich möchte ich in die ser2conf.conf plausible Werte für 2 serielle
Schnittstellen einfügen.
Über ein Dropdown-Menü wollte ich die gängigen Baudraten auswählen
können.
Ggf. noch weitere Werte in der ser2net.conf Syntax.
Hätte ich dafür eine Vorlage, so würde ich den Rest sicher hinbekommen
;-)
Wenn die Konfigurationdatei einfach immer neu geschrieben wird, wäre
alles recht einfach.
Aufbau ist immer identisch:
11112:raw:0:/dev/ttyUSB0:9600 8DATABITS NONE 1STOPBIT banner
Danke
Joachim S. schrieb:> absolutkeineahnungnomenestomen schrieb:>> Matthias PHP Script lässt eine beliebige Datei zu, schau mal rein..>> Ja, das habe ich gesehen. Ich bin aber eben einfach davon ausgegangen,> dass Du mit seinem Script ebenfalls genau die besagte Datei> /etc/ser2net.conf bearbeiten/verändern wolltest; und die existiert ja> schon, muss also nicht angelegt werden - daher halt meine Verwunderung.
Ok
>> Wenn das jetzt aber eine Fehlannahme meinerseits war - welche Datei hast> Du dann eben versucht, mit seinem Script anzulegen? Was hattest Du da in> das "Dateiname"-Eingabefeld eingetragen, als es keine Datei angelegt> hat?
Einen beliebigen Dateinamen....
Soll laut Matthias dort angelegt werden wo auch das Skript läuft..
absolutkeineahnungnomenestomen schrieb:> Fragt sich warum das von Matthias nicht funzt.absolutkeineahnungnomenestomen schrieb:> Einen beliebigen Dateinamen....> Soll laut Matthias dort angelegt werden wo auch das Skript läuft..
Ich würde darauf tippen, dass Matthias' Script an sich durchaus
funktioniert, und es einfach irgendein Problem mit
Zugriffsberechtigungen gab.
Falls Du einen beliebigen Dateinamen eingegeben hast, ohne Pfad- bzw.
Verzeichnisangabe (Darauf zielte meine Frage eigentlich ab): vielleicht
wird die Datei dann aus irgendeinem Grund doch nicht im gleichen
Verzeichnis wie das PHP-Script abgelegt?
Oder das Verzeichnis, in dem das PHP-Script liegt, hatte doch keine
777-Berechtigung oder so?
Keine Ahnung, ich kann wirklich nur raten, aber ich tippe stark auf
Zugriffsberechtigungen.
Ich würde auch auf Zugriffsberechtigung tippen, wie gesagt habe das bei
mir umfangreich getestet und das ist an sich auch Verzeichnis
unabhängig, ich habe es nicht getestet, theoretisch köntne das
funktionieren, wenn du den Ordner bereits hast, dass du dann zB als
Dateiname ordner/datei eingibst und die Datei somit im "ordner" erstellt
wird.
Bei einem fehlenden Dateityp hatte das Programm eine sehr merkwürde TEMP
datei erstellt, das hatte ich allerdings damit gefixed, dass es nun ein
Dropdown-Menü gibt in dem 3 Dateiendungen vorselectiert werden können
(kann ja im Quelltext beliebig geändert werden)
Und auch das Programm von Joachim funktioniert auf meinem Homeserver
Problemlos (habe es allerdings soweit geändert, dass es eine lokale .txt
Datei nutzt und nicht irgendwas im etc...
(Ich muss aber auch gestehen, dass ich nicht alle Teile des Codes
Problemlos verstehe und Joachim scheinbar auch andere eingebaute
Funktionen für dei Datei verwendet, wenn ich das richtig sehe)
Ich könnte mir vorstellen, dass evtl. dein www-data Benutzer entweder
gobal oder in den entsprechenden Ordnern maximal lese, aber keine
Schreibrechte hat (wäre sicherheitstechnisch denkbar, da der Webserver
ja normal auch nur Daten lesen muss [Datenbanken werden ja von einem
Seperaten Server erstellt/geändert usw.])
schaust mal im Terminal auf deinen Ordner (dürfte ja /var/www im
normalfall sein) und schaust dann mal, welche Berechtigungen da gesetzt
sind und ob dein Apache User (normal www-data) dort als Owner drinsteht.
Ansonsten wäre noch interressant zuwissen, was folgendes Script
ausspuckt
1
<?php
2
echophpinfo();
3
?>
das ganze als z.B. info.php speichern.
Die Ausgabe solltest du nur veröffentlichen, wenn dein Webserver nur
Privat läuft da man dadurch natürlich auch Rückschlüsse auf die
Angreifbarkeit ziehen kann, interressant wäre für mich momentan erstmal,
welche PHP Version du hast und ich meine die Ausgabe hat auch irgendwo
was stehen von wegen Datei erstellen, bin ich mir aber gerade nicht mehr
ganz sicher (kann man glaube ich in der php.ini auch sagen, dass
erstellen von dateien verboten wird um die Sicherheit zu erhöhen).
Stefan U. schrieb:> Vielleicht verhindert der "safe mode" von PHP Zugriff auf das ganze /etc> Verzeichnis.
Würde ich an sich ausschließen, da er ja sagt, dass Joachims Script
soweit läuft und mein Script ja im default nichtmal im /etc speichert,
sondern im Webverzeichnis, welches standardmäßig in /var/www liegt und
dort dann eben in dem entsprechenden Unterordner, indem die .php Datei
liegt.
Was denkbar wäre, ist dass er die .php z.B. in einem Ordner "test"
liegen hat und diesen aber z.B. via Samba Server erstellt hat, also mit
einem anderen Benutzer und der Apache Benutzer daher keine Schreibrechte
in jenem Ordner bestizt, aber alles reine spekulation.
absolutkeineahnungnomenestomen schrieb:> Über ein Dropdown-Menü wollte ich die gängigen Baudraten auswählen> können.
Dann wollen wir uns doch mal mit diesem Wunsch beschäftigen...
absolutkeineahnungnomenestomen schrieb:> Hätte ich dafür eine Vorlage, so würde ich den Rest sicher hinbekommen
Wenn ich dich richtig verstehe möchtest du also quasi ein
fein-schnittiges Tutorial :D kannst du gern kriegen, ich fang dabei mal
ganz vorne mit den Basics an und gehe dann weiter zum PHP Code.
Grundsätzlich benötigst du ein HTML Formular:
<input type="submit" value="Beschriftung vom Senden Button" />
4
</form>
in diesem Formular kannst du nun Einzelne Elemente einfügen, dass machst
du am besten zwischen <!-- Text --> und dem input Feld (den Kommentar
Text [dieses <!-- blubbs -->] kannst du dabei auch gern löschen, er
dient in dem Beispiel nur als Platzhalter)
Ein Dropdown Menü baust du wie folgt:
Hierbei erfolgt die Beschriftung nicht im Elment selbst, sondern davor
bzw. dahinter, ich habe hierbei die Beschriftung vereinfacht durch
Kapselung in einen <p>-Tag, was soweit HTML5 Konform ist. Man könnte
jetzt als XHTML-Guru auch noch anfangen mit so Geschichten, wie "jeder
Radio-Button bekommt eine ID und zu jeder ID dann ein Label-Tag", was
mein IV Lehrer auch besondes gern macht, das würde dann aussehen wie
folgt:
Hierbei könnte man dann auch, wie zu sehen, auf das Kapseln in einen
<p>-Tag verzichten und hat den Vorteil, dass z.B. Lesehilfen oder auch
automatisierte Ausfüll Algorithmen das Formular besser erfassen können.
Wer das möchte kann das natürlich machen, ist aber für den
Privatgebrauch nicht zwangsweise erforderlich und tur der eigentlichen
Funktion im allgemeinen auch keinen Abbruch.
Und dann kommt jetzt das PHP Script welches das Ganze in eine Datei
einträgt...
in dem Fall hast du eine Variable, in der dann alles drin steht, was am
Ende in der Config Datei landen soll und an dem entscheidenden Punkt, wo
die Baudrate hin soll, musst du dann durch Hochkommata den Text Bereich
verlassen mit einem. eine String Addition beginnen, dort die übertragene
Variable aus dem Formular (hier $_POST["baudrate"]) einfügen und über
eine weitere String-Addition, welche du wieder durch einen. einleitest
den ganzen Salat zu Ende bringen.
Das wäre die Einfache Version, bei der dein auswertendes PHP Script den
gesamten Inhalt der Config kennt, damit eine Variable (hier
$eintragenInDatei) und den ganzen Spaß dann in die datei schreibt (wie
das geht haben wir ja bereits gelernt :)
Weitere Möglichkeiten beständen darin, dass er den Inhalt der Config
einliest, den Bereich für die Baudrate selbstständig sucht und dort dann
den entsprechenden Wert ändert (wäre denke ich für später auf jeden Fall
sinnvoll, falls du irgendetwas anderes in der Config änderst, dann
übernimmt er das auch).
Dabei könnte man dann auch trotzdem noch das Script von Joachim
weiterverwenden, bei dem er dir im Vorfeld die Config komplett anzeigt
und du also auch manuell alles eintragen kannst, damit das Funktioniert
musst du dann dem Programmteil, welcher die Baudrate sucht und verändert
eben statt dem Inhalt der Datei den Inhalt deines Textareas aus dem
Eingabeformular übergeben.
Ich hoffe das ist soweit alles verständlich :D
Gruß Mathias
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang