NEWS
Debugging
-
@jack Ich verstehe es trotzdem nicht. Was habe ich davon zu wissen wie die Variablen gefüllt werden? Je nach Script haben Variablen in Ihren langen Scriptläufen unterschiedliche Stände…
Nochdazu sind Scripte abhängig von anderen Scripten oder Zuständen, die man auch nicht so einfach nachstellen kann oder will. Deshalb passieren manche Tests in Reallife. Und wie was das mit den Notfallübungen die so schön funktionieren und in Reallife fast immer durch einen dummen Zufall dann doch nicht so laufen wie gedacht :-)
Noch dazu kann es Fehler beim Adapter geben um ein debugging in Scripten kommt man nach meiner Meinung nicht drumherum und unleserlicher wird das Script dadurch auch nicht. Ich kommentiere auch noch fleißig einzelne Bereiche so das viele Scripte hinterher 500 oder auch 1000 Zeilen haben. Das ganze kann man lesen. Auch nach 2 Monaten kann ich problemslos kleine Anpassungen an den div. Scripten vornehmen…. Oft baue ich zwar debugging bewußt ein nutze es aber tortzdem nicht wenn ich mir erstmal denke das es so läuft… was es dann auch in 9 von 10 Fällen so tut.
@jack Ich verstehe es trotzdem nicht. Was habe ich davon zu wissen wie die Variablen gefüllt werden? Je nach Script haben Variablen in Ihren langen Scriptläufen unterschiedliche Stände…
Klar. Aber wenn die Variable per Du nicht den passenden Wert hat, ist klar das sie irgendwo davor eben falsch befüllt wurde.
Und wenn Du jetzt "einfach in Deinem Code hoch scrollst", bis zur vorherigen Verwendungsstelle, siehst Du warum sie dort einen "Falschen" Wert bekommen hat.
-
also generell debugging wird man immer machen müssen. keiner ist so perfekt, egal in welcher sprache, das man immer ein perfektes ergebnis erhält ohne irgend einen fehler zu machen. egal in welcher programmiersprache oder syntaxlogik
blockly versucht ja, dem nutzer zumindest die möglichkeiten der syntax unter die arme zu greifen, in dem er nur syntaktisch korrekten code erzeugen kann.
leider hilft das bei der logik manchmal nicht immer weiter.ich gebe dir recht, in blockly ist das mit dem debugging nur mit individuellem variablen-output möglich.
selbst google hat da keine besserein ideen
https://www.youtube.com/watch?v=N0ahsEvo45Min javascript selbst (also browser javascript und nodejs) ist direkt ein debugger protokoll eingebaut, welches genau die von dir oben genannten informationen liefert (step-by-step-ausführung, breakt-points, auch conditional breakpoints, inspection, etc.)
nodejs
https://nodejs.org/en/docs/guides/debugging-getting-started/
chrome und edge: über die web developer toolsfür die skripte im javascript-adapter müsste das theoretisch auch klappen,
da die skripte in einer jeweiligen javascript VM ausgeführt werden.
ausprobiert habe ich das nie.
auch gibt es noch eine Erweiterung für vs code, mit der man skripte in vscode entwickeln kann und dann wieder mit iobroker synchronisieren kann.ich selbst entwickle meine iobroker skripte auch lieber in vs code. für die iobroker spezifiischen befehle mach ich mir dann individuell wrapper, die die funktionalität simulieren. endgültig getestet wird dann im iobroker
also generell debugging wird man immer machen müssen. keiner ist so perfekt, egal in welcher sprache, das man immer ein perfektes ergebnis erhält ohne irgend einen fehler zu machen. egal in welcher programmiersprache oder syntaxlogik
in javascript selbst (also browser javascript und nodejs) ist direkt ein debugger protokoll eingebaut, welches genau die von dir oben genannten informationen liefert (step-by-step-ausführung, breakt-points, auch conditional breakpoints, inspection, etc.)
Wären OT's perfekt würden sie die von mir gezeigten Screenshots auch nicht brauchen :))
Es ist ja "Debugging" aber eben ohne wieder Code schreiben zu müssen. Man kann einfach nach sehen. - Das ist ja auch genau DER Vorteil. -
In den "Neueren" Steuerungen gibt es auch sogenannte "Haltepunkte" die (Vermutlich) das Gleiche bewirken. Aber auch genau hier gibt es einen wesentlichen Unterschied:
So ein "breakt-point"/"Haltepunkt" stoppt das Programm an gewünschter Stelle, um zu analysieren.
Macht man das zu Hause mit dem Licht, leuchtet es zB. weiter, oder geht aus.
Macht man das mit einer Produktionsmaschine die mit 2000U/min fährt, war das keine gute Idee... -
@jack sagte: nicht darunter sondern (wie auf meinen Bildern rechts daneben):
Wie soll ein kompiliertes Programm Rückgriff auf den Editor erhalten?
-
Es sind 2 Verschiedene Welten (OT <=> IT)
ist es das tatsächlich? in einer Welt in der immer mehr von "Software defined xyz" geredet wird, ist das doch alles bereits zusammen.
Ui, bitte ja nicht böse sein! Aber ein Beispiel:
Wir haben einen voll automatischen Kran, der aufgetürmtes Gut ein-/um-/auslagert.
Da jedes Lastspiel (Gut nehmen, hochziehen, zu Punkt x/y bewegen, absetzen, hochziehen) den Kran altern lässt (wie jeder Kilometer beim Auto), sind wir bemüht darauf zu achten, möglichst nur notwendiges Gut zu befördern.
Das ist einem Softwareentwickler (meist) nicht klar wenn nicht egal.
Das Fazit: Der Kran muss die oberen beiden Güter umlagern, damit das von ihm "gewünschte" ausgelagert werden kann, obwohl es das gleich Gut gewesen wäre, nur mit einer neueren Nummer.Ist jetzt sicher nicht die beste Erklärung, aber ich hoffe sie verdeutlicht den Unterschied.
-
-
-
Es sind 2 Verschiedene Welten (OT <=> IT)
ist es das tatsächlich? in einer Welt in der immer mehr von "Software defined xyz" geredet wird, ist das doch alles bereits zusammen.
Ui, bitte ja nicht böse sein! Aber ein Beispiel:
Wir haben einen voll automatischen Kran, der aufgetürmtes Gut ein-/um-/auslagert.
Da jedes Lastspiel (Gut nehmen, hochziehen, zu Punkt x/y bewegen, absetzen, hochziehen) den Kran altern lässt (wie jeder Kilometer beim Auto), sind wir bemüht darauf zu achten, möglichst nur notwendiges Gut zu befördern.
Das ist einem Softwareentwickler (meist) nicht klar wenn nicht egal.
Das Fazit: Der Kran muss die oberen beiden Güter umlagern, damit das von ihm "gewünschte" ausgelagert werden kann, obwohl es das gleich Gut gewesen wäre, nur mit einer neueren Nummer.Ist jetzt sicher nicht die beste Erklärung, aber ich hoffe sie verdeutlicht den Unterschied.
@jack
Das sind auch Anforderungen, die beachtet werden müssen.
Wenn sie nicht aufgestellt werden, dann müsste ein Software oder Maschinen Programmierer diese nicht beachten.
Software ist dazu da irgendwelchen Input auszuwerten und irgendwelchen Output zu erzeugen um irgendwelche Anforderungen zu erreichen.
Bei deiner Unterscheidung ist bei IT der Input aus irgendwelchen Dateien und Output dann auch irgendwelche Dateien.
Bei OT dann Input aus Sensoren und Output die Ansteuerung von Relais, damit sich was bewegt oder dreht.
Einen Großen Unterschied seh ich da nicht. -
@paul53 sagte: nicht darunter sondern (wie auf meinen Bildern rechts daneben):
Du möchtest also einen Skripteditor mit eingebautem Interpreter?
In ioBroker sind Skripteditor und Skriptausführung strikt getrennt.@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?
-
@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?
-
-
@Euch darf man abschweifen und fragen was ihr beruflich? macht?
Ich fragte mich schon mit fhem, und auch jetzt hier: Hat es schon mal jemand ohne Programmier Kenntnisse geschafft, sein Haus mit einer solchen Software "Befriedigend" zu steuern, oder seid ihr alle Prof. Entwickler?
Gruß,
Jack -
@Euch darf man abschweifen und fragen was ihr beruflich? macht?
Ich fragte mich schon mit fhem, und auch jetzt hier: Hat es schon mal jemand ohne Programmier Kenntnisse geschafft, sein Haus mit einer solchen Software "Befriedigend" zu steuern, oder seid ihr alle Prof. Entwickler?
Gruß,
Jack -
@Euch darf man abschweifen und fragen was ihr beruflich? macht?
Ich fragte mich schon mit fhem, und auch jetzt hier: Hat es schon mal jemand ohne Programmier Kenntnisse geschafft, sein Haus mit einer solchen Software "Befriedigend" zu steuern, oder seid ihr alle Prof. Entwickler?
Gruß,
Jack -
@Euch darf man abschweifen und fragen was ihr beruflich? macht?
Ich fragte mich schon mit fhem, und auch jetzt hier: Hat es schon mal jemand ohne Programmier Kenntnisse geschafft, sein Haus mit einer solchen Software "Befriedigend" zu steuern, oder seid ihr alle Prof. Entwickler?
Gruß,
Jack@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 -
@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?