iobroker.javascript 9.2.1 → 9.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/admin/assets/{AiChatPanel-Cc1KscBJ.js → AiChatPanel-Bbux7LP7.js} +15 -15
- package/admin/assets/{ScriptEditor-6qrtvwPL.js → ScriptEditor-DKljeYQN.js} +1 -1
- package/admin/assets/{ScriptEditorVanillaMonaco-bJua4sm1.js → ScriptEditorVanillaMonaco-CaFyKuJ2.js} +2 -2
- package/admin/assets/{index-CYbVtccs.js → index-DSvAO584.js} +4 -4
- package/admin/assets/{index-DsW7vBcg.js → index-DgE6XhUM.js} +1 -1
- package/admin/assets/{index-BZxCaQhO.js → index-_BUuZlI0.js} +1 -1
- package/admin/google-blockly/own/blocks_system.js +34 -0
- package/admin/google-blockly/own/blocks_words.js +4 -0
- package/admin/tab.html +1 -1
- package/docs/de/README.md +2 -0
- package/docs/de/blockly.md +669 -8
- package/docs/en/blockly.md +33 -0
- package/io-package.json +14 -1
- package/package.json +1 -1
package/docs/de/blockly.md
CHANGED
|
@@ -570,6 +570,13 @@ Im Gegensatz zu dem vorherigen Beispiel wird der Zustand von "Licht" in dem folg
|
|
|
570
570
|
```
|
|
571
571
|
|
|
572
572
|
|
|
573
|
+
|
|
574
|
+
### State umschalten
|
|
575
|
+

|
|
576
|
+
|
|
577
|
+
Dieser Block ähnelt dem [Steuere-State-Block](#steuere-state), schaltet den Wert aber jeweils um — von `true` auf `false` und umgekehrt.
|
|
578
|
+
|
|
579
|
+
|
|
573
580
|
|
|
574
581
|
### Aktualisiere State
|
|
575
582
|

|
|
@@ -820,6 +827,42 @@ Typische Anwendung dieses Blocks:
|
|
|
820
827
|
|
|
821
828
|
|
|
822
829
|
|
|
830
|
+
### Datenpunkt vorhanden
|
|
831
|
+
|
|
832
|
+
Dieser Block liefert einen Boolean (`true` / `false`) und gibt zurück, ob der angegebene Datenpunkt aktuell überhaupt einen Wertdatensatz in der State-DB besitzt. Die OID wird über einen Value-Input geliefert — sie kann aus dem OID-Auswahlblock (`Objekt ID`), einer String-Variable oder jedem anderen Block kommen, der eine State-ID liefert.
|
|
833
|
+
|
|
834
|
+
**Wozu das Ganze?** ioBroker speichert **Objekte** (Metadaten) und **States** (Werte) getrennt. Ein Adapter kann das *Objekt* eines Datenpunkts anlegen — die ID erscheint dann im OID-Auswahldialog —, ohne jemals einen *Wert* zu schreiben. In diesem Fall führt `getState(...)` zu einer Warnung im Log:
|
|
835
|
+
|
|
836
|
+
```
|
|
837
|
+
warn getState "zigbee.0.187a3efffee9e4e8.load_power" not found (3)
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
Auch eine Prüfung wie `Wert von Objekt-ID … != null` löst diese Warnung aus, weil sie bereits *während* des `getState`-Aufrufs entsteht — also bevor der Vergleich überhaupt ausgewertet wird.
|
|
841
|
+
|
|
842
|
+
Der Block **Datenpunkt vorhanden** verwendet intern `existsStateAsync(...)`. Diese Funktion prüft den Cache stillschweigend und schreibt nichts ins Log, falls der State fehlt. Das ist der saubere Weg, einen `getState`-Aufruf abzusichern, wenn ein Adapter Datenpunkte vorab anlegt, aber nicht sofort befüllt (z. B. Zigbee, Tuya).
|
|
843
|
+
|
|
844
|
+
Typische Anwendung — einen Lese-Vorgang gegen fehlende State-Datensätze absichern:
|
|
845
|
+
|
|
846
|
+
```
|
|
847
|
+
wenn [Datenpunkt vorhanden [Objekt ID "zigbee.0.…load_power"]]
|
|
848
|
+
setze [leistung] auf [Wert von Objekt-ID "zigbee.0.…load_power"]
|
|
849
|
+
log [leistung]
|
|
850
|
+
```
|
|
851
|
+
|
|
852
|
+
Der erzeugte JavaScript-Code:
|
|
853
|
+
|
|
854
|
+
```javascript
|
|
855
|
+
if ((await existsStateAsync('zigbee.0.187a3efffee9e4e8.load_power'))) {
|
|
856
|
+
let leistung = getState('zigbee.0.187a3efffee9e4e8.load_power').val;
|
|
857
|
+
console.log(leistung);
|
|
858
|
+
}
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
**Hinweis:** Mit der Adapter-Einstellung *„Beim Start nicht alle Zustände abonnieren"* lässt sich `existsState` nicht synchron auswerten. Der Block erzeugt deshalb die asynchrone Form (`await existsStateAsync(...)`), die in beiden Modi korrekt funktioniert.
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
823
866
|
## Aktionsblöcke
|
|
824
867
|
|
|
825
868
|
### Exec - Kommando
|
|
@@ -1224,6 +1267,10 @@ If you start value with "{" it will be interpreted as JSON string. Use double qu
|
|
|
1224
1267
|
|
|
1225
1268
|
|
|
1226
1269
|
|
|
1270
|
+
### An anderes Skript senden
|
|
1271
|
+

|
|
1272
|
+
|
|
1273
|
+
Mit diesem Block kannst du eine Nachricht an ein anderes Skript senden. Die Nachricht kann dort durch den Block [Ereignis – Nachricht empfangen](#trigger-on-script-event) verarbeitet werden.
|
|
1227
1274
|
|
|
1228
1275
|
|
|
1229
1276
|
|
|
@@ -1947,8 +1994,55 @@ Mit diesem Block können Sie Veranstaltungen per Dateiaktualisierung abbestellen
|
|
|
1947
1994
|
|
|
1948
1995
|
**Wichtig**: Diese Funktionalität ist nur mit js-controller@4.1.x oder neuer verfügbar.
|
|
1949
1996
|
|
|
1997
|
+
### Trigger auf Skript-Ereignis
|
|
1998
|
+

|
|
1999
|
+
|
|
2000
|
+
Mit diesem Block kannst du dich auf skriptübergreifende Ereignisse abonnieren und beim Empfang eine Aktion ausführen.
|
|
2001
|
+
|
|
1950
2002
|
## Timeouts
|
|
1951
2003
|
|
|
2004
|
+
### Warten/Pause
|
|
2005
|
+
Mit diesem einfachen Block lässt sich die Ausführung von Blöcken pausieren.
|
|
2006
|
+
Achtung: Wird `pause` innerhalb einer Block-Kette verwendet, werden alle in diesem Skript darunter liegenden Blöcke ebenfalls verzögert:
|
|
2007
|
+

|
|
2008
|
+
Generierter Code:
|
|
2009
|
+
```
|
|
2010
|
+
console.log('"Independent" block'); // Wird nicht verzögert
|
|
2011
|
+
|
|
2012
|
+
console.log('Before pause');
|
|
2013
|
+
await wait(5000);
|
|
2014
|
+
console.log('After pause');
|
|
2015
|
+
```
|
|
2016
|
+
|
|
2017
|
+
Log-Ausgabe:
|
|
2018
|
+
```
|
|
2019
|
+
15:48:21.807 info javascript.0 (7304) script.js.Skript_1: "Independent" block
|
|
2020
|
+
15:48:21.807 info javascript.0 (7304) script.js.Skript_1: Before pause
|
|
2021
|
+
15:48:21.807 info javascript.0 (7304) script.js.Skript_1: registered 0 subscriptions and 0 schedules
|
|
2022
|
+
15:48:26.810 info javascript.0 (7304) script.js.Skript_1: After pause
|
|
2023
|
+
```
|
|
2024
|
+
|
|
2025
|
+

|
|
2026
|
+
|
|
2027
|
+
Generierter Code:
|
|
2028
|
+
```
|
|
2029
|
+
console.log('Before pause');
|
|
2030
|
+
await wait(5000);
|
|
2031
|
+
console.log('After pause');
|
|
2032
|
+
|
|
2033
|
+
console.log('"Independent" block'); // Wird um 5 Sekunden verzögert
|
|
2034
|
+
```
|
|
2035
|
+
|
|
2036
|
+
Ausgabe:
|
|
2037
|
+
|
|
2038
|
+
```
|
|
2039
|
+
15:52:03.289 info javascript.0 (7304) script.js.Skript_1: Before pause
|
|
2040
|
+
15:52:03.290 info javascript.0 (7304) script.js.Skript_1: registered 0 subscriptions and 0 schedules
|
|
2041
|
+
15:52:08.296 info javascript.0 (7304) script.js.Skript_1: After pause
|
|
2042
|
+
15:52:08.297 info javascript.0 (7304) script.js.Skript_1: "Independent" block
|
|
2043
|
+
```
|
|
2044
|
+
|
|
2045
|
+
|
|
1952
2046
|
### Delayed execution
|
|
1953
2047
|

|
|
1954
2048
|
|
|
@@ -2333,25 +2427,592 @@ Inside these blocks variable "value" yet exist, but anyway to read their values
|
|
|
2333
2427
|
|
|
2334
2428
|
|
|
2335
2429
|
|
|
2336
|
-
##
|
|
2430
|
+
## Funktionen
|
|
2431
|
+
|
|
2432
|
+
### Funktion aus Blöcken erstellen (ohne Rückgabewert)
|
|
2433
|
+

|
|
2434
|
+
|
|
2435
|
+
Mit diesem Block kannst du wiederkehrende Block-Sequenzen zu einer Funktion zusammenfassen und diese Funktion anschließend an beliebigen Stellen im aktuellen Blockly-Skript verwenden.
|
|
2436
|
+
|
|
2437
|
+
Hier ein Beispiel für eine Funktion, die nur die aktuelle Uhrzeit ins Log schreibt:
|
|
2438
|
+
|
|
2439
|
+

|
|
2440
|
+
|
|
2441
|
+
```xml
|
|
2442
|
+
<xml xmlns="http://www.w3.org/1999/xhtml">
|
|
2443
|
+
<block type="comment" id=";LE@QUg[hpGG!Ed6(?Hf" x="463" y="88">
|
|
2444
|
+
<field name="COMMENT">Print current time</field>
|
|
2445
|
+
</block>
|
|
2446
|
+
<block type="procedures_defnoreturn" id="zz#oL]VPR)s}NMK9htHa" x="463" y="113">
|
|
2447
|
+
<field name="NAME">printTime</field>
|
|
2448
|
+
<comment pinned="false" h="80" w="160">Describe this function...</comment>
|
|
2449
|
+
<statement name="STACK">
|
|
2450
|
+
<block type="debug" id="ak(`[aJB-AH@Hvc;B,[D">
|
|
2451
|
+
<field name="Severity">log</field>
|
|
2452
|
+
<value name="TEXT">
|
|
2453
|
+
<shadow type="text" id="aGuA=^(ge/)=lXes9f]?">
|
|
2454
|
+
<field name="TEXT">test</field>
|
|
2455
|
+
</shadow>
|
|
2456
|
+
<block type="time_get" id="M}z9(p(melE7BbTGqczO">
|
|
2457
|
+
<mutation format="false" language="false"></mutation>
|
|
2458
|
+
<field name="OPTION">hh:mm:ss.sss</field>
|
|
2459
|
+
</block>
|
|
2460
|
+
</value>
|
|
2461
|
+
</block>
|
|
2462
|
+
</statement>
|
|
2463
|
+
</block>
|
|
2464
|
+
</xml>
|
|
2465
|
+
```
|
|
2466
|
+
|
|
2467
|
+
Nachdem die Funktion erstellt wurde, kann sie folgendermaßen verwendet werden:
|
|
2468
|
+
|
|
2469
|
+

|
|
2470
|
+
|
|
2471
|
+
```xml
|
|
2472
|
+
<block xmlns="http://www.w3.org/1999/xhtml" type="timeouts_setinterval" id="hp;?}l3uStXhm+a2s!9t" x="62.99999999999943" y="112.99999999999994">
|
|
2473
|
+
<field name="NAME">interval</field>
|
|
2474
|
+
<field name="INTERVAL">1000</field>
|
|
2475
|
+
<statement name="STATEMENT">
|
|
2476
|
+
<block type="procedures_callnoreturn" id="(/)MPv+z_|516CuG%[XD">
|
|
2477
|
+
<mutation name="printTime"></mutation>
|
|
2478
|
+
</block>
|
|
2479
|
+
</statement>
|
|
2480
|
+
</block>
|
|
2481
|
+
```
|
|
2482
|
+
|
|
2483
|
+
Die neu erstellte Funktion erscheint im Block-Menü:
|
|
2484
|
+
|
|
2485
|
+

|
|
2486
|
+
|
|
2487
|
+
Zusätzlich lassen sich über den Konfigurationsdialog Argumente für die Funktion festlegen. Im selben Dialog können auch die Namen der Argumente bearbeitet werden.
|
|
2488
|
+
|
|
2489
|
+

|
|
2490
|
+
|
|
2491
|
+
Hier ein Beispiel für eine Funktion, die die Summe des ersten und des zweiten Arguments ausgibt:
|
|
2492
|
+
|
|
2493
|
+

|
|
2494
|
+
|
|
2495
|
+
```xml
|
|
2496
|
+
<xml xmlns="http://www.w3.org/1999/xhtml">
|
|
2497
|
+
<block type="comment" id=";LE@QUg[hpGG!Ed6(?Hf" x="463" y="88">
|
|
2498
|
+
<field name="COMMENT">Print sum of a and b</field>
|
|
2499
|
+
</block>
|
|
2500
|
+
<block type="procedures_defnoreturn" id="zz#oL]VPR)s}NMK9htHa" x="463" y="113">
|
|
2501
|
+
<mutation>
|
|
2502
|
+
<arg name="a"></arg>
|
|
2503
|
+
<arg name="b"></arg>
|
|
2504
|
+
</mutation>
|
|
2505
|
+
<field name="NAME">printSum</field>
|
|
2506
|
+
<comment pinned="false" h="80" w="160">Describe this function...</comment>
|
|
2507
|
+
<statement name="STACK">
|
|
2508
|
+
<block type="debug" id="ak(`[aJB-AH@Hvc;B,[D">
|
|
2509
|
+
<field name="Severity">log</field>
|
|
2510
|
+
<value name="TEXT">
|
|
2511
|
+
<shadow type="text" id="aGuA=^(ge/)=lXes9f]?">
|
|
2512
|
+
<field name="TEXT">test</field>
|
|
2513
|
+
</shadow>
|
|
2514
|
+
<block type="math_arithmetic" id="qUGc!b+U]:yE!I+3I+Lp">
|
|
2515
|
+
<field name="OP">ADD</field>
|
|
2516
|
+
<value name="A">
|
|
2517
|
+
<shadow type="math_number" id="OqjQ{@*pgO,~Xd(ef)9~">
|
|
2518
|
+
<field name="NUM">1</field>
|
|
2519
|
+
</shadow>
|
|
2520
|
+
<block type="variables_get" id="]dC)!=A3{(5?9hJ:1gET">
|
|
2521
|
+
<field name="VAR">a</field>
|
|
2522
|
+
</block>
|
|
2523
|
+
</value>
|
|
2524
|
+
<value name="B">
|
|
2525
|
+
<shadow type="math_number" id="aDp|:rn#.wve0]WKi(D[">
|
|
2526
|
+
<field name="NUM">1</field>
|
|
2527
|
+
</shadow>
|
|
2528
|
+
<block type="variables_get" id="5];ao,?ce{;GJ;OOW~S4">
|
|
2529
|
+
<field name="VAR">b</field>
|
|
2530
|
+
</block>
|
|
2531
|
+
</value>
|
|
2532
|
+
</block>
|
|
2533
|
+
</value>
|
|
2534
|
+
</block>
|
|
2535
|
+
</statement>
|
|
2536
|
+
</block>
|
|
2537
|
+
</xml>
|
|
2538
|
+
```
|
|
2539
|
+
|
|
2540
|
+
Die Argumente erscheinen im Variablen-Menü:
|
|
2541
|
+
|
|
2542
|
+

|
|
2543
|
+
|
|
2544
|
+
Die Funktion lässt sich dann so verwenden:
|
|
2545
|
+
|
|
2546
|
+

|
|
2547
|
+
|
|
2548
|
+
```xml
|
|
2549
|
+
<block xmlns="http://www.w3.org/1999/xhtml" type="procedures_callnoreturn" id="(-G|y+Y7AC]w2CTQGjYC" x="138" y="188">
|
|
2550
|
+
<mutation name="printSum">
|
|
2551
|
+
<arg name="a"></arg>
|
|
2552
|
+
<arg name="b"></arg>
|
|
2553
|
+
</mutation>
|
|
2554
|
+
<value name="ARG0">
|
|
2555
|
+
<block type="math_number" id="!.UT=[{Xkz-*wlPh)sYn">
|
|
2556
|
+
<field name="NUM">5</field>
|
|
2557
|
+
</block>
|
|
2558
|
+
</value>
|
|
2559
|
+
<value name="ARG1">
|
|
2560
|
+
<block type="math_number" id="EMhKM9Cn#;DjMZ#Ko%EN">
|
|
2561
|
+
<field name="NUM">6</field>
|
|
2562
|
+
</block>
|
|
2563
|
+
</value>
|
|
2564
|
+
</block>
|
|
2565
|
+
```
|
|
2566
|
+
|
|
2567
|
+
### Funktion aus Blöcken erstellen (mit Rückgabewert)
|
|
2568
|
+

|
|
2569
|
+
|
|
2570
|
+
Dieser Block funktioniert wie der vorherige, kann aber zusätzlich ein Ergebnis zurückgeben, das anschließend in anderen Blöcken weiterverwendet werden kann.
|
|
2571
|
+
|
|
2572
|
+

|
|
2573
|
+
|
|
2574
|
+
```xml
|
|
2575
|
+
<block xmlns="http://www.w3.org/1999/xhtml" type="procedures_defreturn" id="4)|}1YzV}e6YUvVV^sY{" x="413" y="138">
|
|
2576
|
+
<mutation statements="false">
|
|
2577
|
+
<arg name="a"></arg>
|
|
2578
|
+
<arg name="b"></arg>
|
|
2579
|
+
</mutation>
|
|
2580
|
+
<field name="NAME">do something</field>
|
|
2581
|
+
<comment pinned="false" h="80" w="160">Return sum of a and b</comment>
|
|
2582
|
+
<value name="RETURN">
|
|
2583
|
+
<block type="math_arithmetic" id="qUGc!b+U]:yE!I+3I+Lp">
|
|
2584
|
+
<field name="OP">ADD</field>
|
|
2585
|
+
<value name="A">
|
|
2586
|
+
<shadow type="math_number" id="OqjQ{@*pgO,~Xd(ef)9~">
|
|
2587
|
+
<field name="NUM">1</field>
|
|
2588
|
+
</shadow>
|
|
2589
|
+
<block type="variables_get" id="]dC)!=A3{(5?9hJ:1gET">
|
|
2590
|
+
<field name="VAR">a</field>
|
|
2591
|
+
</block>
|
|
2592
|
+
</value>
|
|
2593
|
+
<value name="B">
|
|
2594
|
+
<shadow type="math_number" id="aDp|:rn#.wve0]WKi(D[">
|
|
2595
|
+
<field name="NUM">1</field>
|
|
2596
|
+
</shadow>
|
|
2597
|
+
<block type="variables_get" id="5];ao,?ce{;GJ;OOW~S4">
|
|
2598
|
+
<field name="VAR">b</field>
|
|
2599
|
+
</block>
|
|
2600
|
+
</value>
|
|
2601
|
+
</block>
|
|
2602
|
+
</value>
|
|
2603
|
+
</block>
|
|
2604
|
+
```
|
|
2605
|
+
|
|
2606
|
+
Die Verwendung ist analog zu den anderen Funktionsblöcken:
|
|
2607
|
+
|
|
2608
|
+

|
|
2609
|
+
|
|
2610
|
+
```xml
|
|
2611
|
+
<xml xmlns="http://www.w3.org/1999/xhtml">
|
|
2612
|
+
<block type="debug" id="zgr7b0g)}uMe1ySGYL7X" x="163" y="137">
|
|
2613
|
+
<field name="Severity">log</field>
|
|
2614
|
+
<value name="TEXT">
|
|
2615
|
+
<shadow type="text" id="q-]m1ptAzK4Rq20wWRBq">
|
|
2616
|
+
<field name="TEXT">test</field>
|
|
2617
|
+
</shadow>
|
|
2618
|
+
<block type="procedures_callreturn" id="0RX?V1j|FZHK@*Lw3W-g">
|
|
2619
|
+
<mutation name="sum">
|
|
2620
|
+
<arg name="a"></arg>
|
|
2621
|
+
<arg name="b"></arg>
|
|
2622
|
+
</mutation>
|
|
2623
|
+
<value name="ARG0">
|
|
2624
|
+
<block type="math_number" id="Xd52^_Qp83=ah2RTWzSU">
|
|
2625
|
+
<field name="NUM">5</field>
|
|
2626
|
+
</block>
|
|
2627
|
+
</value>
|
|
2628
|
+
<value name="ARG1">
|
|
2629
|
+
<block type="math_number" id="-M9A9EhrgJSRc*4(X^[;">
|
|
2630
|
+
<field name="NUM">6</field>
|
|
2631
|
+
</block>
|
|
2632
|
+
</value>
|
|
2633
|
+
</block>
|
|
2634
|
+
</value>
|
|
2635
|
+
</block>
|
|
2636
|
+
<block type="procedures_defreturn" id="4)|}1YzV}e6YUvVV^sY{" x="413" y="138">
|
|
2637
|
+
<mutation statements="false">
|
|
2638
|
+
<arg name="a"></arg>
|
|
2639
|
+
<arg name="b"></arg>
|
|
2640
|
+
</mutation>
|
|
2641
|
+
<field name="NAME">sum</field>
|
|
2642
|
+
<comment pinned="false" h="80" w="160">Return sum of a and b</comment>
|
|
2643
|
+
<value name="RETURN">
|
|
2644
|
+
<block type="math_arithmetic" id="qUGc!b+U]:yE!I+3I+Lp">
|
|
2645
|
+
<field name="OP">ADD</field>
|
|
2646
|
+
<value name="A">
|
|
2647
|
+
<shadow type="math_number" id="OqjQ{@*pgO,~Xd(ef)9~">
|
|
2648
|
+
<field name="NUM">1</field>
|
|
2649
|
+
</shadow>
|
|
2650
|
+
<block type="variables_get" id="]dC)!=A3{(5?9hJ:1gET">
|
|
2651
|
+
<field name="VAR">a</field>
|
|
2652
|
+
</block>
|
|
2653
|
+
</value>
|
|
2654
|
+
<value name="B">
|
|
2655
|
+
<shadow type="math_number" id="aDp|:rn#.wve0]WKi(D[">
|
|
2656
|
+
<field name="NUM">1</field>
|
|
2657
|
+
</shadow>
|
|
2658
|
+
<block type="variables_get" id="5];ao,?ce{;GJ;OOW~S4">
|
|
2659
|
+
<field name="VAR">b</field>
|
|
2660
|
+
</block>
|
|
2661
|
+
</value>
|
|
2662
|
+
</block>
|
|
2663
|
+
</value>
|
|
2664
|
+
</block>
|
|
2665
|
+
</xml>
|
|
2666
|
+
```
|
|
2337
2667
|
|
|
2338
|
-
|
|
2668
|
+
Für jede Funktion lässt sich ein Kommentar bzw. eine Beschreibung hinzufügen.
|
|
2339
2669
|
|
|
2340
|
-
|
|
2670
|
+

|
|
2671
|
+
|
|
2672
|
+
Im Funktionsblock kann zusätzlich ein spezielles Return-Element verwendet werden:
|
|
2673
|
+
|
|
2674
|
+

|
|
2675
|
+
|
|
2676
|
+

|
|
2677
|
+
|
|
2678
|
+
```xml
|
|
2679
|
+
<xml xmlns="http://www.w3.org/1999/xhtml">
|
|
2680
|
+
<block type="debug" id="zgr7b0g)}uMe1ySGYL7X" x="63" y="12">
|
|
2681
|
+
<field name="Severity">log</field>
|
|
2682
|
+
<value name="TEXT">
|
|
2683
|
+
<shadow type="text" id="q-]m1ptAzK4Rq20wWRBq">
|
|
2684
|
+
<field name="TEXT">test</field>
|
|
2685
|
+
</shadow>
|
|
2686
|
+
<block type="procedures_callreturn" id="0RX?V1j|FZHK@*Lw3W-g">
|
|
2687
|
+
<mutation name="numberToDay">
|
|
2688
|
+
<arg name="day"></arg>
|
|
2689
|
+
</mutation>
|
|
2690
|
+
<value name="ARG0">
|
|
2691
|
+
<block type="math_number" id="Xd52^_Qp83=ah2RTWzSU">
|
|
2692
|
+
<field name="NUM">5</field>
|
|
2693
|
+
</block>
|
|
2694
|
+
</value>
|
|
2695
|
+
</block>
|
|
2696
|
+
</value>
|
|
2697
|
+
</block>
|
|
2698
|
+
<block type="debug" id="@i@bdG^90dp,cJ#W*[nB" x="12" y="188">
|
|
2699
|
+
<field name="Severity">log</field>
|
|
2700
|
+
<value name="TEXT">
|
|
2701
|
+
<shadow type="text" id="8:/`}T!:6Wz.d/;)jpHl">
|
|
2702
|
+
<field name="TEXT">test</field>
|
|
2703
|
+
</shadow>
|
|
2704
|
+
<block type="procedures_callreturn" id="hvzS!O_Q=FlccQR@*%tk">
|
|
2705
|
+
<mutation name="numberToDay">
|
|
2706
|
+
<arg name="day"></arg>
|
|
2707
|
+
</mutation>
|
|
2708
|
+
<value name="ARG0">
|
|
2709
|
+
<block type="time_get" id=":A,Ba,yrW_QgiX*cs9zh">
|
|
2710
|
+
<mutation format="false" language="false"></mutation>
|
|
2711
|
+
<field name="OPTION">wd</field>
|
|
2712
|
+
</block>
|
|
2713
|
+
</value>
|
|
2714
|
+
</block>
|
|
2715
|
+
</value>
|
|
2716
|
+
</block>
|
|
2717
|
+
<block type="procedures_defreturn" id="4)|}1YzV}e6YUvVV^sY{" x="588" y="163">
|
|
2718
|
+
<mutation>
|
|
2719
|
+
<arg name="day"></arg>
|
|
2720
|
+
</mutation>
|
|
2721
|
+
<field name="NAME">numberToDay</field>
|
|
2722
|
+
<comment pinned="false" h="80" w="160">Return sum of a and b</comment>
|
|
2723
|
+
<statement name="STACK">
|
|
2724
|
+
<block type="procedures_ifreturn" id="/qJjm#cr-naS}joAL0eT">
|
|
2725
|
+
<mutation value="1"></mutation>
|
|
2726
|
+
<value name="CONDITION">
|
|
2727
|
+
<block type="logic_compare" id="cbxuAYxF,ptMi.`E/nB.">
|
|
2728
|
+
<field name="OP">EQ</field>
|
|
2729
|
+
<value name="A">
|
|
2730
|
+
<block type="variables_get" id="`mWQWp).?qDuD=)NX2dA">
|
|
2731
|
+
<field name="VAR">day</field>
|
|
2732
|
+
</block>
|
|
2733
|
+
</value>
|
|
2734
|
+
<value name="B">
|
|
2735
|
+
<block type="math_number" id="s,20+9X6bB/2nL{v?g:/">
|
|
2736
|
+
<field name="NUM">0</field>
|
|
2737
|
+
</block>
|
|
2738
|
+
</value>
|
|
2739
|
+
</block>
|
|
2740
|
+
</value>
|
|
2741
|
+
<value name="VALUE">
|
|
2742
|
+
<block type="text" id="iI)V7P`3YP]{-S-7HcO1">
|
|
2743
|
+
<field name="TEXT">Sunday</field>
|
|
2744
|
+
</block>
|
|
2745
|
+
</value>
|
|
2746
|
+
<next>
|
|
2747
|
+
<block type="procedures_ifreturn" id="3=FBSCS{jzu[}2L5Spi[">
|
|
2748
|
+
<mutation value="1"></mutation>
|
|
2749
|
+
<value name="CONDITION">
|
|
2750
|
+
<block type="logic_compare" id="V[;S84AH5cf93^5/[AN^">
|
|
2751
|
+
<field name="OP">EQ</field>
|
|
2752
|
+
<value name="A">
|
|
2753
|
+
<block type="variables_get" id=";ShgVu*+:nn9WSzbm[fA">
|
|
2754
|
+
<field name="VAR">day</field>
|
|
2755
|
+
</block>
|
|
2756
|
+
</value>
|
|
2757
|
+
<value name="B">
|
|
2758
|
+
<block type="math_number" id="jY?Wj8lC1-~SiIHa*I)0">
|
|
2759
|
+
<field name="NUM">1</field>
|
|
2760
|
+
</block>
|
|
2761
|
+
</value>
|
|
2762
|
+
</block>
|
|
2763
|
+
</value>
|
|
2764
|
+
<value name="VALUE">
|
|
2765
|
+
<block type="text" id="=aVg_FatldZUUsS(8G`;">
|
|
2766
|
+
<field name="TEXT">Monday</field>
|
|
2767
|
+
</block>
|
|
2768
|
+
</value>
|
|
2769
|
+
<next>
|
|
2770
|
+
<block type="procedures_ifreturn" id="(g_VE2e?U^J-nhk,bP|0">
|
|
2771
|
+
<mutation value="1"></mutation>
|
|
2772
|
+
<value name="CONDITION">
|
|
2773
|
+
<block type="logic_compare" id="M;B+SSw[Mc.iu;fUjvcV">
|
|
2774
|
+
<field name="OP">EQ</field>
|
|
2775
|
+
<value name="A">
|
|
2776
|
+
<block type="variables_get" id="yT{.UQ)qXY8-@2XzpxQo">
|
|
2777
|
+
<field name="VAR">day</field>
|
|
2778
|
+
</block>
|
|
2779
|
+
</value>
|
|
2780
|
+
<value name="B">
|
|
2781
|
+
<block type="math_number" id="Q-JC5_JZ=i{[+~:^|BpU">
|
|
2782
|
+
<field name="NUM">2</field>
|
|
2783
|
+
</block>
|
|
2784
|
+
</value>
|
|
2785
|
+
</block>
|
|
2786
|
+
</value>
|
|
2787
|
+
<value name="VALUE">
|
|
2788
|
+
<block type="text" id="9`665+j*i_?3BCZWODGt">
|
|
2789
|
+
<field name="TEXT">Tuesday</field>
|
|
2790
|
+
</block>
|
|
2791
|
+
</value>
|
|
2792
|
+
<next>
|
|
2793
|
+
<block type="procedures_ifreturn" id="{+9IT6E:N-a+Y.cFNMsw">
|
|
2794
|
+
<mutation value="1"></mutation>
|
|
2795
|
+
<value name="CONDITION">
|
|
2796
|
+
<block type="logic_compare" id="B}D{JSK|}=bk|-|D#/_h">
|
|
2797
|
+
<field name="OP">EQ</field>
|
|
2798
|
+
<value name="A">
|
|
2799
|
+
<block type="variables_get" id="s{Zxm|sBbEGA1#~Tv3EE">
|
|
2800
|
+
<field name="VAR">day</field>
|
|
2801
|
+
</block>
|
|
2802
|
+
</value>
|
|
2803
|
+
<value name="B">
|
|
2804
|
+
<block type="math_number" id="f!3KoyGu4bWpxdaJY`JI">
|
|
2805
|
+
<field name="NUM">3</field>
|
|
2806
|
+
</block>
|
|
2807
|
+
</value>
|
|
2808
|
+
</block>
|
|
2809
|
+
</value>
|
|
2810
|
+
<value name="VALUE">
|
|
2811
|
+
<block type="text" id="yS4pn;Fdg9JT[MjvPu,4">
|
|
2812
|
+
<field name="TEXT">Wednesday</field>
|
|
2813
|
+
</block>
|
|
2814
|
+
</value>
|
|
2815
|
+
<next>
|
|
2816
|
+
<block type="procedures_ifreturn" id="g*VMz;jyw4,@;Qb*/8TN">
|
|
2817
|
+
<mutation value="1"></mutation>
|
|
2818
|
+
<value name="CONDITION">
|
|
2819
|
+
<block type="logic_compare" id="(^azMqi{:`?S.tJ@y7-m">
|
|
2820
|
+
<field name="OP">EQ</field>
|
|
2821
|
+
<value name="A">
|
|
2822
|
+
<block type="variables_get" id="P*CAI!ug.Xl*BM2v/kpb">
|
|
2823
|
+
<field name="VAR">day</field>
|
|
2824
|
+
</block>
|
|
2825
|
+
</value>
|
|
2826
|
+
<value name="B">
|
|
2827
|
+
<block type="math_number" id="YN@VzF~X=BOcWm+P]c3i">
|
|
2828
|
+
<field name="NUM">4</field>
|
|
2829
|
+
</block>
|
|
2830
|
+
</value>
|
|
2831
|
+
</block>
|
|
2832
|
+
</value>
|
|
2833
|
+
<value name="VALUE">
|
|
2834
|
+
<block type="text" id="H`yzv!j_GjSw|@f7Gap8">
|
|
2835
|
+
<field name="TEXT">Thursday</field>
|
|
2836
|
+
</block>
|
|
2837
|
+
</value>
|
|
2838
|
+
<next>
|
|
2839
|
+
<block type="procedures_ifreturn" id=")htNPjBWw1J/gp-Y5#Kg">
|
|
2840
|
+
<mutation value="1"></mutation>
|
|
2841
|
+
<value name="CONDITION">
|
|
2842
|
+
<block type="logic_compare" id="nFZ;s`3ij0v|.wQqw`AB">
|
|
2843
|
+
<field name="OP">EQ</field>
|
|
2844
|
+
<value name="A">
|
|
2845
|
+
<block type="variables_get" id="Q^3OKKD]aGa0/qxWf%*g">
|
|
2846
|
+
<field name="VAR">day</field>
|
|
2847
|
+
</block>
|
|
2848
|
+
</value>
|
|
2849
|
+
<value name="B">
|
|
2850
|
+
<block type="math_number" id="#brnWNXj0_dx[JwHjgh0">
|
|
2851
|
+
<field name="NUM">5</field>
|
|
2852
|
+
</block>
|
|
2853
|
+
</value>
|
|
2854
|
+
</block>
|
|
2855
|
+
</value>
|
|
2856
|
+
<value name="VALUE">
|
|
2857
|
+
<block type="text" id="Y1-{3UJxFrpq{uJp6DkB">
|
|
2858
|
+
<field name="TEXT">Friday</field>
|
|
2859
|
+
</block>
|
|
2860
|
+
</value>
|
|
2861
|
+
<next>
|
|
2862
|
+
<block type="procedures_ifreturn" id="K2~CLXTJ5b=T+=/6%m=~">
|
|
2863
|
+
<mutation value="1"></mutation>
|
|
2864
|
+
<value name="CONDITION">
|
|
2865
|
+
<block type="logic_compare" id="Cjh^D.y[m3YQn},sC1(0">
|
|
2866
|
+
<field name="OP">EQ</field>
|
|
2867
|
+
<value name="A">
|
|
2868
|
+
<block type="variables_get" id="|uXT]6-.XcdAG-6HtffC">
|
|
2869
|
+
<field name="VAR">day</field>
|
|
2870
|
+
</block>
|
|
2871
|
+
</value>
|
|
2872
|
+
<value name="B">
|
|
2873
|
+
<block type="math_number" id="N@!AqGy7OCz9:zhv@f?K">
|
|
2874
|
+
<field name="NUM">6</field>
|
|
2875
|
+
</block>
|
|
2876
|
+
</value>
|
|
2877
|
+
</block>
|
|
2878
|
+
</value>
|
|
2879
|
+
<value name="VALUE">
|
|
2880
|
+
<block type="text" id="omKlSmgS{[5T:v{9(j}?">
|
|
2881
|
+
<field name="TEXT">Saturday</field>
|
|
2882
|
+
</block>
|
|
2883
|
+
</value>
|
|
2884
|
+
<next>
|
|
2885
|
+
<block type="procedures_ifreturn" id=".XFx#9RZIGl!joSiMNyq">
|
|
2886
|
+
<mutation value="1"></mutation>
|
|
2887
|
+
<value name="CONDITION">
|
|
2888
|
+
<block type="logic_compare" id="aqkbbBOzUTv/%JlX)V}S">
|
|
2889
|
+
<field name="OP">EQ</field>
|
|
2890
|
+
<value name="A">
|
|
2891
|
+
<block type="variables_get" id="qrl+C-GvBF7QzLz8?@:u">
|
|
2892
|
+
<field name="VAR">day</field>
|
|
2893
|
+
</block>
|
|
2894
|
+
</value>
|
|
2895
|
+
<value name="B">
|
|
2896
|
+
<block type="math_number" id="_[;I?)){=vm_jnSYHumL">
|
|
2897
|
+
<field name="NUM">7</field>
|
|
2898
|
+
</block>
|
|
2899
|
+
</value>
|
|
2900
|
+
</block>
|
|
2901
|
+
</value>
|
|
2902
|
+
<value name="VALUE">
|
|
2903
|
+
<block type="text" id="MCTQyN!}ig#3~)B[r#q[">
|
|
2904
|
+
<field name="TEXT">Sunday</field>
|
|
2905
|
+
</block>
|
|
2906
|
+
</value>
|
|
2907
|
+
</block>
|
|
2908
|
+
</next>
|
|
2909
|
+
</block>
|
|
2910
|
+
</next>
|
|
2911
|
+
</block>
|
|
2912
|
+
</next>
|
|
2913
|
+
</block>
|
|
2914
|
+
</next>
|
|
2915
|
+
</block>
|
|
2916
|
+
</next>
|
|
2917
|
+
</block>
|
|
2918
|
+
</next>
|
|
2919
|
+
</block>
|
|
2920
|
+
</next>
|
|
2921
|
+
</block>
|
|
2922
|
+
</statement>
|
|
2923
|
+
<value name="RETURN">
|
|
2924
|
+
<block type="text" id="revjgT`{%j^1mn*-SJ1a">
|
|
2925
|
+
<field name="TEXT">Invalid day</field>
|
|
2926
|
+
</block>
|
|
2927
|
+
</value>
|
|
2928
|
+
</block>
|
|
2929
|
+
</xml>
|
|
2930
|
+
```
|
|
2931
|
+
|
|
2932
|
+
### Wert in Funktion zurückgeben
|
|
2933
|
+

|
|
2934
|
+
|
|
2935
|
+
Siehe Verwendung dieses Blocks unter [Funktion aus Blöcken erstellen (mit Rückgabewert)](#funktion-aus-blöcken-erstellen-mit-rückgabewert).
|
|
2936
|
+
|
|
2937
|
+
Dieser Block ist nur dort verwendbar und dient dazu, mitten in der Funktion einen Wert zurückzugeben.
|
|
2938
|
+
|
|
2939
|
+
### Eigene Funktion erstellen (ohne Rückgabewert)
|
|
2940
|
+

|
|
2941
|
+
|
|
2942
|
+
Manchmal reichen die vorhandenen Blöcke nicht aus, um eine bestimmte Aufgabe zu lösen. Mit diesem Block kannst du einen eigenen Block als Funktion definieren, der Parameter entgegennimmt und beliebige Aktionen ausführt.
|
|
2943
|
+
Um eine solche Funktion zu schreiben, sind JavaScript-Kenntnisse nötig. Innerhalb der Funktion stehen alle Funktionen zur Verfügung, die auch im normalen JavaScript-Skript verfügbar sind.
|
|
2944
|
+
|
|
2945
|
+
Um den Code zu schreiben, klickst du auf das `...` am Ende des Blocks, woraufhin sich der Editor-Dialog öffnet.
|
|
2946
|
+
|
|
2947
|
+

|
|
2948
|
+
|
|
2949
|
+
Ansonsten ist die Verwendung dieses Blocks analog zu den Standard-Funktionsblöcken, etwa [Funktion aus Blöcken erstellen (mit Rückgabewert)](#funktion-aus-blöcken-erstellen-mit-rückgabewert) oder [Funktion aus Blöcken erstellen (ohne Rückgabewert)](#funktion-aus-blöcken-erstellen-ohne-rückgabewert).
|
|
2950
|
+
|
|
2951
|
+
### Eigene Funktion erstellen (mit Rückgabewert)
|
|
2952
|
+

|
|
2953
|
+
|
|
2954
|
+
Dieser eigene Funktionsblock kann Werte zurückgeben. Um ein Ergebnis aus der Funktion zurückzugeben, schreibst du:
|
|
2955
|
+
|
|
2956
|
+
```
|
|
2957
|
+
return 'dein Ergebnis';
|
|
2958
|
+
```
|
|
2959
|
+
|
|
2960
|
+
Wie hier:
|
|
2961
|
+
|
|
2962
|
+

|
|
2963
|
+
|
|
2964
|
+
```xml
|
|
2965
|
+
<xml xmlns="http://www.w3.org/1999/xhtml">
|
|
2966
|
+
<block type="procedures_defcustomreturn" id="mG^pXm=MO7vPl!c^/.Px" x="163" y="63">
|
|
2967
|
+
<mutation statements="false">
|
|
2968
|
+
<arg name="a"></arg>
|
|
2969
|
+
<arg name="b"></arg>
|
|
2970
|
+
</mutation>
|
|
2971
|
+
<field name="NAME">sum</field>
|
|
2972
|
+
<field name="SCRIPT">cmV0dXJuIGEgKyBiOw==</field>
|
|
2973
|
+
<comment pinned="false" h="80" w="160">Summarise a and b</comment>
|
|
2974
|
+
</block>
|
|
2975
|
+
<block type="debug" id="U6pI-lE0VS#G):ELrQ(0" x="163" y="138">
|
|
2976
|
+
<field name="Severity">log</field>
|
|
2977
|
+
<value name="TEXT">
|
|
2978
|
+
<shadow type="text" id="PBg^5*vuC?Isr)]pqx/u">
|
|
2979
|
+
<field name="TEXT">test</field>
|
|
2980
|
+
</shadow>
|
|
2981
|
+
<block type="procedures_callcustomreturn" id="XuhUUF65jRZGB#YE(GTC">
|
|
2982
|
+
<mutation name="sum">
|
|
2983
|
+
<arg name="a"></arg>
|
|
2984
|
+
<arg name="b"></arg>
|
|
2985
|
+
</mutation>
|
|
2986
|
+
<value name="ARG0">
|
|
2987
|
+
<block type="math_number" id="h_[^zH{ILtnHrsxY0j~z">
|
|
2988
|
+
<field name="NUM">5</field>
|
|
2989
|
+
</block>
|
|
2990
|
+
</value>
|
|
2991
|
+
<value name="ARG1">
|
|
2992
|
+
<block type="math_number" id="iIoph|b.?suX;)R=d|),">
|
|
2993
|
+
<field name="NUM">6</field>
|
|
2994
|
+
</block>
|
|
2995
|
+
</value>
|
|
2996
|
+
</block>
|
|
2997
|
+
</value>
|
|
2998
|
+
</block>
|
|
2999
|
+
</xml>
|
|
3000
|
+
```
|
|
2341
3001
|
|
|
2342
|
-
###
|
|
3002
|
+
### Funktion aufrufen
|
|
3003
|
+

|
|
2343
3004
|
|
|
2344
|
-
|
|
3005
|
+

|
|
2345
3006
|
|
|
2346
|
-
|
|
3007
|
+
Für jede angelegte Funktion erscheint im Menü ein zusätzlicher Block mit dem Namen dieser Funktion.
|
|
2347
3008
|
|
|
2348
|
-
|
|
3009
|
+
Du kannst ihn wie jeden anderen Block in deinen Skripten verwenden.
|
|
2349
3010
|
|
|
2350
3011
|
## AI Chat für Blockly
|
|
2351
3012
|
|
|
2352
3013
|
Das AI-Chat-Panel ist jetzt auch für Blockly-Scripts verfügbar. Klicke auf den AI-Button (Zauberstab-Symbol) in der Toolbar, um das Chat-Panel neben dem Blockly-Editor zu öffnen.
|
|
2353
3014
|
|
|
2354
|
-
###
|
|
3015
|
+
### Funktionsumfang
|
|
2355
3016
|
|
|
2356
3017
|
- **Chat-Modus**: Stelle Fragen zu deinem Blockly-Script. Die KI sieht den generierten JavaScript-Code als Kontext.
|
|
2357
3018
|
- **Code-Modus**: Beschreibe eine Automatisierungsaufgabe und die KI generiert Blockly-XML-Blöcke in einem Zwei-Schritt-Prozess (Plan, dann Blöcke).
|