Messknecht: Mess- und Kontrollwerte aktuell darstellen - ohne Webserver

Problemschilderung:

Ich betreue eine Anlage mit einigen für die Anlage lebenswichtigen Betriebsparametern, wie Kühlwassertemperatur, Vakuum, Stromaufnahme ...
Da der Mensch nun mal faul ist und diese Anlage recht weit entfernt steht, will ich die Werte aus der Ferne kontrollieren.
Die Wandlung der Signale für den Rechner ist für mich kein Problem, bin ja ein Messknecht. Anschließend erzeuge ich eine Datei mit den Daten drin. Das Format könnte CSV, TXT ... sein. Da bin ich sehr flexibel.

Leider stellt sich unser Admin quer, was den Zugriff auf den Server betrifft. Das einzige was er mir erlaubt, mit meinem Messrechner auf das Netzlaufwerk zu schreiben. Also dachte ich mir, erstelle ich eine Webseite die auf unserem Netzlaufwerk liegt. Mein Messrechner aktualisiert im Minutentakt die Messdaten. Die Webseite soll sich natürlich mit den aktuellen Informationen versorgen (neu laden?).

Meine Frage:
Welche der vielen Methoden führt zum Ziel?
Wie komme ich am einfachsten zum Ziel? Denn ich will nicht zm Webprofi werden!
Wie kann ich die Systemauslastung beim Clientrechner gering halten? Denn ich hab da was probiert mit JavaScrip und location.reload, das sorgte für heftige Systembelastung.

Also viele Fragen von Jemanden der gar nicht weiß wo es lang gehen soll.

Viele Grüße

Joachim

  1. hi,

    Leider stellt sich unser Admin quer, was den Zugriff auf den Server betrifft.

    Blöder Hund.

    Das einzige was er mir erlaubt, mit meinem Messrechner auf das Netzlaufwerk zu schreiben. Also dachte ich mir, erstelle ich eine Webseite die auf unserem Netzlaufwerk liegt. Mein Messrechner aktualisiert im Minutentakt die Messdaten. Die Webseite soll sich natürlich mit den aktuellen Informationen versorgen (neu laden?).

    Neu schreiben machst Du, neu laden muss der Betrachter.

    Hotte

    --
    Dino, beiß den Admin mal ins Bein!
    1. Moin Moin!

      »» Leider stellt sich unser Admin quer, was den Zugriff auf den Server betrifft.

      Blöder Hund.

      Das kann ich nicht unkommentiert stehen lassen. Es gibt gute Gründe, nicht jedem Vollzugriff auf den Webserver zu geben, insbesondere im Internet, aber auch im Intranet. Zum Beispiel Stabilität und Sicherheit. Nachgeordnet: Wartbarkeit, Dokumentation, Policies.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  2. Moin Moin!

    Installiere einen Webserver auf dem Meßrechner. Webserver gibt es auch für exotische Plattformen mit geringer Leistung. Wenn Du wirklich nur eine automatisch generierte Datei mit allen Meßwerten ausliefern willst, kommst Du fast ohne Features aus, so einen minimalen Webserver kann man notfalls mit ein paar Zeilen Shell-Script zusammenbauen.

    Für Live-Updates gibt es außer reload noch das Meta-Tag refresh, das ohne JS auskommt. Du weißt, dass die Meßdaten eine Minute "frisch" sind, also stellst Du den Refresh-Wert nicht kleiner als 60 Sekunden ein.

    Wenn wir über eine kontrollierte Umgebung reden (Intranet, zentrale SW-Verteilung, zentrale Config-Verteilung, zentrale Policy-Verteilung), könntest Du auch über Javascript nachdenken. Auf dem "großen" Webserver liegt eine statische Webseite mit etwas Javascript, die sich per XMLHTTPRequest onload und danach alle 60 Sekunden die Meßwerte als JSON vom Meßrechner abholt.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  3. Hallo,

    Ich betreue eine Anlage mit einigen für die Anlage lebenswichtigen Betriebsparametern, wie Kühlwassertemperatur, Vakuum, Stromaufnahme ...
    Da der Mensch nun mal faul ist und diese Anlage recht weit entfernt steht, will ich die Werte aus der Ferne kontrollieren.

    ja, das ist nachvollziehbar.  :-)

    Leider stellt sich unser Admin quer, was den Zugriff auf den Server betrifft.

    Bist du der Einzige, der diese Messwerte regelmäßig kontrollieren muss oder will? Oder sollen diese Daten einem gewissen Personenkreis jederzeit zugänglich sein?
    Was ist dein Messrechner für einer? Etwas PC-artiges mit einem gängigen OS? Wenn ja, wäre vielleicht eine elegante Alternative, direkt auf dieser Maschine einen kleinen Webserver zu installieren.

    Das einzige was er mir erlaubt, mit meinem Messrechner auf das Netzlaufwerk zu schreiben. Also dachte ich mir, erstelle ich eine Webseite die auf unserem Netzlaufwerk liegt. Mein Messrechner aktualisiert im Minutentakt die Messdaten. Die Webseite soll sich natürlich mit den aktuellen Informationen versorgen (neu laden?).

    Dann wäre es *noch* einfacher, wenn dein Messrechner seine Daten gleich als HTML-Datei aufbereitet und so speichert. Ein festes Template, in das immer die aktuellen Messdaten eingesetzt werden (und vielleicht die der letzten n Messzyklen, prima als Tabelle). Mit einer refresh-Anweisung im meta-Element, die alle 60s das Neu-Laden der Seite veranlasst, wäre doch die Aufgabe auch gut gelöst.

    Welche der vielen Methoden führt zum Ziel?

    Viele Wege führen nach ROM ...
    Solange wir deine Voraussetzungen nur ungefähr kennen, ist es schwer, einen guten (zielgerichteten) Vorschlag zu machen.

    Wie komme ich am einfachsten zum Ziel? Denn ich will nicht zm Webprofi werden!

    Musst du ja auch nicht. Andererseits ... warum nicht? Ist 'ne interessante Geschichte!

    Wie kann ich die Systemauslastung beim Clientrechner gering halten?

    Nun, ich gehe davon aus, dass die Clients herkömmliche PCs mit zeitgemäßer Ausstattung sind - denen dürfte das regelmäßige Neu-Laden einer einfachen HTML-Seite ziemlich am A.... vorbeigehen.

    Denn ich hab da was probiert mit JavaScrip und location.reload, das sorgte für heftige Systembelastung.

    Dann hast du wohl irgendwas falsch gemacht - vielleicht ein Reload in sehr, sehr kurzen Abständen, oder den Client mit Warteschleifen in Javascript so beschäftigt, dass er für nichts anderes mehr Zeit hat. Grundsätzlich ist die Belastung auch bei der Verwendung von Javascript vernachlässigbar.

    Also viele Fragen von Jemanden der gar nicht weiß wo es lang gehen soll.

    Ich ahne es schon. Der Chef hat gefragt: "Macht's jemand freiwillig?", und du konntest nicht schnell genug flüchten. Kenn' ich. ;-)

    So long,
     Martin

    --
    Zwei Mäuse treiben's miteinander. Sagt der Mäuserich: "Hoffentlich ist nicht wieder alles für die Katz."
    1. Bist du der Einzige, der diese Messwerte regelmäßig kontrollieren muss oder will? Oder sollen diese Daten einem gewissen Personenkreis jederzeit zugänglich sein?

      Nein, es sollen auch andere darauf zugreifen können.

      Was ist dein Messrechner für einer? Etwas PC-artiges mit einem gängigen OS? Wenn ja, wäre vielleicht eine elegante Alternative, direkt auf dieser Maschine einen kleinen Webserver zu installieren.

      Man stellt mir einen ausgedienten Bürorechner mit Win-XP und ca. 1,8 GHz zur Verfügung.

      »» Denn ich hab da was probiert mit JavaScrip und location.reload, das sorgte für heftige Systembelastung.

      Dann hast du wohl irgendwas falsch gemacht - vielleicht ein Reload in sehr, sehr kurzen Abständen, oder den Client mit Warteschleifen in Javascript so beschäftigt, dass er für nichts anderes mehr Zeit hat. Grundsätzlich ist die Belastung auch bei der Verwendung von Javascript vernachlässigbar.

      Firefox produziert mir mit dem folgenden File eine Systemauslastung von 50%:

      <html><head><title>Test</title>

      Teststring 1

      <script type="text/javascript">

      window.setTimeout (location.reload(true), 10000)

      </script>

      </head><body>

      </body></html>

      Das sollte alle 10s die Seite neu laden.
      Sorry sehr quick and dirty. Aber wenn ich mal die Richtung weiß, dann krieg ich die Feinarbeit auch noch hin.

      Ich ahne es schon. Der Chef hat gefragt: "Macht's jemand freiwillig?", und du konntest nicht schnell genug flüchten. Kenn' ich. ;-)

      Ich bins selbst schuld. Bei anderen Projekten, wo mehr Geld da war, hab ich richtige Schreiber im Einsatz die als Webserver arbeiten. Verwöhnt wie ich nun mal bin, will ich meine Zeit nicht mit Aufpassen vergeuden. Doch so ein Webserver-Schreiber kostet um die 4000 Euronen ... also ist mal wieder Basteln angesagt. Doch wenn ich das einmal hinkriege und vor allem kapiere, dann hätte ich der Anwendungen viele.

      Mein Eindruck ist, dass ich es schaffen könnte die HTML-Dateien entsprechend auf dem Netzlaufwerk abzulegen. Entweder ändere ich die komplette Seite jedes mal, oder ich referenziere auf die aktuellen Daten, die alle 60s refresht werden.

      Viele Grüße

      Joachim

      1. Hi,

        »» Bist du der Einzige, der diese Messwerte regelmäßig kontrollieren muss oder will? Oder sollen diese Daten einem gewissen Personenkreis jederzeit zugänglich sein?
        Nein, es sollen auch andere darauf zugreifen können.

        aha, eine Lösung auf dem Niveau von "works for me" genügt also nicht, sie muss schon allgemein verständlich sein.

        »» Was ist dein Messrechner für einer? Etwas PC-artiges mit einem gängigen OS? Wenn ja, wäre vielleicht eine elegante Alternative, direkt auf dieser Maschine einen kleinen Webserver zu installieren.
        Man stellt mir einen ausgedienten Bürorechner mit Win-XP und ca. 1,8 GHz zur Verfügung.

        Na hör mal! Einen Apachen mit PHP, vielleicht sogar noch MySQL für die Langzeit-Protokollierung bedient der aber mit links (oder alles in einem Paket mit idiotensicherer Installation: XAMPP). Da könntest du sogar mit der gd-Lib von PHP jeweils zum Zeitpunkt des Abrufs aktuelle Grafiken mit dem Zeitverlauf der Messwerte über die letzten zwei Stunden oder so generieren - zusätzlich zur Tabellenform.
        Das wäre dann auch für jeden übersichtlich und anschaulich.

        Okay, das Script einmal zu erstellen, wäre ein bissl Arbeit, aber ich wüsste jemanden, der das gegen einen kleinen Obulus bestimmt gern machen würde. *indenspiegelguck*

        Firefox produziert mir mit dem folgenden File eine Systemauslastung von 50%:
        <html><head><title>Test</title>

        Teststring 1

        </head> fehlt, <body> fehlt.
        Okay, wenn man die Toleranz von HTML ausreizten möchte, darf man diese Tags sogar weglassen. Schön ist es aber nicht.

        <script type="text/javascript">
        window.setTimeout (location.reload(true), 10000)
        </script>

        Die Anweisung, die der Timeout nach 10s ausführen soll, steht doch hoffentlich in Anführungszeichen?
        Sonst ist mir die Systemauslastung klar:
        setTimeout() erwartet einen String als ersten Parameter (alternativ AFAIK eine Funktionsreferenz), du notierst aber sofort den Aufruf der Methode. Das reload() wird also *sofort* ausgeführt - und das immer wieder und wieder, so schnell der Browser das schafft. Das müsste doch auffallen, dass ein permanenter Browser-Refresh stattfindet. Nicht alle 10 Sekunden, sondern schätzungsweise alle paar Millisekunden. Schon der Netzwerk-Traffic, den das verursacht, müsste auffallen.

        </head><body>

        Huch? Jetzt doch noch? Nein, durch den "Teststring 1", den du weiter oben notiert hast, wurde schon implizit der head geschlossen und der body begonnen.

        </body></html>

        Das sollte alle 10s die Seite neu laden.
        Sorry sehr quick and dirty.

        Ja. Zu "dirty" an der entscheidenden Stelle. :-)

        So long,
         Martin

        --
        Er:  Mit wem warst du gestern abend aus?
        Sie: Du bist mal wieder eifersüchtig wie immer!
        Er:  Wer ist Immer?
      2. Mahlzeit Messknecht,

        <script type="text/javascript">

        window.setTimeout (location.reload(true), 10000)

        </script>

        Abgesehen von den von Der Martin bereits genannten Fehlern: was spricht dagegen, <http://de.selfhtml.org/html/kopfdaten/meta.htm#weiterleitung@title=ein geeigneteres und sinnvolleres HTML-Element> zu benutzen?

        Mein Eindruck ist, dass ich es schaffen könnte die HTML-Dateien entsprechend auf dem Netzlaufwerk abzulegen. Entweder ändere ich die komplette Seite jedes mal, oder ich referenziere auf die aktuellen Daten, die alle 60s refresht werden.

        Das Problem wäre doch eher, dass Dein Messrechner eine CSV-Datei erzeugt und keine HTML-Datei. Oder habe ich jetzt irgendwas überlesen?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. @Martin!

          Danke für den Hinweis. Bin schon etwas beschämt, denn hirnloses copy-paste bringt so was mit sich. Werde mich doch mal ums Verstehen der Grundsyntax bemühen.

          @EKKI

          Abgesehen von den von Der Martin bereits genannten Fehlern: was spricht dagegen, <http://de.selfhtml.org/html/kopfdaten/meta.htm#weiterleitung@title=ein geeigneteres und sinnvolleres HTML-Element> zu benutzen?

          Wie könnte ich mit der Weiterleitung eine elegante Lösung finden?

          Das Problem wäre doch eher, dass Dein Messrechner eine CSV-Datei erzeugt und keine HTML-Datei. Oder habe ich jetzt irgendwas überlesen?

          Ist natürlich ne einfache Sache die relevanten Inhalte einer CSV-Datei an die richtigen Stellen der HTML-Datei zu schreiben. Nur ist das eben nicht so richtig elegant. Ich generiere jedesmal die komplette Seite neu, nur weil ich so um die 100 Byte geändert habe. Aber ich wollte ja nicht so viel denken :-(.

          Euer großes Echo hat mich doch sehr motiviert und ich glaube, dass mich die Einfach-aber-Unelegantlösung doch nich auf Dauer zufriedenstellt. Doch zunächst muss Chef was sehen, also "Brut de Force"!

          Viele Grüße

          Joachim

          1. Hallo,

            Bin schon etwas beschämt, denn hirnloses copy-paste bringt so was mit sich. Werde mich doch mal ums Verstehen der Grundsyntax bemühen.

            ;-)

            »» was spricht dagegen, <http://de.selfhtml.org/html/kopfdaten/meta.htm#weiterleitung@title=ein geeigneteres und sinnvolleres HTML-Element> zu benutzen?
            Wie könnte ich mit der Weiterleitung eine elegante Lösung finden?

            Indem du mit dem meta-Element nach einer Verzögerung, die hier in Sekunden angegeben wird, wieder auf dasselbe Dokument "weiterleitest". Das wäre dann effektiv ein Reload.

            Ist natürlich ne einfache Sache die relevanten Inhalte einer CSV-Datei an die richtigen Stellen der HTML-Datei zu schreiben. Nur ist das eben nicht so richtig elegant. Ich generiere jedesmal die komplette Seite neu, nur weil ich so um die 100 Byte geändert habe. Aber ich wollte ja nicht so viel denken :-(.

            Betrachte es mal so: Ob rund 100 Byte übertragen werden, oder zum Beispiel 2kB, macht keinen spürbaren Unterschied. Zeitbestimmend sind bei so kleinen Datenmengen die Reaktionszeiten in der Client/Server-Kommunikation (auch beim Zugriff auf den Fileserver zur Dateiablage).

            Euer großes Echo hat mich doch sehr motiviert und ich glaube, dass mich die Einfach-aber-Unelegantlösung doch nich auf Dauer zufriedenstellt. Doch zunächst muss Chef was sehen, also "Brut de Force"!

            Na dann ran an den Speck. :-)

            Ciao,
             Martin

            --
            PCMCIA: People Can't Memorize Computer Industry Acronyms
  4. Moin!

    Die Wandlung der Signale für den Rechner ist für mich kein Problem, bin ja ein Messknecht. Anschließend erzeuge ich eine Datei mit den Daten drin. Das Format könnte CSV, TXT ... sein. Da bin ich sehr flexibel.

    Die Frage ist, ob du eine Messwerthistorie brauchst, oder ob du nur aktuelle Werte angezeigt haben willst.

    Eine Historie ist natürlich deutlich aufwendiger als nur die Übermittlung von aktuellen Daten - allein schon von der Datenmenge, aber natürlich auch bei der Entscheidung und Auffindung, welche der vielen Daten denn jetzt die aktuellen sind.

    Für Historie bietet es sich eigentlich nicht unbedingt an, die Daten in einer immer größer werdenden Datei anzusammeln, jedenfalls nicht, wenn die einzige erwünschte Auswertung der Zugriff auf den letzten Messwert ist.

    Als praktisches Format für die Nutzung in einer Webseite würde ich JSON empfehlen. In Kombination mit einer HTML-Seite, die per AJAX regelmäßig die Messwerte vom Server abfragt, kriegst du eine ziemlich kompakte Datenübertragung hin. Die gesamte optische Aufbereitung der Messwerte, z.B. auch mit Anzeige "rot/grün" bei Verlassen des erwünschten Wertebereichs, würde dann ein Javascript anhand dieser Messwertdaten aus dem JSON erledigen.

    Leider stellt sich unser Admin quer, was den Zugriff auf den Server betrifft. Das einzige was er mir erlaubt, mit meinem Messrechner auf das Netzlaufwerk zu schreiben. Also dachte ich mir, erstelle ich eine Webseite die auf unserem Netzlaufwerk liegt. Mein Messrechner aktualisiert im Minutentakt die Messdaten. Die Webseite soll sich natürlich mit den aktuellen Informationen versorgen (neu laden?).

    Die Frage ist, wie du aus deinem Browser heraus das Netzlaufwerk erreichst, und ob da irgendwelche nervigen Schutzmechanismen für lokale Ressourcen wirksam werden, oder nicht. AJAX auf lokale Laufwerke (auch wenn sie via Laufwerksbuchstabe ein Netzlaufwerk anbinden oder den UNC-Namen nutzen) ist vor allem im Internet-Explorer eingeschränkt. Diese Lösung würde also im Zweifel nicht universell auf allen Rechnern funktionieren, sondern ggf. eine gezielte Aufweichung der Sicherheitseinstellungen nur bei deinem Überwachungsrechner erfordern.

    Wenn du deinen Admin dazu überreden kannst, dass er dir sowohl die statischen HTML- und Javascript-Dateien auf den Intranet-Server packt, als auch den Zugriff auf die von dir geschriebene Messdatei über diesen Webserver ermöglicht, wäre dieses Problemfeld spontan erledigt. Das sind aber Überlegungen, die erst den zweiten Schritt bedeuten. Bastel dir erstmal eine funktionierende Lösung mit den Mitteln, die du derzeit hast - existierende Lösungen überzeugen den Admin vermutlich auch leichter, wenn er sehen kann, was du tatsächlich tust.

    Wie kann ich die Systemauslastung beim Clientrechner gering halten? Denn ich hab da was probiert mit JavaScrip und location.reload, das sorgte für heftige Systembelastung.

    Üblicherweise wird man ein regelmäßiges Aktualisierungsintervall mit setTimeout bzw. setIntervall definieren, und diesen Funktionen dann eine Javascript-Funktion mitgeben, die regelmäßig ausgeführt wird.

    Im simpelsten Fall erstellt der Messrechner ganz banal eine statische HTML-Seite, die einfach nur alle Messwerte so wie gewünscht darstellt, und sorgt mittels Meta-Refresh für das regelmäßige Neuladen dieser Seite. Das ist von der Technik her absolut niedrigstes Niveau hinsichtlich der Anforderung an den Server (Netzlaufwerk reicht vollkommen aus), erfordert aber auf dem Messrechner mehr Leistung zum Zusammenbau der jeweiligen Komponenten der HTML-Seite.

    Im Endeffekt ist halt die Frage, wo in diesem Konstrukt die Programmlogik platziert wird.

    Wenn der Messrechner einfach nur JSON schreibt, dann muss er keine komplexen Entscheidungen und Formatierungen treffen, sondern einfach nur einen String erzeugen, der sich aus wenigen statischen Bestandteilen sowie den dynamisch ermittelten Messwerten zusammensetzt. Die Programmlogik zur Darstellung und eventuellen optischen Hervorhebung liegt dann komplett im Browser und dem das JSON auswertende Javascript.

    Wenn der Messrechner hingegen eine statische HTML-Seite schreibt, dann bedeutet das im Zweifel mehr Datenbewegung und unter Umständen auch, dass die Entscheidungslogik für die optische Darstellung im Messrechner platziert wird. Ob das eine gute Idee ist, hängt auch davon ab, wieviel Rechenleistung der Messrechner zur Verfügung hat - zusätzlich zu seinen sonstigen Aufgaben.

    - Sven Rautenberg

    1. hi,

      Eine Historie ist natürlich deutlich aufwendiger...

      Achwas, dafür gibts doch MRTG.

      Hotte

      1. Moin!

        »» Eine Historie ist natürlich deutlich aufwendiger...

        Achwas, dafür gibts doch MRTG.

        Hängt davon ab, was man will.

        Wenn aktuell schon das Einbinden in den Intranetserver am Admin scheitert, wird der wohl kaum mal eben MRTG oder ähnliches installieren wollen (ich würde ja RRDTool als Datensammler verwenden, wie MRTG es auch tut, und den SNMP-Teil skippen). Und einem Messrechner will man das evtl. auch nicht aufbürden.

        Andererseits sind die Grafiken, die man mit RRDTool produzieren kann, schon nicht schlecht: http://oss.oetiker.ch/rrdtool/gallery/index.en.html Es ist eigentlich das ideale Tool, um zeitlich abfolgende Messwerte grafisch zu visualisieren. Allerdings erfordert es eine Programmiersprache, die mindestens mal die Kommandozeile bedienen und rrdtool mit entsprechenden Parametern aufrufen kann.

        Dieses Tutorial zeigt, wie sowas gehen kann: http://oss.oetiker.ch/rrdtool/tut/rrdtutorial.en.html
        Eigentlich relativ simpel. :)

        - Sven Rautenberg

        1. Klar, Sven,

          es gibt nichts schöneres als Messwerte grafisch darzustellen, wobei die Konfigs für die genannten Tools zwar etwas kryptisch sind, aber wenns läuft, freut sich sogar Cheffe (1) von Cheffe ;-)

          (1) der maln ernsthaftes Wörtschen mit Adminne reden sollte.

          Hotte