ioBroker / ioBroker.javascript

Script engine for JavaScript and Blockly
MIT License
320 stars 119 forks source link

[Blockly] Neuer Block: "Bestätige" #1582

Closed ScumbagSteve closed 1 month ago

ScumbagSteve commented 1 month ago

Manche Datenpunktänderungen im Userdata Ordner verarbeite ich anschließend im Blockly. Dabei setze ich die Werte zuerst unbestätigt, um sie dann im Blockly Skript nach Verarbeitung auf "bestätigt" zu setzen. Damit weiß ich, dass mein Blockly Skript durchgelaufen ist. (Standard ioBroker Logik). Leider gibt es derzeit keine schöne Möglichkeit dieses von Adaptern bekannte Verhalten im Blockly logisch fortzuführen. Die beste mir bekannte Lösung ist wohl:

image

So ist allerdings erst auf den zweiten Blick erkennbar, was damit eigentlich erreicht werden soll.

Hierfür könnte ich mir einen Block unter "System" vorstellen, der "Bestätige" durchführt. Einziger Input wäre die ObjektID. Der Block würde dann nur den "bestätigt-Status" ändern.

Diginix commented 1 month ago

Mache ich auch so und reicht für mich bisher. Wenn du nicht einzelne Trigger auf Objekte haben willst, kannst du auch einen mit zB regex nutzen, der auf alles unterhalb von 0_userdata\.(.*) lauscht. In dem nutzt du dann wieder deinen gezeigten Block.

ScumbagSteve commented 1 month ago

Den Vorschlag von dir hätte ich mit "ID vom Selektor" umgesetzt - regex habe ich bisher nur in anderem Zusammenhang (selten) verwendet. Das ist aber keine gute Lösung für mich. Ich möchte ja sicherstellen, dass mein Skript auch erfolgreich durchgelaufen ist - die Logik muss daher schon am Ende des Skripts (inkl. der Prüfungen) hängen. Ansonsten bestätige ich ja einfach nur alle Änderungen im Userdata Ordner, egal ob sie durch das jeweilige Skript korrekt verarbeitet wurden.

Es handelt sich hier um ein "nice to have", das ist mir klar. Da das Bestätigen im ioBroker Konzept aber so eine zentrale Rolle spielt, finde ich es schon noch verhältnismäßig hierfür einen Block anzubieten.

Diginix commented 1 month ago

Ok, du willst dann im Skript innerhalb eines einzelnen Objekttriggers den Block und dabei weder ObjektID noch Wert explizit definieren? D.h. was und wo muss durch den umgebenden Triggerblock klar sein. Ansonsten fehlt der Kontext.

ScumbagSteve commented 1 month ago

Ja genau. ObjektID hatte ich ja vorgeschlagen als Input zu machen. In den meisten Fällen würde ich da dann den Block "ObjektID" aus dem Trigger nehmen. So wird immer die getriggerte ObjektID bestätigt.

Den Wert möchte ich ja eben nicht ändern, sondern nur bestätigen, daher bräuchte es keinen "Wert" Input (sonst wäre es ja das selbe, wie der vorhandene Block).

Diginix commented 1 month ago

Ich glaube man kann einen state nicht "nur" bestätigen, ohne ihm auch den Wert erneut zu geben. Habe es zumindest selbst in JS noch nicht anders gesehen. Daher ist der von dir gezeigte Block eigentlich genau richtig. Dein Wunschblock würde dann im JS auch nur den bekannten Wert erneut nutzen, ohne dass man es in Blockly sieht. Aber vllt. geht es ja doch auch anders...

ScumbagSteve commented 1 month ago

Ja das hatte ich mich auch schon gefragt. Wäre aber auch okay wenn im Hintergrund einfach nochmal der aktuelle Wert ermittelt und dieser dann gesetzt+bestätigt wird.

ScumbagSteve commented 1 month ago

@klein0r danke ☺️