iobroker.javascript 6.2.0 → 7.0.1

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.
Files changed (34) hide show
  1. package/README.md +9 -8
  2. package/admin/asset-manifest.json +11 -11
  3. package/admin/google-blockly/own/blocks_convert.js +4 -4
  4. package/admin/google-blockly/own/blocks_system.js +55 -13
  5. package/admin/google-blockly/own/blocks_time.js +1 -1
  6. package/admin/google-blockly/own/blocks_trigger.js +2 -2
  7. package/admin/google-blockly/own/blocks_words.js +9 -0
  8. package/admin/static/js/376.215ba3ed.chunk.js +9 -0
  9. package/admin/static/js/376.215ba3ed.chunk.js.map +1 -0
  10. package/admin/static/js/402.cf6fe7b7.chunk.js +198 -0
  11. package/admin/static/js/402.cf6fe7b7.chunk.js.map +1 -0
  12. package/admin/static/js/62.2ce04dcc.chunk.js +187 -0
  13. package/admin/static/js/62.2ce04dcc.chunk.js.map +1 -0
  14. package/admin/static/js/{848.77a7611f.chunk.js → 848.3c1a4d2e.chunk.js} +46 -46
  15. package/admin/static/js/848.3c1a4d2e.chunk.js.map +1 -0
  16. package/admin/static/js/main.66fd56eb.js +6 -0
  17. package/admin/static/js/main.66fd56eb.js.map +1 -0
  18. package/admin/tab.html +1 -1
  19. package/docs/de/usage.md +1 -1
  20. package/docs/en/blockly.md +3 -3
  21. package/docs/en/javascript.md +28 -3
  22. package/io-package.json +64 -13
  23. package/lib/sandbox.js +225 -83
  24. package/main.js +75 -15
  25. package/package.json +1 -1
  26. package/admin/static/js/402.2b754320.chunk.js +0 -198
  27. package/admin/static/js/402.2b754320.chunk.js.map +0 -1
  28. package/admin/static/js/55.2fbb4209.chunk.js +0 -9
  29. package/admin/static/js/55.2fbb4209.chunk.js.map +0 -1
  30. package/admin/static/js/62.97617f7b.chunk.js +0 -185
  31. package/admin/static/js/62.97617f7b.chunk.js.map +0 -1
  32. package/admin/static/js/848.77a7611f.chunk.js.map +0 -1
  33. package/admin/static/js/main.444faaef.js +0 -6
  34. package/admin/static/js/main.444faaef.js.map +0 -1
package/README.md CHANGED
@@ -52,6 +52,15 @@ And then call `npm run build`.
52
52
  <!--
53
53
  ### **WORK IN PROGRESS**
54
54
  -->
55
+ ### 7.0.1 (2023-02-21)
56
+ * (bluefox) Breaking change: all usages of `jsonata` must be rewritten to use promises.
57
+ * (bluefox) Breaking change: all blockly scripts with `jsonata` blocks must de changed (just move some blocks) and saved anew.
58
+ * (bluefox) Extended `createState` command with possibility to create aliases.
59
+ * (bluefox) Corrected CRON card in rules
60
+ * (bluefox) Added additional options to show the attributes of object in blockly
61
+ * (bluefox) Corrected `existsStateAsync` function
62
+ * (bluefox) Added `isDaylightSaving` state to indicate day saving time
63
+
55
64
  ### 6.2.0 (2023-02-17)
56
65
  * (Apollon77) Prevented duplicate schedule triggering with inaccurate RTC clocks
57
66
  * (Apollon77) Fixed sendToAsync and sendToHostAsync
@@ -70,14 +79,6 @@ And then call `npm run build`.
70
79
  ### 6.1.2 (2022-11-03)
71
80
  * (bluefox) Added ukrainian translation
72
81
 
73
- ### 6.1.0 (2022-11-03)
74
- * (Apollon77) Add a configurable check for number of setStates per Minute to prevent scripts from taking down ioBroker. Default are 1000 setState per minute. Only stops if the number is reached 2 minutes in a row!
75
- * (Apollon77) Add createAlias method to create aliases for states
76
- * (Apollon77) Add setStateDelayed to selector
77
- * (Apollon77) Add options to exec command
78
- * (Apollon77) Fix issues with cancelling schedules when stopping scripts
79
- * (bluefox) Corrected debug mode
80
-
81
82
  ## License
82
83
  The MIT License (MIT)
83
84
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "files": {
3
- "main.js": "/static/js/main.444faaef.js",
3
+ "main.js": "/static/js/main.66fd56eb.js",
4
4
  "static/css/62.fa077e62.chunk.css": "/static/css/62.fa077e62.chunk.css",
5
- "static/js/62.97617f7b.chunk.js": "/static/js/62.97617f7b.chunk.js",
5
+ "static/js/62.2ce04dcc.chunk.js": "/static/js/62.2ce04dcc.chunk.js",
6
6
  "static/js/90.f5ce0179.chunk.js": "/static/js/90.f5ce0179.chunk.js",
7
7
  "static/js/821.6a33d257.chunk.js": "/static/js/821.6a33d257.chunk.js",
8
8
  "static/js/13.6f214f89.chunk.js": "/static/js/13.6f214f89.chunk.js",
@@ -11,16 +11,16 @@
11
11
  "static/js/961.ae64b67d.chunk.js": "/static/js/961.ae64b67d.chunk.js",
12
12
  "static/js/449.d17326e4.chunk.js": "/static/js/449.d17326e4.chunk.js",
13
13
  "static/js/815.8ed8429e.chunk.js": "/static/js/815.8ed8429e.chunk.js",
14
- "static/js/55.2fbb4209.chunk.js": "/static/js/55.2fbb4209.chunk.js",
14
+ "static/js/376.215ba3ed.chunk.js": "/static/js/376.215ba3ed.chunk.js",
15
15
  "static/js/610.312d98a8.chunk.js": "/static/js/610.312d98a8.chunk.js",
16
16
  "static/js/233.f7a9b68b.chunk.js": "/static/js/233.f7a9b68b.chunk.js",
17
17
  "static/js/843.90dd3ee5.chunk.js": "/static/js/843.90dd3ee5.chunk.js",
18
- "static/js/402.2b754320.chunk.js": "/static/js/402.2b754320.chunk.js",
18
+ "static/js/402.cf6fe7b7.chunk.js": "/static/js/402.cf6fe7b7.chunk.js",
19
19
  "static/js/230.1b38a08f.chunk.js": "/static/js/230.1b38a08f.chunk.js",
20
20
  "static/js/574.c6787b36.chunk.js": "/static/js/574.c6787b36.chunk.js",
21
21
  "static/js/88.9066e72a.chunk.js": "/static/js/88.9066e72a.chunk.js",
22
22
  "static/js/455.1538d7e3.chunk.js": "/static/js/455.1538d7e3.chunk.js",
23
- "static/js/848.77a7611f.chunk.js": "/static/js/848.77a7611f.chunk.js",
23
+ "static/js/848.3c1a4d2e.chunk.js": "/static/js/848.3c1a4d2e.chunk.js",
24
24
  "static/media/back.jpg": "/static/media/back.bda2bbe51be338a0f657.jpg",
25
25
  "static/media/hysteresis.png": "/static/media/hysteresis.04ebd02c6062432f891d.png",
26
26
  "static/media/Ground Floor.svg": "/static/media/Ground Floor.2b7c5c91db7f070935a2.svg",
@@ -143,9 +143,9 @@
143
143
  "static/media/Garage Doors.svg": "/static/media/Garage Doors.0c2a1cfca7ad1ea59625.svg",
144
144
  "static/media/Outdoor Blinds.svg": "/static/media/Outdoor Blinds.37b85a9c060a4af48da9.svg",
145
145
  "static/media/Upstairs.svg": "/static/media/Upstairs.441813e54e0daca0882d.svg",
146
- "main.444faaef.js.map": "/static/js/main.444faaef.js.map",
146
+ "main.66fd56eb.js.map": "/static/js/main.66fd56eb.js.map",
147
147
  "62.fa077e62.chunk.css.map": "/static/css/62.fa077e62.chunk.css.map",
148
- "62.97617f7b.chunk.js.map": "/static/js/62.97617f7b.chunk.js.map",
148
+ "62.2ce04dcc.chunk.js.map": "/static/js/62.2ce04dcc.chunk.js.map",
149
149
  "90.f5ce0179.chunk.js.map": "/static/js/90.f5ce0179.chunk.js.map",
150
150
  "821.6a33d257.chunk.js.map": "/static/js/821.6a33d257.chunk.js.map",
151
151
  "13.6f214f89.chunk.js.map": "/static/js/13.6f214f89.chunk.js.map",
@@ -154,18 +154,18 @@
154
154
  "961.ae64b67d.chunk.js.map": "/static/js/961.ae64b67d.chunk.js.map",
155
155
  "449.d17326e4.chunk.js.map": "/static/js/449.d17326e4.chunk.js.map",
156
156
  "815.8ed8429e.chunk.js.map": "/static/js/815.8ed8429e.chunk.js.map",
157
- "55.2fbb4209.chunk.js.map": "/static/js/55.2fbb4209.chunk.js.map",
157
+ "376.215ba3ed.chunk.js.map": "/static/js/376.215ba3ed.chunk.js.map",
158
158
  "610.312d98a8.chunk.js.map": "/static/js/610.312d98a8.chunk.js.map",
159
159
  "233.f7a9b68b.chunk.js.map": "/static/js/233.f7a9b68b.chunk.js.map",
160
160
  "843.90dd3ee5.chunk.js.map": "/static/js/843.90dd3ee5.chunk.js.map",
161
- "402.2b754320.chunk.js.map": "/static/js/402.2b754320.chunk.js.map",
161
+ "402.cf6fe7b7.chunk.js.map": "/static/js/402.cf6fe7b7.chunk.js.map",
162
162
  "230.1b38a08f.chunk.js.map": "/static/js/230.1b38a08f.chunk.js.map",
163
163
  "574.c6787b36.chunk.js.map": "/static/js/574.c6787b36.chunk.js.map",
164
164
  "88.9066e72a.chunk.js.map": "/static/js/88.9066e72a.chunk.js.map",
165
165
  "455.1538d7e3.chunk.js.map": "/static/js/455.1538d7e3.chunk.js.map",
166
- "848.77a7611f.chunk.js.map": "/static/js/848.77a7611f.chunk.js.map"
166
+ "848.3c1a4d2e.chunk.js.map": "/static/js/848.3c1a4d2e.chunk.js.map"
167
167
  },
168
168
  "entrypoints": [
169
- "static/js/main.444faaef.js"
169
+ "static/js/main.66fd56eb.js"
170
170
  ]
171
171
  }
@@ -56,7 +56,7 @@ Blockly.Blocks.convert_toboolean = {
56
56
  };
57
57
 
58
58
  Blockly.JavaScript.convert_toboolean = function (a) {
59
- return ["(function (){var val = " + Blockly.JavaScript.valueToCode(a, "VALUE", Blockly.JavaScript.ORDER_ATOMIC) + "; if (val === 'true') return true; if (val === 'false') return false; return !!val;})()", Blockly.JavaScript.ORDER_ATOMIC];
59
+ return ["(function (){const val = " + Blockly.JavaScript.valueToCode(a, "VALUE", Blockly.JavaScript.ORDER_ATOMIC) + "; if (val === 'true') return true; if (val === 'false') return false; return !!val;})()", Blockly.JavaScript.ORDER_ATOMIC];
60
60
  };
61
61
 
62
62
  // --- to String --------------------------------------------------
@@ -253,11 +253,11 @@ Blockly.JavaScript.convert_from_date = function (block) {
253
253
  } else if (option === 's') {
254
254
  code = 'getDateObject(' + value + ').getSeconds()';
255
255
  } else if (option === 'sid') {
256
- code = '(function () {var v = getDateObject(' + value + '); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})()';
256
+ code = '(function () {const v = getDateObject(' + value + '); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds();})()';
257
257
  } else if (option === 'm') {
258
258
  code = '(getDateObject(' + value + ').getMinutes())';
259
259
  } else if (option === 'mid') {
260
- code = '(function () {var v = getDateObject(' + value + '); return v.getHours() * 60 + v.getMinutes();})()';
260
+ code = '(function () {const v = getDateObject(' + value + '); return v.getHours() * 60 + v.getMinutes();})()';
261
261
  } else if (option === 'h') {
262
262
  code = 'getDateObject(' + value + ').getHours()';
263
263
  } else if (option === 'd') {
@@ -367,5 +367,5 @@ Blockly.Blocks.convert_jsonata = {
367
367
  }
368
368
  };
369
369
  Blockly.JavaScript.convert_jsonata = function (block) {
370
- return ['jsonataExpression(' + Blockly.JavaScript.valueToCode(block, 'TARGET', Blockly.JavaScript.ORDER_ATOMIC) + ',' + Blockly.JavaScript.valueToCode(block, 'EXPRESSION', Blockly.JavaScript.ORDER_ATOMIC) + ')', Blockly.JavaScript.ORDER_ATOMIC];
370
+ return ['(await jsonataExpression(' + Blockly.JavaScript.valueToCode(block, 'TARGET', Blockly.JavaScript.ORDER_ATOMIC) + ',' + Blockly.JavaScript.valueToCode(block, 'EXPRESSION', Blockly.JavaScript.ORDER_ATOMIC) + '))', Blockly.JavaScript.ORDER_ATOMIC];
371
371
  };
@@ -650,12 +650,22 @@ Blockly.Blocks['get_value'] = {
650
650
 
651
651
  this.appendDummyInput('ATTR')
652
652
  .appendField(new Blockly.FieldDropdown([
653
- [Blockly.Translate('get_value_val'), 'val'],
654
- [Blockly.Translate('get_value_ack'), 'ack'],
655
- [Blockly.Translate('get_value_ts'), 'ts'],
656
- [Blockly.Translate('get_value_lc'), 'lc'],
657
- [Blockly.Translate('get_value_q') , 'q'],
658
- [Blockly.Translate('get_value_from'), 'from']
653
+ [Blockly.Translate('get_value_val'), 'val'],
654
+ [Blockly.Translate('get_value_ack'), 'ack'],
655
+ [Blockly.Translate('get_value_ts'), 'ts'],
656
+ [Blockly.Translate('get_value_lc'), 'lc'],
657
+ [Blockly.Translate('get_value_q') , 'q'],
658
+ [Blockly.Translate('get_value_comment') , 'c'],
659
+ [Blockly.Translate('get_value_from'), 'from'],
660
+
661
+ [Blockly.Translate('get_common_name'), 'common.name'],
662
+ [Blockly.Translate('get_common_desc'), 'common.desc'],
663
+ [Blockly.Translate('get_common_unit'), 'common.unit'],
664
+ [Blockly.Translate('get_common_role'), 'common.role'],
665
+ [Blockly.Translate('get_common_state_type'), 'type'],
666
+ [Blockly.Translate('get_common_object_type'), 'common.type'],
667
+ [Blockly.Translate('get_common_read'), 'common.read'],
668
+ [Blockly.Translate('get_common_write'), 'common.write'],
659
669
  ]), 'ATTR');
660
670
 
661
671
  this.appendDummyInput()
@@ -675,7 +685,11 @@ Blockly.Blocks['get_value'] = {
675
685
  Blockly.JavaScript['get_value'] = function(block) {
676
686
  var oid = block.getFieldValue('OID');
677
687
  var attr = block.getFieldValue('ATTR');
678
- return ['getState("' + oid + '").' + attr, Blockly.JavaScript.ORDER_ATOMIC];
688
+ if (attr === 'type' || attr.indexOf('.') !== -1) {
689
+ return ['(await getObjectAsync("' + oid + '")).' + attr, Blockly.JavaScript.ORDER_ATOMIC];
690
+ } else {
691
+ return ['getState("' + oid + '").' + attr, Blockly.JavaScript.ORDER_ATOMIC];
692
+ }
679
693
  };
680
694
 
681
695
  // --- get value var --------------------------------------------------
@@ -700,8 +714,18 @@ Blockly.Blocks['get_value_var'] = {
700
714
  [Blockly.Translate('get_value_ack'), 'ack'],
701
715
  [Blockly.Translate('get_value_ts'), 'ts'],
702
716
  [Blockly.Translate('get_value_lc'), 'lc'],
703
- [Blockly.Translate('get_value_q') , 'q'],
704
- [Blockly.Translate('get_value_from'), 'from']
717
+ [Blockly.Translate('get_value_q') , 'q'],
718
+ [Blockly.Translate('get_value_comment') , 'c'],
719
+ [Blockly.Translate('get_value_from'), 'from'],
720
+
721
+ [Blockly.Translate('get_common_name'), 'common.name'],
722
+ [Blockly.Translate('get_common_desc'), 'common.desc'],
723
+ [Blockly.Translate('get_common_unit'), 'common.unit'],
724
+ [Blockly.Translate('get_common_role'), 'common.role'],
725
+ [Blockly.Translate('get_common_state_type'), 'type'],
726
+ [Blockly.Translate('get_common_object_type'), 'common.type'],
727
+ [Blockly.Translate('get_common_read'), 'common.read'],
728
+ [Blockly.Translate('get_common_write'), 'common.write'],
705
729
  ]), 'ATTR');
706
730
 
707
731
  this.appendDummyInput()
@@ -721,7 +745,11 @@ Blockly.Blocks['get_value_var'] = {
721
745
  Blockly.JavaScript['get_value_var'] = function(block) {
722
746
  var oid = Blockly.JavaScript.valueToCode(block, 'OID', Blockly.JavaScript.ORDER_ATOMIC);
723
747
  var attr = block.getFieldValue('ATTR');
724
- return ['getState(' + oid + ').' + attr, Blockly.JavaScript.ORDER_ATOMIC];
748
+ if (attr === 'type' || attr.indexOf('.') !== -1) {
749
+ return ['(await getObjectAsync("' + oid + '")).' + attr, Blockly.JavaScript.ORDER_ATOMIC];
750
+ } else {
751
+ return ['getState(' + oid + ').' + attr, Blockly.JavaScript.ORDER_ATOMIC];
752
+ }
725
753
  };
726
754
 
727
755
  // --- get value async--------------------------------------------------
@@ -745,8 +773,18 @@ Blockly.Blocks['get_value_async'] = {
745
773
  [Blockly.Translate('get_value_ack'), 'ack'],
746
774
  [Blockly.Translate('get_value_ts'), 'ts'],
747
775
  [Blockly.Translate('get_value_lc'), 'lc'],
748
- [Blockly.Translate('get_value_q') , 'q'],
749
- [Blockly.Translate('get_value_from'), 'from']
776
+ [Blockly.Translate('get_value_q') , 'q'],
777
+ [Blockly.Translate('get_value_comment') , 'c'],
778
+ [Blockly.Translate('get_value_from'), 'from'],
779
+
780
+ [Blockly.Translate('get_common_name'), 'common.name'],
781
+ [Blockly.Translate('get_common_desc'), 'common.desc'],
782
+ [Blockly.Translate('get_common_unit'), 'common.unit'],
783
+ [Blockly.Translate('get_common_role'), 'common.role'],
784
+ [Blockly.Translate('get_common_state_type'), 'type'],
785
+ [Blockly.Translate('get_common_object_type'), 'common.type'],
786
+ [Blockly.Translate('get_common_read'), 'common.read'],
787
+ [Blockly.Translate('get_common_write'), 'common.write'],
750
788
  ]), 'ATTR');
751
789
 
752
790
  this.appendDummyInput()
@@ -772,7 +810,11 @@ Blockly.JavaScript['get_value_async'] = function(block) {
772
810
  var oid = block.getFieldValue('OID');
773
811
  var attr = block.getFieldValue('ATTR');
774
812
  var statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
775
- return 'getState("' + oid + '", async function (err, state) {\n var value = state.' + attr + ';\n' + statement + '});\n';
813
+ if (attr === 'type' || attr.indexOf('.') !== -1) {
814
+ return 'getObjectAsync("' + oid + '", async function (err, obj) {\n let value = obj.' + attr + ';\n' + statement + '});\n';
815
+ } else {
816
+ return 'getState("' + oid + '", async function (err, state) {\n let value = state.' + attr + ';\n' + statement + '});\n';
817
+ }
776
818
  };
777
819
 
778
820
  // --- select OID --------------------------------------------------
@@ -407,7 +407,7 @@ Blockly.JavaScript['time_get'] = function(block) {
407
407
  } else if (option === 'm') {
408
408
  code = '(new Date().getMinutes())';
409
409
  } else if (option === 'mid') {
410
- code = '(function () {var v = new Date(); return v.getHours() * 60 + v.getMinutes();})()';
410
+ code = '(function () {const v = new Date(); return v.getHours() * 60 + v.getMinutes();})()';
411
411
  } else if (option === 'h') {
412
412
  code = '(new Date().getHours())';
413
413
  } else if (option === 'd') {
@@ -274,7 +274,7 @@ Blockly.JavaScript['on_ext'] = function(block) {
274
274
  var oid = '[].concat(' + oids.join(').concat(') + ')';
275
275
 
276
276
  var code = 'on({id: ' + oid + ', ' + val + (ack_condition ? ', ack: ' + ack_condition : '') + '}, async function (obj) {\n ' +
277
- (oids.length === 1 ? 'var value = obj.state.val;\n var oldValue = obj.oldState.val;\n' : '') +
277
+ (oids.length === 1 ? 'let value = obj.state.val;\n let oldValue = obj.oldState.val;\n' : '') +
278
278
  statements_name + '});\n';
279
279
  return code;
280
280
  };
@@ -347,7 +347,7 @@ Blockly.JavaScript['on'] = function(block) {
347
347
  val = 'change: "' + dropdown_condition + '"';
348
348
  }
349
349
 
350
- var code = 'on({id: "' + value_objectid + '"' + (objectname ? '/*' + objectname + '*/' : '') + ', ' + val + (ack_condition ? ', ack: ' + ack_condition : '') + '}, async function (obj) {\n var value = obj.state.val;\n var oldValue = obj.oldState.val;\n' + statements_name + '});\n';
350
+ var code = 'on({id: "' + value_objectid + '"' + (objectname ? '/*' + objectname + '*/' : '') + ', ' + val + (ack_condition ? ', ack: ' + ack_condition : '') + '}, async function (obj) {\n let value = obj.state.val;\n let oldValue = obj.oldState.val;\n' + statements_name + '});\n';
351
351
  return code;
352
352
  };
353
353
 
@@ -159,7 +159,16 @@ Blockly.Words['get_value_ack'] = {'en': 'Acknowledge',
159
159
  Blockly.Words['get_value_ts'] = {'en': 'Timestamp', 'de': 'Zeitstempel', 'ru': 'Время', 'pt': 'Timestamp', 'nl': 'tijdstempel', 'fr': 'Horodatage', 'it': 'timestamp', 'es': 'Marca de tiempo', 'pl': 'Timestamp', 'zh-cn': '当前时间戳', 'uk': 'Мітка часу'};
160
160
  Blockly.Words['get_value_lc'] = {'en': 'Last change ', 'de': 'Letze Änderung', 'ru': 'Последнее изменеие', 'pt': 'Última mudança', 'nl': 'Laatste wijziging', 'fr': 'Dernier changement', 'it': 'Ultima modifica', 'es': 'Ultimo cambio', 'pl': 'Last change ', 'zh-cn': '上次变更时间', 'uk': 'Остання зміна'};
161
161
  Blockly.Words['get_value_q'] = {'en': 'Quality', 'de': 'Qualität', 'ru': 'Качество', 'pt': 'Qualidade', 'nl': 'Kwaliteit', 'fr': 'Qualité', 'it': 'Qualità', 'es': 'Calidad', 'pl': 'Quality', 'zh-cn': '状态质量', 'uk': 'якість'};
162
+ Blockly.Words['get_value_comment'] = {'en': 'Value comment', 'de': 'Wertkommentar', 'ru': 'Значение комментария', 'pt': 'Comentário de valor', 'nl': 'Waarde opmerking', 'fr': 'Commentaire sur la valeur', 'it': 'Commento di valore', 'es': 'Comentario de valor', 'pl': 'Wartość komentarza', 'zh-cn': '值评论', 'uk': 'Коментар вартості'};
162
163
  Blockly.Words['get_value_from'] = {'en': 'Source', 'de': 'Quelle', 'ru': 'Происхождение', 'pt': 'Fonte', 'nl': 'Bron', 'fr': 'La source', 'it': 'fonte', 'es': 'Fuente', 'pl': 'Source', 'zh-cn': '上次变更发起者', 'uk': 'Джерело'};
164
+ Blockly.Words['get_common_name'] = {'en': 'Object name', 'de': 'Objektname', 'ru': 'Имя объекта', 'pt': 'Nome do objeto', 'nl': 'Object naam', 'fr': 'Nom de l\'objet', 'it': 'Nome oggetto', 'es': 'Nombre del objeto', 'pl': 'Nazwa obiektu', 'zh-cn': '对象名称', 'uk': 'Назва об\'єкта'};
165
+ Blockly.Words['get_common_desc'] = {'en': 'Object description', 'de': 'Objektbeschreibung', 'ru': 'Описание объекта', 'pt': 'Descrição do objeto', 'nl': 'Objectbeschrijving', 'fr': 'Descriptif de l\'objet', 'it': 'Descrizione dell\'oggetto', 'es': 'Descripción del objeto', 'pl': 'Opis obiektu', 'zh-cn': '对象描述', 'uk': 'Опис об\'єкта'};
166
+ Blockly.Words['get_common_unit'] = {'en': 'State unit', 'de': 'Zustands-Einheit', 'ru': 'Единица измерения', 'pt': 'unidade estadual', 'nl': 'Staatseenheid', 'fr': 'Unité d\'état', 'it': 'Unità statale', 'es': 'unidad estatal', 'pl': 'Jednostka państwowa', 'zh-cn': '国家单位', 'uk': 'Державна одиниця'};
167
+ Blockly.Words['get_common_role'] = {'en': 'Object role', 'de': 'Objektrolle', 'ru': 'Роль объекта', 'pt': 'função do objeto', 'nl': 'Object rol', 'fr': 'Rôle d\'objet', 'it': 'Ruolo dell\'oggetto', 'es': 'Rol de objeto', 'pl': 'Rola obiektu', 'zh-cn': '对象角色', 'uk': 'Об\'єктна роль'};
168
+ Blockly.Words['get_common_state_type'] = {'en': 'State type', 'de': 'Zustandstyp', 'ru': 'Тип состояния', 'pt': 'tipo de estado', 'nl': 'Type staat', 'fr': 'Type d\'état', 'it': 'Tipo di stato', 'es': 'tipo de estado', 'pl': 'Typ stanu', 'zh-cn': '状态类型', 'uk': 'Державний тип'};
169
+ Blockly.Words['get_common_object_type'] = {'en': 'Object type', 'de': 'Objekttyp', 'ru': 'Тип объекта', 'pt': 'Tipo de objeto', 'nl': 'Object type', 'fr': 'Type d\'objet', 'it': 'Tipo di oggetto', 'es': 'Tipo de objeto', 'pl': 'Rodzaj obiektu', 'zh-cn': '对象类型', 'uk': 'Тип об\'єкта'};
170
+ Blockly.Words['get_common_read'] = {'en': 'Is state readable', 'de': 'Zustand lesbar ist', 'ru': 'Является читаемым', 'pt': 'O estado é legível', 'nl': 'Staat leesbaar', 'fr': 'L\'état est-il lisible', 'it': 'È leggibile dallo stato', 'es': 'Es estado legible', 'pl': 'Czy stan jest czytelny', 'zh-cn': '状态是否可读', 'uk': 'Чи читається стан'};
171
+ Blockly.Words['get_common_write'] = {'en': 'Is state writable', 'de': 'Zustand beschreibbar ist', 'ru': 'Доступно для записи', 'pt': 'É estado gravável', 'nl': 'Staat beschrijfbaar', 'fr': 'L\'état est-il accessible en écriture', 'it': 'È stato scrivibile', 'es': 'Es el estado escribible', 'pl': 'Czy stan jest zapisywalny', 'zh-cn': '状态是否可写', 'uk': 'Доступний для запису в стані'};
163
172
  Blockly.Words['get_value_async'] = {'en': 'Get state value', 'de': 'Zustandswert nehmen', 'ru': 'Взять значение состояния', 'pt': 'Tome o valor do estado', 'nl': 'Krijg statuswaarde', 'fr': 'Obtenir la valeur de l\'état', 'it': 'Ottieni valore statale', 'es': 'Obtener valor de estado', 'pl': 'Get state value', 'zh-cn': '获取状态的值', 'uk': 'Отримати державне значення'};
164
173
 
165
174
  // --- system field --------------------------------------------------