NEWS
Zugriff auf iobroker via soket.io
-
@rewenode Ehrlich gesagt, weiß ich nicht was. An der Adapterkonfig kann es eigentlich nicht liegen:
Das Einzige was ich geändert habe, ist die Projektfunktion aktiviert zu haben und dafür die Konvertierung in Strings deaktiviert zu haben.
Ich hab die Konvertierung mal wieder rein genommen - aber das ändert nichts.
@apollon77 Irgendeine Idee - was an meinem Node-Red schief sein könnte und warum das bei mir nicht geht, die Wildcards bei @rewenode schon. Dann brauche ich nämlich auch kein Issue für ein Enhancement aufmachen. Dann hat mein System ja nur irgendein Fehler.
-
@mickym sagte in Zugriff auf iobroker via soket.io:
Das Einzige was ich geändert habe, ist die Projektfunktion aktiviert zu haben und dafür die Konvertierung in Strings deaktiviert zu haben.
Sieht eigentlich im Prinzip aus wie bei mir.
Teste doch mal Wildcards bei Nicht-mqtt-Objekten. Irgendwo muss man ja anfangen ;-(
-
@rewenode Du bist so Klasse!!!!
Auch wenn ich nicht weiß, warum meine lokaler NodeRed Adapter mit den iobroker-in Nodes solche Probleme macht mit den Wildcards-
Aber ich habe noch eine Standalone Node Red Installation auf meinem Windows 10 Rechner laufen und da klappt Dein Flow schon mal ausgezeichnet - da kann man noch einiges draus machen.
Super STARK!
und hast Du toll gemacht, dass man gleich im iobroker sieht mit welcher Node man verbunden ist.
-
@rewenode Ich habs doch wie Du siehst auch mit den zigbee.0.*.rotate_angle genauso wie Du versucht! Das klappt nicht - aber Dein socket-io ZUgang der passt.
Wenn ich nur wüsste wo man bei meinem Node-Red Adapter sonst anfangen könnte zu suchen - bei mir klappt das ja schon seit Anfang an nicht. An der Hardware kann es ja eigentlich nicht liegen und mein Log- im iobroker ist super sauber, wenn ich nicht selbst irgendwelche Dummheiten anstelle. Und die iobroker-Nodes bekomme ich ja nur über den Adapter geliefert.
-
@mickym sagte in Zugriff auf iobroker via soket.io:
Ich habs doch wie Du siehst auch mit den zigbee.0.*.rotate_angle genauso wie Du versucht! Das klappt nicht - aber Dein socket-io ZUgang der passt.
Ja, da bin ich auch ratlos. Na da hast du ja mit socket.io wenigstens eine Alternative bis der eigentliche Fehler mal gefunden ist.
-
@rewenode Wahrscheinlich werde ich dazu auch ein Issue aufmachen - dann ist das halt ein Bug - auch wenn es bei Dir funktioniert. Aber dann muss man immer noch rausfinden, warum es bei mir nicht geht. Wie gesagt die Nodes kommen ja mit dem Adapter - also kann es ja nicht mehr an irgendwelchen Flows und Datenpunkten liegen, zudem ich ja sogar auch die gleichen Zigbee Datenpunkte - und auch noch vom gleichen Gerät genommen habe.
Ja ich mach in jedem Fall an der socket.io Schnittstelle weiter. Danke nochmals!
-
@mickym sagte in Zugriff auf iobroker via soket.io:
Wenn ich nur wüsste wo man bei meinem Node-Red Adapter sonst anfangen könnte zu suchen - bei mir klappt das ja schon seit Anfang an nicht.
Letztlich bleibt eigentlich nur, das node zu debuggen um zu schauen was da wo ankommt und wie umgesetzt wird.
Aber das ist nicht so einfach, da habe ich schon einiges an Zeit investiert und dann für mich eine halb-gare Frickellösung gebastelt.
Aber da du an den Adapter-Quellcode rankommst, spricht ja nichts dagegen an interessanten Stellen Log-Ausgaben für die Konsole zu implementieren.
Sonst stocherst du ewig im Nebel. -
@rewenode OK damit finde ich vielleicht raus, was die Ursache ist. Wenn es aber ein Bug in der Node ist, werde ich das sicherlich nicht selbst beheben können, das muss dann sowieso der Adapterentwickler machen. Zudem es wahrscheinlich schwerer ist den Code zu verstehen, als wenn ich sowas selber mache. Ich bin auch noch nicht der Javascript Entwickler, dass mir das alles so leicht fällt.
-
@mickym sagte in Zugriff auf iobroker via soket.io:
Wenn es aber ein Bug in der Node ist, werde ich das sicherlich nicht selbst beheben können, das muss dann sowieso der Adapterentwickler machen.
Ja, das stimmt schon. Aber was soll man als Entwickler machen, wenn es (scheinbar) überall geht, nur bei einem nicht und man das auch nicht nachvollziehen kann;-(
@mickym sagte in Zugriff auf iobroker via soket.io:
Ich bin auch noch nicht der Javascript Entwickler, dass mir das alles so leicht fällt.
Ich leider auch nicht, deshalb tue ich mich auch so schwer, mein Gefrickel weiterzugeben
-
@rewenode Du bist trotzdem schon weiter bei der Programmierung - jedenfalls hast Du mir toll geholfen und nun kann ich da weitermachen.
Ich habe das Ganze Problem ja mal hier angehängt - mach dann aber wahrscheinlich noch ein Neues Issue auf.
https://github.com/ioBroker/ioBroker.node-red/issues/30
Zumindest sieht man daran, dass es 2018 - ok ist super alt - auch nicht gegangen ist. Sonst hätte dieser @Osrx seine Lampen mit "lamp.*" auslesen können.
Ja, das stimmt schon. Aber was soll man als Entwickler machen, wenn es (scheinbar) überall geht, nur bei einem nicht und man das auch nicht nachvollziehen kann;-(
Also ich hatte auch mal einen Fehler im backit-up Adapter und da konnte mir der Entwickler super weiterhelfen und hat den Fehler auch im Code gefunden.Da kam dann auch raus, dass es daran lag, dass ich ein lokales Backup gemacht habe usw. ..
Jedenfalls hat man da was dann zum Debuggen eingebaut - dass man es im Log sieht. Ich wüsste ja nicht mal, wo ich im Code suchen müsste.
Ich habe es gerade nochmal auf einem fast jungfräulichen Projekt nochmals versucht und den node-red Adapter auf debug gestellt - aber da kommt auch nichts bzw. raus:
node-red.0 2021-02-03 20:16:43.755 debug (7110) system.adapter.admin.0: logging true node-red.0 2021-02-03 20:15:39.043 debug (7110) system.adapter.admin.0: logging false node-red.0 2021-02-03 20:09:17.106 debug (7110) system.adapter.admin.0: logging true node-red.0 2021-02-03 20:09:05.971 debug (7110) 3 Feb 20:09:05 - [info] Gestartete geänderte Nodes node-red.0 2021-02-03 20:09:05.970 debug (7110) 3 Feb 20:09:05 - [info] Modifizierte Nodes werden gestartet node-red.0 2021-02-03 20:09:05.967 debug (7110) 3 Feb 20:09:05 - [info] Geänderte Nodes gestoppt node-red.0 2021-02-03 20:09:05.967 debug (7110) 3 Feb 20:09:05 - [info] Modifizierte Nodes werden gestoppt
Die Shellies aktualisieren ihre Datenpunkte im Minutentakt.
Das Einzige was ich finde - wenn ich den Node-Red Adapter auf Debug stelle ist, dass er irgendwie nach Datenpunkten sucht, die es tatsächlich nicht bzw. nicht mehr gibt.
node-red.0 2021-02-03 20:19:24.404 debug (7110) State "logic.states.occupancy" does not exist in the ioBroker node-red.0 2021-02-03 20:19:24.283 debug (7110) State "logic.states.occupancy" does not exist in the ioBroker node-red.0 2021-02-03 20:19:24.214 debug (7110) State "logic.states.illuminance" does not exist in the ioBroker node-red.0 2021-02-03 20:19:24.191 debug (7110) State "logic.states.occupancy" does not exist in the ioBroker
Allerdings kann ich alle Nodes durch suchen - ich finde keine Node noch den String auch wenn ich die ganze flows.json durchsuche!
-
@apollon77 Ich habe nun ein issue aufgemacht, da bei @rewenode die wildcards ja zu funktionieren scheinen.
-
@rewenode Ansonsten bin ich ein Stück weiter und hab nun die wichtigsten Funktionen getestet/implementiert.
Danke nochmals.
Die Zugriffe aufs Dateisystem spare ich mir erst mal.
Der nächste Schritt ist nun eigene Nodes zu basteln.
-
@mickym sagte in Zugriff auf iobroker via soket.io:
Der nächste Schritt ist nun eigene Nodes zu basteln.
Sieht doch schon mal gut aus was du da machst!
Wäre toll, wenn du das durchziehst. Das wird dann die ultimative Schnittstelle NR-ioB. Auf schwachbrüstigen ioB Rechnern kann man dann auch komplett auf den NR-Adapter verzichten. Das kann recht nützlich sein.Nachtrag
Sieh dir unbedingt nochmal die conn.js genauer an. da habe ich wirklich nur die offensichtlichsten html-Referenzen behandelt. Da wimmelt es aber sicher noch von so reload() - Sachen.
Hab zwar irgendwo gelesen, dass man die conn.js bei eigenen Adaptern verwenden soll, aber wenn es sich nicht um Bowser-socket.io Geschichten handelt scheint mir das keine optimale Lösung zu sein. -
@rewenode Ich glaube Du überschätzt mich wahrscheinlich. Ich bin wirklich ein blutiger Anfänger und muss mir soviel noch erarbeiten - teilweise selbst Grundlagen von Javascript - da meine Programmierzeit schon lange zurückliegt. Aber ich probiers halt.
Im Moment muss ich mich erst mal anhand der Beispiele einlesen, wie man solche Nodes überhaupt macht und alles soweit zusammenhängt. An Deinem Code in der Funktion habe ich erst mal bissi was verändert, damit der Output etwas näher an den NodeRed Standard angelehnt wird.
Auch Dein Sammeln der Eingaben über Arrays finde ich von Dir pfiffig - aber ich muss da noch sehen, was dann zentral bleibt und was ggf. doch in den Node Context kommt.
Aber wie gesagt ich bin ja schon froh, dass ich die Funktionalität mit NodeRed und der conn.js getestet und soweit verstanden habe und nicht mehr verzweifelt vor einem "es geht nicht" und ich weiß nicht mehr weiter stehe.
Bis ich auf die nächsten Probleme stoße - aber wie gesagt - mich drängt ja nichts.
Und wenn Du meinst, dass die Arbeit in jedem Fall sinnvoll ist - kann ich das ja auch zum Verstehen weitermachen - da ich hoffe, dass mein Problem mit den Wildcards im NR-Adapter trotzdem behoben werden.
Wenn ich mal etwas weiter bin - vielleicht können wir ja auch gemeinsam daran weiterarbeiten. Wie gesagt, Du warst mir eine große Hilfe, dass ich nun weitermachen kann.
-
@rewenode Dank Deines tollen Codes - habe ich schon mal eine Minierfolg mit der ersten Node - auch wenn noch nicht alle Optionen implementiert sind.
-
@mickym sagte in Zugriff auf iobroker via soket.io:
habe ich schon mal eine Minierfolg mit der ersten Node - auch wenn noch nicht alle Optionen implementiert sind
Na das nenne ich mal Biss haben! Gut gemacht.
Melde dich, wenn du mal 'nen Betatester brauchst.
Womit entwickelst du? Ich habe mir seinerzeit einen NR-Entwicklungscontainer gebastelt, mit dem ich dann sowohl unter VScode als auch mit den Chrome-Devtools debuggen konnte.
Mittlerweile sollte das ja ganz easy mit DEVContainer in VSCode gehen. Das bin ich grad am testen. -
@rewenode Ich entwickle alles wie zur Steinzeit - keine Entwicklerumgebung. Ich habe zwar Visual Studio auf meinem Rechner, aber hab das nur mal gebraucht um ein VB Programm zu schreiben. Aber das ist auch egal, weil ich nicht vorhabe, dass jetzt dauernd zu machen.
Ja die Node funktioniert so weit - aber ich glaub ich muss das alles nochmal irgendwie umbauen - da ich den Ablauf intern noch nicht so ganz verstanden habe.
In Deiner Function Node kann ich alle Funktionen nacheinander absetzen und die funktionieren auch. In meiner Node geht immer nur eine Funktion, dann springt die Steuerung nicht mehr zurück bzw. die Variablen sind nicht mehr initialisiert. Eventuell muss ich mit new ein neues Objekt erzeugen und wie Deine Funktion quasi von außen ansteuern. Also bin zwar froh soweit gekommen zu sein und mal eine Node mit den Steuerelementen erzeugen zu können.
Ich dachte mir ganz einfach - die In-Node ist einfach eine Subscription auf die patterns. Nun wollte ich nur noch die "sende Nachrichten zum Start" Funktion implementieren und dachte mir OK, dann machst einfach erst mal getStates und anschließend die Subscriptions aber das funktioniert nicht.
Ich habe auch die Idee soweit umgesetzt - dass man diese Nodes mit einem Array füttert.
Auch die Ausgabe der Objekte als Payload ist im Prinzip bereits alles implementiert.
Beides alleine funktioniert bestens - aber hintereinander eben nicht.
Also evtl. nochmal alles umschmeissen.Wenn ich gar nicht weiterkomme, dann werde ich diesen Stand wohl mal lassen und gehts halt nur mit einem getState, der zu Beginn und dann getriggert ausgibt - ich will irgendwelches asynchrones Gedöns mal außen vor lassen, mir raucht da eh schon der Kopf.
Wahrscheinlich mache ich das erst mal so, weil das einfacher für mich jetzt ist.. Dann hängt man zur Not auch mal 2 Nodes als Input an seinen Flow.Was mir schon zu Beginn aufgefallen ist, dass ich die subscriptions und/oder getStates innerhalb der Funktion aufrufen muss, die den aktuellen connect Status liefert. Ansonsten wartet man bis in alle Ewigkeit und es passiert nichts.
Oje - vergiss erst mal alles. Die Idee war das jeder Node über einen eigenen Kontext eine Verbindung aufbaut und somit die subscriptions sich nicht ins Gehege kommen. Aber ich zumindest so kann ich gar keine Verbindungen doppelt aufbauen - da zerschießt es bereits das ganze Node Red Eventuell muss man das dann doch so machen, das man eine eigene Verbindungsnode braucht - aber dann kann ich mir das ganze auch sparen, da also socket.io gibst es schon listener und emit Nodes. Das wird alles kompliziert. Wobei prinzipiell müsste es gehen. Ich kann mit Deiner function Node und meiner eigenen Node - gleichzeitig eine Verbindung aufmachen und sehe auch 2 Verbindungen in der Instanz. Vielleicht muss man die servConn Objekte in einer eigenen Instanz im node-Context betreiben. Es ist in jedem Fall noch eine ganze Menge im Argen - weiß nicht, ob ich mir das zutraue.
-
@mickym sagte in Zugriff auf iobroker via soket.io:
Was mir schon zu Beginn aufgefallen ist, dass ich die subscriptions und/oder getStates innerhalb der Funktion aufrufen muss, die den aktuellen connect Status liefert. Ansonsten wartet man bis in alle Ewigkeit und es passiert nichts.
Also, ich weis natürlich nicht, wie du dein node konkret implementiert hast. Ich hatte damals 2 Ansätze:
-
Ein Node pro Funktion mit einer Verbindung pro Flow (das kann man ja über servConn.init() machen. Dabei nimmst du nicht die node.id sondern irgend was flow-globales. An die Flow.id kommt man (glaube ich) innerhalb einer node nicht(oder nicht so einfach) ran.
Die Variante ist relativ einfach, weil in der node-configuration halt nur dass Pattern-Array hinterlegt werden muss. Die Funktion steht ja bereits fest und die Weiterbearbeitung ist auch einfacher. Ob/wie das mit mehrfach Connect klappt kannst du ja mit meinem function-node Gedöns testen. -
Universelles node mit allen Funktionen/Patterns
Dabei muss in der node Konfiguration entweder:
a) die Funktion und Pattern eingestellt werden können. Was dann allerdings auch nichts Anderes als Variante 1. ist, nur dass immer das gleiche node verwendet werden kann. Macht es übersichtlicher aber in der node Erstellung erst mal komplizierter. Evtl. kann man ja mit 1. anfangen z.B. ein subscribe-node und ein get-node. Und wenn beide funktionieren, versucht man die zu verallgemeinern und ein node draus zu machen. Und wenn das Prinzip klar ist, sollte der Rest kein Problem mehr sein.
b) der node soll alle Funktionen gleichzeitig abbilden können wie in dem function-node Beispiel. Dabei muss in der node-Konfiguration jeweils Funktion und Pattern-Array als Bock eingegeben werden können. Also ein Array mit Spalte1=function, Spalte2=arrayOfPattern
Mir würde 2b natürlich am besten gefallen, aber beginnen würde ich mit 1.
-
-
@mickym sagte in Zugriff auf iobroker via soket.io:
Aber ich zumindest so kann ich gar keine Verbindungen doppelt aufbauen
Habs grad getestet. Stimmt so kann ich auch keine mehrfachen Verbindungen aufbauen. Keine Ahnung warum. Bei meinen ersten Versuchen ging das. Vlt. finde ich das raus, wenn ich wieder debuggen kann;-)
-
@rewenode Ja ich glaube da muss man erst mal mehr verstehen, als ich es im Moment tue. Wie gesagt es geht parallel - aber mit 2 völlig unterschiedlichen Instanzen, sonst könnte ich ja nicht in einem Flow - mit Deiner function Node eine Verbindung aufbauen.
Aber ich kann halt nicht mit 2 meiner Nodes eine Verbindung aufbauen.
Ansonsten würde ich es vom Design her bei mir erst mal so lassen. Das funktioniert so wie bei der mqtt-Node in dem man unter Server für jede Node eine eigene Konfiguration hinterlegen kann. Das Problem ist dann eher, wie ich dies javaskript technisch umsetze. Mein erster Versuch es mit Klassen zu versuchen, da bin ich daran gescheitert, wie ich damit ordentlich kommuniziere.
Na egal - ich muss das erst mal sacken lassen - im Prinzip hab ich ja schon einiges gelernt.