Antworten auf deine Fragen:
Neues Thema erstellen

[Webserver] Zentrales Interface für mehrere Webserver

JPS

Nicht mehr ganz neu hier

Hier geht es wieder mal um kranke Ideen für kranke Mitmenschen.

Vorab es handelt sich ersteinmal um eine Test-Umgebung, die erweitert werden soll.
Ich habe mir diesen Mikrocontroller-Bus mit Webserver gekauft.
(Link des Controllers) An eben dieser CPU ist über den BUS ein Temperatur-Modul angeschlossen.

Über den auf der SD Karte vorhandenen Webserver (über IP-Adresse), lässt sich eine Webseite aufrufen, die den Zustand des BUSes anzeigt und z.b. IST- und Soll-Temperatur anzeigt usw.


Soweit so gut.


Leider soll es nicht bei einem dieser Teile bleiben, d.h. wie bekomme ich die Kommunikation mit meinem Zentralen Webserver, der auf meinem Desktop ist, hin?

Möglichkeit 1: Alles über den Bus zu verbinden und nur von einem Zentralen-Mikrocontroller Webserver es abzurufen.

Das scheitert aber, durch die begrenzte maximale BUS Länge und die begrenzte Anzahl an Ein- und Äusgängen.

Möglichkeit 2: Ich bekomme es irgendwie hin, Zustandswerte zwischen den Webservern hin und her schicken.

Vielleicht weiss ja noch jemand was schlaues oder hat ne Lösungsansatz für Möglichkeit 2.

Wie immer danke im voraus.
 

B

Black6Death12

Guest

AW: [Webserver] Zentrales Interface für mehrere Webserver

Hallo JPS,

Du könntest auf deinem zentralen webserver ein Bash/Batch script schreiben was alle x min jeden temperaturwert von den einzelnen Mikrocontrollern abruft und in eine datenbank schreibt...

Die ausgabe läuft dann müber eine webseite auf diesem zentralen webserver(Daten werden aus der db gelesen)

Genauer kann ich dir jetzt nicht erklären weil man dazu das system besser kennen müsste....

Gruß
 

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

Ja das ist die grobe Theorie, die mir ja auch klar ist. Hier wird nur die Umsetzung zu ner schwangeren Sache.

Hier ein paar neue Infos (mir auch gerade neu :D):
Der embeded Webserver dieses Controllers funktioniert wie ein Parser, d.h. Er kann html und Java Script und parsed Steuerungsbefehle

Syntax: °<Typ><Pin-Nr>~<Anzahl>~<Trennzeichen>~<Format>°

° ⇒ Begrenzungszeichen (Grad)
<Typ> ⇒ Wert bzw. Konfiguration abfragen
c ... aktuelle Konfiguration C ... mögliche Konfiguration v ... aktueller Wert V ... aktueller Wert mehrerer fortlaufender Pins <Pin-Nr> ⇒ *, 0...23, virtuell: 200-207, 210, 211, 1000...3999, 5000...7999
<Anzahl> ⇒ Anzahl fortlaufender Pins (physisch oder virtuell) - nur mit dem Typ "V"
<Trennzeichen> ⇒ Trennzeichen bei Abfrage vieler Pins - nur mit dem Typ "V"
<Format> ⇒ Formatierung der Ausgabe zB: "%d" "lm75"

Beispiel:
PHP:
var ledGruen="°c20°";
Gibt die aktuelle Konfiguration am Pin 20 aus und weist diese der Variable "ledGruen" im JavaScript einer HTML-Seite zu

oder

PHP:
<body>°V200~2~&deg;C ~lm75°</body>
Gibt die Temperaturen der TWI-Sensoren an 200 und 201 mit Trennzeichen °C sowie Formatierung für LM75 beim Aufruf einer HTML-Seite aus.

Jetzt stellt sich nur die Frage, wie übergebe ich bzw frage ich diese Daten an meinem echten Apache Server z.b. mit PHP ab.
Der Mikrocontroller Webserver kann natürlich kein PHP und hat natürlich keine mySQL DB oder ähnliches.



 
B

Black6Death12

Guest

AW: [Webserver] Zentrales Interface für mehrere Webserver

Zunächst würde ich die website auf dem mykrocontroller so machen das pures xml ausgegeben wird zum beispiel sowas(lässt sich leichter mit php interpretieren):
HTML:
<?xml version="1.0" encoding="utf-8"?>
<temperaturinfo>
  <temperatur>
    <pin>200</pin>
    <wert>°V200~1~&deg;C ~lm75°</wert>
  </temperatur>
  <temperatur>
    <pin>201</pin>
    <wert>°V201~1~&deg;C ~lm75°</wert>
  </temperatur>
</temperaturinfo>
anschließend schreibst dir ein php script was per fopen() die datei runterläd und in eine datenbank schreibt.(auf dem zentralen webserver):

PHP:
$file = fopen('http://ipaddressedesmikrocontrollers/namederhtmldatei.html', 'r');
$content = '';
while(!feof($file))
{
  $content .= fread($file, 20);
}
fclose($file);
//der gesammte inhalt der datei ist nun in $content

//benötigt SimpleXML erweiterung:
$xml = new SimpleXMLElement($content);
//temperaturen in ein array nach pin sortiert
$temperaturen = array();
for($i = 0; $i < count($xml->temperatur); $i++)
{
  $temperaturen[$xml->temperatur[$i]->pin] = $xml->temperatur[$i]->wert;
}
/*
//der variableninhalt sieht jetzt so in der Art aus:
$temperatur = Array (
[200] => "10&deg;C",
[201] => "13&deg;C",
)
*/
Dieses script muss man halt noch ausbauen damit die daten in eine datenbank geschrieben werden. danach kann man es per bash/batch script regelmaäßig auführen.
Ich hoff das hilft weiter...
 
Zuletzt bearbeitet von einem Moderator:

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

Ist da nicht der Haken, dass der Parser erst arbeitet, wenn man die htm bzw. html datei aufruft????
 

saila

Moderatorle

AW: [Webserver] Zentrales Interface für mehrere Webserver

Hi,

ich klinke mich mal mit ein was die Datenlieferung betrifft über den aktuellen Temp-Zustand. Das ist mit PHP so nicht realisierbar und schon gar nicht mit einer Datenbank (welche nur Sinn ergeben würde um eine Historie darzustellen).

Letztlich geht es wenn ich es richtig verstande habe um den aktuellen laufenden Zustand. Sprich - sofort die Temp sehen können. Das wiederum wäre zwar mit einem ständigen reload einer Page (Ausgabevormat xml oder xhtml, html) auch möglich, belastet letztlich aber auch immer den Server.

Ergo würde ich da ein Javaapp empfehlen. Das wird bei Start des Server direkt mitgestartet und liefert bei Aufruf der entsprechenden Ausgabe immer den aktuellen Stand.

So meine Vorstellung von einer aktuellen Wiedergabe der Temp, wobei das App auch um einiges erweitert werden kann ;)

Infos vorbehaltlich - sofern überhaupt die Thematik von mir verstanden wurde :)
 
B

Black6Death12

Guest

AW: [Webserver] Zentrales Interface für mehrere Webserver

Ist da nicht der Haken, dass der Parser erst arbeitet, wenn man die htm bzw. html datei aufruft????

php macht ja einen http request an den mikrocontroller also nichts anderes als ein webbrowser machen würde...
 

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

Ja richtig.
Da es sich in allerletzter Konsequenz sich um eine Terrariensteuerung handeln soll, ist das dauernde Reload nicht wirklich wichtig, wäre aber schön und ist ja für Warnungen unerlässlich. (Es schwankt ja über den Tag ja eher wenig, aber bei Heizungsausfall, usw schon gut).

Nur wie sieht die Kommunikation dieser Java App mit dem Zentralwebserver aus?

Das was ich ja eigentlich brauche ist ja eine Art:
Hallo Server Nr.2, wie sieht es aus
Hallo Zentrale, hier ist das VAR Array mit den IST-Werten.

und später:
Hallo Server 2: Hier sind die neuen Soll-Werte
Was mit z.b. so einer Zeile ginge:
Das liesse sich ja vielleicht per Formular POST regeln.
 

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

@ Black6Death12

Habe es soweit mal getestet, das Array scheint leer zu sein???
 
B

Black6Death12

Guest

AW: [Webserver] Zentrales Interface für mehrere Webserver

kannst du plz mal die ausgabe von dem mikrocontroller mal posten(den quelltext)?
und hast du SimpleXML in deiner PHP installation drin?
 

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

SimpleXML anscheinend, weil es kommen jetzt Fehler:

Code:
[B]Warning[/B]: SimpleXMLElement::__construct() [[URL="http://trimeresurus/steuerung/function.SimpleXMLElement---construct"][COLOR=#0000ff]function.SimpleXMLElement---construct[/COLOR][/URL]]: Entity: line 1: parser error : Start tag expected, '<' not found in [B]G:\Webserver\htdocs\steuerung\index.php[/B] on line [B]12[/B]
 
[B]Warning[/B]: SimpleXMLElement::__construct() [[URL="http://trimeresurus/steuerung/function.SimpleXMLElement---construct"][COLOR=#0000ff]function.SimpleXMLElement---construct[/COLOR][/URL]]: �������������������������������������������������������������������������������� in [B]G:\Webserver\htdocs\steuerung\index.php[/B] on line [B]12[/B]

Aber im Quelltext der html (bzw xml) steht nur Schrott nur yyyyyy usw.


So jetzt habe ich die htm auf dem Server repariert.
Quelltext
Code:
<?xml version="1.0" encoding="utf-8"?>
<temperaturinfo>
  <temperatur>
    <pin>200</pin>
    <wert>lm</wert>
  </temperatur>
  <temperatur>
    <pin>201</pin>
    <wert>lm</wert>
  </temperatur>
</temperaturinfo>
Jetzt kommt auf der Ausleseseite die Meldung: Warning: Illegal offset type in G:\Webserver\htdocs\steuerung\index.php on line 17

Das wäre die Zeil in der for-Schleife
 
Zuletzt bearbeitet:
B

Black6Death12

Guest

AW: [Webserver] Zentrales Interface für mehrere Webserver

Versuchs mal hiermit:

PHP:
<pre>
<?php
$filename = 'http://ipaddressedesmikrocontrollers/namederhtmldatei.html';
$content = file_get_contents($filename);
//der gesammte inhalt der datei ist nun in $content
//debugausgabe:
echo 'Inhalt der XML datei:'.PHP_EOL.$content.PHP_EOL.PHP_EOL;

//benötigt SimpleXML erweiterung:
$xml = new SimpleXMLElement($content);
//temperaturen in ein array nach pin sortiert
$temperaturen = array();
if (is_array($xml->temperatur))
{
    foreach ($xml->temperatur as $data)
    {
        $temperaturen[intval($data->pin)] = $data->wert;
    }
}
else
{
    $temperaturen[intval($xml->temperatur->pin)] = $xml->temperatur->wert;
}

//debugausgabe:
echo '$temperaturen = ';
print_r($temperaturen);
?>
</pre>
und bei fehlern bitte die ausgabe posten...danke

Gruß
 

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

Naja die Ausgabe auf der Seite inkl. Fehlermeldungen sieht jetzt so aus:

Code:
Inhalt der XML datei: 200 '1~°C ~lm75' 
[B]Warning[/B]: SimpleXMLElement::__construct() [[URL="http://trimeresurus/steuerung/function.SimpleXMLElement---construct"][COLOR=#0000ff]function.SimpleXMLElement---construct[/COLOR][/URL]]: Entity: line 5: parser error : Entity 'deg' not defined in [B]G:\Webserver\htdocs\steuerung\index.php[/B] on line [B]9[/B]
 
[B]Warning[/B]: SimpleXMLElement::__construct() [[URL="http://trimeresurus/steuerung/function.SimpleXMLElement---construct"][COLOR=#0000ff]function.SimpleXMLElement---construct[/COLOR][/URL]]: <wert>'1~&deg;C ~lm75'</wert> in [B]G:\Webserver\htdocs\steuerung\index.php[/B] on line [B]9[/B]
 
[B]Warning[/B]: SimpleXMLElement::__construct() [[URL="http://trimeresurus/steuerung/function.SimpleXMLElement---construct"][COLOR=#0000ff]function.SimpleXMLElement---construct[/COLOR][/URL]]: ^ in [B]G:\Webserver\htdocs\steuerung\index.php[/B] on line [B]9[/B]
 
[B]Fatal error[/B]: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in G:\Webserver\htdocs\steuerung\index.php:9 Stack trace: #0 G:\Webserver\htdocs\steuerung\index.php(9): SimpleXMLElement->__construct('<?xml version="...') #1 {main} thrown in [B]G:\Webserver\htdocs\steuerung\index.php[/B] on line [B]9[/B]

Ein Problem ist halt, dass der Temperaturwert nicht geparsed wird und die XML Datei durch den Kram zwischen den °-Zeichen durcheinander kommt.

Außerdem kann es sein, dass die benutzten Pins erst initialisert werden müssten. Was die bei einem mitgelieferten Beispiel per Javascript gemacht haben und das würde die XML-Sache extrem erschweren, oder?

Ich schreibe jetzt mal in XML Datei statische Werte und werde mal sehen, was dann dabei herauskommt.
 

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

So nachdem ich die XML deklaration aus der ersten Zeile und das &deg; Zeichen und Formatierung weggelassen habe, sieht die Ausgabe so aus:


Inhalt der XML datei: 200 1 $temperaturen = Array ( [200] => SimpleXMLElement Object ( [0] => 1 ) ) ?>
 
B

Black6Death12

Guest

AW: [Webserver] Zentrales Interface für mehrere Webserver

Kommt den wenn du die XML-Datei im webbrowser aufrufst ein sinnvoller Wert raus?
Wenn nicht, wäre es gut mal dieses Beispiel zu haben!

Wenn die ausgabewert sinn ergeben liegt das problem am php andernfalls am webserver auf dem mikrocontroller...
 

ferni

Noch nicht viel geschrieben

AW: [Webserver] Zentrales Interface für mehrere Webserver

Ihr macht euch das meiner Meinung nach viel zu schwierig. (oder ich habe die Aufgabenstellung nicht richtig verstanden)

Es gibt:
Server1 - welcher die Temperaturwerte "wissen" will.
Server2 - welcher die Temperaturwerte ausliest und als .html ausgibt.

wieso also nicht auf Server1 einen Cronjob einrichten (falls es automatisiert laufen soll) und die Temperaturwerte mit einem PHP-Script, anhand Regexp auslesen. (davor mit file_get_contents)

lg. jo
 

JPS

Nicht mehr ganz neu hier

AW: [Webserver] Zentrales Interface für mehrere Webserver

@ ferni - Das siehst Du ersteinmal richtig, abgesehen, dass es Später Server 3-x geben soll.

Ich glaube einfach, dass dieser Webserver auf dem Mikrocontroller das Problem darstellt, da die Eingriffsmöglichkeiten sehr beschränkt sind.
Das Teil hat nur einen config datei auf der SD Karte (Der Rest ist im Mikrocontroller-Chip), die aber nur die Netzwerkadresse und die MAC Adresse festlegt. Ansonsten kann das Teil html und Javascript interpretieren bzw verarbeiten.

Bei dem mitgelieferten Beispiel ist es so, dass das Temperaturmodul am BUS angesteckt wird. Dann gibt es eine HTML Datei bei der über JS der PIN initialisert wird und anschliessend eine Abfrage gemacht wird, die dann angezeigt wird.

Die Frage ist also simple formuliert, wie kommt Server 1 an die Daten.
Kann ich z.b. Server 1 dazu bringen auf Server 2 ein JS auszulösen, welches ans Server1 VARs zurückliefert?
 

ferni

Noch nicht viel geschrieben

AW: [Webserver] Zentrales Interface für mehrere Webserver

@ ferni - Das siehst Du ersteinmal richtig, abgesehen, dass es Später Server 3-x geben soll.
Die einzelnen Server in einem Loop abzuarbeiten dürftekein Problem sein.
Ansonsten kann das Teil html und Javascript interpretieren bzw verarbeiten.
Javascript wird im Browser ausgeführt nicht am Server

Dann gibt es eine HTML Datei bei der über JS der PIN initialisert wird und anschliessend eine Abfrage gemacht wird, die dann angezeigt wird.
kannst du das JS mal posten?
Kann ich z.b. Server 1 dazu bringen auf Server 2 ein JS auszulösen, welches ans Server1 VARs zurückliefert?
wie gesagt JS läuft nur im Browser, nicht serverseitig

lg. jo
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
118.564
Beiträge
1.538.064
Mitglieder
67.487
Neuestes Mitglied
MichaelSEivy
Oben