executeCommandLine echo funktioniert nicht.

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
werwurst
Beiträge: 7
Registriert: 9. Sep 2017 17:10
Answers: 0

executeCommandLine echo funktioniert nicht.

Beitrag von werwurst »

Guten Tag,

ich nutze Openhab 3.1 stable und versuche schon seit mehreren Tagen verzweifelt einen String in eine Datei zu schreiben.

Dieser Befehel erzeugt die Datei "test" im Ordner "/tmp" und funktioniert:
executeCommandLine("touch", "/tmp/test")


Dieser Befehl soll den Text "TestText" in die Datei "test" schreiben und funktioniert nicht.
executeCommandLine(Duration.ofSeconds(10), "echo", "TestText", ">", "/tmp/test")



Egal was ich versuche ("test.txt" anstatt von "test", anderer Ordner, ">>" anstatt ">"), es gelangt kein Text in die Datei.


Woran kann das liegen?
Ich habe auch einen anderen Ordner probiert und für alle Benutzter Schreib-, Lösch- und Leserechte freigegeben.
Es gibt so viele Lösungsansätzte bei google, aber nichts hat bisher funktioniert.







Vielleicht hat ja auch jemand eine andere Lösung für mein Problem.
Ich möchte Daten zwischenspeichern und diese später (oder nach einem Neustart) wieder aufrufen.

Bsp.
"Am 01.01.2021 kostet das Brot 2,00€, die Marmelade 0,50€ ..." --> speichern
"Am 02.01.2021 kostet das Brot 2,10€, die Marmelade 0,45€ ..." --> speichern
..... usw.

Und am 02.11.2021 brauche ich den Preis für das Brot, die Marmelade usw. vom 02.01.2021.

Pro Tag ein Item zu erstellen, wäre ganz schön aufwendig und daher wollte ich diese Information in eine Textdatei schreiben.



Für jeden Lösungsansatz bin ich dankbar.


EDIT: Ich habe gerade raus gefunden, dass es JavaSrcipt und Jython als Addon für Openhab gibt. Ich dachte immer, Java Befehle funktionieren ohne Addons, einfach so. Eventuell komme ich damit weiter.

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: executeCommandLine echo funktioniert nicht.

Beitrag von udo1toni »

Dafür gibt es die Persistence Services. Du legst pro Artikel ein Item an (also eines für Brot, eines für Marmelade usw.). Dieses Item persistierst Du. Dabei bietet sich eine Datenbank wie MySQL o.Ä. an, da dort die Daten unverfälscht und dauerhaft gespeichert werden.
Aus einer Rule heraus kannst Du dann per Itemname.historicState(Zeitpunkt, Persistence Service).state auf jeden beliebigen Zeitpunkt zugreifen.
Da hier Status gespeichert werden, spielt es keine Rolle, wann das Item den Wert zugewiesen bekam. Mit einem ähnlichen Aufruf wie oben (nur nicht mit.state, sondern mit… ähm… Schlüsselwort ist mir gerade entfallen… ;) ) kannst Du auch den exakten Zeitpunkt des Updates erfahren.


Gesendet von iPad mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

werwurst
Beiträge: 7
Registriert: 9. Sep 2017 17:10
Answers: 0

Re: executeCommandLine echo funktioniert nicht.

Beitrag von werwurst »

Genial, dann habe ich gleich zwei Lösungsansätze. Das mit dem JavaSrcipt AddOn hat jedenfalls geklappt.

Kann man mit dem Persistence Services eigentlich auch mehrere Informationen pro Item speichern?
01.01.2021 --> Item Brot, Preis 2€, Einkauf 5, Verkauf 2 ...

Ich merke schon, da hab ich auf jedenfall noch Nachholbedarf.

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: executeCommandLine echo funktioniert nicht.

Beitrag von udo1toni »

Ein Item ist für eine Information zuständig. Natürlich kannst Du ein String Item verwenden und dort einen beliebig langen String speichern (also relativ... die Persistence begrenzt einen String auf 20.000 Zeichen, wenn ich es richtig im Kopf habe).

Aber Du willst hier ja verschiedene voneinander unabhängige Informationen speichern. Wenn es nur darum geht, die zwei gesammelten Informationsblöcke miteinander zu vergleichen, kannst Du das natürlich über ein Item erledigen. Willst Du aber z.B. die Trends der Preise pro Produkt anzeigen, müsstest Du mit erheblichem Aufwand die einzelnen Informationen herausparsen um vergleichen zu können.

Ich habe auch String Items, die mehrere Informationen halten, da geht es aber darum, diese Informationen als Block darzustellen, z.B. die Leistungsdaten der PV-Anlage, Momentanleistung, Tagesproduktion, Jahresproduktion, Gesamtproduktion. Dafür wollte ich keine vier Zeilen in meiner Übersicht haben, also habe ich ein Item, in welchem die Informationen zusammengefasst sind.
Die einzelnen Informationen liegen aber als Zahl in einzelnen Items vor, und diese Items werden auch persistiert.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten