NEWS
[Gelöst] [Problem] getObjectView liefert Fehler 404 Cannot find view "<viewname>"</viewname>
-
Folgendes Problem:
Ich habe in der io-package.json eine View zur Vereinfachung einer Suchanfrage angelegt.
"objects": [ { "_id": "_design/klf200", "language": "javascript", "views": { "listSingleProductScenes": { "map": "function(doc) {\n if (doc._id.match(/^klf200\\.[0-9]+\\.scenes\\.[0-9]+$/) && doc.native && doc.native.products.length == 1)\n {\n emit([doc.native.products[0].name, doc.native.products[0].status], {id: doc.native.id, name:doc.native.name});\n }\n }" } } } ]
Wenn ich die View später abfragen möchte, bekomme ich einen Fehler 404: Cannot find view "klf200". Was ich komisch finde, ist der Verweis auf 'klf200', weil die View eigentlich 'listSingleProductScenes' heißt.
Mein Abfrage sieht so aus:
adapter.objects.getObjectView( 'klf200', 'listSingleProductScenes', {startkey: [productName, level], endkey: [productName, 101]}, function (err, doc) { ... <- Hier bekomme ich den Fehler im err-Object. } );
Anbei noch die komplette io-package.json.
! {
! "common": {
! "name": "klf200",
! "version": "0.5.0",
! "news": {
! "0.5.0": {
! "en": "beta version",
! "de": "Betaversion",
! "ru": "Бета версия",
! "pt": "Versão beta",
! "fr": "Version bêta",
! "nl": "Beta versie"
! },
! "0.0.1": {
! "en": "initial adapter",
! "de": "Initiale Version",
! "ru": "Первоначальный адаптер",
! "pt": "Versão inicial",
! "fr": "Version initiale",
! "nl": "Eerste release"
! }
! },
! "title": "KLF-200 Adapter",
! "desc": {
! "en": "Runs scenes on a KLF-200 Interface",
! "de": "Startet Szenen auf einem KLF-200 Interface"
! },
! "platform": "Javascript/Node.js",
! "mode": "daemon",
! "icon": "klf200.png",
! "enabled": true,
! "license": "MIT",
! "extIcon": "https://raw.githubusercontent.com/ioBro … klf200.png",
! "keywords": ["KLF-200", "vis", "GUI", "graphical"],
! "readme": "https://github.com/ioBroker/ioBroker.kl … /README.md",
! "loglevel": "info",
! "type": "hardware",
! "restartAdapters": ["vis"]
! },
! "native": {
! "host": "http://velux-klf-",
! "password": "velux123",
! "pollInterval": 60
! },
! "objects": [
! {
! "_id": "_design/klf200",
! "language": "javascript",
! "views": {
! "listSingleProductScenes": {
! "map": "function(doc) {\n if (doc._id.match(/^klf200\.[0-9]+\.scenes\.[0-9]+$/) && doc.native && doc.native.products.length == 1)\n {\n emit([doc.native.products[0].name, doc.native.products[0].status], {id: doc.native.id, name:doc.native.name});\n }\n }"
! }
! }
! }
! ]
! }Was mache ich falsch?
Viele Grüße
Michael
-
https://github.com/ioBroker/ioBroker.js … r.js#L2389
Dein Fehler tritt wohl auf, wenn das Object "_design/<name>" nicht existiert. Hast du das in io-package.json hinzugefügt, nachdem du den Adapter erstmalig installiert hattest? Dann könnte das ein bekannter Bug sein und du musst den Adapter (nicht nur die Instanz) neu installieren.</name>
-
Perfekt. Das war es.
Leider liefert meine View noch nicht die gewünschten Ergebnisse. Kann man das irgendwie debuggen? Und muss ich die Installation bei jeder Änderung immer wieder durchführen oder kann ich die View zumindest übergangsweise auch im Code erzuegen?
Michael
-
Leider liefert meine View noch nicht die gewünschten Ergebnisse. Kann man das irgendwie debuggen? `
Keine Ahnung, habe noch nie mit Views gearbeitet. Eventuell per console.log und manuellem Ausführen des Adapters über die Konsole:/opt/iobroker/node_modules/adapter_dir$ node main.js --force --logs
Und muss ich die Installation bei jeder Änderung immer wieder durchführen oder kann ich die View zumindest übergangsweise auch im Code erzuegen? `
Pervar obj = { /* Objekt mit allen Views aus io-package.json */ }; adapter.setForeignObject('_design/klf200', obj);
dürfte das gehen.