Forum: PC-Programmierung Messwerte auf localer Webseite einbinden?


von Paul G. (paul_g210) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi

Ich wollte nicht Beitrag "Messwert auf meiner Webseite aktualisieren lassen" kapern 
weil dort andere Voraussetzungen gefragt wurden...

Situation:

Meine Wetterstation (RaspberryPi3) liefert mir Messwerte in eine CSV 
Datei:
1
2020-08-10 09:20:30,26.8,1015.3,25.5,65.7,17.7,16.1
2
2020-08-10 09:26:30,27.1,1015.3,25.5,66.0,18.5,16.6
3
2020-08-10 09:32:30,27.1,1015.3,25.4,67.1,18.2,16.5
4
...

Vorhaben:

Ich möchte vorerst nur immer die letzte Reihe aus der Datei auslesen
und die Werte einfach nur plump auf meine Webseite stellen:

Temperatur innen: 27.1°C
Temperatur außen: 25.4 °C
Luftdruck: 1015.3 hPa
...

Die Webseite soll alle ~5min neue Daten "ziehen"...
Später würde ich sehr gerne per SVG/Javascript Animation
so kleine Anzeigeinstrumente auf die Seite einfügen und zusätzlich
die CSV Datei richtig als Graph einbinden, evtl sogar interaktiv mit
Zoom und so... dafür gibt es ja ein haufen JS Lösungen.

Allerdings stehe ich ein bisschen auf dem Schlauch wie ich nun einfach 
von meine Webseite an die Daten in der CSV Datei komme und einbinde.

Ich hatte eine annähernde Lösung per JS, aber die erforderte immer ein 
<input> mit Benutzerinteraktion (File Open.. File Drag/Drop)... das ist 
nicht was ich will.

Ist das überhaupt ohne PHP machbar, nur mit JS? Oder wäre es eleganter 
einfach ein C++ / Python Programm zu schreiben das die CSV Datei parst 
und dann meine HTML Seite generiert bzw. periodisch nach Updateintervall 
erzeugt?

Bisher habe ich meine selbst gebaute QT App verwendet (Bild) die mir die 
CSV Datei parst und richtig hübsch darstellt, allerdings hab ich kein 
Bock mehr auf QT wenn sich das ganze auch elegant in einem Browser 
darstellen lässt....

Achso nebenbei: die Webseite soll natürlich nur lokal als Datei auf dem 
RPi in einem Browser im Vollbildmodus angezeigt werden... also 
irgendwelche Server einrichten war eigentlich nicht mein Ziel...

Hat jemand einen Vorschlag welcher weg sinnvoll sein könnte?

: Bearbeitet durch User
von Dirk (Gast)


Lesenswert?

Anstatt über die CSV Datei zugehen bietet sich hier auch Mqtt an.

https://entwickler.de/online/javascript/mqtt-mit-javascript-579860931.html

von Johannes S. (Gast)


Lesenswert?

IoBroker, benutzt Websockets um die Werte dynamisch darzustellen. Kann 
Daten aus so ziemlich allen Quellen lesen, natürlich auch MQTT. Und es 
gibt mittlerweile wohl ein Dutzend Möglichkeiten die zu visualisieren. 
Über einen IoT Adapter kann auch aus dem Internet zugegriffen werden, 
das ist zwar kostenpflichtig, aber noch sehr günstig.

von quotendepp (Gast)


Lesenswert?

Paul G. schrieb:
> Webseite soll natürlich nur lokal als Datei auf dem RPi in einem Browser
> im Vollbildmodus angezeigt werden... also irgendwelche Server einrichten
> war eigentlich nicht mein Ziel...

wenn die himbeere eh schon läuft, dann langweilt er sich mit dem messen 
der sensordaten zu tode. lass ihm doch einfach die freude einen indianer 
laufen zu lassen (also apache).
und schreib die daten besser in eine datenbank. also litesql, mariadb 
o.ä.
an überarbeitung stirbt da trotzdem keiner

von quotendepp (Gast)


Lesenswert?

ähm ich meinte sqlite

von Dirk K. (merciless)


Lesenswert?

Das Programm, welches in die CSV schreibt,
könnte auch eine statische HTML-Seite erzeugen.

merciless

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Dirk schrieb:
> Anstatt über die CSV Datei zugehen bietet sich hier auch Mqtt an.
>
> https://entwickler.de/online/javascript/mqtt-mit-javascript-579860931.html

Ich habe eine Tasmota Wlan Steckdose die auch mqtt kann also hatte ich 
das vor längerer Zeit mal angeschaut aber sorry, bei mqtt stellen sich 
mir die Haare im Nacken auf... Ich komm damit irgendwie überhaupt nicht 
klar... Wenn wirklich alle Stricke reißen und absolut gar nix anderes 
mehr geht werde ich mir das nochmal anschauen... :D

Johannes S. schrieb:
> IoBroker,

Overkill für mein vorhaben

quotendepp schrieb:
> wenn die himbeere eh schon läuft, dann langweilt er sich mit dem messen
> der sensordaten zu tode.

Ja wenn, dann lighttpd, das sollte auch reichen... aber wie gesagt ich 
wollte eigentlich das ganze Datenbankzeug und PHP vermeiden.

Dirk K. schrieb:
> Das Programm, welches in die CSV schreibt,
> könnte auch eine statische HTML-Seite erzeugen.

Das war bis eben auch mein bevorzugter Gedanke, leider spricht da etwas 
dagegen. Ich will dann später ja auch User Interaktion auf der Seite 
zulassen.
Das bedeutet wenn ich mir gerade den Regenradar oder einen Plot aufrufe 
dann will ich nicht das irgendein Auto-reloader die Seite genau in dem 
Moment nachläd wenn ich mir irgendwas anschauen will. Das bedeutet es 
soll(t)en wirklich nur die Werte in diversen Teilen der Webseite 
aktualisiert werden (div's oder so) anstatt die ganze HTML Seite zu 
reloaden.

Ich bin zwischendurch über dieses Ajax Tutorial gestoßen

https://www.youtube.com/watch?v=qqRiDlm-SnY

und versuche das mal nachzubauen. Dann lasse ich mir das daten.csv und 
die Seite doch von nem kleinen Lighttpd Server liefern... mal sehen ob 
das klappt.

von Sascha W. (sascha-w)


Lesenswert?

Hallo Paul,

Mqtt ist ja eher für die Übertragung der Messwerte vom Sensor zur 
"Aufzeichnung" für dein Problem also keine Lösung.

Wo kommt die Website im Moment her?
Auf dem PI brauchst du auf jeden Fall einen Webserver, lighttpd reicht. 
Mit einem Pythonscript kannst du deine Daten aus der csv lesen und 
praktischer Weise einen json-String erstellen den der Webserver bei 
Abruf dann ausliefert. Deine Website kann diese Datei per JavaScript 
mittels XMLHttpRequest zyklisch abrufen und die Werte auf der Website 
mit den aktuellen ersetzen.

Sascha

von Sheeva P. (sheevaplug)


Lesenswert?

Paul G. schrieb:
> Ich wollte nicht Beitrag "Messwert auf meiner Webseite aktualisieren lassen" kapern
> weil dort andere Voraussetzungen gefragt wurden...
>
> Situation:
>
> Meine Wetterstation (RaspberryPi3) liefert mir Messwerte in eine CSV
> Datei:
>
1
> 2020-08-10 09:20:30,26.8,1015.3,25.5,65.7,17.7,16.1
2
> 2020-08-10 09:26:30,27.1,1015.3,25.5,66.0,18.5,16.6
3
> 2020-08-10 09:32:30,27.1,1015.3,25.4,67.1,18.2,16.5
4
> ...
5
>
>
> Vorhaben:
>
> Ich möchte vorerst nur immer die letzte Reihe aus der Datei auslesen
> und die Werte einfach nur plump auf meine Webseite stellen:
>
> Temperatur innen: 27.1°C
> Temperatur außen: 25.4 °C
> Luftdruck: 1015.3 hPa
> ...
>
> Die Webseite soll alle ~5min neue Daten "ziehen"...
> Später würde ich sehr gerne per SVG/Javascript Animation
> so kleine Anzeigeinstrumente auf die Seite einfügen und zusätzlich
> die CSV Datei richtig als Graph einbinden, evtl sogar interaktiv mit
> Zoom und so... dafür gibt es ja ein haufen JS Lösungen.
>
> Allerdings stehe ich ein bisschen auf dem Schlauch wie ich nun einfach
> von meine Webseite an die Daten in der CSV Datei komme und einbinde.
>
> Ist das überhaupt ohne PHP machbar, nur mit JS? Oder wäre es eleganter
> einfach ein C++ / Python Programm zu schreiben das die CSV Datei parst
> und dann meine HTML Seite generiert bzw. periodisch nach Updateintervall
> erzeugt?

Ja, natürlich ist das ohne PHP machbar. Und dazu gibt es unendlich viele 
Lösungen, die... naja, sich im Endeffekt einerseits durch die 
verwendeten Technologien, und andererseits deswegen durch ihren Aufwand 
unterscheiden.

Wie groß dieser Aufwand ist, liegt aber alleine an Dir, an dem, was Du 
aus Deinen Daten machen willst, daran, ob Du zukünftig ähnliche Aufgaben 
haben wirst, und was Du vielleicht zukünftig mit Deinen Daten machen 
möchtest.

Ich ganz persönlich benutze für solche Aufgaben gerne Python mit numpy, 
scikit oder Pandas für Numbercrunching, Datenexploration, -Analyse, 
-Aggregation und natürlich die -Visualisierung, aber, naja, ich mache 
das halt auch professionell und hab ein paar Jahre Erfahrung damit. Und 
es ist einfach, Web daraus zu machen, Flask ist da mein Favorit fürs 
Webserving in der Entwicklung -- und für die Visualisierung gibt es 
ungefähr drölfzig Millionen Möglichkeiten, lokal mit Matplotlib oder im 
Web mit Bokeh, Flot, mpl3d, JsWidgets, ...

Aber bitte, versteh' mich nicht falsch: ich verarbyte täglich 
Massendaten, die mit hoher Wahrscheinlichkeit wesentlich umfangreicher 
sind als alles, was Du vorhast. Dafür eine neue Programmiersprache zu 
lernen -- und wenn es eine besonders simple wäre wie Python -- halte ich 
für Unsinn, besonders wenn das Dein einziges Projekt wäre, in dem Du 
(erstmal eher kleine) Datenmengen verarbeiten willst.

Aber wenn Du in zehn Jahren die Daten der letzten zehn Jahre bis ins 
feinste Detail untersuchen möchtest, sieht die Sache wieder völlig 
anders aus. Wenn Du in näherer Zukunft andere Daten bekommst: dann sieht 
die Sache anders aus.

Ach so: Du kannst Deine Daten natürlich auch in einen ELK-Stack pumpen. 
Das ist nur Konfigurationszeugs und Du bekommst eine sehr 
leistungsfähige, streßfreie Lösung -- aber das wird auf einen RasPi3 
nicht sauber laufen... ;-)

von Sheeva P. (sheevaplug)


Lesenswert?

quotendepp schrieb:
> wenn die himbeere eh schon läuft, dann langweilt er sich mit dem messen
> der sensordaten zu tode. lass ihm doch einfach die freude einen indianer
> laufen zu lassen (also apache).
> und schreib die daten besser in eine datenbank. also litesql, mariadb
> o.ä.
> an überarbeitung stirbt da trotzdem keiner

Das sehe ich ähnlich, aber... eine klassische Datenbank? Wirklich?

Rein datentechnisch reden wir hier über ein Append-Only-Log. Das braucht 
nichts, das eine SQL-Datenbank bietet: keine Transaktionen, kein MVCC, 
...

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Danke erstmal für eure Gedanken.
Ich bin zwischenzeitlich bei "Papa Parse" angekommen. Damit lese ich 
einfach per JS meine daten.csv in ein Array ein. Die Datei hole ich 
lokal von einem lighttpd Server ab. Jetzt kann ich mir schon mal die 
letzte Datenreihe aus der csv rauspicken und nun ist es eigentlich nur 
noch HTML und ein bisschen JS um die Werte in den <body> zu bekommen... 
mehr sollte es eigentlich erstmal nicht sein.

1
<script type="text/javascript" src="papaparse.min.js"></script>
2
    <script type="text/javascript">
3
        function csv() {
4
            Papa.parse('http://localhost/data.csv', {
5
                delimiter: ',',
6
                header: false,
7
                download: true,
8
                skipEmptyLines: true,
9
                complete: function(results, file) {
10
                    results.data.map(x2);
11
                }
12
            });
13
        };
14
        // get last line from csv file
15
        function x2(value, index, array){
16
            if(index == array.length - 1){
17
                console.log(array[index]);
18
            }
19
            
20
        }
21
    </script>

Meine "Wetterstation" schreibt nur alle 6 Minuten neue Werte in die CSV 
Datei und löscht immer den ersten Eintrag. Damit hab ich immer 240 Werte 
(Reihen) in der Datei die einen ganzen Tag darstellen. Mehr wird es 
nicht und Datenbanken halte ich dafür zu viel des Guten :)

: Bearbeitet durch User
von Imonbln (Gast)


Angehängte Dateien:

Lesenswert?

Mein Vorschlag wäre folgendes kleines pythonscript das einfach 
regelmäßig die csv Datei parst und den letzten wert in eine statische 
html Seite verwandelt. dazu muss allerdings das jinja2 module via pip 
auf den rasperypi installiert werden und deine csv mit einer headline 
versehen werden.
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
4
import csv
5
import jinja2
6
7
def csv2html(csvfile, htmlfile):
8
    jinja2env = jinja2.Environment(
9
            loader = jinja2.FileSystemLoader('.'),
10
            trim_blocks=True,
11
            lstrip_blocks=True)
12
    with open(csvfile, newline='') as fin:
13
        reader = csv.DictReader(fin)
14
        lines = [ x for x in reader]
15
    template = jinja2env.get_template('html.tmpl')
16
    template.stream(**lines[-1]).dump(htmlfile)
17
18
if __name__ == '__main__':
19
    csv2html('bla.csv', 'out/index.html')

Der Vorteil von den ansatz ist, dass dein Webserver immer nur eine 
Statische Datei ausliefern muss.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Imonbln schrieb:
> Der Vorteil von den ansatz ist, dass dein Webserver immer nur eine
> Statische Datei ausliefern muss.

Der Nachteil ist das immer die ganze Seite neu geladen werden muss. Ich 
hätte es dann doch ganz gerne dynamisch auf einzelne HTML-Elemente :) 
Das wird dann später wichtig wenn ich ein "One pager" baue wo dann unter 
den Sensoranzeigen noch ein Plot oder der Regenradar zu finden ist. Das 
würde mich stören wenn ich gerade den Plot bestaune und plötzlich lädt 
die ganze Seite neu...

von Johannes S. (Gast)


Lesenswert?

die Lösung dafür wurde hier doch schon genannt:
Beitrag "Re: Messwerte auf localer Webseite einbinden?"
Websockets wären auch eine moderne Möglichkeit, da kann der Server die 
Werte aktiv liefern und ein Stück JS im Client macht das Update der 
Controls im Browser.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Johannes S. schrieb:
> die Lösung dafür wurde hier doch schon genannt:

Und was genau spricht jetzt gegen meine Lösung via csv Parser "Papa 
parser"?

von ? DPA ? (Gast)


Lesenswert?

Ich hatte sowas änliches mal mit server-sent events[1] gemacht.

Im Server kann man einfach ein simples CGI Script platzieren. Ich hab es 
gerade nicht mehr vor mir, aber es müsste ungefähr so ausgesehen haben:
1
#!/bin/sh
2
3
echo "Cache-Control: no-cache"
4
echo "Content-Type: text/event-stream"
5
echo
6
7
tail -n 1 -F mein_csv.csv | sed 's/.*/data: \0\n/'

Und schon bekommt man neue Zeilen sofort mit. JS Seitig ist es auch 
Simpel:
1
const evtSource = new EventSource("csv_streamer.cgi");
2
evtSource.onmessage = function(event){
3
  console.log(event.data);
4
}

1) 
https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Data-only_messages

von Johannes S. (Gast)


Lesenswert?

Paul G. schrieb:
> Und was genau spricht jetzt gegen meine Lösung via csv Parser "Papa
> parser"?

Eigentlich nichts, nur das die Webwelt vielleicht lieber mit JSON als 
Datenformat arbeitet.
Ich hatte deine Lösung etwas übersehen, und dann ging es wieder um eine 
statische Seite. Aber die Aufteilung in statischen Teil und angeforderte 
Daten hast du mit dem csv parsen ja gemacht.

von Sheeva P. (sheevaplug)


Lesenswert?

Paul G. schrieb:
> Meine "Wetterstation" schreibt nur alle 6 Minuten neue Werte in die CSV
> Datei und löscht immer den ersten Eintrag. Damit hab ich immer 240 Werte
> (Reihen) in der Datei die einen ganzen Tag darstellen. Mehr wird es
> nicht und Datenbanken halte ich dafür zu viel des Guten :)

Ja, da hast Du natürlich Recht, für eine so überschaubare Datenmenge 
braucht es keine großen Analysewerkzeuge und natürlich auch kein 
hochentwickeltes Datenbank-Backend, insofern wünsche ich Dir auch 
weiterhin viel Spaß und Erfolg!

Solltest Du allerdings früher oder später größere Datenmengen 
verarbeiten und darauf womöglich auch noch verschiedene Operationen 
ausführen und vielleicht professionelle interaktive Visualisierungen 
erzeugen wollen, möchte ich Dir wärmstens die Werkzeuge Pandas [1] und 
Bokeh [2] aus dem Python-Universum ans Herz legen.

Pandas ist eine Bibliothek für Python zur Analyse von Daten, viele 
Profis sagen, es sei dafür DIE Standard-Python-Bibliothek schlechthin. 
Es basiert auf dem bekannten numpy und bietet auch eine starke 
Integration für die Visualisierungsbibliothek matplotlib; große Teile 
dieser Bibliotheken sind in C und / oder C++ geschrieben und zum Teil 
nutzt insbesondere numpy sogar denselben Fortran-Code wie andere 
Werkzeuge aus diesem Umfeld, wie MATLAB und R.

Bokeh dagegen ist eine Bibliothek zur interaktiven Datenvisualisierung 
im Web und kann seine Daten nicht nur aus einfachen Python-Listen, 
sondern auch aus numpy-Arrays und Pandas-Series beziehen. Die erzeugten 
Visualisierungen können sowohl als statische HTML-Dateien, als auch 
dynamisch erzeugt und natürlich in Infrastrukturen wie Django oder Flask 
eingebettet werden. Aber Deinen Anwendungsfall, das Erzeugen einer 
statischen HTML-Seite aus eingelesenen Daten, deckt Bokeh bereits mit 
seinem ersten Skript im "Quickstart" ab, siehe [3] direkt unter "Getting 
Started".

Wenn dies Dein einziges Projekt dieser Art ist und es vorraussichtlich 
auch bleiben wird, lohnt es sich für Dich aber natürlich nicht, neue 
Programmiersprache oder gar professionelle Datenanalyse- und 
Visualisierungsbibliotheken zu erlernen. Aber wenn Du sowas in Zukunft 
vielleicht öfter machen möchtest...?

[1] https://pandas.pydata.org/
[2] https://docs.bokeh.org/en/latest/
[3] https://docs.bokeh.org/en/latest/docs/user_guide/quickstart.html

von Sheeva P. (sheevaplug)


Lesenswert?

Imonbln schrieb:
> Der Vorteil von den ansatz ist, dass dein Webserver immer nur eine
> Statische Datei ausliefern muss.

Daumen hoch, richtig gut! ;-)

von Sheeva P. (sheevaplug)


Lesenswert?

Paul G. schrieb:
> Und was genau spricht jetzt gegen meine Lösung via csv Parser "Papa
> parser"?

Solange Deine Anforderungen so bleiben, wie sie sind: nichts. Aber wenn 
Du etwa die Daten ordentlich plotten willst, etwa mit JqPlot, Flot, 
JqWidgets oder eben mit dem eben bereits erwähnten Bokeh, wird das 
irgendwann ziemlich ressourcenaufwändig und somit leider auch ziemlich 
langsam.

Aber bitte, laß' Dich nicht verrückt machen, für jetzt ist Deine Lösung 
super, auch wenn Du 240 Zeilen CSV-Datei parst, um am Ende nochmal über 
alle zu iterieren und letztlich dann doch nur den letzten Datensatz zu 
verwenden und obwohl Du das sogar regelmäßig (nämlich mit automatischen 
Reloads) machen möchtest... ;-)

von Sheeva P. (sheevaplug)


Lesenswert?

Johannes S. schrieb:
> Ich hatte deine Lösung etwas übersehen, und dann ging es wieder um eine
> statische Seite. Aber die Aufteilung in statischen Teil und angeforderte
> Daten hast du mit dem csv parsen ja gemacht.

Naja, so eine statische HTML-Seite kann man ja ausliefern, und die zieht 
sich ihre Daten dann über AJAX und kann Drittquellen -- der TO hat den 
Regenradar genannt -- mittels einfacher externer Links (CSP nicht 
vergessen!) einbinden.

Aaaaber: CSV-Dateien mit JavaScript zu parsen, ist vermutlich ein 
ziemlicher Aufwand, und spätestens, wenn man sie zum Plotten umformen 
und womöglich sogar eindampfen mag, könnte das sehr schnell sehr 
aufwändig werden. Ob es nicht einfacher wäre, bereits in diesem Stadium 
des Projekts eine dynamische Seite auf einem Webserver einzurichten, 
oder (für eine rein interne Seite!) mit einem Framework wie Flask oder 
Django sogar ausnahmsweise deren eingebettete Webserver zu nutzen, 
stelle ich mal dahin, denn das hängt natürlich primär davon ab, wie sich 
die Anforderungen des TO im Laufe der Zeit entwickeln -- was womöglich 
sogar er bisher nur sehr rudimentär sagen kann. ;-)

von Johannes S. (Gast)


Lesenswert?

Naja, nicht jeder will Admin einer MegaEDV werden oder wissen wollen wie 
die Temperatur vor 15 Jahren im Keller war. Die Erben formatieren die 
Datenplatte sowieso neu und hauen ein Ballerspiel drauf.

von Sheeva P. (sheevaplug)


Lesenswert?

Johannes S. schrieb:
> Naja, nicht jeder will Admin einer MegaEDV werden oder wissen wollen wie
> die Temperatur vor 15 Jahren im Keller war.

Das stimmt, aber ich habe doch weder Hadoop noch Spark, Storm, Heron 
oder Gearpump vorgeschlagen, nicht Postgres-XL oder... "MegaEDV"? Im 
Ernst? ;-)

Tatsache ist: mit seinem bisherigen Ansatz wird der TO wahrscheinlich 
früher oder später auf die Nase fallen, wenn seine Anforderungen größer 
werden. Das ist nicht schlimm, Anforderungen ändern sich nunmal. Dann 
muß man seine Lösung anpassen und wahlweise erweitern oder neuschreiben 
-- ja, auch das kommt vor.

Nach meiner Erfahrung ist es dabei leider meistens so, daß eine 
Neuimplementierung viele Entwickler massiv abschreckt, weil sie noch im 
Hinterkopf haben, welch große Arbeit die Erstimplementierung war. Häufig 
wird sich solange möglich an den ersten Festlegungen gehalten, um die 
grundsätzlichen Probleme nicht lösen zu müssen...

Stattdessen wird dann oft um die Designprobleme, die fehlenden 
Funktionen und die Fehler herum entwickelt, bis das Projekt zu einem 
unwartbaren Chaos wird, und dem Entwickler beim nächsten Upgrade von 
Betriebssystem, Bibliotheken, Compiler, Data Store oder Bibliotheken um 
die Ohren fliegt.

Dann wird häufig ein wachsender Aufwand betrieben, um die vorhandene 
Software auf aktuelleren Plattformen zu betreiben. Nur deswegen 
beschäftigen viele Unternehmen immer noch Fortran-, Cobol- und 
Smalltalk-Entwickler, und versteh' mich nun bitte nicht falsch: bei 
denen mit ihrer riesigen Codebasis kann das ökonomisch durchaus sinnvoll 
sein -- was dann aber oft auch noch andere Gründe hat...

Wie auch immer, können wir Deine und meine Lösungen ja mal vor dem 
Hintergrund nebeneinander halten, was passiert, wenn die Anforderungen 
des TO wachsen.

Du schlägst ein Framework namens IoBroker vor, das auf auf Javasript und 
Node.js basiert. Das ist sicher eine großartige Software und natürlich 
OpenSouce, so daß unser TO fehlende Funktionalitäten selbst nachrüsten 
könnte. Zudem beherrscht er offentlichtlich schon die Programmiersprache 
JavaScript, insofern ist Deine Idee zweifellos sinnvoll und nützlich -- 
natürlich vor allem für ein Projekt, das im Wesentlichen aufs Web 
abzielt.

Andererseits gibt es jedoch auch Gründe dafür, warum Python die 
beliebteste Sprache der Welt und insbesondere auch in der 
DataScience-Community so beliebt ist, und der wesentliche Faktor dafür 
sind seine Einfachheit und seine Infrastruktur. Und, klar, die riesige 
Menge an millionenfach getestetem Code und sehr guter Dokumentation.

Aber eine "MegaEDV"? Im Ernst? Ist es wirklich so ein großer 
Unterschied, ob ein Entwickler "npm install" oder "pip install" aufrufen 
muß? Ich glaub nicht, lasse mich aber immer gerne eines Besseren 
belehren. Wohlan! ;-)

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Sheeva P. schrieb:
> Tatsache ist: mit seinem bisherigen Ansatz wird der TO wahrscheinlich
> früher oder später auf die Nase fallen, wenn seine Anforderungen größer
> werden.

Das sehe ich etwas anders :) Die Wetterstation ist so wie sie ist schon 
5 Jahre im Einsatz: 6 Sensoren, 240 Messwerte am Tag (nicht 
archivierend, als Ringbuffer sozusagen). Daran wird sich vermutlich auch 
in den nächsten 6 Jahren nix ändern. Gut, evtl. kommt hier und da noch 
ein Geigerzähler oder CO Sensor dazu aber mehr wirds nicht werden.

Sheeva P. schrieb:
> Aaaaber: CSV-Dateien mit JavaScript zu parsen, ist vermutlich ein
> ziemlicher Aufwand, und spätestens, wenn man sie zum Plotten umformen

Warum, man braucht doch nur "Papa parse" und c3.js, wo genau ist da 
jetzt der Aufwand?

https://www.youtube.com/watch?v=1OK4TJfCzdY

von Drahtverhau (Gast)


Lesenswert?

Warum nicht einfach Blazor nehmen u d die Daten per Entity Framework 
speichern? Da gibt's auch alle möglichen Chartelemente schon fertig

von Johannes S. (Gast)


Lesenswert?

Sheeva P. schrieb:
> Aber eine "MegaEDV"? Im Ernst?

Das ist natürlich eine Frage wie weit man sich schon mit Servern, 
Datenbanken, Progammiersprachen und Frameworks für Datenanalyse 
auseinandergesetzt hat und ob man das in Zukunft braucht oder möchte.
Dagegen steht das parsen einer einfachen csv Datei die aus Sensordaten 
selbst generiert wurde.
Das parsen der 240 Zeilen in JS wird ein paar ms dauern, da braucht nix 
optimiert werden. Mit der Funktionalität von NodeJS bekommt man das auch 
ohne Papa Libs hin, aber egal.
Und ioBroker und Datenanalyse Tools sind zwei sehr verschiedene Dinge, 
aber die schliessen sich sogar nicht einmal aus. Der Broker ist, wie der 
Name schon sagt, nur ein Vermittler. Der kümmert sich nur darum die 
Daten aus verschiedensten Quellen abzugreifen und vereinheitlicht 
anderen Interessenten zur Verfügung zu stellen. Die Daten können vom 
lokalen Sensor kommen, aus einem Standard Bussystem oder aus dem 
Abfallkalender, Wetterdienst oder Spritpreise vom Tankerkönig, alles 
möglich. Die 'Anderen' die was mit Daten machen kann die Visu sein, die 
per Editor generierte Webseiten darstellt, das kann Logik in JS / 
NodeRed / Szenensteuerung sein, das können Datenbankmodule sein oder 
eben Numbercruncher die aus den Daten den Sinn des Lebens berechnen.
Alles nur eine Frage ob man das möchte. Ich habe Spaß daran und sammele 
nicht nur Daten sondern steuere auch Dinge damit, anderen reicht der 
Klimatrend der letzten 24 h. Kostet trotzdem Zeit für Pflege und 
Einarbeitung.

von Sheeva P. (sheevaplug)


Lesenswert?

Paul G. schrieb:
> Sheeva P. schrieb:
>> Tatsache ist: mit seinem bisherigen Ansatz wird der TO wahrscheinlich
>> früher oder später auf die Nase fallen, wenn seine Anforderungen größer
>> werden.
>
> Das sehe ich etwas anders :)

Letztendlich kannst das natürlich nur Du sagen, wenngleich vermutlich 
auch nur mit einer begrenzten Sicherheit. "Prognosen sind schwierig, vor 
allem wenn sie die Zukunft betreffen". Auch mir ist es -- wie vermutlich 
vielen anderen hier auch -- schon viele Male passiert, daß sich während 
eines Projekts neue Ideen und damit natürlich auch neue Anforderungen 
ergeben haben -- nicht nur, aber auch bei meinen eigenen Projekten.

> Die Wetterstation ist so wie sie ist schon
> 5 Jahre im Einsatz: 6 Sensoren, 240 Messwerte am Tag (nicht
> archivierend, als Ringbuffer sozusagen). Daran wird sich vermutlich auch
> in den nächsten 6 Jahren nix ändern. Gut, evtl. kommt hier und da noch
> ein Geigerzähler oder CO Sensor dazu aber mehr wirds nicht werden.

Nunja, alleine Deine Anfrage hier ist ja ein gutes Beispiel dafür, wie 
sich die Ideen und Anforderungen eines Projekts im Laufe der Zeit 
verändern können. Und sofern Du vielleicht irgendwann mal 
Langzeitbetrachtungen machen willst, kann es möglicherweise sinnvoll 
sein, Dir jetzt schon eine passende Basis für so etwas aufzubauen. Dies 
insbesondere dann, wenn Du nicht nur in diesem Projekt, sondern auch in 
anderen privaten oder beruflichen Tätigkeiten mit der Analyse und / oder 
Visualisierung von Daten zu tun hast oder künftig haben wirst. Das 
kannst nur Du anhand Deiner aktuellen und anhand Deiner persönlichen 
Annahmen über die künftige Situation entscheiden.

> Sheeva P. schrieb:
>> Aaaaber: CSV-Dateien mit JavaScript zu parsen, ist vermutlich ein
>> ziemlicher Aufwand, und spätestens, wenn man sie zum Plotten umformen
>
> Warum, man braucht doch nur "Papa parse" und c3.js, wo genau ist da
> jetzt der Aufwand?

Oh, bitte entschuldige, daß ich nicht darauf hingewiesen habe, ich meine 
hier nicht den Programmier-, sondern den Ressourcenaufwand. JavaScript 
ist leider nicht gerade für einen sparsamen Speicherverbrauch oder eine 
übermäßige Performance bekannt, und in verschiedenen Tests habe ich 
bisher auch keine JS-Engine gefunden, die keine erheblichen Memoryleaks 
hatte.

von Sheeva P. (sheevaplug)


Lesenswert?

Drahtverhau schrieb:
> Warum nicht einfach Blazor nehmen u d die Daten per Entity Framework
> speichern? Da gibt's auch alle möglichen Chartelemente schon fertig

Ja, oder den ELK-Stack aus Elasticsearch, Logstash und Kibana... leider 
reichen die Ressourcen eines RaspberryPi 3 für den Betrieb dieser 
Software nicht ganz aus.

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.