NEWS
JScript-Editor in Blockly zickt rum
-
@iobroker2001
Die Javascript-Funktion erstellt Blockly. In das Editor-Fenster (3 Punkte) der Funktion gehört nur der Inhalt der Funktion. Oder hast Du versucht, die Javascript-Ansicht des Blockly zu editieren? Das geht nicht: Es ist eine reine Anzeige.Hier kann man mit Ctrl-V einfügen:
Funktioniert bei mir problemlos (auch viele Zeilen). Ist vielleicht der Quelltext schon versaut?
-
@paul53 sagte in JScript-Editor in Blockly zickt rum:
Ist vielleicht der Quelltext schon versaut?
Da stellt sich für mich auch die Frage: Wo kommt der Quellcode her?
-
@paul53 said in JScript-Editor in Blockly zickt rum:
Ist vielleicht der Quelltext schon versaut?
Offensichtlich. Die meisten Zeilen kann man ja nicht vollständig sehen. Aber in der dritten Zeile wird deutlich, dass die Hochkommas nicht paarweise gesetzt sind. Wer weiß, was da sonst noch schief ist.
-
@gombersiob
Wo kommt der denn her?
.Schattieru...:
sieht schon sehr schräg aus. Da stimmt sicher noch 'ne ganze Menge mehr nicht. -
Zunächst einmal danke für Eure Antworten!
Es ist mir peinlich, ich habe mich geirrt, der Fehler tritt nicht beim Einfügen, sondern beim Herauskopieren auf, sorry für die Verwirrung!Meine Vorgehensweise:
Ich befinde mich im Blockly-Editor und erzeuge eine Funktion namens "Kreiere Datenpunkte".Genau in diesen Funktions-Editor (über die 3 Punkte) füge ich diesen Text per Ctrl-V ein:
(Das sollte reines ASCII sein .)createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Aktivschalter.SchlafzimmerSchattierungAktiv', true, {name: "SchlafzimmerSchattierungAktiv", type: "boolean", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Aktivschalter.SchlafzimmerAktiv', true, {name: "SchlafzimmerAktiv", type: "boolean", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.Istwerte.SchattenzahlSchlafzimmerRolladen', 0, {name: "SchattenzahlSchlafzimmerRolladen", type: "number", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.AzimuthEndeSchlafzimmer', 0, {name: "AzimuthEndeSchlafzimmer", type: "number", role: "state", unit: "°" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.AzimuthStartSchlafzimmer', 0, {name: "AzimuthStartSchlafzimmer", type: "number", role: "state", unit: "°" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.HelligkeitHiSchlafzimmer', 0, {name: "HelligkeitHiSchlafzimmer", type: "number", role: "state", unit: "klux" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.HelligkeitLoSchlafzimmer', 0, {name: "HelligkeitLoSchlafzimmer", type: "number", role: "state", unit: "klux" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.TempAußenMinMarkiseSchlafzimmer', 15, {name: "TempAußenMinMarkiseSchlafzimmer", type: "number", role: "state", unit: "°C" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.TempInnenMinMarkiseSchlafzimmer', 15, {name: "TempInnenMinMarkiseSchlafzimmer", type: "number", role: "state", unit: "°C" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.WartezeitSchlafzimmerRolladen', 1800000, {name: "WartezeitSchlafzimmerRolladen", type: "number", role: "state", unit: "ms" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.WartezeitNachManuellMarkiseSchlafzimmer', 3600000, {name: "WartezeitNachManuellMarkiseSchlafzimmer", type: "number", role: "state", unit: "ms" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Status.StatusMarkiseSchlafzimmer', 0, {name: "StatusMarkiseSchlafzimmer", type: "string", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.PosSchattierungMarkiseSchlafzimmer', 20, {name: "PosSchattierungMarkiseSchlafzimmer", type: "string", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.ZeitStartSchattierungMarkiseSchlafzimmer', '09:00', {name: "ZeitStartSchattierungMarkiseSchlafzimmer", type: "string", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.ZeitEndeSchattierungMarkiseSchlafzimmer', '18:00', {name: "ZeitEndeSchattierungMarkiseSchlafzimmer", type: "string", role: "state" });
Das funktioniert, mit dem kleinen Schönheitsfehler, dass jede folgende Zeile um einen Tab eingerückt ist, s. Bild.
Kann man mit "Dokument formatieren" beheben. So weit, so gut! Ausführen der Funktion klappt ebenfalls.
Versuche ich jetzt aber, den soeben eingefügten Text komplett zu markieren und mit "Kopieren" herauszuholen, erhalte ich folgenden Text im Tastaturpuffer:createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Aktivschalter.SchlafzimmerSchattierungAktiv', true, { name: "SchlafzimmerSchattierungAktiv", type: "boolean", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Aktivschalter.SchlafzimmerAktiv', true, { name: "SchlafzimmerAktiv", type: "boolean", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.Istwerte.SchattenzahlSchlafzimmerRolladen', 0, { name: "SchattenzahlSchlafzimmerRolladen", type: "number", role: "state" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.AzimuthEndeSchlafzimmer', 0, { name: "AzimuthEndeSchlafzimmer", type: "number", role: "state", unit: "°" }); createState('0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung.AzimuthStartSchlafzimmer', 0, { name: "AzimuthStartSchlafzimmer", type: "number", role: "state", unit: "°" }); …
Man beachte: Text fehlt, und es erscheinen "..." 3 Punkte im Text für eine Textauslassung.
Das passiert mit jedem Text, der etwas mehr als ein paar Zeilen hat!! -
@iobroker2001 sagte in JScript-Editor in Blockly zickt rum:
"Dokument formatieren"
Das ist eine Funktion des Browsers - darauf würde ich mich nicht verlassen.
Ich würde für das Formatieren einen Editor mit Syntaxhervorhebung verwenden. Z.B. PsPad, VSCode, o.ä.
Dort kann man den Code dann in die gewünschte Form bringen und von dort aus in den JS-Editor bringen. -
Ich befinde mich im Blockly-Editor und erzeuge eine Funktion namens "Kreiere Datenpunkte".
Ich würde es, einfach der Übersicht halber, auch anders schreiben. Ich finde es schwierig wenn die Zeilen zu lang werden.
var pathAktivschalter="0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Aktivschalter."; var pathSchattierung="0_userdata.0.friedhelm.Rolladensteuerung.Einstellungen.Schattierung."; createState(pathAktivschalter+'SchlafzimmerSchattierungAktiv', true, { name: "SchlafzimmerSchattierungAktiv", type: "boolean", role: "state" }); createState(pathAktivschalter+'SchlafzimmerAktiv', true, { name: "SchlafzimmerAktiv", type: "boolean", role: "state" }); createState(pathSchattierung+'Istwerte.SchattenzahlSchlafzimmerRolladen', 0, { name: "Istwerte.SchattenzahlSchlafzimmerRolladen", type: "number", role: "state" }); createState(pathSchattierung+'AzimuthEndeSchlafzimmer', 0, { name: "AzimuthEndeSchlafzimmer", type: "number", role: "state", unit: "°" }); createState(pathSchattierung+'AzimuthStartSchlafzimmer', 0, { name: "AzimuthStartSchlafzimmer", type: "number", role: "state", unit: "°" });
-
@gombersiob
Ja, gute Idee, vielen Dank! -
@iobroker2001
Um die Übersicht zu behalten würde ich den Aufruf auch als Blockly machen.
(Hier als importierbares XML: DoCreateDatapoints.blockly)Die beiden JavaScripts sehen dann nur so aus:
async function DoCreateNumberDatapoint(aPath, aDatapoint, aValue, aUnit) { console.log("Path=" + aPath + " DataPoint=" + aDatapoint + " Value=" + aValue); createState(aPath+aDatapoint, aValue, { name: aDatapoint, type: "number", role: "state", unit: aUnit }); } async function DoCreateBooleanDatapoint(aPath, aDatapoint, aValue) { createState(aPath+aDatapoint, aValue, { name: aDatapoint, type: "boolean", role: "state" }); }
Wobei ich selber weniger mit Blockly arbeite. Ich finde JavaScript (besser noch TypeScript) handlicher und übersichtlicher.
-
@gombersiob sagte in JScript-Editor in Blockly zickt rum:
Ich finde JavaScript (besser noch TypeScript) handlicher und übersichtlicher.
Wenn man es beherrscht sicher keine Frage!
-
@gombersiob sagte in JScript-Editor in Blockly zickt rum:
Wobei ich selber weniger mit Blockly arbeite. Ich finde JavaScript (besser noch TypeScript) handlicher und übersichtlicher.
Finde ich auch, zumindest bei den eintönigen Definitionen für Datenpunkte ist JS knapper und übersichtlicher.