NEWS
[Gelöst] iobroker Pfad auf neue Datenpunkte überwachen
-
Hallo zusammen, ich würde gerne einen bestimmten Ordner im iobroker (in meinem Fall octoprint.0.files) daraufhin überwachen, ob neue Verzeichnisse oder Datenpunkte hinzugefügt werden. Ist das möglich? Mit
on("stateid", function(){})
kann ich ja soweit ich weiß nur auf Wert-Änderungen in States reagieren und somit bringt mir das nichts. Ich hab die Funktion onObject (mit der SignaturonObject(pattern: string, callback: iobJS.ObjectChangeHandler)
) gefunden, darüber habe ich aber keinerlei Infos zur Verwendung gefunden und ein Test mitonObject("octoprint.0.files.*", function(){})
hat auch nichts ergeben. Jemand eine Idee?Hintergrund: ich zeige die zuletzt hochgeladenen Dateien auf meinem 3D Drucker über die Octoprint-Instanz an und stelle das als HTML Tabelle in der Vis dar um darüber den Druck einer Datei auszulösen (mit einem jeweiligen Button, der den entsprechenden "print" State im Unterordner der Datei setzt). Das funktioniert auch soweit, nur hab ich im Moment ein Zeitintervall definiert, in der die Tabelle aktualisiert wird. Schöner wäre es, die Tabelle nur zu aktualisieren, wenn auch ein neuer Datenpunkt (also eine neue Datei auf dem Octoprint-Server) hinzugekommen ist.
Vielen Dank schonmal
-
@boriswerner sagte: Ich hab die Funktion onObject ... gefunden
Wo?
@boriswerner sagte in iobroker Pfad auf neue Datenpunkte/states überwachen:
zu aktualisieren, wenn auch ein neuer Datenpunkt (also eine neue Datei auf dem Octoprint-Server) hinzugekommen ist.
Wenn der neue DP einen Zeitstempel erhält, sollte ein Trigger mit RegExp darauf reagieren.
on({id: /^octoprint\.0\.files\..+/}, function(dp) {});
-
@paul53 onObject und die Funktionssignatur hab ich in der Autovervollständigung vom Javascript Editor gefunden (hab einfach mal geschaut, was mir so vorgeschlagen wird).
Dein Beispiel funktioniert, allerdings wird das on bei jeder Wertänderung eines beliebigen Datenpunktes in dem Pfad ausgelöst. Das ist eine andere Eventquelle als ich gehofft hatte (wie im ersten Post beschrieben wollte ich lieber auf das Event "Datenpunkt wurde erstellt" reagieren, statt "Datenpunktwert hat sich geändert"), das hilft mir aber auch, da ich das jetzt einfach noch auf den "name" Datenpunkt erweitern kann. Der ändert sich nie.
Somit habe ich jetzt folgende Lösung für mein Problem (log ist natürlich nur Beispielhaft):
on({id: /^octoprint\.0\.files\..+\.name/, change: "ne"}, function(dp) {log(dp.id);});
und ich bedanke mich vielmals bei dir. Manchmal denkt man einfach zu kompliziert