NEWS
Hilfe benötigt bei Adapterdebugging (todoist To-Do Listen Adapter)
-
Hallo zusammen,
ich habe gestern ein Javascript geschrieben um die To-Do Listen von todoist.com in iobroker zu importieren.
Hier der Link zum Beitrag mit dem Script: viewtopic.php?f=21&t=12563
Heute habe ich auf Grundlage des Tankerkönig Adapters von pix versucht mein Script in einen Adapter umzuwandeln.
Ich bekomme jedoch im Log eine Fehlermeldung die ich nicht wirklich deuten kann: error uncaught exception: Empty name is not allowed!
Habe schon einige Sachen versucht aber finde den Fehler nicht. Hat jemand einen Ansatz für mich?
Hier der Link zu meinem Adapter: https://github.com/eXTreMe-1337/ioBroker.todoist
Danke!
edit: Beitragstitel geändert
-
Do you have more infos from the error then that?!
Stacktrace with files and line numbers ?!
When it happends? Directly at startup or when?!
-
Do you have more infos from the error then that?!
Stacktrace with files and line numbers ?!
When it happends? Directly at startup or when?! `
Ich bin mal so frech und bleibe bei Deutsch:Es gibt keine weiteren infos, das ist die einzige Error Zeile die im Log steht, keine Angabe von Zeile oder Datei, etc. Daher weiss ich ja nicht wo ich ansetzen soll.
Der Fehler tritt beim Adapter start auf. Der Adapter ist mit einem minütlichen schedule start versehen. Somit tritt der Fehler minütlich auf
ich habe alles nach "name" im quellcode abgesucht aber nichts gefunden was leer ist.
-
ääähm räusper :-)) War wohl Gedanklich auf Github
Also "Empty name is not allowed!" kommt von einem adapter.createState wenn der "stateName" bzw in dem Fall allgemein der "Dritte Parameter" leer ist.
Das passiert bei Dir in https://github.com/eXTreMe-1337/ioBroke … ain.js#L56
In Adaptern ist (anders als in "JavaScript"s) an der Stelle eher "setObjectNotExists" üblich und sollte als Ersatz direkt tun.
Ein Hinweis noch zu https://github.com/eXTreMe-1337/ioBroke ... ain.js#L80: Adapter setzen für alle State-Werte immer noch das "ack"-Flag auf true wenn Sie die Daten selbst schreiben als "Final".
Beispiel:
adapter.setState(channel + '.' + fieldName, {ack: true, val: data[fieldName]});
-
Weiterhin:
https://github.com/eXTreMe-1337/ioBroke … ain.js#L78
ist adapter.log.debog oder adapter.log.info oder adapter.log.warn oder adapter.log.error je nachdem wie Du loggen willst... oder nutze die writeLog Methode die bei dir im Code drin ist
https://github.com/eXTreMe-1337/ioBroke ... ain.js#L43
unnötig weil ist ganz oben schon gemacht.
https://github.com/eXTreMe-1337/ioBroke ... ain.js#L63
Immer mit "try-catch abfangen falls mal Fehlerhaftes JSON zurückkommt.
Allgemein fehlt jede Forum von Fehlerbehandlung wenn der Request nicht erfolgreich war ... Der Code geht davon aus das es geklappt hat. bedeutet im zweifel aktuell ein Crash und restart des Adapters.
Was hast Du denn für den Adapter für ein Template geommen? Ist schon älter. Im neuen ist alles auf Admin3 ausgerichtet.
Ingo F
-
Was hast Du denn für den Adapter für ein Template geommen? Ist schon älter. Im neuen ist alles auf Admin3 ausgerichtet. `
Vielen Dank für deine Hilfe!Ich habe den Tankerkönig Adapter (1.0.4) als Vorlage genommen. War für mich der naheliegenste um mich an etwas zu orientieren was http GET anfragen macht
Da ich selber noch nicht auf Admin 3 unterwegs bin weiß ich nicht was da noch alles anzupassen wäre.
Wie du siehst bin ich totaler Neuling und habe eigentlich keinen Plan von dem was ich tue aber meistens schaff ichs trotzdem mir irgendwas zusammenzucoden was dann am ende funktioniert :lol:
Ich setz mich jetzt mal dran und versuche die von dir aufgeführten Fehler zu korrigieren
-
Ich habe es geschafft den Adapter "so halb" zum laufen zu bekommen…. Ok, eigentlich macht er was er will...
Manchmal ist das einlesen erfolgreich, manchmal nicht, den Grund warum es leider meistens nicht klappt habe ich noch nicht rausfinden können.
Ich habe die main.js Datei mehrmals per ssh mit "node main.js --force --logs" gestartet und erhalte jedes mal ein anderes "Ergebnis".
Ich habe an mehreren Stellen zum debuggen logeinträge hinzugefügt. Bei jeder Scriptausführung kommt das Script unterschiedlich weit.
Hier ein Screenshot zur Verdeutlichung.
-
Bei der ersten Scriptausführung sieht man dass die ToDo Listen Datenpunkte erstellt wurden jedoch aber nicht die Elemente in die Listen eingefügt wurden.
-
Bei der zweiten Ausführung ist im prinzip garnix passiert
-
Bei der dritten Ausführung hat dann alles geklappt.
Hat jemand eine Idee wie ich das noch optimieren kann?
Irgendwie führt mir der Adapter den Code gefühlt viel zu schnell aus und schafft es wohl daher nicht die json Daten zu laden.
Code ist auf Github zu finden
-
-
OK. Adapter ist fertig. Man muss nur noch ein bisschen machen.
https://github.com/ioBroker/ioBroker.re … repository
` > ## Anforderungen für Adapter, die zum Repository hinzugefügt werden sollen
- bereits für das neueste Repository erforderlich *
1. Der Adapter muss als Paket auf npm verfügbar sein. Siehe [Veröffentlichung auf npm] (# how-to-publish-on-npm)
2. Die iobroker-Organisation muss dem npm-Paket als Eigentümer hinzugefügt werden. [Warum und wie geht das?] (# Add-owner-to-packet)
3. Adapter muss eine README.md mit Beschreibung, Detailinformationen und Changelog haben. Englisch ist Pflicht. Andere Sprachen sind willkommen. Siehe [Beispiel für README.md] (# example-of-readme-md)
4. Adapter muss eine vordefinierte Lizenz haben.
5. Adapter muss mindestens Adapter-Basistest (Installation, Betrieb) mit Travis-CI und Appveyor haben. Mehr Informationen im Forum von apollon77 (Nimm einfach von anderen Adaptern die Samples)
6. Definieren Sie einen der Typen in io-package.json
7. Fügen Sie "Autor" in io-package.json und "Autoren" in io-package.json ein
8. Fügen Sie Ihren Adapter in die Liste ein (zuerst die neueste und danach die stabile Version, wenn getestet).
Beispiele für Einträge finden Sie [hier] (# Beispiele).
* Hinweis *: Vergessen Sie nicht, das Attribut * published * zu ** beiden * Repositories hinzuzufügen.
9. Ihr GitHub-Repository muss den Namen "ioBroker. <adaptername>" haben. ** B ** ist Großbuchstabe in "ioBroker", aber in der package.json muss der * Name * niedrig geschrieben sein, da npm Großbuchstaben nicht erlaubt.
10. * title * in io-package.json (common) ist ein einfacher Kurzname des Adapters in Englisch. * titleLang * ist ein Objekt, das kurze Namen in vielen Sprachen enthält. * Lang * ist keine deutsche Länge, aber englische LANGuages.
11. Verwenden Sie im Titel nicht die Wörter "ioBroker" oder "Adapter". Es ist jedenfalls klar, dass es sich um einen Adapter für ioBroker handelt.
12. ** neu! ** Es werden keine neuen Adapter zum Repo ohne Admin3 Konfigurationsdialog akzeptiert. Admin2-Dialog ist optional!</adaptername> `
-
OK. Adapter ist fertig. Man muss nur noch ein bisschen machen.
https://github.com/ioBroker/ioBroker.re … repository `
Danke für deine Änderungen auf github.Leider läuft der Adapter nur sehr sehr unzuverlässig. So möchte ich den keinesfalls veröffentlichen. Vielleicht hast du ja noch eine Idee? Mir fehlt da komplett die Erfahrung und das Wissen wodran es liegen könnte. Als Javascript funktionieren die http requests zu 99% immer vollständig. Als Adapter nur zu 1%.
Wenn der Adapter zuverlässig läuft dann versuche ich gerne die notwendigen Anforderungen für das ioBroker Repository zu erfüllen.
-
ich habe eine (sicherlich nicht sehr elegante) Version zum Löschen der Einkaufsliste im Skriptbereich ergänzt. Eventuell möchtet ihr das in (passenderer / besser programmierter) Form mit den Adapter aufnehmen?
-
ich habe meine Änderungen zum Abgleich "manuelle VIS Liste" mit "Alexa ich sags dir todoist" Liste im Skriptbereich eingestellt.
Vielleicht ist das nützlich und es könnte daraus ein kompletter "all in" Adapter werden, der sowohl die Erledigung am Tablet als auch via Alexa erlaubt. Das wäre doch eine runde Sache?
-
danke dafür! Ja das wäre wirklich eine tolle Sache nur bin ich leider mit meinem Javascript-Latein am Ende… :?
Wäre super wenn sich hier jemand mit fortgeschrittenen Kenntnissen findet der mir ein paar Ansätze geben könnte, mir fehlen leider nämlich teilweise basics vom adapter- & javascriptverständnis.
Wenn mir das jemand an hand meines adapters erklären könnte was ich falsch mache oder besser machen könnte wär das super! würde nämlich gerne in zukunft weitere adapter nach dem gleichen oder einem ähnlichen schema entwickeln nur fehlt mir momentan der ansatz wo ich anfangen soll mich reinzuarbeiten.... warum funktioniert der code als javascript fast immer und als adapter fast nie?
-
OK. Adapter ist fertig. Man muss nur noch ein bisschen machen.
https://github.com/ioBroker/ioBroker.re … repository `
Danke für deine Änderungen auf github.Leider läuft der Adapter nur sehr sehr unzuverlässig. So möchte ich den keinesfalls veröffentlichen. Vielleicht hast du ja noch eine Idee? Mir fehlt da komplett die Erfahrung und das Wissen wodran es liegen könnte. Als Javascript funktionieren die http requests zu 99% immer vollständig. Als Adapter nur zu 1%.
Wenn der Adapter zuverlässig läuft dann versuche ich gerne die notwendigen Anforderungen für das ioBroker Repository zu erfüllen. `
Was wird im Log gesagt?