Forum: PC-Programmierung Hilfe für Webserver / Applikationsverbindung


von G. B. (garyb)


Lesenswert?

Hallo,

ich bin in Sachen Webserver-Programmierung noch nicht einmal in den 
Kinderschuhen und ich brauche Hilfe um in die richtige Richtung los zu 
laufen.
Also eine bestehende Hausautomatisierung S7-1200 soll mit einem 
Webserver auf einem kleinen embedded PC verbunden werden.. Use-Cases der 
Webseiten:
> Schaltaktionen für Rolladen und Licht auslösen
> Informationen aus einer Datenbank anzeigen (Verbrauchs-, Wetterdaten etc)
> Statusinformationen auslesen (Licht an/aus ...)

Ziel soll es sein die Endpunkte - Webserver und S7 - frei von jeder 
verknüpfenden Logik bzw. Wissen um Datenbank-Strukturen zu halten.
Dazu habe ich mir folgende Architektur zusammen gereimt.
C++ Applikation (AutomationServer) auf dem PC ist die Gegenstelle der S7
und des Webservers/Scripts(was auch immer)und setzt je nach Job 
Daten/Abläufe in Richtung einer MYSQL-DB, S7 oder eben 
derWebserver/WebApp weiter.

Hoffentlich kann man diese kurze Fassung nachvollziehen.. aber da ich 
mir nicht sicher bin ob dies die richtige Lösung ist... wollte ich hier 
Alternativen erfragen.

Desweiteren habe ich derzeit keinen Schimmer ob und wie ich eine 
Verbindung zwischen einer Webseite/Script... zu einer C++-Applikation 
hinbekomme... gibt es die Möglichkeit auch hier eine Socketverbindung 
aufzubauen? Muss das Java sein... oder gibt es was "Einfaches"?
Sorry für die naive Frage, aber alles läuft soweit nur der Punkt ist für 
mich absolutes Neuland.

Danke für eure Vorschläge, Kommentare und Anregungen!

: Verschoben durch User
von Noch einer (Gast)


Lesenswert?

Solltest dir nicht zu viele Gedanken um die Architektur machen. Nachdem 
du einen Prototyp am laufen hast, verzehnfachen sich die Anforderungen 
und du musst sowieso eine neue Architektur entwerfen.

Üblicher Aufbau:

Der Webserver hat eine CGI Schnittstelle.

Für jede Seite startet der Webserver ein eigenes Programm (erzeugt 
weniger Overhead als man denkt). Normalerweise nimmt man für dieses 
Programm eine Scriptsprache wie PHP. Du kannst aber auch C++ nehmen. 
Dein Programm gibt dann einen Text aus, wie du ihn im Browser mit 
"Seitenquelltext anzeigen" siehst.

Für den ersten Versuch solltest du einfach Textausgabe, 
Datenbankabfragen und S7 Kommandos in C++ Programme packen. Wird 
natürlich bald chaotisch, aber mit den Erfahrungen kannst du dann unter 
den 100000 modularen Systemen ein passendes aussuchen.

von mnbnasd (Gast)


Lesenswert?

Kannst du nicht über dein webinterface bashscripts auf dem server, auf 
dem die cpp applikation läuft, ausführen? In php gibt es zum Beispiel 
shell_exec('.....') mit dem du shell commands ausführen kannst. Dein cpp 
Programm müsste dann nur Parameter entgegennehmen und auswerten. Ob das 
die beste Lösung ist weiß ich nicht aber aufjedenfall ist es sehr 
einfach.

von G. B. (garyb)


Lesenswert?

Okay - damit hab ich erst einmal ne Richtung - das mit den Skripten 
klingt gut - melde mich wenn ich ein Ergebnis habe

von xyz (Gast)


Lesenswert?

Ohne die Hardware zu kennen wird's schwierig.
Apache z.B. kann CGI und PHP.
Wenn's die gleiche Hardware für HTTP und CPP ist käme noch JAVA mit JNI 
in Frage.
Geht's um die Datenbank ist es gleich, da Du von Deinem CPP auf die 
Daten ja regelmäßig zugreifen kannst.
Könntest z.B. ein "Nuistwasneu" Flag in der DB setzen das dann für die 
Ausführung sorgt und umgekehrt ...

von G. B. (garyb)


Lesenswert?

@xyz:
Das Ganze soll auf einem Odroid U3 laufen - Das Teil hat echt "Bums" ... 
:)
@all:
Was ich nun noch gesehen habe sind Websockets - die scheinen auf dem 
ersten Blick das Ideal.. denn hier kann ich aus dem Webclient heraus 
Socket-Verbindungen aufbauen.. und somit an mein CPP koppeln...
viel zu Lernen erst einmal ;) Danke

von Noch einer (Gast)


Lesenswert?

> die scheinen auf dem ersten Blick das Ideal..

Ja! interessantes Konzept.

Du schreibst eine statische Seite mit HTML, CSS und deinem 
Anwendungsprogramm in Javascript. Debugger und Javascript-Interpreter 
innerhalb der Browser sind ausgereift. Man kann ohne weiteres komplexe 
Javascript Programme schreiben.

Dein Javascript-Anwendungsprogramm sendet dann nur Kommandos über 
Websockets. Am einfachsten in JSON Kodierung.

Serverseite hatte ich bisher nur in Java gemacht. Library für Websockets 
ist erstaunlich umfangreich. Aber auch für C++ sollten sich 
Library/Rahmenprogramm finden lassen.

Das einzige Problem - Dieses Konzept kennt noch kaum jemand. Auf Fragen 
bekommst du unzählige Antworten, die nicht zu diesem Ansatz passen.

von G. B. (garyb)


Lesenswert?

@Noch Einer : hättest du da ein lauffähiges Beispiel

von Noch einer (Gast)


Lesenswert?

Oh - ist für die Firma in der ich arbeite.

Hatte mit einer Chat Demo angefangen. War unvollständig. Trotzdem ist 
der Code aus der Demo immer noch im Programm. Im Netz behaupten Leute, 
mit einem node.js Server würde man deren Demo in 5 Minuten zum laufen 
bringen.

Größerer Teil der Arbeit war dann mit der jquery Library die 
Seiteninhalte ändern. Am besten Tutorial für jquery und eventuell auch 
jquery-ui durcharbeiten. Diese Konzepte sind für einen C-Programmierer 
doch ziemlich überraschend.

von Daniel A. (daniel-a)


Lesenswert?

Noch einer schrieb:
> Am besten Tutorial für jquery und eventuell auch
> jquery-ui durcharbeiten.
Ich rate von jquery ab. Alles was mit jquery geht, geht auch mit 
normalem javascript, dort sogar mit schön ausfürlichen funktionsnamen. 
Zudem ist es allgemein eine schlechte idee die Seiteninhalte manuell zu 
updaten. Das führt nur zu unübersichtlichem und undurchsichtigem code. 
Ich empfehle eine Templateing library zu nehmen, die dir die seite aus 
den daten automatich zusammensetzt. Momentan ist z.b. angularjs sehr 
beliebt. Ich habe eine eigene templateing library http://mvsync.ch 
https://github.com/Daniel-Abrecht/MVSync

von G. B. (garyb)


Lesenswert?

Danke Daniel, ich schau es mir an... da das alles für mich noch sehr neu 
ist bin ich erst einmal am lesen und probieren ;O) aber ich melde mich 
wenn ich was am laufen habe ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.