NEWS
Debugging
-
@paul53 sagte:
Du möchtest also einen Skripteditor mit eingebautem Interpreter?
In ioBroker sind Skripteditor und Skriptausführung strikt getrennt.Kenne ich mich leider viel (wie es scheint wirklich vieeeeel) zu wenig aus, und stelle es mir wohl zu einfach vor.
Aber ein mal noch -bitte-
Ich denke nicht das da ein Interpreter her muss.

Es sollte "nur" der Inhalt von diesem "Objekt" dargestellt werden. Oder ist das schon ein Interpreter? -Ich weis es leider nicht.Aber ich könnte jetzt das Licht einschalten, und würde sehen, das "etwas passiert ist", oder es das falsche Objekt war.
Beziehungsweise könnte man sehen das es ein Enumerator ist, oder nur ein Boolean.Abgesehen von der Umsetzbarkeit ist klar was ich meine?
@jack sagte: Es sollte "nur" der Inhalt von diesem "Objekt" dargestellt werden. Oder ist das schon ein Interpreter?
Dazu benötigt man einen Interpreter, da das kompilierte Skript den Skripteditor nicht kennt, also den Wert nicht an diesen übergeben kann.
Anmerkung: Ich komme auch nicht von der IT, sondern war in der Gebäudeautomatisierung (DDC) tätig. -
@jack
Auch in „meiner Welt“ besteht ein nicht unerheblicher Teil meiner Arbeit aus debugging. Das bleibt nicht aus, denn „jedes nicht triviale Programm enthält mindestens einen Bug“.
Dazu muss der Code aber auf spezielle Weise compiliert werden, muss Symboltabellen und Einsprungpunkte enthalten und wird dadurch um ein mehrfaches größer.Und davon mal ganz abgesehen: Im ioBroker geschieht vieles asynchron. In „meine Welt“ übersetzt wäre das wohl am ehesten mit Multithreading vergleichbar. Das lässt sich nur schwer und manchmal gar nicht sinnvoll debuggen.
Wir sprechen ja hier nicht über Programme mit Millionen von Codezeilen, sondern von verhältnismäßig kleinen Scripten.
Da kann ich beim Entwickeln mit Blockly mit ein paar eingestreuten Debug-Meldungen gut leben.Und wie @OliverIO schon schrieb: In JS ist man mit VS Code deutlich komfortabler unterwegs.
Im neuen Jahr werde ich das endlich mal so aufsetzen, dass ich JS dort auch debuggen kann. Bis dahin sitze ich Abermillionen WoMo auf 'nem Stellplatz in der Pampa.. kein ioB weit und breit :grin: -
@jack sagte: Es sollte "nur" der Inhalt von diesem "Objekt" dargestellt werden. Oder ist das schon ein Interpreter?
Dazu benötigt man einen Interpreter, da das kompilierte Skript den Skripteditor nicht kennt, also den Wert nicht an diesen übergeben kann.
Anmerkung: Ich komme auch nicht von der IT, sondern war in der Gebäudeautomatisierung (DDC) tätig.@paul53 sag mir wenn ich Dir auf die Nerven gehe!
Es sollte eigentlich gar nicht kompiliert werden.Ich glaube es mit Variablen/Objekten zu benennen mein Fehler ist. Oder Du zu tief blickst.
Im JS-Editor brauche ich zB. 'leuchtet meine Lampe';
Also mach ich einen getState() auf Lampe.brightness.So. Jetzt möchte neben stehend sehen:
klicke auf der IOBroker-Oberfläche auf Objekte,
auf ZigBee, auf die Lampe, und schaue auf den Ausgabewert von brightness.Der Wert soll neben stehen.
... mehr soll es gar nicht sein! -Vorerst zumindest.
-
@paul53 sag mir wenn ich Dir auf die Nerven gehe!
Es sollte eigentlich gar nicht kompiliert werden.Ich glaube es mit Variablen/Objekten zu benennen mein Fehler ist. Oder Du zu tief blickst.
Im JS-Editor brauche ich zB. 'leuchtet meine Lampe';
Also mach ich einen getState() auf Lampe.brightness.So. Jetzt möchte neben stehend sehen:
klicke auf der IOBroker-Oberfläche auf Objekte,
auf ZigBee, auf die Lampe, und schaue auf den Ausgabewert von brightness.Der Wert soll neben stehen.
... mehr soll es gar nicht sein! -Vorerst zumindest.
-
@homoran ja genau! Nur Text. Aber genau der ist doch die ID! Darum Verstehe ich es ja nicht...
getState('zigbee.0.001788010b9af0de.brightness').val;'zigbee.0.001788010b9af0de.brightness'

ein Adapter der das Skript liest, und die getState, setState,... ausgibt?
-
@homoran ja genau! Nur Text. Aber genau der ist doch die ID! Darum Verstehe ich es ja nicht...
getState('zigbee.0.001788010b9af0de.brightness').val;'zigbee.0.001788010b9af0de.brightness'

ein Adapter der das Skript liest, und die getState, setState,... ausgibt?
-
Hallo an alle Entwickler! Mich würde es echt freuen, wenn Ihr Nachfolgendes umsetzen könntet:
Hier einige kleine Skripte (werden dann eh immer gleich "groß") schreiben, damit das Licht an geht, aus geht, oder auch doch nicht, ist ärgerlich. - Dann: Debuggen - . Man schreibt nochmals doppelt so viel Code, als das eigentliche Skript hat, damit man eruieren kann wo der Fehler liegt, und die Versuche das Problem zu lösen, führen öfter dazu, dass der Code zu Tode Verriegelt wird, als dass die wirkliche Ursache gefunden wird.
Ich komme nicht von der IT, sondern aus der OT. Und bei uns gibt es seit jeher (schon im vorigen Jahrtausend) sehr tolle Möglichkeiten, die 'dieses Debugging' nicht benötigen.
Viel um den heißen Brei geredet. Hier ein paar Bilder, die zeigen was ich meine:
Ein Programm im "Funktionsplan" (FUP) geschrieben, das man wie alle weiteren Online beobachten kann:

file:///home/jack/Downloads/image001.pngEin Auszug aus SCL. Rechts sieht man den Wert jeder Variable vom Code:
file:///home/jack/Downloads/image003.pngScreenshot eines Motion Controllers; per Maus-Tooltip sieht man die Zustände der Variablen:
file:///home/jack/Downloads/image004.pngKennt jeder Elektriker, wenn er das Bild um 90° dreht; Kontaktplan (KOP):
file:///home/jack/Downloads/image006.pngMich wundert ja, das das nicht mal Google's Blokly kann. Aber vielleicht finden sich ja hier ein paar Leute, die einen Adapter zusammen bauen, damit Debugging in (kleinen) Javaskripten im großen und ganzen überflüssig ist.
Ich hoffe euch zumindest ein wenig motiviert zu haben,
Jack@homoran 1. Eintrag:
Hallo an alle Entwickler! Mich würde es echt freuen, wenn Ihr Nachfolgendes umsetzen könntet:
Ich dachte eben das jemand so einen Adapter, oder ein Feature für den Editor, oder ganz was anderes machen kann und möchte.
Ich will hier niemanden zur Weißglut treiben!
-
@homoran 1. Eintrag:
Hallo an alle Entwickler! Mich würde es echt freuen, wenn Ihr Nachfolgendes umsetzen könntet:
Ich dachte eben das jemand so einen Adapter, oder ein Feature für den Editor, oder ganz was anderes machen kann und möchte.
Ich will hier niemanden zur Weißglut treiben!
-
@homoran Nein! Denk ganz einfach:
Der Text der im Editor steht.
'zigbee.0.001788010b9af0de.brightness' damit wir beim Beispiel bleiben
Dieser enthält den kompletten "pfad" (so wird es ja zumindest dargestellt) zum "objekt" = Lampe/helligkeit.
Man kann diese ja auch oben rechts über das Zwischenablagesymbol auswählen.
Warum kann man jetzt nicht auch den Zustand erfassen, und alle sekunden aktualisiert anzeigen?-Ich glaube wenn ich mich richtig ausdrücken könnte würde jeder "ach soo!" sagen-
-
@homoran Nein! Denk ganz einfach:
Der Text der im Editor steht.
'zigbee.0.001788010b9af0de.brightness' damit wir beim Beispiel bleiben
Dieser enthält den kompletten "pfad" (so wird es ja zumindest dargestellt) zum "objekt" = Lampe/helligkeit.
Man kann diese ja auch oben rechts über das Zwischenablagesymbol auswählen.
Warum kann man jetzt nicht auch den Zustand erfassen, und alle sekunden aktualisiert anzeigen?-Ich glaube wenn ich mich richtig ausdrücken könnte würde jeder "ach soo!" sagen-
@jack
Hm, also in einem 2. Reiter den Objekte tab aufmachen und dann live die Änderungen des datenpunktes beobachten können?Aufgrund des asynchronen Verhaltens und ereignisbezogenen funktionsuafrufe ist es nicht immer so einfach die verschiedenen Möglichkeiten abzubilden.
Die Life Anzeige eines datenpunktes ist, wie gerade schon geschrieben, über den Objekte tab möglich.
Der reine Wert ist aber nur ein Teil der Information. Bspw der Zeitstempel der Änderung oder gar die Datenqualität sind ua noch weitere Informationen zum datenpunkt.
Wenn ich nun in einer console mittels der Funktion getState die informationen zum datenpunkt Abfrage erhält man ja ein komplettes Objekt, manche Funktionen geben gar 2 oder mehr variablen zurück. Das ist in einem console Fenster ohne zusätzlichen Code nicht simpel umsetzbar. -
@jack
Hm, also in einem 2. Reiter den Objekte tab aufmachen und dann live die Änderungen des datenpunktes beobachten können?Aufgrund des asynchronen Verhaltens und ereignisbezogenen funktionsuafrufe ist es nicht immer so einfach die verschiedenen Möglichkeiten abzubilden.
Die Life Anzeige eines datenpunktes ist, wie gerade schon geschrieben, über den Objekte tab möglich.
Der reine Wert ist aber nur ein Teil der Information. Bspw der Zeitstempel der Änderung oder gar die Datenqualität sind ua noch weitere Informationen zum datenpunkt.
Wenn ich nun in einer console mittels der Funktion getState die informationen zum datenpunkt Abfrage erhält man ja ein komplettes Objekt, manche Funktionen geben gar 2 oder mehr variablen zurück. Das ist in einem console Fenster ohne zusätzlichen Code nicht simpel umsetzbar. -
@oliverio Ja! S#@!?e Dafür so eine Diskusion?
[EDIT] aber eben nicht einen 2. Reiter. Platztechnisch angepasst.
-
@homoran ja genau! Nur Text. Aber genau der ist doch die ID! Darum Verstehe ich es ja nicht...
getState('zigbee.0.001788010b9af0de.brightness').val;'zigbee.0.001788010b9af0de.brightness'

ein Adapter der das Skript liest, und die getState, setState,... ausgibt?
-
@codierknecht
Er will den object tab im gleichen Fenster wie das Skript haben, so das man nicht blättern muss. Evtl reduziert auf nur bestimmte IDs
So hab ich es bis jetzt verstanden.
So wie ein Watch Fenster -
@codierknecht
Er will den object tab im gleichen Fenster wie das Skript haben, so das man nicht blättern muss. Evtl reduziert auf nur bestimmte IDs
So hab ich es bis jetzt verstanden.
So wie ein Watch Fenster@oliverio
Hatte ich schon verstanden ;-)
Natürlich kann man aus einem System auch die eierlegende Wollmilchsau machen. Nach meiner Erfahrung besteht dann aber schnell die Gefahr, dass man ein gut und stabil funktionierendes System dermaßen verstrubbelt, dass es dann zwar „schön und einfach“ ist, aber halt nicht mehr stabil.
Je komplexer ein System, desto eher geht etwas schief. -
@codierknecht
Er will den object tab im gleichen Fenster wie das Skript haben, so das man nicht blättern muss. Evtl reduziert auf nur bestimmte IDs
So hab ich es bis jetzt verstanden.
So wie ein Watch Fenster -
@homoran Nein! Denk ganz einfach:
Der Text der im Editor steht.
'zigbee.0.001788010b9af0de.brightness' damit wir beim Beispiel bleiben
Dieser enthält den kompletten "pfad" (so wird es ja zumindest dargestellt) zum "objekt" = Lampe/helligkeit.
Man kann diese ja auch oben rechts über das Zwischenablagesymbol auswählen.
Warum kann man jetzt nicht auch den Zustand erfassen, und alle sekunden aktualisiert anzeigen?-Ich glaube wenn ich mich richtig ausdrücken könnte würde jeder "ach soo!" sagen-
Ich glaube wenn ich mich richtig ausdrücken könnte
tust du.
Das klappt aber nicht.
früher wurde der Wert angezeigt, war aber immer der Wert, der beim Start des Javascript Editors gültig war.
Das hat zu Missverständnissen geführt, also gibts es in der ID Selector Box nur noch die ID ohne Wert. -
@jack
Ich lehne mich mal aus dem Fenster und sage das hier im Forum 90% normale User sind. Skripten (Programmieren), mit welchem Editor auch immer, können nicht viele...
Ich übrigens bis auf try and error auch nicht@jack
Ich lehne mich mal aus dem Fenster und sage das hier im Forum 90% normale User sind. Skripten (Programmieren), mit welchem Editor auch immer, können nicht viele...
Ich übrigens bis auf try and error auch nichtWie verwendest Du dann ioBroker? Ich meine, irgendwie musst Du ja Logiken "kreieren".
-
@jack
Ich lehne mich mal aus dem Fenster und sage das hier im Forum 90% normale User sind. Skripten (Programmieren), mit welchem Editor auch immer, können nicht viele...
Ich übrigens bis auf try and error auch nichtWie verwendest Du dann ioBroker? Ich meine, irgendwie musst Du ja Logiken "kreieren".
Wie verwendest Du dann ioBroker? Ich meine, irgendwie musst Du ja Logiken "kreieren".
ich bin zwar nicht @FredF
erstens muss man keine Logiken basteln wenn man iobroker nutzen will.
wenn doch, muss es lange noch kein javascript sein.
da gibt es noch szenen und andere low level Adapter.
dann gäbe es noch node-red, und die grafischen Varianten von Javascript: Rules und Blockly.
Ich nutze Blockly, weil ich ums Verrecken die js Syntax nicht hinbekomme.
Dort arbeite ich auch oft nach trial & error, fange mit einem rudimentären Skript an und baue es schrittweise immer weiter aus.
Wenn es nicht wie erwartet läuft, setze ich debug-Bausteine an neuralgische Punkte und lasse mir z.B. die Zwischenergebnisse von Rechenoperationen ausgeben.