Seite 1 von 1

100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 17:44
von kiaralle
Hallo,

aktuell arbeite ich mit cvs-Dateien.
Mein Ziel ist es Daten für 12h zu sammeln und diese später auszuwerten. Braucht keiner, macht man aber :-)
Spaß am programmieren.

Wie man Werte in die Tabelle ablegt weiß ich. Funktioniert und ich bin glücklich.

Code: Alles auswählen

statement = "INSERT INTO messwandler (haus, mess_2, garage, warmwasser) VALUES (%s, %s, %s, %s)"
messung = (haus, mess_2, mess_garage, mess_heizung)
cursor.execute(statement, messung)
connection.commit()
Nur bei 100Stück, wird das nicht mehr schön. Zu viele %s und Variablen

Ich habe:
master_result.registers ... enthält 91 Modbuswerte, beginnend bei 0, also 0-90

Eine Tabelle mit Feldern reg_1 bis reg_90, da hinein sollten jetzt meine Werte aus master_result.registers.

Wie löst man das? Mit einer Schleife?

Gruß Ralf

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 17:54
von __deets__
Da mag eine Schleife vorkommen, aber vor allem löst man das nicht mit einer Monster Tabelle mit so vielen Spalten. Stattdessen eine Tabelle mit Spalte Name und Spalte wert. Ggf muss das Schema noch ausgefeilter werden, wenn die Werte verschiedene Typen haben.

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 19:05
von kiaralle
Ok,
ich könnte ja in 9 Tabellen mit ja 10 Spalten aufteilen.
So etwas wäre sicher einfacher und übersichtlicher.
Alle Werte haben int(6)

Oder in was für eine Richtung würdest du gehen?

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 19:37
von __blackjack__
@kiaralle: Das ändert nichts. Das Problem ist die Struktur, nicht dass es zu viele Spalten sind. Das ist wahrscheinlich eine Tabelle mit ca. 4 Spalten. ID, Zeitstempel, Messwertname bzw. -ID, und Messwert.

Eine Tabelle in einer relationalen Datenbank ist was anderes als eine Tabelle in einer Tabellenkalkulation.

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 19:56
von kiaralle
@blackjack

Du meinst so ähnlich wie bei Influxdb?

Da wird alles untereinander geschrieben und es wird nach Zeit, ID, Value die Daten aus der Tabelle gezogen.

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 20:54
von sparrow
Nein, __blackjack__ meint wie bei Relationalen Datenbanken üblich.
Mach dich gerne mit dem Konzept vertraut.

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 21:31
von kiaralle
Kurz angelesen... Wenn ich das jetzt richtig verstanden habe.

Jeder Parameter hat seine eigene Tabelle.

Tabelle VvP1
ID = z.B. 1 , Value
....
Tabelle UvP1
ID = z.B. 1 , Value
...
ID könnte dann auch timestamp sein.

Ich kann dann aus allen Tabellen nach ID und den Werten filtern.

So etwas ich hatte mal als Chemielager-Datenbank. Jeder Stoff seine eigene Tabelle.

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Sonntag 10. März 2024, 22:35
von sparrow
Nee, falsch eingelesen.

Du hast zwei Tabellen (oder besserer Name: Relationen. Sonst ist man gedanklich immer bei der Tabellenkalkulation).
Eine Relation, welche die Messung repräsentiert und eine Relation, die alle Werte aller Messungen enthält.
Jede Messung bekommt eine ID, die wird dann als Fremdschlüssel in der Relation der Werte verwendet. Und deren Aufbau ist wie von __blackjack__ oben beschrieben.

Jede Messung hat dann einen Eintrag in der Relation für Messungen und n Einträge in der Relation der Werte.

Wobei wahrscheinlich noch eine dritte Relation die verschiedene Messwerttypen enthält.
Daher die Unterscheidung bei __blackjack__ ob man den Namen oder die ID des Messwerttypen speichert.

Das Stichwort ist Normalisierung.

Re: 100 Modbus-Werte in Mysql ablegen.

Verfasst: Montag 11. März 2024, 18:39
von kiaralle
Ok, da muss ich noch mal ran.
Wird ein spannendes Projekt :)