Wie Daten (Energieverbrauch mit Owl USB) aus SQL-DB in fhem holen?

Begonnen von dadoc, 12 August 2022, 19:35:22

Vorheriges Thema - Nächstes Thema

dadoc

Hallo zusammen,
der Energiemesser Owl USB war ja schon mal mit einem Modul in fhem intergriert, allerdings brauchte es da bei jedem Kernel-Update auf dem Wirts-Raspi neue Kernelmodule, und diejenigen, die die hohe Kunst der Erstellung derselben beherrschten, haben verständlicherweise irgendwann die Lust verloren.
Nun habe ich recht alte alternative Lösungen gefunden, die ohne die Kernelmodule die Werte auslesen. Ausprobiert habe ich eagle-owl. Es nutzt die libusb Library und benötigt keine spezifischen Kernelmodule. (einen anderen https://www.npmjs.com/package/node-owlusbAnsatz mit Node habe ich bisher nicht zum Laufen bekommen).
Eagle-owl läuft nun auf meinem fhem-Raspi; über http://192.168.0.30/live.php sehe ich die Live-Daten (die anderen wie line_chart.php, listValidDays.php usw. bringen noch Fehler).
Die Daten werden in die SQL-Datenbank eagleowl.db geschrieben, ich habe mal eine angehängt.
Da ich den Live-Verbrauch benötige, damit mir hier in Spanien nicht der Begrenzer den Strom abschaltet (Besonderheit der hiesigen Stromverträge: Man darf nie mehr als die gebuchten KW zapfen): Wie kriege ich die Daten am Elegantesten in fhem? Beim Recherchieren habe ich eigentlich nur den Weg über dbLog gefunden. Aber die Ausgabe in die SQL-Datenbank so umzuprogrammieren, dass sie zum dbLog passen, übersteigt noch deutlich meine Kenntnisse.
Gibt es andere Wege? Besser wäre es natürlich, wenn man die Daten direkt vom USB-Device an fhem durchreichen könnte. So könnte man sich die ganze Apache-php-Orgie auf dem Raspi speichern.
Dankbar für jede Hilfe grüßt
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

rudolfkoenig

Mir faellt nur was Primitives ein:

defmod d dummy
defmod a at +*00:01 { my $kw=`echo "select ch1_kw_avg from energy_history" | sqlite3 <path-to-db>/eagleowl.db | tail -1`;; chomp($kw);; fhem "setreading d ch1_kw_avg $kw" }


Das setzt voraus, dass sqlite3 nicht an der Reihenfolge ruettelt, sonst muss man mit den year/month/etc Spalten sortieren ueben.

dadoc

Vielen Dank (dafür hätte ich vermutlich mehrere Monate gebraucht ;).
Das bringt auf jeden Fall schonmal einen sich ändernden Wert ins Reading, auch wenn der noch nicht ganz plausibel ist:
ch1_kw_avg 27.101667 2022-08-12 20:35:37.
Der Live-Wert wird so in live_data.php geholt:
<?php
$config 
parse_ini_file('/etc/eagleowl.conf'true);
$root_path "";
if(isset(
$config['install_path']))
  
$root_path $config['install_path'];
$live_file $root_path."/.live";
echo 
file_get_contents($live_file);
?>



Das ergibt den "Quellcode" von z.B.
12/08/2022 07:26 - 2737.00 kW
genau das steht wenig überraschend auch in /opt/owl/.live

Ich nehme mal an, dass das vor dem Eintragen in die db geschrieben wird, dann könnte man den Wert evtl. auch von dort holen?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

rudolfkoenig

ZitatIch nehme mal an, dass das vor dem Eintragen in die db geschrieben wird, dann könnte man den Wert evtl. auch von dort holen?
Wenn die Datei nicht entfernt wird, dann geht das mit dem gleichen Verfahren wie oben, indem man `echo...tail -1` durch `cat <install_path>/.live` austauscht.

dadoc

Vielen Dank, werde ich gleich mal ausprobieren.
Ich habe es momentan mit CustomReadings gelöst:
readingDefinitions Verbrauch:qx(sed -n '1p' /opt/owl/.live)
Da ich den sed-Befehl für das Extrahieren des Werts, der auf der Konsole funktioniert (sed "s/.\{19\}\(........\).*/\1/" /opt/owl/.live) in CustomReadings nicht zum Laufen gebracht habe, formatiere ich den Wert im notify, das auch das vorsorgliche Abschalten von Verbrauchern steuert.
Vielleicht findet sich ja mal ein Abenteuerlustiger, der aus eagle-owl und dem cm160-Owl-Modul ein schickes fhem-Modul macht - oder ich kriege das in wenigen Jahren selbst hin ;)
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods