NEWS
ioBroker/create-adapter, Socket.io und writeFile
-
Ich habe einen Spieladapter wo ich Socket.io nutze um u.a. Json Files zu schreiben. Bisher konnte ich mit:
servConn.init({ name: 'nightingale.0', // optional - default 'vis.0' connLink: 'http://localhost:8084', // optional URL of the socket.io adapter socketSession: '' // optional - used by authentication },{...
und writeFile() die Files direkt unter "\iobroker-data\files\nightingale.0" ablegen.
Nun habe ich nach Jahren das Grundgerüst des Adapter mit ioBroker/create-adapter mal neu aufgesetzt.
Wenn ich jetzt Dateien schreiben mit writeFile() dann landen die alle unter "\iobroker-data\files\vis.0". Hab ich was übersehen oder steckt in dem generierten Skeleton noch irgendwo die VIS mit drin?
Danke für Hilfe!
-
@snador Kannst du mal die Datei
.create-adapter.json
hier posten. Sie befindet sich im Root des neu erstellten Adapters. -
{ "cli": true, "adapterName": "nightingale", "title": "Nightingale", "keywords": [ "ui", "dashboard", "admin panel", "responsive", "visu", "vis" ], "expert": "no", "features": [ "adapter" ], "adminFeatures": [], "type": "visualization", "startMode": "daemon", "connectionType": "local", "dataSource": "poll", "connectionIndicator": "no", "language": "JavaScript", "adminReact": "no", "tools": [ "ESLint", "type checking" ], "indentation": "Tab", "quotes": "single", "es6class": "yes", "authorName": "snador", "authorGithub": "snador1977", "authorEmail": "info@....de", "gitRemoteProtocol": "HTTPS", "gitCommit": "no", "license": "MIT License", "ci": "gh-actions", "dependabot": "no", "creatorVersion": "1.31.0" }
-
@snador sagte in ioBroker/create-adapter, Socket.io und writeFile:
wo ich Socket.io nutze um u.a. Json Files zu schreiben
Danke für die Config. Was ich noch nicht ganz verstehe: von wo benutzt du socket.io? Aus dem index_m.html oder aus dem Adapter?
An beiden Orten gibt es inzwischen fertige Klassen, die die Kommunikation übernehmen und auch ein File Upload können. Dafür brauchst du kein socket.io
-
@unclesam Sorry für die lange Zeit: Das Projekt lag ne ganze Weile... Kurz zum Verständnis: Ich schreibe eine Vue App die über meinen Adapter ein Frontend zur Verfügung stellt, ähnlich der Vis... Ich nutze Socket um im Frontend die States aus dem ioBroker zu holen, Daten zu schreiben usw. Im Frontend kann der Benutzer Dinge konfigurieren, diese Config Daten werden als JSON geschrieben und wenn man das Frontend wieder aufruft geladen.
Ich nutze die Funktionen aus der conn.js die ich mir aus dem Vis Adpater entlehnt habe. Dort gibt es u.a. eine Funktion "writeFile" welche ich nutze.
Früher hat er die Daten nach "\iobroker-data\files\nightingale.0" geschrieben was mein Adpater war, jetzt aber landen die Daten unter: "\iobroker-data\files\vis.0". Wo hab ich was übersehen?
-
@snador Was ich vielleicht noch wichtig ist:
Socket Adpater ist aktiv. Ich lade in der Vue App / Frontend die http://ipadresse:8084/socket.io/socket.io.js und nutze dann die Funktionen aus der conn.js die ich mir im Vis Adpater entlehnt habe...
Ich bin also weniger im Adpater selber unterwegs sondern mehr in der Adapter Website, ähnlich dem Vis Adapter...
-
@snador sagte in ioBroker/create-adapter, Socket.io und writeFile:
conn.js die ich mir im Vis Adpater entlehnt habe
Möglicherweise ist dort der Pfad drin beim writeFile.
Wenn du nur ein einfaches JSON speichern willst, nimm doch einfach einen String Datenpunkt (z.B. in
0_userdata.0
), dann sparst du dir die ganze File Geschichte. -
@unclesam Danke für die Info. In den Funktionen ist der Pfad nicht drin, dieser wird als Parameter beim Aufruf der Funktion übergeben. Deshalb hat mich das ja stutzig gemacht. Bisher gibt es ja auch, aber ich schau Mal...
Allerdings klingt Dein Vorschlag auch gut. Kannst er Datenpunkt auch komplexe Json speichern? Und ist das ganze persistent? Wenn ich den ioB anhalte und wieder starte sollten die Daten noch da sein und die Konfig laden zu können. Passt das?
Danke!
-
@snador Ich glaube, man kann keine Objekte in States speichern, nur Strings, Zahlen, Boolean und Listen der genannten Typen. Aber du kannst ja einfach zuvor ein JSON.stringify() machen und dann nach dem auslesen wieder ein JSON.parse(). Damit ist es ein String, und das wird auf jeden Fall gehen.
-
@unclesam Stimmt das wäre ein Möglichkeit. So ne Config Datei erreicht aber schnell auch Mal 700Kbyte. Bin mir nicht sicher, dass das als String noch funktioniert.
Und was ist mit der Persistenz? Bleibt der Datenpunkt dauerhaft erhalten? Ist er nach Neustart des ioB noch da, also.mit dem Inhalt?
-
@snador sagte in ioBroker/create-adapter, Socket.io und writeFile:
@unclesam Stimmt das wäre ein Möglichkeit. So ne Config Datei erreicht aber schnell auch Mal 700Kbyte. Bin mir nicht sicher, dass das als String noch funktioniert.
Musst du versuchen, sollte aber gehen.
Und was ist mit der Persistenz? Bleibt der Datenpunkt dauerhaft erhalten? Ist er nach Neustart des ioB noch da, also.mit dem Inhalt?
Zum Gottes Willen: ja. Sonst würde ioBroker seine Arbeit nicht machen. Das ist eines der wichtigsten Merkmale, dass er Daten nicht nur verschickt sondern auch speichert.