Seite 1 von 1

Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Sonntag 14. Mai 2023, 08:57
von martin2day
Hallo zusammen,

ich habe mich hier im Forum angemeldet, weil ich sleber nicht mehr richtig weiter komme... :-)
Kurz zur Schwierigkeit und meinen Fähigkeiten... :-)

Ich selber bin SPS Programmierer und habe im Haus auch eine SPS und einige Raspberrys laufen.
Jetzt habe ich eine PV Anlage und einen Speicher installiert. Der Speicher, und die Wallbox steuere ich selber mit Python Scripten.
Diese habe ich mehr oder weniger selber meinen Bedürfnissen angepasst. Also geschaut was es gibt und eben angepasst.
Sprich Grundkenntnisse sind vorhanden, aber als "ich kann Python" würde ich es nicht beschreiben.

Aktuell möchte ich eine "einfache" Visualisierung mit Plotly und Dash erstellen.
Mein Programm erzueugt pro Tag eine CSV Datei die ich nun gern anzeigen würde.
Das Anzeigen klappt schon super, wenn ich die Datei per hand eintrage. (Warum kann ich hier kein Bild anhängen? :-))
Nun möchte ich aber auch durch die Dateien im Folder druchschalten können.
Das gelingt mir aber irgendwie nicht. Kann mir hier jemand einen Tipp geben.

Die Datein sind in der Art: 2023-05-20.csv abgelegt, also eine Datei mir dem Datum pro Tag.

Was ich jetzt schon honbekommen habe:

Code: Alles auswählen

name = (time.strftime('%Y-%m-%d', time.localtime()))
def findfile(name, path):
    for dirpath, dirname, filename in os.walk(path):
        if name in filename:
            return os.path.join(dirpath, name)
filepath = findfile(name + '.csv', "/")
Ich schau nach dem aktuelle Datum und suche nach der Datei und gebe mir den Ort zurück.
Damit kann ich die aktuelle Datei laden. Jetzt muss ich aber z.b. per Knopfdruck das Datum manupulieren... und eine andere Datei laden.
Das gelingt mir aber abolut nicht....

Und: Wenn ich mal etwas weiter denke... am Ende eines Monats würde ich auch gerne eine Monatsübersicht und am Ende des Jahres eine Jahresansicht ansehen... dann also auch mehrere Datein mit einmal ansehen. Wie macht man so was? :-)

Wer kann mir hier ein wenig helfen bzw. Tipps geben was ich mir näher ansehen muss/sollte.

Euch einen schönen Sonntag
Gruß Martin

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Sonntag 14. Mai 2023, 09:34
von __deets__
Nicht mit CSV. Sondern einer SQL Datenbank, die bei Python mit SQLite gleich mitkommt. Damit kannst du die Daten einfach mit gegebenen Datumsgrenzen aus der Datenbank holen.

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Sonntag 14. Mai 2023, 10:24
von Sirius3
Man schreibt keine Funktionen mitten in anderen Code, da findet man sie nur schwierig.
Statt `time` benutzt man `datetime`. Statt os.walk bentzt man hier pathlib. ›in‹ ist die falsche Operation, wenn die Datei wirklich 2023-05-13.csv heißt.

Code: Alles auswählen

from datetime import datetime as DateTime
from pathlib import Path

def findfile(date, path="/"):
    name = f"{date:%Y-%m-%d}.csv"
    for filepath in Path(path).rglob(name):
        return filepath

def main():
    date = DateTime.now()
    filepath = findfile(date)
    ...
Nun ist es komisch, dass Du immer die gesamte Festplatte nach den Dateien durchsuchen willst.
Die werden doch sicher alle im selben Verzeichnis gespeichert, so dass gar kein Suchen nötig ist.

Jetzt verstehe ich das Problem nicht, statt des aktuellen Datums ein anderes anzugeben, oder in einer Schleife alle Tage eines Monats durchzugehen.

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Sonntag 14. Mai 2023, 16:50
von martin2day
Guten Abend,

danke euch beiden. Ich muss erst mal "sachte" machen. Wie geschrieben aktuell übersteigt das teilweiße schnell meinen Horizont :-)
Aber ich möchte es ja erlernen und besser werden. SQL hört sich richtig an, ist aber wieder etwas womit ich keine Erfahrung habe und damit erst einmal auf die Merkliste setzen.

Sirius, du hast vollkommen recht. Die Daten liegen alle im gleichen Ordner. Es gibt nur Unterordner für die Jahre.
Ich werde mein Test entsprechend verändern.

Das Problem an sich ist nicht die Schleif, das erscheint mir noch logisch hier das Datum zu verändern z.b. mit

Code: Alles auswählen

timedelta(days=1)
Wie ich das ganze dann aber in Dash bzw. Plotly einsetzen muss damit es auch funktioniert... :-) hier komme ich nicht zurecht.

Gruß Martin

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Montag 15. Mai 2023, 06:38
von martin2day
Guten Morgen,

ich zeig euch zunächst einmal was ich gerade habe:

Code: Alles auswählen

from dash import Dash, dcc, Output, Input, html
import dash_bootstrap_components as dbc
import plotly.graph_objects as go
import pandas as pd
from dash_bootstrap_templates import load_figure_template

# loads the "sketchy" template and sets it as the default
load_figure_template("darkly")

df = pd.read_csv('2023-05-11.csv', sep = ';')

fig = go.Figure()
# time;timestamp;grid_imp_eto;grid_exp_eto;pv1_eto;pv2_eto;grid_p;pv1_p;pv2_p;bat_p;car_p
#fill tozeroy or tonexty
fig.add_trace(go.Scatter(x=df['time'], y=df['pv1_p'], name='PV10'))#,   fillcolor='#AAA', line=dict(color="#AAA"))) #fill='tonexty',
fig.add_trace(go.Scatter(x=df['time'], y=df['pv2_p'], name='PV2'))#,   fillcolor='#CCC', line=dict(color="#AAA")))
fig.add_trace(go.Scatter(x=df['time'], y=-df['grid_p'], name='Grid'))#,   fillcolor='#555555', line=dict(color="#555555")))

app = Dash(__name__, external_stylesheets=[dbc.themes.DARKLY])
app.layout = html.Div([
    html.Button('Test', id='test'),
    dcc.Markdown(children=''),
    dcc.Input(value="Überschrift"),
    dcc.Graph(
    figure = fig,
    style = {'height': '80vh'},
    )
])

@app.callback(
    Input('test', 'value')
)

def update_graph(value):
    print('test1')

if __name__=="__main__":
    app.run_server(port=8052)
Damit kann ich zunächst die Datei per Hand wunderbar öffnen und anzeigen, prima! :-)
An der Stelle komme ich aber mit Probieren nicht weiter, und richtig verstehen tue ich es nicht mehr.

Klar erscheint mir, dass ich jetzt über den Callback vom Button arbeiten muss und hier dann dem Graph die Daten mitteilen muss...
Gelingen tut mir dies aber nicht. Kann mir hier bitte jemand einen Tipp geben?

Euch einen guten Start in den neuen Tag
Gruß Martin

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Dienstag 16. Mai 2023, 13:41
von __deets__
Gibt’s nen Grund, warum du nicht die gut ausgetretenen Pfade von zb InfluxDB und Grafana benutzt? Das Rad neu zu erfinden kann man aus spass gerne machen, aber bis es rund läuft, vergeht da einiges an Zeit.

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Dienstag 16. Mai 2023, 20:03
von martin2day
Hey,

danke dir für den berechtigten Einwand. Ich bin zwar inzwischen ein ganzes Stück weiter, aber du hast vollkommen Recht...
Ich setz mal schnell nen Pi neu auf und schau mir InfluxDB und Grafana mal genauer an... kann ich ja bestimmt per Python an mein System anbinden....
Danke für den Tipp

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Donnerstag 18. Mai 2023, 16:25
von martin2day
Hallo,

zum Laufen habe ich Grafana und InfluxDB sehr schnell bekommen, auch die Daten übertragen geht sehr schnell.
Dann fängt es aber doch recht schnell an kompliziert zu werden... :-)
Bei Plotly konnte ich einfach eine Kurve auf einer anderen aufsetzen lassen... das war gerade für die unetrschiedlichen Verbraucher sehr gut und übersichtlich.

Daran scheitere ich gerade bei Influx bzw. Grafana.

Einen schönen Tag
Gruß Martin

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Donnerstag 18. Mai 2023, 16:58
von __deets__
Ich weiß nicht genau, was du damit meinst. Aber das ganze Management von Betrachtungszeiträumen bekommst du geschenkt. Dafür ist es sicher weniger flexibel. Aber https://community.grafana.com/t/consoli ... panel/2496 klint so, als ob da was geht - wenn das denn ist, was du willst.

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Donnerstag 18. Mai 2023, 17:13
von martin2day
Hey,
stimmt schon... man kann hier die Daten besser filtern und entsprechend aufarbeiten.
Was ich meine ist aber etwas anderes:

Ich habe im Haus mehrere Verbraucher die ich einzeln erfasse... Wärmepumpe, Wallbox, Batterie laden und das Haus selber.
Dem Gegebüber habe ich zwei Erzeuger... PV-Anlage und Speicher entladen.
Wenn ich das jetzt alles in ein Diagram werfe ist es erst einmal etwas unübersichtlich.
Meine aktuelle Kurve sieht wie follgt aus:
Im Hintergurnd ist die PV-Kurve... da muss sozustagen alles rein passen.
Dann stelle ich den Speicher laden dar.
Die Kurve vom Haus ist dann Speicher + Haus... also sozusagen auf der Kurve vom Speicher aufgesetzte.. einfach addiert.
Die Kurve von der Wallbox ist dann wieder auf der Kruve vom Haus aufgestezt also + Haus und + Speicher.

So sehe ich auf einen Blick alle Daten und sehe auch was noch über war..
Das geht in Grafana nicht so einfach.. ich könnte die Summieren Daten übertaregen... dann kann ich aber über Monate und Jahre keine sinvollen Auswertungen fahren.
Ich kann über Transform zwei Kurven summieren, dann kann ich hier aber nur alle anderen Kurven noch anzeigen oder alle anderen ausblenden.
Alles ganz schön kompliziert... und mächtig... oder?

Warum kann man hier eigentlich keine Bilder einstellen. :-) Dann würde ich mal zeigen wie ich das meine.

Gruß Martin

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Donnerstag 18. Mai 2023, 17:22
von __deets__
Bilder musst du auf zb imgur hochladen; und da den bbcode Knopf drücken, um den Einbettungscode zu bekommen.

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Donnerstag 18. Mai 2023, 17:25
von martin2day
Hey,

oh, das kenne ich noch von "früher" :-)
https://imgur.com/a/xqlvdmU
So sieht es aktuell aus.. denke Bilder sagen mehr als Worte...

Gruß

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Donnerstag 18. Mai 2023, 18:18
von __deets__
Also ich finde das sieht schon sehr danach aus: https://grafana.com/grafana/dashboards/ ... pv-system/

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Freitag 19. Mai 2023, 07:38
von martin2day
Guten Morgen,

ja das habe ich mir auch direkt angesehen bzw. das erscheint wenn man nach Grafana und PV schaut direkt.
Persönlich passt mir das aber nicht so. Ich habe wie gesagt mehr Infromationen im Chart. Hier mal all meine Kurven von heute morgen zusammen im Chart:
https://snapshots.raintank.io/dashboard ... ujpHtNBLup
Hier erkenne ich nicht sofort, ob meine Überschussreglung gut geht oder nicht...

Aber das ist dann wohl auch keine Frage mehr für hier, oder?

Gruß

Re: Anfänger benötigt Hilfe bei Python, Dash, Plotly

Verfasst: Freitag 19. Mai 2023, 07:52
von __deets__
Mein Punkt ist: Grafana hat eine Menge an Moeglichkeiten. Was auch immer du da genau vor hast, dass das nicht geht, bezweifele ich erstmal. Belegen kann ich das nicht, dafuer benutze ich das nicht genug. Du musst dich entscheiden, wo du investieren willst. Denn seien wir mal ehrlich: es wird Dinge geben, die hier und jetzt mit Grafana gehen, die du in absehbarer Zeit nicht programmiert bekommst.