NEWS
Adapter um Dateien zu lesen
-
Hallo,
ich frage meinen Stromzähler regelmäßig ab. Die Werte werden zur Zeit in einer Datei gespeichert. Gibt es einen Adapter mit dem ich die Datei(n) auslesen und in iobroker nutzen kann?
Danke für die Hilfe,
a200.
-
ich frage meinen Stromzähler regelmäßig ab. Die Werte werden zur Zeit in einer Datei gespeichert. Gibt es einen Adapter mit dem ich die Datei(n) auslesen und in iobroker nutzen kann? `
Wo liegt die Datei denn?
Ich erzeuge z.B. auf anderen Server per Skript und Cron lokale Abfragen, die auf dem externen Server gespeichert werden.
Das Verzeichnis des externen Server ist dann auf meinem ioBroker Server (Linux) per mount eingebunden.
Die Datei lasse ich mir per Skript (Javascript-Adapter) mit excec() und "cat…" ausgeben und verarbeite den Inhalt dann im Skript.
Beispiel:
!
// ermittelt auf Linuxrechner den Festplattenplatz für ioBroker // mit dem Linux Befehl: du ! var pfad = "Systeminfos.mySQL.HD_mySQL" + "."; var cronStr = "*/30 * * * *"; ! var abfrageMySQL = "cat /mnt/ubuntu1604-mysql-server/opt/status/hd_mysql.txt"; var abfrageMySQLiobroker = "cat /mnt/ubuntu1604-mysql-server/opt/status/hd_mysql_iobroker.txt"; var abfrageMySQbackup = "cat /mnt/ubuntu1604-mysql-server/opt/status/hd_mysql_iobroker_backup.txt"; var abfrageDate = 'cat /mnt/ubuntu1604-mysql-server/opt/status/date.txt'; ! var idHDmySQL = pfad + 'HD_mySQL'; var idHDmySQLbackup = pfad + 'HD_mySQL_Backup_DS'; var idHDmiobroker = pfad + 'HD_mySQL_iobroker'; ! var idAbfrageDatum = pfad+ "letzteAbfrage"; ! createState(idAbfrageDatum, "", { name: 'Datum der Daten vom mySQL Server', desc: 'Datum der Daten vom mySQL Server', type: 'string', unit: '', role: 'value' }); ! createState(idHDmySQL, 0, { name: 'Festplattenplatz mySQL gesamt', desc: 'Festplattenplatz mySQL gesamt', type: 'number', unit: 'MByte', role: 'value' }); ! createState(idHDmySQLbackup, 0, { name: 'Festplattenplatz mySQL Backup auf der Diskstation', desc: 'Festplattenplatz mySQL Backup auf der Diskstation', type: 'number', unit: 'MByte', role: 'value' }); ! createState(idHDmiobroker, 0, { name: 'Festplattenplatz mySQL ioBroker', desc: 'Festplattenplatz mySQL ioBroker', type: 'number', unit: 'MByte', role: 'value' }); ! function abfrageDatum() { exec(abfrageDate, function(err, stdout, stderr) { if (err) { log(err,"warn"); return; } stdout = stdout.split(","); // alle nicht-Ziffern als Trennzeichen für das Array verwenden (im Block) //log(stdout); setState(idAbfrageDatum, stdout[1]+","+stdout[2]+","+stdout[0]); }); } ! // Belegung Festplattenplatz für ioBroker mit "du" auslesen function abfrageHD(abfrage,dp) { exec(abfrage, function(err, stdout, stderr) { if (err) { log(err,"error"); return; } stdout = stdout.replace(/[\D]+/, ""); // alle nicht-Ziffern entfernen setState(dp,parseInt(stdout)); }); } ! function abfragen() { abfrageDatum(); abfrageHD(abfrageMySQL ,idHDmySQL); abfrageHD(abfrageMySQbackup ,idHDmySQLbackup); abfrageHD(abfrageMySQLiobroker ,idHDmiobroker); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, abfragen); ! // main // ----------------------------------------------------------------------------- function main() { abfragen(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! setTimeout(main, 500); !
Worauf läfut Dein ioBroker und kannst Du das Verzeichnis auf dem die Dateien liegen im ioBroker Rechner einbinden?
-
danke. das brauchte ich. iobroker und die daten sind auf dem gleichen raspi. jetzt mach ich mich an die arbeit. danke und bis später.
-
Ich hatte auch schonmal so eine Idee … Ein Adapter dem man 1-n Files gebe kann die der dann auf "change" monitored wo man Datenpunkte und Werte reinschreiben kann und wenn das File geändert wurde wird es neu eingelesen und alle DPs aktualisiert die drin stehen.
Das geht auch alles per JS-Adapter und mit https://www.npmjs.com/package/watch-inotify ... von daher war die Prio jetzt für mich nicht sooo hoch
Und am Ende war meine Hauptunsicherheit noch ob das überhaupt das ist was sinn macht. NFS Files gehen glaube ich nicht und die Frage ist ob es wirklich so ist das in den meisten Fällen wirklich kontrolle über das Fileformat besteht oder ob es nicht noch generischer sein muss (Regex kram und so)
-
Die Datei lasse ich mir per Skript (Javascript-Adapter) mit excec() und "cat…" ausgeben und verarbeite den Inhalt dann im Skript.
Beispiel:
... `
Geil ruhr70! Genau das habe ich gebraucht. Hab mir alles angepasst und die Werte werden jetzt sauber von ioBroker eingelesen, via MySQL archiviert und visualisiert.Vielen Dank!
-
Ich hatte auch schonmal so eine Idee … Ein Adapter dem man 1-n Files gebe kann die der dann auf "change" monitored wo man Datenpunkte und Werte reinschreiben kann und wenn das File geändert wurde wird es neu eingelesen und alle DPs aktualisiert die drin stehen.
Das geht auch alles per JS-Adapter und mit https://www.npmjs.com/package/watch-inotify ... von daher war die Prio jetzt für mich nicht sooo hoch
Und am Ende war meine Hauptunsicherheit noch ob das überhaupt das ist was sinn macht. NFS Files gehen glaube ich nicht und die Frage ist ob es wirklich so ist das in den meisten Fällen wirklich kontrolle über das Fileformat besteht oder ob es nicht noch generischer sein muss (Regex kram und so) `
So eine Idee habe sogar ich.Allerdings sehr universell:
-
Kann nicht nur Dateien, sondern auch http/https get/post handeln
-
AbfrageIntervall einstellbar, oder/und bei Dateien auf -Änderungen
-
Werte mit regex extragieren und noch Datentyp einstellen.
-
http auch in Schreibrichtung unterstützen.
Eigentlich primitiv, nur Einstellungen müssen bequem sein.
-
-
Ich hatte auch schonmal so eine Idee … Ein Adapter dem man 1-n Files gebe kann die der dann auf "change" monitored wo man Datenpunkte und Werte reinschreiben kann und wenn das File geändert wurde wird es neu eingelesen und alle DPs aktualisiert die drin stehen.
Das geht auch alles per JS-Adapter und mit https://www.npmjs.com/package/watch-inotify ... von daher war die Prio jetzt für mich nicht sooo hoch
Und am Ende war meine Hauptunsicherheit noch ob das überhaupt das ist was sinn macht. NFS Files gehen glaube ich nicht und die Frage ist ob es wirklich so ist das in den meisten Fällen wirklich kontrolle über das Fileformat besteht oder ob es nicht noch generischer sein muss (Regex kram und so) `
So eine Idee habe sogar ich.Allerdings sehr universell:
-
Kann nicht nur Dateien, sondern auch http/https get/post handeln
-
AbfrageIntervall einstellbar, oder/und bei Dateien auf -Änderungen
-
Werte mit regex extragieren und noch Datentyp einstellen.
-
http auch in Schreibrichtung unterstützen.
Eigentlich primitiv, nur Einstellungen müssen bequem sein. `
Sehr sehr cool!
-