NEWS
Eigenes Webinterface
-
Hallo zusammen,
ich möchte mir gerne ein eigenes WebInterface basteln und überlege wie ich schonend die Zustände der Objekte abfragen kann. Mir fällt hier leider nur ein AJAX Request ein um an die Daten zu kommen. Allerdings wäre es ein ziemlicher Aufwand die Objekte damit abzufragen und man kann somit nicht auf Statusänderungen reagieren, da die Abfragen ja nur alle x Sekunden ausgeführt würden.
Daher wollte ich mal nachfragen ob hier jemand eine andere Möglichkeit sieht um an die Daten zu gelangen. VIS etc. machen das ja auch, nur sicherlich nicht per AJAX
-
Die machen das per socket.io
Schau mal in Github beim socketio Adapter nach da ist ein Beispiel wie das geht.
Gesendet von meinem m8 mit Tapatalk
-
Das ist was ich gesucht habe, danke dir
-
Ich habe jetzt mal nen bisschen rumprobiert und die Verbindung anscheinend hinbekommen, konnte aber nicht wirklich Dinge auslesen / steuern. Nun habe ich mir mal die Beispiele aus dem GitHub rauskopiert und die Verbindung getestet, das herstellen der Verbindung ist wie gesagt anscheinend so in Ordnung … allerdings bekomme ich folgende Meldung:
connected (index):26 Received 0 states. conn.js:414 socket.io not initialized
Mich wundert hier das er 0 States anzeigt, ich denke er müsste hier alle Objekte anzeigen …
Der Code hierzu sieht wie folgt aus:
-
Gibt es Objekte in dashboard.0 ?
Ich denke es liegt am Namespace.
Gesendet von meinem m8 mit Tapatalk
-
Selbes Ergebnis wenn ich dort z.B. hm-rpc.0 oder hm-rega.0 eintrage. Der Namespace ist ja nur der Name der Verbindung … wenn ich das richtig verstanden habe.
-
Für mich ist der Namespace der Endpunkt in ioBroker. Wenn ich daheim bin schau ich mir das mal genauer an.
Gesendet von meinem m8 mit Tapatalk
-
Klasse, danke dir.
-
So, nun komme ich auch an die States und kann soweit alle Objekte auslesen.
Nur die einzelnen Objekte abfragen gelingt mir noch nicht … ich probiere das per:
id = 'hm-rpc.0.OEQ0885917.1.LEVEL'; servConn.getObject(function (id, callback) { console.log(callback); });
Nur die Syntax ist falsch, wie müsste die korrekt lauten?
-
So müsste es Korrekt aussehen:
id = 'hm-rpc.0.OEQ0885917.1.LEVEL'; servConn.getObject(id, false, function (callback) { console.log(callback); });
Bei mir wirft das aber immer einen Fehler:
ncaught TypeError: Cannot read property 'emit' of null at Object.getObject (conn.js:908) at Object.onConnChange (index.html:36) at Object.init (conn.js:206) at index.html:19
So, nun komme ich auch an die States und kann soweit alle Objekte auslesen. `
Verrätst du mir wie? Ich bekomme das nicht hin. -
Du versuchst, gleich nach dem du das Befehl zum Verbindungsaufbau gegeben hast, das getObject aufzurufen. Zu diesem Zeitpunkt gibt es keine Verbindung.
Du darfst aber erst getObject aufrufen wenn die Verbindung da ist:
servConn.init({ name: 'dashboard.0', connLink: '' }, { onConnChange: function (isConnected) { if (isConnected) { console.log('connected'); servConn.getObjects(function (err, objs) {console.log(JSON.stringify(objs, null, 2);}); <========= Richtig 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); } }); // servConn.getObjects(); <========= Falsch
-
Bei mir sieht die Ausgabe in der Konsole so aus:
index.html:21 connected conn.js:414 socket.io not initialized index.html:30 Received 0 states.
Hier der Code den ich verwendet hab:
Wo ist hier der Fehler? Das ist doch 1:1 das Beispiel aus dem Repo.
-
Du musst zwingend folgendes beim Init mit angeben:
servConn.init({ name: 'mobile.0', connLink: 'http://IPZUMSERVER:8084', socketSession: '' },
Danach hat es bei mir funktioniert. Also nicht localhost etc. sondern die IP-Adresse
Insgesamt sieht es nun so aus bei mir:
-
Du musst zwingend folgendes beim Init mit angeben:
servConn.init({ name: 'mobile.0', connLink: 'http://IPZUMSERVER:8084', socketSession: '' },
Danach hat es bei mir funktioniert. Also nicht localhost etc. sondern die IP-Adresse
Insgesamt sieht es nun so aus bei mir: `
Natürlich socket.io Instanz muss existieren und auf port 8084 eingestellt sein. -
Was bei mir jetzt allerdings noch nicht ganz so will ist die Syntax um einzelne Objekte abzufragen.
id = 'hm-rpc.0.OEQ0885917.1.LEVEL'; servConn.getObject(id, false, function (callback) { console.log(callback); });
Gibt bei mir nur "null" zurück. In den States sehe ich das Objekt und die Inhalte allerdings.
2018-04-13T07:29:03.813Z Connected => authenticate conn.js:264 2018-04-13T07:29:03.991Z Authenticated: true (index):24 connected (index):37 null (index):30 Received 3000 states.
-
Du musst zwingend folgendes beim Init mit angeben:
servConn.init({ name: 'mobile.0', connLink: 'http://IPZUMSERVER:8084', socketSession: '' }, ```` `
Das führt bei mir zu folgendem Fehler:
Failed to load http://192.168.0.50:8084/socket.io/?key=nokey&EIO=3&transport=polling&t=MAzvc7K: The 'Access-Control-Allow-Origin' header has a value 'null' that is not equal to the supplied origin. Origin 'null' is therefore not allowed access. conn.js:284 Uncaught ReferenceError: $ is not defined at n. <anonymous>(conn.js:284) at n.emit (universalModuleDefinition:2) at n.emit (universalModuleDefinition:3) at n.emitAll (universalModuleDefinition:1) at n. <anonymous>(universalModuleDefinition:1) at n.emit (universalModuleDefinition:2) at n.onError (universalModuleDefinition:2) at o. <anonymous>(universalModuleDefinition:2) at o.n.emit (universalModuleDefinition:2) at o.n.onError (universalModuleDefinition:2) </anonymous></anonymous></anonymous>
Natürlich socket.io Instanz muss existieren und auf port 8084 eingestellt sein. `
filename="socketio_log.PNG" index="0">~~ filename="socketio_instanz.PNG" index="1">~~ -
Das führt bei mir zu folgendem Fehler:
Failed to load http://192.168.0.50:8084/socket.io/?key=nokey&EIO=3&transport=polling&t=MAzvc7K: The 'Access-Control-Allow-Origin' header has a value 'null' that is not equal to the supplied origin. Origin 'null' is therefore not allowed access. conn.js:284 Uncaught ReferenceError: $ is not defined at n. <anonymous>(conn.js:284) at n.emit (universalModuleDefinition:2) at n.emit (universalModuleDefinition:3) at n.emitAll (universalModuleDefinition:1) at n. <anonymous>(universalModuleDefinition:1) at n.emit (universalModuleDefinition:2) at n.onError (universalModuleDefinition:2) at o. <anonymous>(universalModuleDefinition:2) at o.n.emit (universalModuleDefinition:2) at o.n.onError (universalModuleDefinition:2) </anonymous></anonymous></anonymous>
Kopiere dir mal das von mir und ersetze die IP-Adressen. Damit läuft es ja, die Fehlermeldung hatte ich zu Anfang auch …
Hier mal die korrekte Syntax um mit getObject das einzelne Objekt abzufragen:
id = 'hm-rpc.0.OEQ0885917'; servConn.getObject(id, false, function (error, obj) { console.log(JSON.stringify(obj)); });
-
Hallo, vielleicht eine dumme Frage, aber ich kriegs nicht hin:
Ich versuche, in einer Webseite per Javascript + socketio + conn.js + bluefox' js-Beispiel zum socketio-Adapter den State z.B. einer hm-rpc Funksteckdose herauszufinden.
Ich schaffe es, mit
servConn.setState('hm-rpc.0.NEQ1581960.1.STATE', true);
den State zu setzen und sie an bzw. mit false auch wieder aus zu schalten.
Aber wie lese ich so einen State aus?
So dass ich sagen kann:
Lese State von Funksteckdose Xyz. Wenn State = aus, schalte Steckdose ein. Ansonsten schalte sie aus.
Sowas bräuchte ich.
Mit:
id = 'hm-rpc.0.NEQ1581960'; servConn.getObject(id, false, function (error, obj) { console.log(JSON.stringify(obj)); });
bekomme ich leider anscheinend nur die Metadaten, aber eben nicht den Wert. Auch nicht mit id = "hm-rpc.0.NEQ1581960.1.STATE' oder ähnlichem.
Ich habe zwar alles States in der Variable/dem Objekt(???) "states" aus dem zu conn.js gehörigen js-Schnipsel von Bluefox.
Aber ich komme einfach nicht an die einzelnen Werte ran.
Wahrscheinlich ganz einfach … Aber ich bin kein Programmierer.
Ich verzweifle an Objekten und JSON und parse und stingify und blicke einfach nicht mehr durch.
Kann mir bitte, bitte jemand helfen? Sitze jetzt schon den ganzen Tag daran.
Wär voll nett. Danke.
-
Gibt es dafür nicht den Befehl getState()?
Hast du den schon probiert.
-
getStates(ID, callback)
ist sogar in der Readme des Adapters beschrieben: