NEWS
Eigenen Adapter erstellen
-
@ben1983
noch besser ist im adapter verzeichnis den folgenden befehl einzugebennpm install node-fetch
dadurch wird die dependency in dein package.json eingetragen
die bibliothek heruntergeladen und im verzeichnis node_modules
unterhalb deines adapterverzeichnisses gespeichertdas ist node standard und nix iobroker spezifisches
-
@oliverio habe ich gemacht, trotzdem kommt fetch not defined
-
@oliverio habe auch nochmal nur npm install fetch durchgeführt, also ohne node, aber bringt auch nichts
-
@oliverio noch ne Idee für mich?
Also das ist jetzt ne grundlegende Funktion für meinen gewünschten Apapter. Er ruft nämlich über Rest Daten ab.
Ich habe es im js Adapter mit gequetscht realisiert.
Möchte auch später anhand der Ergebnisse eine dynamische konfig anbieten.
Aber erst mal wäre es schön nur Daten zu bekommen.Also grundlegend möchte ich eine REST API Abfragen.
Wenn dazu jemand einen guten Tipp hat…. Immer her damit.abgesehen davon musste ich bei einem webprojekt fetch noch nie extra installieren.
-
@oliverio package.json sieht unter anderem so aus:
"dependencies": { "@iobroker/adapter-core": "^2.5.1", "fetch": "^1.1.0", "node-fetch": "^3.2.0" },
trotzdem sagt er, dass fetch nicht definiert ist.
musste es in einem anderen ordner mit npm install installieren und dann den kompletten ordner in den iobroker pfad kopieren.
anders hatte er irgendwelche rechte fehler.So langsam weiß ich nicht mehr weiter
Fehlermeldung:
gridvis_adapter.0 2022-01-28 22:00:24.850 error fetch is not defined gridvis_adapter.0 2022-01-28 22:00:24.850 error ReferenceError: fetch is not defined at GridvisAdapter.onReady (C:\Program Files\iobroker\SmartHome\node_modules\iobroker.gridvis_adapter\main.js:93:5) gridvis_adapter.0 2022-01-28 22:00:24.848 error unhandled promise rejection: fetch is not defined gridvis_adapter.0 2022-01-28 22:00:24.847 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
-
@ben1983 ,
ich habe mit Debian angefangen und bin auf Windows/WSL umgestiegen und dabei auf diesen Wiki Artikel gestoßen. Den kannst du dir mal anschauen und evtl. durcharbeiten. -
@wal Danke für den Link, werde ich mir auf jeden Fall anschauen.
Aber denke mit dem Fetch, das ist irgend ein anderes Problem, oder? -
@ben1983 ,
Ordner umkopieren ist ein NoGo bei NPM. Es wird bei deiner Installation was verbogen sein, deshalb der Hinweis auf das Wiki. -
hm und warum? hast du da was zum nachlesen?
wenn man projekt en bloc kopiert dann müsste das doch passen.
ggfs. muss man die package-lock.json löschen und nochmal npm install machen.
aber wo merkt sich npm/node zu einem projekt sonst noch was, was ausserhalb des ordners ist?
innerhalb node_modules sollte man nicht rumkopieren. das muss alles npm machen. -
@ben1983 sagte in Eigenen Adapter erstellen:
@oliverio noch ne Idee für mich?
Also das ist jetzt ne grundlegende Funktion für meinen gewünschten Apapter. Er ruft nämlich über Rest Daten ab.
Ich habe es im js Adapter mit gequetscht realisiert.
Möchte auch später anhand der Ergebnisse eine dynamische konfig anbieten.
Aber erst mal wäre es schön nur Daten zu bekommen.Also grundlegend möchte ich eine REST API Abfragen.
Wenn dazu jemand einen guten Tipp hat…. Immer her damit.abgesehen davon musste ich bei einem webprojekt fetch noch nie extra installieren.
ja ich habe noch eine idee für dich.
lese bitte immer detailliert die Anleitungen zu den bibliotheken und nicht einfach so machen.
Es gibt verschiedene modularten und nicht alle kann man gleich einbinden.https://www.npmjs.com/package/node-fetch
Abschnitt Loading and configuring the module / Common JS
CommonJS
node-fetch from v3 is an ESM-only module - you are not able to import it with require().Wenn auch etwas nicht funktioniert, erst recht nochmal die Anleitung erneut lesen.
Wir helfen dir hier gerne, wenn du gar nicht mehr weiterkommst.
Aber für dich die Anleitungen lesen, das wäre etwas zuviel.Wenn das immer noch nicht funktioniert, dann mach das was ich vorigen Post geschrieben habe.
-
@oliverio ich habe den createadapter auf meinem laufwerk aufgeführt und in den iobroker ordner kopiert.
- hatte ich mich nicht getraut in dem node_modules ordner was auszuführen.
- hatte ich probleme mit npm install als ich es direkt in dem ordner ausgeführt hatte. (keine rechte etc.).
Wie macht man es nun richtig? direkt im Node_modules ordner von iobroker den create_adapter ausführen?`
Kann ja eigentlich auch nicht sein, denn dann bekomme ich den da ja nie mehr raus (wenn man ihn angeblich nicht kopieren darf), wenn der mal fertig und offiziel werden sollte. Oder?Mein Problem ist allerdings immer noch das fetch nicht geht
-
@ben1983 Nene
Ich habe das Folgendermaßen- Ordner für Entwicklung erstellt
- Den Create Adapter in "Entwicklung" kopiert/gecloned
- In Ordner create-adapter wechseln und create-adapter nach Anleitung ausführen.
- Nun sollte in dem Ordner "Entwicklung" ein Ordner vorhanden sein, der den Namen deines Projektes trägt, den du wiederum in dem create-adapter Setup vergeben hast
Fertig.
-
@deralff ja, aber der ist ja dann nicht im iobroker ordner und da habe ich ihn dann rein kopiert
-
@deralff Es funktioniert ja auch, dass der Adapter im ioBroker läuft.
Nur dieses Drecks fetch geht nicht -
@ben1983 Das mit dem hin und her ist mir zu aufwändig
... Und zu fehlerbehaftet (weil ich das ja selber machen muss)
Ich mache das folgendermaßen.
Ich baue den Adapter mit adapter-create.
Da kann ich dann im dev-server alles testen.Der Adapter landet dann in meinem GitHub.
Und dann installiere ich den ganz normal (per Katze) im ioBroker.Oder verstehe ich die Posts gerade nicht?
-
@ben1983 im ioBroker oder im dev-server?
-
@deralff ich hatte den jetzt mit dem chreate adapter erzeugt und in den ioBroker adapter kopiert.
haben keinen Dev Server.
Dachte geht so auch....
Aber glaube dass das Fetch Problem auch auf dem Devserver bestehen würde, oder? -
@oliverio Hi, habe jetzt den V2 installiert:
coder wie Hier:
const fetch = require('node-fetch'); fetch("hier steht in wirklichkeit meine url") .then(function (response) { this.log.info(response); return response.json(); }) .then(function (data) { this.log.info(data); }) .catch(this.log.info("Fehler aufgetreten");
bringt leider auch nichts:
host.Server(SmartHome) 2022-01-29 01:10:16.257 error instance system.adapter.gridvis.0 terminated with code 1 (JS_CONTROLLER_STOPPED) host.Server(SmartHome) 2022-01-29 01:10:16.257 error Caught by controller[0]: at internal/main/run_main_module.js:17:47 host.Server(SmartHome) 2022-01-29 01:10:16.257 error Caught by controller[0]: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) host.Server(SmartHome) 2022-01-29 01:10:16.256 error Caught by controller[0]: at Function.Module._load (internal/modules/cjs/loader.js:778:12) host.Server(SmartHome) 2022-01-29 01:10:16.256 error Caught by controller[0]: at Module.load (internal/modules/cjs/loader.js:937:32) host.Server(SmartHome) 2022-01-29 01:10:16.256 error Caught by controller[0]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10) host.Server(SmartHome) 2022-01-29 01:10:16.255 error Caught by controller[0]: at Module._compile (internal/modules/cjs/loader.js:1036:27) host.Server(SmartHome) 2022-01-29 01:10:16.255 error Caught by controller[0]: at wrapSafe (internal/modules/cjs/loader.js:988:16) host.Server(SmartHome) 2022-01-29 01:10:16.255 error Caught by controller[0]: SyntaxError: missing ) after argument list host.Server(SmartHome) 2022-01-29 01:10:16.255 error Caught by controller[0]: host.Server(SmartHome) 2022-01-29 01:10:16.255 error Caught by controller[0]: ^ host.Server(SmartHome) 2022-01-29 01:10:16.254 error Caught by controller[0]: .catch(this.log.info("Fehler aufgetreten"); host.Server(SmartHome) 2022-01-29 01:10:16.253 error Caught by controller[0]: C:\Program Files\iobroker\SmartHome\node_modules\iobroker.gridvis\main.js:90
also ich nehme auch gerne request oder sonstiges, wenn das funktioniert, aber habe bis dato nichts zum laufen bekommen.
Aus dem js adapter heraus funktioniert wie gesagt request. -
@ben1983
da fehlt jedenfalls eine Klammerhost.Server(SmartHome) 2022-01-29 01:10:16.255 error Caught by controller[0]: SyntaxError: missing ) after argument list
ich verstehe das Problem noch nicht ganz... kann aber auch sein, dass es einfach etwas spät ist
-
@deralff das habe ich auch gelesen, aber wüsste nicht wo ne klammer fehlen sollte