Seite 1 von 2

Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Di 27. Sep 2022, 23:56
von resuah.nitram
Hallo liebe Forum-Teilnehmer,

ich möchte gerne Temperaturdaten, die im Minutenintervall in eine sqlite3-Datenbank geschrieben werden, mit LO Calc anzeigen (darstellen (Dashborad)) lassen. Daher soll LO Calc in regelmäßigen Anständen aktualisiert das Ergebnis eines sqlite-Views in einer LO Calc Zelle darstellen.

Hat jemand hierzu einen hilfreichen link, wo ich nachlesen kann, wie man so etwas realisieren kann unter Linux (Debian-based)?

LG Martin

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Mi 28. Sep 2022, 07:55
von Wanderer
Da Du nicht schreibst, was Du schon hast, fang mit dem Handbuch zu LibreOffice Base an: https://de.libreoffice.org/get-help/documentation/

Die Nutzung von SQlite hat RobertG schon dort beschrieben.

Als zweites kannst Du deine Abfrage oder Ansicht über die Datenquellenansicht in eine Calc-Tabelle ziehen.

Zum regelmäßigen Aktualisieren wirst Du dann meiner Ansicht nach ein Macro brauchen.

Mfg, Jörn

PS: Irgendwann solltest Du noch ein paar Gedanken über gleichzeitigen Zugriff auf Sqlite-Datenbanken verschwenden, denn offensichtlich/eventuell soll Deine Datenbank ja von einem anderen Prozess geschrieben werden.

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Mi 28. Sep 2022, 11:16
von karolus
Ich bin kein Datenbankexperte, aber wenn der andere Prozess von dir kontrolliert|geschrieben wurde, wäre da ja schon mal die Möglichkeit die Daten zusätzlich direkt in einem Calc-dokument abzulegen.

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Mi 28. Sep 2022, 15:14
von gogo
Wir haben so etwas schon mal realisiert.
  1. Folgendes Makro unter "Meine Makros & Dialoge / Standard / Module1" ... oder in einer Extension speichern.
  2. Das Bash-Script erstellen,
  3. im Script und im Makro die Pfade anpassen, und
  4. dann kannst Du in jeder Calc-Datei mit "=Get_That_Value()" den aktuell abgefragten Wert anzeigen lassen.
Falls mehrere User diesen Wert brauchen, ist es sinnvoller, das Bash-Script mit einem cron-Befehl am "Server" laufen zu lassen, das Makro braucht dann nur die eh schon existierende Ergebnisdatei auszulesen, muss also nur mehr den Teil mit der "open"-Anweisung durchführen. Nachteil dabei: Du hast 24/7 Schreibzugriffe am Server ...

Code: Alles auswählen

Function Get_That_Value()
  Dim i As Integer
  Dim s As String

  shell("/Pfad/zu/folgendem/Script.sh")
  ' #!/bin/bash
  ' sqlite3 "/Pfad/zur/Datenbankdatei.db" "select Feld1 from Tabelle1 where Feld2 = 'foo'" > /Pfad/zur/Ergebnisdatei.txt
  ' exit 0

  n=0
  ' Latenz für das Script abwarten
  do while n < 20 and not FileExists("/Pfad/zur/Ergebnisdatei.txt")
	n=n+1
	wait 20
	loop

  if n >= 20 then
		Get_That_Value = "#Ergebnis wurde nicht ermittelt! - Ergebnisdatei wurde nicht gefunden!#"
	  else
	  	'Ergebnisdatei (ist in diesem Fall einzeilig) auslesen
		i = Freefile
		open "/Pfad/zur/Ergebnisdatei.txt" for Input as i
		if not eof(i) then
			Line Input #i, s
			Get_That_Value = s
		else
			Get_That_Value = "#Ergebnis wurde nicht ermittelt! - Abfragefehler???#"
		end if
		close #i
		shell("rm /Pfad/zur/Ergebnisdatei.txt")
	  end if

End Function

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Mi 28. Sep 2022, 22:47
von resuah.nitram
Hallo,

danke für die Rückmeldungen!

Die Temperaturdaten des DS18B20 werden mit einem Python-Skript in die sqlite DB geschrieben.

Was bereits funktioniert, ist, dass ich mit Python den Temperaturwert alle paar Sekunden in ein Calc-file(1) schreibe und dann diesen Wert in einem zweiten Calc-File(2) über die Funktion "Verknüpfung zu externen Daten ..." alle paar Sekunden aus dem ersten Calc-File(1) lese.

Hierbei kommt es jedoch zu Situationen, dass das Calc-file(1) zeitgleich geschrieben und gelesen wird und der Wert dann nicht aktualisiert werden kann.

Daher möchte ich eine saubere Lösen über eine sqlite DB.

Ich werde mir die von Euch bereitgestellten Lösungsansätze jetzt mal anschauen und weiter überlegen.

Liebe Dank
Martin

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Mi 28. Sep 2022, 23:14
von karolus
Hallo
Die Temperaturdaten des DS18B20 werden mit einem Python-Skript in die sqlite DB geschrieben
Das ist doch schon die halbe Miete, jetzt schaust du mal wie du die DB einbindest, der Link zu Roberts Dokumentation steht oben im Beitrag von Wanderer.

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Mi 28. Sep 2022, 23:15
von resuah.nitram
Hallo gogo,

Dein Skript holt einen gewünschten Wert aus sqlite und schreibt diesen in ein Textfile. Das wäre schon mal ein Ansatz. Aber die bekomme ich den Wert nun in Calc? Dein erwähntes Makro würde mich interessieren!

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Mi 28. Sep 2022, 23:25
von resuah.nitram
karolus hat geschrieben:
Mi 28. Sep 2022, 23:14
Hallo
Die Temperaturdaten des DS18B20 werden mit einem Python-Skript in die sqlite DB geschrieben
Das ist doch schon die halbe Miete, jetzt schaust du mal wie du die DB einbindest, der Link zu Roberts Dokumentation steht oben im Beitrag von Wanderer.
Leider steht sqlite als Auswahl bei den Datenbanken nicht zur Verfügung. Muss ich den Umweg über ODBC gehen?

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Do 29. Sep 2022, 00:59
von gogo
das Makro im Codeblock heißt "Function Get_That_Value()"
Wenn Du es unter "Meine Makros & Dialoge / Standard / Module1" ... oder in einer Extension speicherst wird es global verfüg bar und damit zu einer "benutzdefinierten Funktion" (Such' danach in der LO-Hilfe, dann sollte alles klar sein).
Der "open "/Pfad/zur/Ergebnisdatei.txt" for Input as i"-Block holt einfach Zeile 1 aus der Ergebnis-Datei und ordnet es dem Fuktions-Rückgabewert zu, so weiß Calc dann was es in die Zelle schreiben soll.

Bei gleichzeitigen Lese- und Schreibzugriffen kommst Du vermutlich um eine Serverlösung nicht umhin. Der Server regelt in dem Fall den Verkehr ;). Das Makro sollte dann jedenfalls funktionieren, da der sqlite3 Befehl eine readonly Anweisung beinhaltet, und schlimmstenfalls einfach die Ergebnisdatei nicht geschrieben wird. Ein Fehler kann fast nur im Bash-Script auftreten, und das sollte sich dann trotzdem einfach ohne weitere Probleme beenden - eben nicht mit exit 0 sondern mit dem Error des sqlite3-Kommandos.
Wenn Du in Python firm bist, kannst Du aber auch aus LO heraus die SQLite-DB als Server verwenden, indem Du in LO ein Python-Script speicherst, das direkt auf Deine SQLite-DB zugreift. Um in LO Python verwenden zu können muss das Debian-Paket "libreoffice-script-provider-python" installiert sein! Dann kannst Du Dich an die LO-Doku halten (https://help.libreoffice.org/ und dann nach "python" suchen)

Re: Daten (view) aus sqlite3 DB regelmäßig und automatisch auslesen

Verfasst: Do 29. Sep 2022, 08:10
von Wanderer
resuah.nitram hat geschrieben:
Mi 28. Sep 2022, 23:25
...
Leider steht sqlite als Auswahl bei den Datenbanken nicht zur Verfügung. Muss ich den Umweg über ODBC gehen?
Es gibt keinen "nativen" Connector in Base, also musst Du einen Treiber installieren, ob ODBC oder JDBC bleibt Dir überlassen. Ich nutze ODBC unter Windows, daher schaue ich immer zuerst da...

J.

PS: Da bei Dir nur ein Prozess schreibt, sollte es kein Problem geben, falls nicht eine beteilgte Implementierung ein File-Lock auf Ebene des Betriebssystems macht...

Vgl: https://stackoverflow.com/questions/406 ... ent-access

https://stackoverflow.com/questions/510 ... iple-users