Suche kleinen embedded http Server für mein c projekt

Schnelle objektorientierte, kompilierende Programmiersprache.
darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Suche kleinen embedded http Server für mein c projekt

Beitrag von darkwin » Fr Sep 10, 2021 7:44 pm

Hallo, ich habe ein kleines Programm das ohne Unterbrechung von der Seriellen Schnittstelle lesen und schreiben muss.
Das Programm läuft soweit und ich würde das Programm gern über eine kleine Webschnittstelle steuern und die Daten auf der kleinen Seite darstellen.

Hier gibt es ein Beispiel wie ich mir das in etwa nachher vorstelle: https://fkainka.de/livedaten-vom-nanoes ... entevents/

Ich habe mich 2 Projekte angesehen:

https://www.gnu.org/software/libmicrohttpd/
https://github.com/cesanta/mongoose

Mit libmicrohttpd habe ich das Problem das ich nur den Server starten kann und finde keinen Punkt wo ich mein Code regelmäßig aufrufen kann.

Bei Mongoose gibt es timer.
Den Timer habe ich mit 1 initialisiert aber das ist so langsam das meine Funktion anschließend keine Daten mehr von der Seriellen Schnittstelle bekommt.

Hat hier jemand so etwas in der Richtung schon Programmiert und kann mir ein Tipp geben?
Vielleicht ist Mongoose ja auch nicht optimal für mein Projekt und ihr habt eine bessere Idee?

Wenn ihr ein anderes Projekt kennt wovon ich lernen kann dann auch gerne her damit.
Alle Beispiele die ich bisher gefunden habe sind für Adruino/ESP.
Komisch das es mit einem schnarch lahmen ESP einfach so funktioniert aber mit einem fetten PC nicht.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von Xin » Fr Sep 10, 2021 8:12 pm

Ich kann da nicht viel zu sagen, außer dass ich mir seinerzeit einen HTTP-Server selbst geschrieben habe.

Der ist etwas komplexer, weil er z.B. auch Cookies frisst, aber einfach nur über HTTP zu kommunizieren ist gar nicht so schwer unter Linux.
Man hat eine Eingabe-Pipe und eine Ausgabe, liest die Eingabe und printf()'t auf die Ausgabe.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von darkwin » Sa Sep 11, 2021 11:32 am

Das was ich nicht verstehe ist, das mein Programm wenn ich es starte 0% Prozessorzeit frist.
Es liegt also nicht am Prozessor. Irgendetwas bremst da.

Hast du ein einfaches Beispiel wie das geht?
Cookies etc. benötige ich nicht.
Es darf gern etwas ganz einfaches sein.
Selbst die Sicherheit kann vernachlässigt werden da das Projekt in einem geschlossenen Netz läuft.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von cloidnerux » Sa Sep 11, 2021 3:48 pm

Das ist an sich recht einfach, aber Client-Server Anwendungen muss man erstmal verstehen.

Ein HTTP Server ist eine Anwendung, die auf Anfrage einen Text, die Website, zurück gibt. Daher wartet der HTTP Server, dass irgendein Client ihn Anfragt. In der Anfrage stehen dann so sachen wie URL und GET/POST Anfragen. Um neue Daten anzuzeigen, muss der Client meist aktiv den Server nach neuen/zusätzlichen Inhalten fragen.

Daraus ergibt sich für dich ein Problem: Du kannst nicht deine Datenerfassung von der seriellen Schnittstelle im gleichen Thread wie deinen Server laufen lassen, da dein Server ja wartet. Deine Datenerfassung muss Asynchron laufen, die Daten zwischen Speichern und der Webserver greift dann darauf zu. Um die Website dann auch automatisch zu Updaten musst du dann mit Javascript noch ein Polling einbauen.

Wenn es dir egt nur um Datenerfassung geht kann ich dir Telegraf/InfluxDB/Grafana ans Herz legen. InfluxDB ist ein Datenbanksystem für Zeitserien, kann aber auch alles Mögliche speichern. Telegraf ist eine Möglichkeit InfluxDB zu füttern und kann aus diversen Datenquellen Informationen sammeln. Grafana ist ein Web-Basiertes Tool um die Daten anzuzeigen, wo du dir auch schöne Plots und Dashboards bauen kannst. Diese Kombi ist sehr mächtig, OSS, aber auch einfach zu installieren und nutzen.
Redundanz macht wiederholen unnötig.
quod erat expectandum

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von darkwin » Sa Sep 11, 2021 4:18 pm

Hallo, Danke aber das ist einfach viel zu Mächtig.
Ich habe eine Whirlpoolsteuerung an der eine Tastatur angeschlossen ist.
Die Kommunikation läuft per Serial über RS485.
Ich habe mich nun mit 2 Serial Adaptern dazwischen gesetzt und kann nun die Daten lesen und senden.
Das blöde ist das die Steuerung nicht nur ab und zu Daten sendet bzw. auf Daten von der Tastatur wartet sondern ohne Unterbrechung mit der Tastatur sprechen möchte.
Kommt es zu Verzögerungen geht die Steuerung auf Störung.

Wenn das ganze fertig ist würde ich gern das was auf dem Display steht auf einer Webseite anzeigen.
Die 5 Tasten die die Tastatur hat würde ich dann auch gern per Web auslösen.

Mich interessieren deshalb nur die aktuellen Daten.
Eine Datenbank dazwischen ist deshalb unbrauchbar.

Bei Mangoose gibt es ein Beispiel darauf könnte ich aufbauen aber das braucht obwohl ich den timer auf 1ms Sekunde stelle mehrere Sekunden bis der Timer wieder meine Funktion aufruft.

Mit libmicrohttpd würde es scheinbar gehen, aber ich bin gerade zu blöd und komme über das Hallo Welt Beispiel nicht hinaus.

Ich habe schon überlegt ob ich 2 Programme daraus mache.
Also das C Programm welches mit der Poolsteuerung spricht und dann die Webseite.
Dann müsste ich die Displaydaten in eine Textdatei schreiben und der kleine Webserver müsste diese dann davon einlesen.
Ebenso müsste dann jeder Tastendruck in eine Datei geschrieben werden und von dem Programm ausgelesen und verarbeitet werden.

Oder gibt es noch eine elegantere Möglichkeit als über eine Textdatei zu gehen?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von Xin » So Sep 12, 2021 5:06 pm

darkwin hat geschrieben:
Sa Sep 11, 2021 4:18 pm
Hallo, Danke aber das ist einfach viel zu Mächtig.
Ich habe eine Whirlpoolsteuerung an der eine Tastatur angeschlossen ist.
Schwierig... hier weiß ich nicht, was eine Pool-Steuerung überhaupt kann.
Und warum die HTTP können sollte.
darkwin hat geschrieben:
Sa Sep 11, 2021 4:18 pm
Die Kommunikation läuft per Serial über RS485.
Ich habe mich nun mit 2 Serial Adaptern dazwischen gesetzt und kann nun die Daten lesen und senden.
Das blöde ist das die Steuerung nicht nur ab und zu Daten sendet bzw. auf Daten von der Tastatur wartet sondern ohne Unterbrechung mit der Tastatur sprechen möchte.
Kommt es zu Verzögerungen geht die Steuerung auf Störung.

Wenn das ganze fertig ist würde ich gern das was auf dem Display steht auf einer Webseite anzeigen.
Die 5 Tasten die die Tastatur hat würde ich dann auch gern per Web auslösen.
Hier wäre erstmal interessant, was hier kommunizieren soll und wie.

Wer soll die Website liefern?
darkwin hat geschrieben:
Sa Sep 11, 2021 4:18 pm
Oder gibt es noch eine elegantere Möglichkeit als über eine Textdatei zu gehen?
Textdatei könnte doch ganz gut sein. Ist doch recht einfach...!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von darkwin » Mo Sep 13, 2021 7:33 am

Xin hat geschrieben:
So Sep 12, 2021 5:06 pm
darkwin hat geschrieben:
Sa Sep 11, 2021 4:18 pm
Hallo, Danke aber das ist einfach viel zu Mächtig.
Ich habe eine Whirlpoolsteuerung an der eine Tastatur angeschlossen ist.
Schwierig... hier weiß ich nicht, was eine Pool-Steuerung überhaupt kann.
Und warum die HTTP können sollte.
Die Poolsteuerung sorgt dafür das der Pool richt voreingestellte Temperatur hält und regelmäßig die Pumpen anschaltet damit das Wasser gefiltert wird.
Mit der Tastatur/Display können die Jetpumpen und das Licht gesteuert werden. Ebenso die Wasssertemperatur.
Über HTTP soll sich das ganze steuern lassen weil die Whirlpool 400 Km von meinem Wohnort entfernt ist.
Da der Pool inkl. Ferienhaus in Vermietung ist und die Gäste gern an der Steuerung herumfummeln um z.b. die Temperatur zu verstellen wäre es für mich von Vorteil das über das Netzwerk steuern zu können.
An der Tastatur gibt es eine SET Taste. Die ist das eigentliche Übel an der Sache.
Die Taste wird nur zum Programmieren der Steuerung benötigt. Der Hersteller hat aber keine Sperre vorgesehen.
Also kann da jeder drauf drücken und alles mögliche verstellen.
Mein Programm kann jetzt schon die Set Taste abfangen und dafür ein Default Wert senden.
Somit wäre die Set Taste still gelegt. Aber es gibt noch keine Möglichkeit das Set Taste wieder zu aktivieren weil ich das Programm noch nicht steuern kann.
Deshalb hatte ich hier auch schon gefragt ob es eine Möglichkeit gibt die Tastatur abzufragen ohne dass das Programm blockiert.
Xin hat geschrieben:
So Sep 12, 2021 5:06 pm
darkwin hat geschrieben:
Sa Sep 11, 2021 4:18 pm
Die Kommunikation läuft per Serial über RS485.
Ich habe mich nun mit 2 Serial Adaptern dazwischen gesetzt und kann nun die Daten lesen und senden.
Das blöde ist das die Steuerung nicht nur ab und zu Daten sendet bzw. auf Daten von der Tastatur wartet sondern ohne Unterbrechung mit der Tastatur sprechen möchte.
Kommt es zu Verzögerungen geht die Steuerung auf Störung.

Wenn das ganze fertig ist würde ich gern das was auf dem Display steht auf einer Webseite anzeigen.
Die 5 Tasten die die Tastatur hat würde ich dann auch gern per Web auslösen.
Hier wäre erstmal interessant, was hier kommunizieren soll und wie.

Wer soll die Website liefern?
Die Webseite sollte mein Programm selber liefern. Damit es nach Arduino portierbar ist und möglichst ohne weitere Software auskommt.
Deshalb probiere ist das ganze mit libmicrohttpd und mongoose.
Mongoose hat ein Beispiel dabei wie Live Daten an auf einer Webseite dargestellt werden.
Nur bekommt die Serial Funktion dann nicht mehr genug Zeit und die Steuerung geht auf Störung.
Es liegt aber nicht daran das der Prozessor das nicht schafft.
Entweder liegt es daran das ich die mongoose lib nicht verstehe was ich nicht ausschließen möchte oder die lib eine Bremse eingebaut hat und deshalb nicht das richtige für mich ist.
Mit Libmicrohttpd würde es scheinbar funktionieren, aber ich komme nicht über das Hallo Welt Beispiel hinaus.
Xin hat geschrieben:
So Sep 12, 2021 5:06 pm
darkwin hat geschrieben:
Sa Sep 11, 2021 4:18 pm
Oder gibt es noch eine elegantere Möglichkeit als über eine Textdatei zu gehen?
Textdatei könnte doch ganz gut sein. Ist doch recht einfach...!?
Grundsätzlich würde ich das Programm gern so schreiben das es mit wenig Codeänderungen auf ein Arduino übertragbar ist.
Ich empfinde es aber als exrem schrwierig ein solches Programm für Arduino zu entwickeln.
Jede Codeänderung muss erst auf den Chip übertragen werden um den Code auszuprobieren.
Deshalb entwickel ich das ganze auch erst auf meinem PC.
Das ganze möchte ich wenn es fertig ist erst einmal auf einem Rasberry laufen lassen.
Da komme ich remote jederzeit drauf und kann ggf. den Code neu kompilieren.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von Xin » Mo Sep 13, 2021 8:52 am

darkwin hat geschrieben:
Mo Sep 13, 2021 7:33 am
Arduino
Das ist das Schlüsselwort, was ich brauche. Der HTTP-Service soll also nicht auf der Pool-Steuerung laufen.
darkwin hat geschrieben:
Mo Sep 13, 2021 7:33 am
Es liegt aber nicht daran das der Prozessor das nicht schafft.
Ciao Arduino, Hallo Raspberry.

Da kannst Du auch 'nen Apache drauf laufen lassen.
darkwin hat geschrieben:
Mo Sep 13, 2021 7:33 am
Xin hat geschrieben:
So Sep 12, 2021 5:06 pm
darkwin hat geschrieben:
Sa Sep 11, 2021 4:18 pm
Oder gibt es noch eine elegantere Möglichkeit als über eine Textdatei zu gehen?
Textdatei könnte doch ganz gut sein. Ist doch recht einfach...!?
Grundsätzlich würde ich das Programm gern so schreiben das es mit wenig Codeänderungen auf ein Arduino übertragbar ist.
Ich empfinde es aber als exrem schrwierig ein solches Programm für Arduino zu entwickeln.
Das würde ich auch so sehen.
darkwin hat geschrieben:
Mo Sep 13, 2021 7:33 am
Jede Codeänderung muss erst auf den Chip übertragen werden um den Code auszuprobieren.
Wobei ich mir denke, dass ein Arduino auch mit einem Webserver vielleicht schon gut belastet ist.
darkwin hat geschrieben:
Mo Sep 13, 2021 7:33 am
Das ganze möchte ich wenn es fertig ist erst einmal auf einem Rasberry laufen lassen.
Da komme ich remote jederzeit drauf und kann ggf. den Code neu kompilieren.
Dann lass es auch auf dem Raspberry. ^^
Ich bin sicher, die Raspberry 1 oder 2 gibt's für 5 Euro bei Ebay.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von darkwin » Di Sep 14, 2021 12:49 pm

Hallo, ne ne so schnell wird nicht aufgegeben :).
Ich würde das schon gern embedded machen.
Wenn ich das mit dem Apache mache liegen die Seiten ausßerhalb des Programms und dann kann ich die Code Teile nicht so einfach nach Arduino portieren.

Neuer Plan. Erst einmal mit ncurses das Programm steuerbar machen und ein besseren Output hinbekommen.
Anschließend dann den Webservice.
Wenn ich das tutorial richtig verstehe ist ncurses relativ einfach umzusetzen.
In 2 Wochen möchte ich mein Bauwerk gern einmal für ein paar Tage am Pool testen.

Was dein Bedenken zum Webserice und Arduino angeht kann ich so nicht bestätigen.
Ich habe an der Haustür ein ESP Chip. Die Daten kann ich per Web abfragen und die Zustände steuern.
Die Webseite hat auch ein Log. Noch kein Live log. Dafür muss ich die F5 Taste bemühen.
Der ESP macht das aber ohne Probleme ohne zu husten.

Weiter oben hatte ich ja schon einen Link wo das mit einem esp vorgestellt wurde.

Diese kleinen Chips sind leistungsfähiger als man denkt.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Suche kleinen embedded http Server für mein c projekt

Beitrag von Xin » Mi Sep 15, 2021 2:22 pm

Ich mache nix mit Arduinos, da kannst Du schon recht haben.
Ich glaube auch, dass das alles machbar wäre. Ich dachte aber auch, dass das Ziel wäre, den Pool zu steuern und nicht den Arduino zu nutzen. :-D

Grundsätzlich ist das ein schönes Projekt, da könnte ich mich auch drin vertiefen, aber dafür fehlt mir leider absolut die Zeit. :-(
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten