Lösung gefunden
adapter.getForeignObject(ID, function(err, obj){
adapter.log.info("Name: " + obj.common.name);
});
Lösung gefunden
adapter.getForeignObject(ID, function(err, obj){
adapter.log.info("Name: " + obj.common.name);
});
Hallo Zusammen,
ich sitze gerade an einem Adapter und möchte den Objektnamen (2 Spalte bei Objekten) auslesen. Leider komme ich nicht weiter.
Folgender Test bringt das Script zum Absturz::
let name = await adapter.getForeignObject(ObjectID).common.name;
adapter.log.info("Name der ID: " + name);
Wäre über Hilfe dankbar.
Grüße
@mischu Es war IDE trouble... Versuch 1 funktioniert
Hallo zusammen,
ich habe mich in der letzten Zeit in die Funktionsweise von Adaptern eingearbeitet und denke, dass ich diese soweit verstehe. Jetzt möchte ich in einem neuen Adapter einen socket.io Client einbinden und stoße auf folgende zwei Probleme und wäre über Hilfe dankbar.
"socket.io-client": "^3.1.1" ist unter node_modules installiert.
1. Versuch:
// CommonJS
const io = require("socket.io-client");
const socket = io("http://xxx.xxx.xxx.xxx:xxxx"); //bei mir steht natürlich eine valide IP Adresse
Bei der Definierung socket bekomme ich eine Fehlermeldung:
import io
This expression is not callable.
Type 'typeof import("c:/Adapter/iobroker.test/node_modules/socket.io-client/build/index")' has no call signatures.ts(2349)
2. Versuch:
// ES6 import or TypeScript
import { io } from "socket.io-client";
let socketIO = io(http://xxx.xxx.xxx.xxx:xxxx); //bei mir steht natürlich eine valide IP Adresse
Bei dieser Herangehensweise bekomme ich im Skript keine Fehlermeldung, aber der Adapter bleibt im ioBroker rot und generiert folgende Fehlermeldung:
host.Server 2021-02-14 11:56:02.105 error Caught by controller[1]: at internal/main/run_main_module.js:17:47
host.Server 2021-02-14 11:56:02.105 error Caught by controller[1]: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
host.Server 2021-02-14 11:56:02.105 error Caught by controller[1]: at Function.Module._load (internal/modules/cjs/loader.js:708:14)
host.Server 2021-02-14 11:56:02.105 error Caught by controller[1]: at Module.load (internal/modules/cjs/loader.js:863:32)
host.Server 2021-02-14 11:56:02.104 error Caught by controller[1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
host.Server 2021-02-14 11:56:02.104 error Caught by controller[1]: at Module._compile (internal/modules/cjs/loader.js:963:27)
host.Server 2021-02-14 11:56:02.104 error Caught by controller[1]: at wrapSafe (internal/modules/cjs/loader.js:915:16)
host.Server 2021-02-14 11:56:02.104 error Caught by controller[1]: SyntaxError: Cannot use import statement outside a module
host.Server 2021-02-14 11:56:02.104 error Caught by controller[1]: ^^^^^^
host.Server 2021-02-14 11:56:02.103 error Caught by controller[1]: import { io } from "socket.io-client";
host.Server 2021-02-14 11:56:02.103 error Caught by controller[1]: /opt/iobroker/node_modules/iobroker.test/main.js:13
host.Server 2021-02-14 11:56:02.103 error Caught by controller[0]: (node:4723) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
host.Server 2021-02-14 11:56:01.865 info instance system.adapter.test.0 started with pid 4723
host.Server 2021-02-14 11:55:58.950 info Restart adapter system.adapter.test.0 because enabled
Mir stellen sich zwei Fragen:
Vielen Dank!
@unclesam
Nochmals Dankeschön für Deinen Einsatz! Ok, wenn ich das false bei autoSubscribe weglasse rennen Updates.
Mit dem false bei autoSubscribe ist Stille. Hier die logs:
ioBroker:
socketio.0 2021-01-20 16:19:13.301 info (5112) ==>Connected system.user.admin from ::ffff:192.168.178.20
console chrome:
conn.js:150 Trying connect...
16:19:11.965 conn.js:296 2021-01-20T15:19:11.965Z Connected => authenticate
16:19:12.037 conn.js:317 2021-01-20T15:19:12.037Z Authenticated: true
16:19:12.044 socketTest.js:14 connected
16:19:13.804 socketTest.js:20 Received 10926 states.
Also er verbindet, lädt die States aber es findet kein traffic beim update statt. Somit gehe ich davon aus, dass ein Problem im Bereich der Definition des gewünschten Updates herrscht. Also bei:
servConn.subscribe('hue.*')
Ich habe dies wie empfohlen ganz am Ende platziert.
Hier der HTML code. Ich stehe gerade komplett auf dem Schlauch... was muss ich eintragen, dass ich spezifische Updates bekomme und diese im console.log angezeigt werden? ioBroker läuft und Verbindung zum Server wird aufgebaut. Das ist bis auf meine Ergänzung
servConn.subscribe('hue.*');
der aktuelle Beispielcode von GitHub. Mehr habe ich noch nicht aufgebaut, da ich erst das Autoupdate zum laufen bekommen möchte.
servConn.namespace = 'myapp';
servConn.subscribe('hue.*');
servConn._useStorage = false;
var states = [];
servConn.init({
name: 'myapp', // optional - default 'vis.0'
connLink: 'http://192.168.178.43:8084', // optional URL of the socket.io adapter
socketSession: '', // optional - used by authentication
}, {
onConnChange: function (isConnected) {
if (isConnected) {
console.log('connected');
servConn.getStates(function (err, _states) {
var count = 0;
for (var id in _states) {
count++;
}
console.log('Received ' + count + ' states.');
states = _states;
});
} else {
console.log('disconnected');
}
},
onRefresh: function () {
window.location.reload();
},
onUpdate: function (id, state) {
setTimeout(function () {
console.log('NEW VALUE of ' + id + ': ' + JSON.stringify(state));
states[id] = state;
}, 0);
},
onError: function (err) {
window.alert(_('Cannot execute %s for %s, because of insufficient permissions', err.command, err.arg), _('Insufficient permissions'), 'alert', 600);
}
});
@unclesam said in Adapter Socket.IO Benötige Hilfe zum Updateverhalten:
autoSubscribe
Danke für die schnelle Antwort!
Um im conn.js autoSubscribe auf false zu stellen habe ich folgendes gemacht:
init: function (connOptions, connCallbacks, objectsRequired, autoSubscribe) {
autoSubscribe = false;
Die Updates haben gestoppt.
In der index.html habe ich folgendes eingefügt:
servConn.namespace = 'myapp';
servConn.subscribe('hue.*');
servConn._useStorage = false;
var states = [];
servConn.init({
name: 'myapp', // optional - default 'vis.0'
connLink: 'http://localhost:8084', // optional URL of the socket.io adapter
socketSession: '', // optional - used by authentication
Leider bekomme ich keine updates...
Hallo Zusammen,
ich versuche mich gerade in den Adapter Socket.io einzuarbeiten. Soweit läuft er und sendet Updates. Im file conn.js habe ich die Stelle ausgemacht, an welcher eine Wildcard definiert ist, dass von allen Objekten ein Update übertragen wird. Da dies eine Flut an Daten bedeutet, versuche ich gerade die Datenmenge über eine Auswahl zu reduzieren. Ich komme diesbezüglich nicht weiter. Versucht habe ich ein Beispiel aus dem Forum (funktioniert leider nicht):
let myState = 'hm-rpc.0.NEQ1684242.1.STATE';
servConn._socket.emit('subscribe', myState);
Gibt es eine Möglichkeit, das Update auf selektierte Adapter zu reduzieren? Z.B. hue.0., hue.1. usw.? Aus den Adapter Updates meine ich herausgelesen zu haben, dass dafür eine Array Lösung gesetzt wurde. Wenn ja würde ich mich über Hilfe freuen. Wie muss ich dies in dem auf GitHub als Beispiel hinterlegten Code einfügen? Das müsste doch aus der index.html heraus gehen...
Vielen Dank!
Grüße
Michael
@arteck - Danke für Deine Antwort
Habe das Ganze jetzt lösen können. CMD Befehle über MQTT funktionieren wieder wie früher. War ein bug in meinem script.
Hallo Zusammen,
habe eine Philips hue und möchte diese über den command Befehl steuern. Gibt es eine Liste der Definitionen für die Steuerung? Früher hatte ich ein json mit rgb Werten {"r": 220,"g": 180,"b": 240}. Leider wird dieses von meinem ioBroker nicht mehr angenommen, bzw umgesetzt. Über Hilfe wäre ich dankbar.
Grüße
Michael