NEWS
SQL Adapter - Datenverwaltung + Normalisierung
-
Hallo
SQL Adapter ist installiert - Verbindung zur MSSQL Server Instanz steht - DB+Tabellen wurden angelegt - Datenpunkt Inhalte können gespeichert werden. Dann habe ich im Pfad 0_userdata verschiedene Versuche gemacht.
Folgende Fragen:- Unter "https://www.iobroker.net/docu/index-254.htm?page_id=3772&lang=de" gibt es eine Spec für den SQL Adapter, gibt es etwas mit weiterführenden Erklärungen?
- getestet wurden Zahlen und Logikwerte -> funktioniert (Werte erscheinen in den entsprechenden Tabs)
- Test mit Zustandstyp "Zeichenkette" und Rolle "text" führt zum Fehler "RequestError: The data type text cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable."
- der DP wird in der Tab "datapoints" eingetragen und der Wert in die Tab ts_string geschrieben (trotz Fehlermeldung im IOBroker)
- wenn es mir gelingt, das Fenster zur Wertänderung trotz Fehlermeldung zu öffnen, dann kann ich dort den Wert ändern und der wird dann auch wieder in SQL DB gespeichert - Fehlermeldung kommt bei Mousehover über den Wert im IOBroker immer wieder
- Einstellungen Datenpunkt - 'Zustandstyp' - "Zeichenkette", "gemischt" -> gleicher Fehler
- Einstellungen Datenpunkt - 'Zustandstyp' - "JASON" -> gleicher Fehler
- Einstellungen sql.0 - 'Speichern als' - "Zeichenfolge" und "Automatisch" -> gleicher Fehler
- wie gesagt, die Daten werden in der Tab ts_string gespeichert, aber die Fehlermeldung im Log und bei Mousehover bleibt
- beim Löschen von Datenpunkten im IOBroker werden die Einträge in der DB nicht gelöscht -> ist das so gedacht?
- beim Anlegen von Datenpunkten mit einem Namen, für welchen schon Daten in der DB stehen, gibt es keine Warnung -> ist das so gedacht (Normalisierung 1NF)?
- Wofür ist die Einstellung "Rolle" gedacht?
Fazit: in meiner Installation lassen sich nur Boolean und Number Werte in der SQL DB ohne Fehlermeldung speichern.
ps: Der Adapter Tankerkoenig hat ebenfalls ein 'String' Datenpunkt für den Namen der Tankstelle (Name) - auch dort gibt es die gleiche Fehlermeldung.
Wenn jemand Zeit hat, sich mit dem Thema zu befassen und einen Tip hat, der mich hiermit weiterbringt, dann wäre ich happy. Vielen Dank für alle Tips und Hinweise. Wenn es alternative Adapter gibt, die dieses Verhalten nicht haben, dann bitte ich um einen Hinweis. Danke.
-
Hat niemand diesen Adapter in Verwendung? Kann jemand das beschriebene Verhalten nachvollziehen?
Danke für alle Tips. -
@tomlei
Verfahrensaufzählung mit viel Text und mit darin versteckten Fragen ist eine ungünstige Kombination.Der Fehler
RequestError: The data type text cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable
ist wohl eher in deinem SQL
https://stackoverflow.com/questions/34897677/the-data-type-text-cannot-be-used-as-an-operand-to-the-union-intersect-or-excep/34897700
Der Adapter vermittelt dir den Fehler aus der Datenbankwenn du selbst kein sql verwendet hast, dann muss der adapter-entwickler ran.
ggfs. kannst du bei github einen issue einstellen
die meisten hier verwenden mysql/mariadb.
mssql seh ich hier eher selten. -
@oliverio
Danke für Deine Antwort.Ich dachte ich habe meine Fragen halbwegs strukturiert formuliert...
Das einzige was man konfiguriert sind die Verbindungsdaten zum SQL Server. Die Datenbank + Tabellen werden ja vom Adapter selbstständig angelegt. Da bin ich davon ausgegangen, dass das in der richtigen Weise erfolgt. Die Data Types in den Tabellen habe ich geprüft - für Textfelder ist auch text/string eingestellt. Wenn ich über eine SQL query daten in diese tab reinschreibe (vom Server direkt) dann funktioniert das auch und der Server zeigt mir keine Fehler.
Wie auch immer, ich nutze jetzt den History Adapter und lesen die JSON files aus. Das funktioniert auch.Danke und Gruß
-
@tomlei
hast du dazu eine lösung gefunden?
ich hätte ein identes problem ...danke
-
@f493
Ich habe folgende Einstellungen zur Speicherung eines Wertes als Text:
Die Werte hier lasse ich alle unverändert auf die Standard Einstellungen stehen (Rolle, Zustandstyp).Der Wert wird dann in der DB in der Tabelle ts_string als String Wert eingetragen. Hier in diesem Fall handelt es sich um den Wert "49.9Hz". Den numerischen Wert des Strings trenne ich dann mit einer SQL Server Function vom Text im String und kann ihn dann mit einer Query in einem Grafana Chart anzeigen/auswerten.