From e79319c86a8f4ab7770be8a72f4265b2dd944471 Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Thu, 16 Sep 2021 13:23:46 +0200 Subject: [PATCH 1/5] add mobile measurments --- src/components/Blockly/blocks/sensebox-sd.js | 220 +++++++++++------ .../Blockly/blocks/sensebox-sensors.js | 3 +- .../Blockly/generator/sensebox-rtc.js | 22 +- .../Blockly/generator/sensebox-sd.js | 230 +++++++++++++++--- src/components/Blockly/msg/de/sensebox-sd.js | 29 ++- src/components/Blockly/toolbox/Toolbox.js | 7 + 6 files changed, 377 insertions(+), 134 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-sd.js b/src/components/Blockly/blocks/sensebox-sd.js index febdf4c..52d4bbf 100644 --- a/src/components/Blockly/blocks/sensebox-sd.js +++ b/src/components/Blockly/blocks/sensebox-sd.js @@ -1,80 +1,156 @@ -import * as Blockly from 'blockly/core'; -import { getColour } from '../helpers/colour'; +import * as Blockly from "blockly/core"; +import { getColour } from "../helpers/colour"; +Blockly.Blocks["sensebox_sd_open_file"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_sd_open_file) + .setAlign(Blockly.ALIGN_LEFT) + .appendField(new Blockly.FieldTextInput("Data.txt"), "Filename"); + this.appendStatementInput("SD").setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_sd_open_file_tooltip); + this.setHelpUrl("https://docs.sensebox.de/hardware/bee-sd/"); + }, +}; -Blockly.Blocks['sensebox_sd_open_file'] = { - init: function () { - this.appendDummyInput() - .appendField(Blockly.Msg.senseBox_sd_open_file) - .setAlign(Blockly.ALIGN_LEFT) - .appendField( - new Blockly.FieldTextInput('Data.txt'), - 'Filename'); - this.appendStatementInput('SD') - .setCheck(null); - this.setPreviousStatement(true, null); - this.setNextStatement(true, null); - this.setColour(getColour().sensebox); - this.setTooltip(Blockly.Msg.senseBox_sd_open_file_tooltip); - this.setHelpUrl('https://docs.sensebox.de/hardware/bee-sd/'); +Blockly.Blocks["sensebox_sd_create_file"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_sd_create_file) + .setAlign(Blockly.ALIGN_LEFT) + .appendField(Blockly.Msg.senseBox_output_filename) + .appendField(new Blockly.FieldTextInput("Data.txt"), "Filename"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_sd_create_file_tooltip); + this.setHelpUrl("https://docs.sensebox.de/hardware/bee-sd/"); + }, +}; + +Blockly.Blocks["sensebox_sd_write_file"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_sd_write_file) + .setAlign(Blockly.ALIGN_LEFT); + this.appendValueInput("DATA").setCheck(null); + this.appendDummyInput("CheckboxText") + .appendField(Blockly.Msg.senseBox_output_linebreak) + .appendField(new Blockly.FieldCheckbox("TRUE"), "linebreak"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_sd_write_file_tooltip); + this.setHelpUrl("https://docs.sensebox.de/hardware/bee-sd/"); + }, + /** + * Called whenever anything on the workspace changes. + * Add warning if block is not nested inside a the correct loop. + * @param {!Blockly.Events.Abstract} e Change event. + * @this Blockly.Block + */ + onchange: function (e) { + var legal = false; + // Is the block nested in a loop? + var block = this; + do { + if (this.LOOP_TYPES.indexOf(block.type) !== -1) { + legal = true; + break; + } + block = block.getSurroundParent(); + } while (block); + if (legal) { + this.setWarningText(null); + } else { + this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); } + }, + LOOP_TYPES: ["sensebox_sd_open_file"], }; -Blockly.Blocks['sensebox_sd_create_file'] = { - init: function () { - this.appendDummyInput() - .appendField(Blockly.Msg.senseBox_sd_create_file) - .setAlign(Blockly.ALIGN_LEFT) - .appendField(Blockly.Msg.senseBox_output_filename) - .appendField( - new Blockly.FieldTextInput('Data.txt'), - 'Filename'); - this.setPreviousStatement(true, null); - this.setNextStatement(true, null); - this.setColour(getColour().sensebox); - this.setTooltip(Blockly.Msg.senseBox_sd_create_file_tooltip); - this.setHelpUrl('https://docs.sensebox.de/hardware/bee-sd/'); +Blockly.Blocks["sensebox_sd_osem"] = { + init: function () { + this.setTooltip(Blockly.Msg.senseBox_osem_connection_tip); + this.setHelpUrl(""); + this.setColour(getColour().sensebox); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField("Create CSV for openSenseMap"); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField(Blockly.Msg.senseBox_osem_exposure) + .appendField( + new Blockly.FieldDropdown([ + [Blockly.Msg.senseBox_osem_stationary, "Stationary"], + [Blockly.Msg.senseBox_osem_mobile, "Mobile"], + ]), + "type" + ); + this.appendValueInput("timeStamp", "Number").appendField( + Blockly.Msg.senseBox_gps_timeStamp + ); + this.appendStatementInput("DO") + .appendField(Blockly.Msg.senseBox_sensor) + .setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + }, + mutationToDom: function () { + var container = document.createElement("mutation"); + var input = this.getFieldValue("type"); + this.updateShape_(input); + container.setAttribute("type", input); + return container; + }, + + domToMutation: function (xmlElement) { + var connections = xmlElement.getAttribute("connections"); + this.updateShape_(connections); + }, + /** + * Modify this block to have the correct number of pins available. + * @param {boolean} + * @private + * @this Blockly.Block + */ + updateShape_: function () { + var extraFieldExist = this.getFieldValue("gps"); + var input = this.getFieldValue("type"); + if (input === "Mobile" && extraFieldExist === null) { + this.appendValueInput("lat", "Number").appendField( + Blockly.Msg.senseBox_gps_lat, + "gps" + ); + this.appendValueInput("lng", "Number").appendField( + Blockly.Msg.senseBox_gps_lng + ); + this.appendValueInput("altitude", "Number").appendField( + Blockly.Msg.senseBox_gps_alt + ); } -}; -Blockly.Blocks['sensebox_sd_write_file'] = { - init: function () { - this.appendDummyInput() - .appendField(Blockly.Msg.senseBox_sd_write_file) - .setAlign(Blockly.ALIGN_LEFT); - this.appendValueInput('DATA') - .setCheck(null); - this.appendDummyInput('CheckboxText') - .appendField(Blockly.Msg.senseBox_output_linebreak) - .appendField(new Blockly.FieldCheckbox('TRUE'), 'linebreak'); - this.setPreviousStatement(true, null); - this.setNextStatement(true, null); - this.setColour(getColour().sensebox); - this.setTooltip(Blockly.Msg.senseBox_sd_write_file_tooltip); - this.setHelpUrl('https://docs.sensebox.de/hardware/bee-sd/'); - }, - /** - * Called whenever anything on the workspace changes. - * Add warning if block is not nested inside a the correct loop. - * @param {!Blockly.Events.Abstract} e Change event. - * @this Blockly.Block - */ - onchange: function (e) { - var legal = false; - // Is the block nested in a loop? - var block = this; - do { - if (this.LOOP_TYPES.indexOf(block.type) !== -1) { - legal = true; - break; - } - block = block.getSurroundParent(); - } while (block); - if (legal) { - this.setWarningText(null); - } else { - this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); - } - }, - LOOP_TYPES: ['sensebox_sd_open_file'], + if (input === "Stationary" && extraFieldExist !== null) { + this.removeInput("lat"); + this.removeInput("lng"); + this.removeInput("altitude"); + } + }, +}; +Blockly.Blocks["sensebox_sd_save_for_osem"] = { + init: function () { + this.setTooltip(Blockly.Msg.senseBox_send_to_osem_tip); + this.setHelpUrl(""); + this.setColour(getColour().sensebox); + this.appendDummyInput().appendField(Blockly.Msg.sensebox_sd_save_for_osem); + this.appendValueInput("Value") + .setAlign(Blockly.ALIGN_LEFT) + .appendField("Phänomen") + .appendField(new Blockly.FieldTextInput("sensorID"), "SensorID"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + }, }; diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index d12d70a..b7ffa3a 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -412,8 +412,9 @@ Blockly.Blocks["sensebox_gps"] = { [Blockly.Msg.senseBox_gps_lat, "latitude"], [Blockly.Msg.senseBox_gps_lng, "longitude"], [Blockly.Msg.senseBox_gps_alt, "altitude"], + [Blockly.Msg.senseBox_gps_timeStamp, "timestamp"], + [Blockly.Msg.senseBox_gps_speed, "speed"], ["pDOP", "pDOP"], - ["Timestamp", "timestamp"], ["Fix Type", "fixType"], ]; this.appendDummyInput().appendField("GPS Modul"); diff --git a/src/components/Blockly/generator/sensebox-rtc.js b/src/components/Blockly/generator/sensebox-rtc.js index 66bf2de..1c3f5e3 100644 --- a/src/components/Blockly/generator/sensebox-rtc.js +++ b/src/components/Blockly/generator/sensebox-rtc.js @@ -79,18 +79,16 @@ Blockly.Arduino.sensebox_rtc_get_timestamp = function () { Blockly.Arduino.setupCode_[ "rtc.batterySwitchOver" ] = `rtc.batterySwitchOver(1);`; - Blockly.Arduino.loopCodeOnce_[ - "rtc_variables" - ] = `uint8_t sec, min, hour, day, month;\nuint16_t year;`; Blockly.Arduino.variables_["rtc_timestamp"] = `char timestamp[20];`; - Blockly.Arduino.loopCodeOnce_[ - "rtc_get" - ] = `rtc.get(&sec, &min, &hour, &day, &month, &year);`; - - Blockly.Arduino.loopCodeOnce_[ - "" - ] = `sprintf(timestamp, "%02d-%02d-%02dT%02d:%02d:%02dZ", year, month, day, hour, min, sec);`; - - var code = `timestamp`; + Blockly.Arduino.codeFunctions_["getTimeStamp"] = ` +char* getTimeStamp() { +uint8_t sec, min, hour, day, month; + uint16_t year; + rtc.get(&sec, &min, &hour, &day, &month, &year); + sprintf(timestamp, "%02d-%02d-%02dT%02d:%02d:%02dZ", year, month, day, hour, min, sec); + return timestamp; + } + `; + var code = `getTimeStamp()`; return [code, Blockly.Arduino.ORDER_ATOMIC]; }; diff --git a/src/components/Blockly/generator/sensebox-sd.js b/src/components/Blockly/generator/sensebox-sd.js index 1926d74..b7ffa0f 100644 --- a/src/components/Blockly/generator/sensebox-sd.js +++ b/src/components/Blockly/generator/sensebox-sd.js @@ -1,5 +1,4 @@ -import Blockly from 'blockly'; - +import Blockly from "blockly"; /* SD-Card Blocks using the Standard SD Library*/ /** @@ -10,45 +9,202 @@ import Blockly from 'blockly'; */ Blockly.Arduino.sensebox_sd_create_file = function (block) { - var filename = this.getFieldValue('Filename'); - var res = filename.slice(0, 4); - Blockly.Arduino.libraries_['library_spi'] = '#include '; - Blockly.Arduino.libraries_['library_sd'] = '#include '; - Blockly.Arduino.definitions_['define_' + res] = 'File dataFile' + res + ';'; - Blockly.Arduino.setupCode_['sensebox_sd'] = 'SD.begin(28);'; - Blockly.Arduino.setupCode_['sensebox_sd' + filename] = 'dataFile' + res + ' = SD.open("' + filename + '", FILE_WRITE);\ndataFile' + res + '.close();\n'; - var code = ''; - return code; + var filename = this.getFieldValue("Filename"); + var res = filename.slice(0, 4); + Blockly.Arduino.libraries_["library_spi"] = "#include "; + Blockly.Arduino.libraries_["library_sd"] = "#include "; + Blockly.Arduino.definitions_["define_" + res] = "File dataFile" + res + ";"; + Blockly.Arduino.setupCode_["sensebox_sd"] = "SD.begin(28);"; + Blockly.Arduino.setupCode_["sensebox_sd" + filename] = + "dataFile" + + res + + ' = SD.open("' + + filename + + '", FILE_WRITE);\ndataFile' + + res + + ".close();\n"; + var code = ""; + return code; }; Blockly.Arduino.sensebox_sd_open_file = function (block) { - var filename = this.getFieldValue('Filename'); - var res = filename.slice(0, 4); - var branch = Blockly.Arduino.statementToCode(block, 'SD'); - var code = 'dataFile' + res + ' = SD.open("' + filename + '", FILE_WRITE);\n' - code += branch; - code += 'dataFile' + res + '.close();\n' - return code; + var filename = this.getFieldValue("Filename"); + var res = filename.slice(0, 4); + var branch = Blockly.Arduino.statementToCode(block, "SD"); + var code = "dataFile" + res + ' = SD.open("' + filename + '", FILE_WRITE);\n'; + code += branch; + code += "dataFile" + res + ".close();\n"; + return code; }; Blockly.Arduino.sensebox_sd_write_file = function (block) { - if (this.parentBlock_ != null) { - var filename = this.getSurroundParent().getFieldValue('Filename'); - } - var res = filename.slice(0, 4); - var text = Blockly.Arduino.valueToCode(this, 'DATA', Blockly.Arduino.ORDER_ATOMIC) || '"Keine Eingabe"'; - var linebreak = this.getFieldValue('linebreak'); - if (linebreak === "TRUE") { - linebreak = "ln"; - } else { - linebreak = ""; - } - var code = ''; - if (text === "gps.getLongitude()" || text === "gps.getLatitude()") { - code = 'dataFile' + res + '.print' + linebreak + '(' + text + ',5);\n' - } - else { - code = 'dataFile' + res + '.print' + linebreak + '(' + text + ');\n' - } - return code; + if (this.parentBlock_ != null) { + var filename = this.getSurroundParent().getFieldValue("Filename"); + } + var res = filename.slice(0, 4); + var text = + Blockly.Arduino.valueToCode(this, "DATA", Blockly.Arduino.ORDER_ATOMIC) || + '"Keine Eingabe"'; + var linebreak = this.getFieldValue("linebreak"); + if (linebreak === "TRUE") { + linebreak = "ln"; + } else { + linebreak = ""; + } + var code = ""; + if (text === "gps.getLongitude()" || text === "gps.getLatitude()") { + code = "dataFile" + res + ".print" + linebreak + "(" + text + ",5);\n"; + } else { + code = "dataFile" + res + ".print" + linebreak + "(" + text + ");\n"; + } + return code; +}; + +Blockly.Arduino.sensebox_sd_osem = function () { + var type = this.getFieldValue("type"); + var blocks = this.getDescendants(); + var branch = Blockly.Arduino.statementToCode(this, "DO"); + var count = 0; + if (blocks !== undefined) { + for (var i = 0; i < blocks.length; i++) { + if (blocks[i].type === "sensebox_sd_save_for_osem") { + count++; + } + } + } + var num_sensors = count; + var timestamp = Blockly.Arduino.valueToCode( + this, + "timeStamp", + Blockly.Arduino.ORDER_ATOMIC + ); + Blockly.Arduino.definitions_["num_sensors"] = + "static const uint8_t NUM_SENSORS = " + num_sensors + ";"; + + Blockly.Arduino.definitions_["measurement"] = `typedef struct measurement { + const char *sensorId; + float value; + } measurement;`; + Blockly.Arduino.definitions_["buffer"] = "char buffer[750];"; + Blockly.Arduino.definitions_[ + "num_measurement" + ] = `measurement measurements[NUM_SENSORS]; + uint8_t num_measurements = 0;`; + if (type === "Stationary") { + Blockly.Arduino.functionNames_["addMeasurement"] = ` +void addMeasurement(const char *sensorId, float value) { + measurements[num_measurements].sensorId = sensorId; + measurements[num_measurements].value = value; + num_measurements++; + } +`; + Blockly.Arduino.functionNames_["writeMeasurementsToSdCard"] = ` +void writeMeasurementsToSdCard(char* timeStamp) { + // iterate throug the measurements array + for (uint8_t i = 0; i < num_measurements; i++) { +sprintf_P(buffer, PSTR("%s,%9.2f,%s"), measurements[i].sensorId, measurements[i].value, timeStamp); + // transmit buffer to client + dataFileData.print(buffer); + Serial.print(buffer); + } + // reset num_measurements + num_measurements = 0; +} +`; + Blockly.Arduino.functionNames_["saveValues"] = ` +void saveValues() { + + + // send measurements + writeMeasurementsToSdCard(${timestamp}); + num_measurements = 0; +} +`; + var code = ""; + code += branch; + code += "saveValues();"; + } else if (type === "Mobile") { + /** + * add mobile functions here + */ + Blockly.Arduino.libraries_["dtostrf.h"] = "#include "; + var lat = Blockly.Arduino.valueToCode( + this, + "lat", + Blockly.Arduino.ORDER_ATOMIC + ); + var lng = Blockly.Arduino.valueToCode( + this, + "lng", + Blockly.Arduino.ORDER_ATOMIC + ); + // var altitude = Blockly.Arduino.valueToCode( + // this, + // "altitude", + // Blockly.Arduino.ORDER_ATOMIC + // ); + Blockly.Arduino.definitions_["num_sensors"] = + "static const uint8_t NUM_SENSORS = " + num_sensors + ";"; + + Blockly.Arduino.definitions_["measurement"] = `typedef struct measurement { + const char *sensorId; + float value; + } measurement;`; + Blockly.Arduino.definitions_["buffer"] = "char buffer[750];"; + Blockly.Arduino.definitions_[ + "num_measurement" + ] = `measurement measurements[NUM_SENSORS]; + uint8_t num_measurements = 0;`; + Blockly.Arduino.functionNames_["addMeasurement"] = ` +void addMeasurement(const char *sensorId, float value) { + measurements[num_measurements].sensorId = sensorId; + measurements[num_measurements].value = value; + num_measurements++; + } + `; + Blockly.Arduino.functionNames_["writeMeasurementsToSdCard"] = ` +void writeMeasurementsToSdCard(char* timeStamp, uint32_t latitudes, uint32_t longitudes) { + // iterate throug the measurements array + for (uint8_t i = 0; i < num_measurements; i++) { + char lng[20]; + char lat[20]; + float longitude = longitudes / (float)10000000; + float latitude = latitudes / (float)10000000; + dtostrf(longitude, 2, 7, lng); + dtostrf(latitude, 1, 7, lat); + sprintf_P(buffer, PSTR("%s,%9.2f,%s,%02s,%02s"), measurements[i].sensorId, measurements[i].value, timeStamp, lng, lat); + // transmit buffer to client + dataFileData.print(buffer); + Serial.print(buffer); + } + // reset num_measurements + num_measurements = 0; + } + `; + Blockly.Arduino.functionNames_["saveValues"] = ` + void saveValues() { + // send measurements + writeMeasurementsToSdCard(${timestamp}, ${lat}, ${lng}); + num_measurements = 0; + } + `; + code = ""; + code += branch; + code += "saveValues();\n"; + } + return code; +}; + +Blockly.Arduino.sensebox_sd_save_for_osem = function (block) { + var code = ""; + var sensor_id = this.getFieldValue("SensorID"); + var id = sensor_id.slice(-3).toUpperCase(); + var sensor_value = + Blockly.Arduino.valueToCode(block, "Value", Blockly.Arduino.ORDER_ATOMIC) || + '"Keine Eingabe"'; + Blockly.Arduino.definitions_["SENSOR_ID" + id + ""] = + "const char SENSOR_ID" + id + '[] PROGMEM = "' + sensor_id + '";'; + code += "addMeasurement(SENSOR_ID" + id + "," + sensor_value + ");\n"; + console.log(code); + return code; }; diff --git a/src/components/Blockly/msg/de/sensebox-sd.js b/src/components/Blockly/msg/de/sensebox-sd.js index 2e74c8e..c0d8e81 100644 --- a/src/components/Blockly/msg/de/sensebox-sd.js +++ b/src/components/Blockly/msg/de/sensebox-sd.js @@ -1,13 +1,18 @@ export const SD = { - /** - * SD-Block - */ - senseBox_sd_create_file: "Erstelle Datei auf SD-Karte", - senseBox_sd_write_file: "Schreibe Daten auf SD-Karte", - senseBox_sd_open_file: "Öffne eine Datei auf der SD-Karte", - senseBox_sd_create_file_tooltip: "Erstellt eine Datei auf der Karte. Stecke das SD-Bee auf den Steckplatz **XBEE2**. Die **maximale** Länge des Dateinamen sind **8 Zeichen**. Die Datei sollte zuerst im *Setup()* erstellt werden", - senseBox_sd_write_file_tooptip: "Schreibe Daten auf die SD-Karte. Beachte, dass die Datei zuerst geöffnet werden muss.", - senseBox_sd_open_file_tooltip: "Öffne die Datei auf der SD-Karte, um Dateien zu speichern. Am Ende der Schleife wird die Datei automatisch wieder geschlossen.", - sensebox_sd_filename: "Daten", - senseBox_sd_decimals: "Dezimalen", -} \ No newline at end of file + /** + * SD-Block + */ + senseBox_sd_create_file: "Erstelle Datei auf SD-Karte", + senseBox_sd_write_file: "Schreibe Daten auf SD-Karte", + senseBox_sd_open_file: "Öffne eine Datei auf der SD-Karte", + senseBox_sd_create_file_tooltip: + "Erstellt eine Datei auf der Karte. Stecke das SD-Bee auf den Steckplatz **XBEE2**. Die **maximale** Länge des Dateinamen sind **8 Zeichen**. Die Datei sollte zuerst im *Setup()* erstellt werden", + senseBox_sd_write_file_tooptip: + "Schreibe Daten auf die SD-Karte. Beachte, dass die Datei zuerst geöffnet werden muss.", + senseBox_sd_open_file_tooltip: + "Öffne die Datei auf der SD-Karte, um Dateien zu speichern. Am Ende der Schleife wird die Datei automatisch wieder geschlossen.", + sensebox_sd_filename: "Daten", + senseBox_sd_decimals: "Dezimalen", + sensebox_sd_osem: "Erstelle CSV für openSenseMap", + sensebox_sd_save_for_osem: "Speichere als CSV für openSenseMap", +}; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index f34d367..27285fb 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -102,6 +102,13 @@ class Toolbox extends React.Component { + + + + + + + From d54ed3254cdc6ed39a7c19cc74b3e02553cb562e Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Thu, 16 Sep 2021 16:29:03 +0200 Subject: [PATCH 2/5] add linebreak --- src/components/Blockly/generator/sensebox-sd.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/Blockly/generator/sensebox-sd.js b/src/components/Blockly/generator/sensebox-sd.js index b7ffa0f..5e6e16f 100644 --- a/src/components/Blockly/generator/sensebox-sd.js +++ b/src/components/Blockly/generator/sensebox-sd.js @@ -61,6 +61,10 @@ Blockly.Arduino.sensebox_sd_write_file = function (block) { }; Blockly.Arduino.sensebox_sd_osem = function () { + if (this.parentBlock_ != null) { + var filename = this.getSurroundParent().getFieldValue("Filename"); + } + var res = filename.slice(0, 4); var type = this.getFieldValue("type"); var blocks = this.getDescendants(); var branch = Blockly.Arduino.statementToCode(this, "DO"); @@ -104,8 +108,7 @@ void writeMeasurementsToSdCard(char* timeStamp) { for (uint8_t i = 0; i < num_measurements; i++) { sprintf_P(buffer, PSTR("%s,%9.2f,%s"), measurements[i].sensorId, measurements[i].value, timeStamp); // transmit buffer to client - dataFileData.print(buffer); - Serial.print(buffer); + dataFile${res}.println(buffer); } // reset num_measurements num_measurements = 0; @@ -174,8 +177,7 @@ void writeMeasurementsToSdCard(char* timeStamp, uint32_t latitudes, uint32_t lon dtostrf(latitude, 1, 7, lat); sprintf_P(buffer, PSTR("%s,%9.2f,%s,%02s,%02s"), measurements[i].sensorId, measurements[i].value, timeStamp, lng, lat); // transmit buffer to client - dataFileData.print(buffer); - Serial.print(buffer); + dataFile${res}.print(buffer); } // reset num_measurements num_measurements = 0; From 5e21a28eb208e156e1a0910646ed3255259eefa1 Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Thu, 16 Sep 2021 16:32:23 +0200 Subject: [PATCH 3/5] rearrange toolbox --- src/components/Blockly/toolbox/Toolbox.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 27285fb..e6636d5 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -102,12 +102,12 @@ class Toolbox extends React.Component { - + From f20766d489e544ac9d641fc7b00548227884e019 Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Fri, 17 Sep 2021 10:23:05 +0200 Subject: [PATCH 4/5] fix #83 --- src/components/Blockly/blocks/sensebox-sd.js | 55 ++- .../Blockly/generator/sensebox-sd.js | 40 +- src/components/Blockly/msg/de/sensebox-rtc.js | 2 +- src/components/Blockly/msg/de/sensebox-sd.js | 11 +- src/components/Blockly/msg/de/translations.js | 467 ++++++++++-------- src/components/Blockly/msg/de_old.js | 2 +- src/components/Blockly/msg/en/sensebox-sd.js | 29 +- 7 files changed, 347 insertions(+), 259 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-sd.js b/src/components/Blockly/blocks/sensebox-sd.js index 52d4bbf..0dc9e3a 100644 --- a/src/components/Blockly/blocks/sensebox-sd.js +++ b/src/components/Blockly/blocks/sensebox-sd.js @@ -1,18 +1,38 @@ import * as Blockly from "blockly/core"; import { getColour } from "../helpers/colour"; +var checkFileName = function (filename) { + var length = filename.length; + if (length > 8) { + alert("dateiname sollte kleiner als 8 Zeichen sein"); + return filename.slice(0, 8); + } + return filename; +}; + Blockly.Blocks["sensebox_sd_open_file"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_sd_open_file) .setAlign(Blockly.ALIGN_LEFT) - .appendField(new Blockly.FieldTextInput("Data.txt"), "Filename"); + .appendField( + new Blockly.FieldTextInput("Data", checkFileName), + "Filename" + ) + .appendField(".") + .appendField( + new Blockly.FieldDropdown([ + ["txt", "txt"], + ["csv", "csv"], + ]), + "extension" + ); this.appendStatementInput("SD").setCheck(null); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_sd_open_file_tooltip); - this.setHelpUrl("https://docs.sensebox.de/hardware/bee-sd/"); + this.setHelpUrl(Blockly.Msg.sensebox_sd_helpurl); }, }; @@ -22,12 +42,23 @@ Blockly.Blocks["sensebox_sd_create_file"] = { .appendField(Blockly.Msg.senseBox_sd_create_file) .setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_output_filename) - .appendField(new Blockly.FieldTextInput("Data.txt"), "Filename"); + .appendField( + new Blockly.FieldTextInput("Data", checkFileName), + "Filename" + ) + .appendField(".") + .appendField( + new Blockly.FieldDropdown([ + ["txt", "txt"], + ["csv", "csv"], + ]), + "extension" + ); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_sd_create_file_tooltip); - this.setHelpUrl("https://docs.sensebox.de/hardware/bee-sd/"); + this.setHelpUrl(Blockly.Msg.sensebox_sd_helpurl); }, }; @@ -44,7 +75,7 @@ Blockly.Blocks["sensebox_sd_write_file"] = { this.setNextStatement(true, null); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_sd_write_file_tooltip); - this.setHelpUrl("https://docs.sensebox.de/hardware/bee-sd/"); + this.setHelpUrl(Blockly.Msg.sensebox_sd_helpurl); }, /** * Called whenever anything on the workspace changes. @@ -74,12 +105,12 @@ Blockly.Blocks["sensebox_sd_write_file"] = { Blockly.Blocks["sensebox_sd_osem"] = { init: function () { - this.setTooltip(Blockly.Msg.senseBox_osem_connection_tip); - this.setHelpUrl(""); + this.setTooltip(Blockly.Msg.sensebox_sd_osem_tip); + this.setHelpUrl(Blockly.Msg.sensebox_sd_helpurl); this.setColour(getColour().sensebox); this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT) - .appendField("Create CSV for openSenseMap"); + .appendField(Blockly.Msg.sensebox_sd_osem); this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_osem_exposure) @@ -94,7 +125,7 @@ Blockly.Blocks["sensebox_sd_osem"] = { Blockly.Msg.senseBox_gps_timeStamp ); this.appendStatementInput("DO") - .appendField(Blockly.Msg.senseBox_sensor) + .appendField(Blockly.Msg.sensebox_sd_measurement) .setCheck(null); this.setPreviousStatement(true, null); this.setNextStatement(true, null); @@ -142,13 +173,13 @@ Blockly.Blocks["sensebox_sd_osem"] = { }; Blockly.Blocks["sensebox_sd_save_for_osem"] = { init: function () { - this.setTooltip(Blockly.Msg.senseBox_send_to_osem_tip); - this.setHelpUrl(""); + this.setTooltip(Blockly.Msg.sensebox_sd_save_for_osem_tip); + this.setHelpUrl(Blockly.Msg.sensebox_sd_helpurl); this.setColour(getColour().sensebox); this.appendDummyInput().appendField(Blockly.Msg.sensebox_sd_save_for_osem); this.appendValueInput("Value") .setAlign(Blockly.ALIGN_LEFT) - .appendField("Phänomen") + .appendField(Blockly.Msg.sensebox_sd_save_for_osem_id) .appendField(new Blockly.FieldTextInput("sensorID"), "SensorID"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); diff --git a/src/components/Blockly/generator/sensebox-sd.js b/src/components/Blockly/generator/sensebox-sd.js index 5e6e16f..6f890f8 100644 --- a/src/components/Blockly/generator/sensebox-sd.js +++ b/src/components/Blockly/generator/sensebox-sd.js @@ -10,30 +10,27 @@ import Blockly from "blockly"; Blockly.Arduino.sensebox_sd_create_file = function (block) { var filename = this.getFieldValue("Filename"); - var res = filename.slice(0, 4); + var extension = this.getFieldValue("extension"); + var newFileName = filename.concat(".", extension); Blockly.Arduino.libraries_["library_spi"] = "#include "; Blockly.Arduino.libraries_["library_sd"] = "#include "; - Blockly.Arduino.definitions_["define_" + res] = "File dataFile" + res + ";"; - Blockly.Arduino.setupCode_["sensebox_sd"] = "SD.begin(28);"; - Blockly.Arduino.setupCode_["sensebox_sd" + filename] = - "dataFile" + - res + - ' = SD.open("' + - filename + - '", FILE_WRITE);\ndataFile' + - res + - ".close();\n"; + Blockly.Arduino.definitions_["define_" + filename] = `File ${filename};`; + Blockly.Arduino.setupCode_["sensebox_sd"] = "SD.begin(28);\n"; + Blockly.Arduino.setupCode_[ + "sensebox_sd" + filename + ] = `${filename} = SD.open("${newFileName}", FILE_WRITE);\n${filename}.close();\n`; var code = ""; return code; }; Blockly.Arduino.sensebox_sd_open_file = function (block) { var filename = this.getFieldValue("Filename"); - var res = filename.slice(0, 4); + var extension = this.getFieldValue("extension"); + var newFileName = filename.concat(".", extension); var branch = Blockly.Arduino.statementToCode(block, "SD"); - var code = "dataFile" + res + ' = SD.open("' + filename + '", FILE_WRITE);\n'; + var code = `${filename} = SD.open("${newFileName}", FILE_WRITE);\n`; code += branch; - code += "dataFile" + res + ".close();\n"; + code += `${filename}.close();\n`; return code; }; @@ -41,8 +38,7 @@ Blockly.Arduino.sensebox_sd_write_file = function (block) { if (this.parentBlock_ != null) { var filename = this.getSurroundParent().getFieldValue("Filename"); } - var res = filename.slice(0, 4); - var text = + var branch = Blockly.Arduino.valueToCode(this, "DATA", Blockly.Arduino.ORDER_ATOMIC) || '"Keine Eingabe"'; var linebreak = this.getFieldValue("linebreak"); @@ -52,10 +48,10 @@ Blockly.Arduino.sensebox_sd_write_file = function (block) { linebreak = ""; } var code = ""; - if (text === "gps.getLongitude()" || text === "gps.getLatitude()") { - code = "dataFile" + res + ".print" + linebreak + "(" + text + ",5);\n"; + if (branch === "gps.getLongitude()" || branch === "gps.getLatitude()") { + code = `${filename}.print${linebreak}(${branch},5);\n`; } else { - code = "dataFile" + res + ".print" + linebreak + "(" + text + ");\n"; + code = `${filename}.print${linebreak}(${branch});\n`; } return code; }; @@ -64,7 +60,7 @@ Blockly.Arduino.sensebox_sd_osem = function () { if (this.parentBlock_ != null) { var filename = this.getSurroundParent().getFieldValue("Filename"); } - var res = filename.slice(0, 4); + var type = this.getFieldValue("type"); var blocks = this.getDescendants(); var branch = Blockly.Arduino.statementToCode(this, "DO"); @@ -108,7 +104,7 @@ void writeMeasurementsToSdCard(char* timeStamp) { for (uint8_t i = 0; i < num_measurements; i++) { sprintf_P(buffer, PSTR("%s,%9.2f,%s"), measurements[i].sensorId, measurements[i].value, timeStamp); // transmit buffer to client - dataFile${res}.println(buffer); + ${filename}.println(buffer); } // reset num_measurements num_measurements = 0; @@ -177,7 +173,7 @@ void writeMeasurementsToSdCard(char* timeStamp, uint32_t latitudes, uint32_t lon dtostrf(latitude, 1, 7, lat); sprintf_P(buffer, PSTR("%s,%9.2f,%s,%02s,%02s"), measurements[i].sensorId, measurements[i].value, timeStamp, lng, lat); // transmit buffer to client - dataFile${res}.print(buffer); + ${filename}.print(buffer); } // reset num_measurements num_measurements = 0; diff --git a/src/components/Blockly/msg/de/sensebox-rtc.js b/src/components/Blockly/msg/de/sensebox-rtc.js index a662220..aae10c9 100644 --- a/src/components/Blockly/msg/de/sensebox-rtc.js +++ b/src/components/Blockly/msg/de/sensebox-rtc.js @@ -5,7 +5,7 @@ export const RTC = { sensebox_rtc_set: "Setze Uhrzeit/Datum der RTC", sensebox_rtc_set_tooltip: "Stellt die Uhrzeit der RTC ein. Beachte, dass du diesen Block im Setup ausführst.", - sensebox_rtc_get_timestamp: "Zeitstempel", + sensebox_rtc_get_timestamp: "Zeitstempel (RFC 3339)", sensebox_rtc_get_timestamp_tooltip: "Gibt dir einen in ISO 8601 formatierten Zeitstempel zurück. Bsp: 2021-12-24T18:21Z", sensebox_rtc_get: "Wert: ", diff --git a/src/components/Blockly/msg/de/sensebox-sd.js b/src/components/Blockly/msg/de/sensebox-sd.js index c0d8e81..41ef5e8 100644 --- a/src/components/Blockly/msg/de/sensebox-sd.js +++ b/src/components/Blockly/msg/de/sensebox-sd.js @@ -3,6 +3,7 @@ export const SD = { * SD-Block */ senseBox_sd_create_file: "Erstelle Datei auf SD-Karte", + sensebox_sd_helpurl: "https://docs.sensebox.de/hardware/bee-sd/", senseBox_sd_write_file: "Schreibe Daten auf SD-Karte", senseBox_sd_open_file: "Öffne eine Datei auf der SD-Karte", senseBox_sd_create_file_tooltip: @@ -13,6 +14,12 @@ export const SD = { "Öffne die Datei auf der SD-Karte, um Dateien zu speichern. Am Ende der Schleife wird die Datei automatisch wieder geschlossen.", sensebox_sd_filename: "Daten", senseBox_sd_decimals: "Dezimalen", - sensebox_sd_osem: "Erstelle CSV für openSenseMap", - sensebox_sd_save_for_osem: "Speichere als CSV für openSenseMap", + sensebox_sd_osem: "Erstelle CSV-Datei für openSenseMap", + sensebox_sd_osem_tip: + "Erstellt eine CSV-Datei, die später auf die openSenseMap hochgeladen werden kann. ", + sensebox_sd_save_for_osem: "Speichere Messwert", + sensebox_sd_save_for_osem_tip: + "Füge eine Messung mit Sensor ID zur CSV-Datei hinzu", + sensebox_sd_save_for_osem_id: "Sensor ID:", + sensebox_sd_measurement: "Messwerte", }; diff --git a/src/components/Blockly/msg/de/translations.js b/src/components/Blockly/msg/de/translations.js index b375863..30d8048 100644 --- a/src/components/Blockly/msg/de/translations.js +++ b/src/components/Blockly/msg/de/translations.js @@ -1,212 +1,265 @@ export const TRANSLATIONS = { + AUTH: "Bitte autorisiere diese App zum Aktivieren der Speicherung deiner Arbeit und zum Teilen.", + CHANGE_VALUE_TITLE: "Wert ändern:", + CHAT: "Chatte mit unserem Mitarbeiter durch Eingeben von Text in diesen Kasten!", + CLEAN_UP: "Blöcke aufräumen", + COLLAPSE_ALL: "Alle Blöcke zusammenfalten", + COLLAPSE_BLOCK: "Block zusammenfalten", + DELETE_ALL_BLOCKS: "Alle %1 Bausteine löschen?", + DELETE_BLOCK: "Block löschen", + DELETE_X_BLOCKS: "Block %1 löschen", + DISABLE_BLOCK: "Block deaktivieren", + DUPLICATE_BLOCK: "Kopieren", + ENABLE_BLOCK: "Block aktivieren", + EXPAND_ALL: "Alle Blöcke entfalten", + EXPAND_BLOCK: "Block entfalten", + EXTERNAL_INPUTS: "externe Eingänge", + HELP: "Hilfe", + INLINE_INPUTS: "interne Eingänge", + LISTS_CREATE_EMPTY_HELPURL: + "https://github.com/google/blockly/wiki/Lists#create-empty-list", + LISTS_CREATE_EMPTY_TITLE: "Erzeuge eine leere Liste", + LISTS_CREATE_EMPTY_TOOLTIP: "Erzeugt eine leere Liste ohne Inhalt.", + LISTS_CREATE_WITH_CONTAINER_TITLE_ADD: "Liste", + LISTS_CREATE_WITH_CONTAINER_TOOLTIP: + "Hinzufügen, entfernen und sortieren von Elementen.", + LISTS_CREATE_WITH_HELPURL: + "https://github.com/google/blockly/wiki/Lists#create-list-with", + LISTS_CREATE_WITH_INPUT_WITH: "Erzeuge Liste mit", + LISTS_CREATE_WITH_ITEM_TOOLTIP: "Ein Element zur Liste hinzufügen.", + LISTS_CREATE_WITH_TOOLTIP: "Erzeugt eine List mit konfigurierten Elementen.", + LISTS_GET_INDEX_FIRST: "erstes", + LISTS_GET_INDEX_FROM_END: "#tes von hinten", + LISTS_GET_INDEX_FROM_START: "#tes", + LISTS_GET_INDEX_GET: "nimm", + LISTS_GET_INDEX_GET_REMOVE: "nimm und entferne", + LISTS_GET_INDEX_LAST: "letztes", + LISTS_GET_INDEX_RANDOM: "zufälliges", + LISTS_GET_INDEX_REMOVE: "entferne", + LISTS_GET_INDEX_TAIL: "", + LISTS_GET_INDEX_TOOLTIP_GET_FIRST: + "Extrahiere das erste Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_FROM_END: + "Extrahiere das #1te Element aus Ende der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_FROM_START: + "Extrahiere das #1te Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_LAST: + "Extrahiere das letzte Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_RANDOM: + "Extrahiere ein zufälliges Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST: + "Extrahiere und entfernt das erste Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM_END: + "Extrahiere und entfernt das #1te Element aus Ende der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM_START: + "Extrahiere und entfernt das #1te Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST: + "Extrahiere und entfernt das letzte Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM: + "Extrahiere und entfernt ein zufälliges Element aus der Liste.", + LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST: + "Entfernt das erste Element von der Liste.", + LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM_END: + "Entfernt das #1te Element von Ende der Liste.", + LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM_START: + "Entfernt das #1te Element von der Liste.", + LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST: + "Entfernt das letzte Element von der Liste.", + LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM: + "Entfernt ein zufälliges Element von der Liste.", + LISTS_GET_SUBLIST_END_FROM_END: "bis zu # von hinten", + LISTS_GET_SUBLIST_END_FROM_START: "bis zu #", + LISTS_GET_SUBLIST_END_LAST: "bis zum Ende", + LISTS_GET_SUBLIST_HELPURL: + "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", + LISTS_GET_SUBLIST_START_FIRST: "erhalte Unterliste vom Anfang", + LISTS_GET_SUBLIST_START_FROM_END: "erhalte Unterliste von # von hinten", + LISTS_GET_SUBLIST_START_FROM_START: "erhalte Unterliste von #", + LISTS_GET_SUBLIST_TAIL: "", + LISTS_GET_SUBLIST_TOOLTIP: + "Erstellt eine Kopie mit dem angegebenen Abschnitt der Liste.", + LISTS_INDEX_OF_FIRST: "suche erstes Auftreten von", + LISTS_INDEX_OF_HELPURL: + "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", + LISTS_INDEX_OF_LAST: "suche letztes Auftreten von", + LISTS_INDEX_OF_TOOLTIP: + "Sucht die Position (index) eines Elementes in der Liste. Gibt 0 zurück, falls kein Element gefunden wurde.", + LISTS_INLIST: "von der Liste", + LISTS_ISEMPTY_HELPURL: + "https://github.com/google/blockly/wiki/Lists#is-empty", // untranslated + LISTS_ISEMPTY_TITLE: "%1 ist leer?", + LISTS_ISEMPTY_TOOLTIP: "Ist wahr (true), wenn die Liste leer ist.", + LISTS_LENGTH_HELPURL: + "https://github.com/google/blockly/wiki/Lists#length-of", // untranslated + LISTS_LENGTH_TITLE: "Länge von %1", + LISTS_LENGTH_TOOLTIP: "Die Anzahl von Elementen in der Liste.", + LISTS_REPEAT_HELPURL: + "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", + LISTS_REPEAT_TITLE: "Erzeuge Liste mit Element %1 wiederhole es %2 mal", + LISTS_REPEAT_TOOLTIP: + "Erzeugt eine Liste mit einer variablen Anzahl von Elementen", + LISTS_SET_INDEX_HELPURL: + "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", + LISTS_SET_INDEX_INPUT_TO: "ein", + LISTS_SET_INDEX_INSERT: "füge", + LISTS_SET_INDEX_SET: "setze", + LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST: + "Fügt das Element an den Anfang der Liste an.", + LISTS_SET_INDEX_TOOLTIP_INSERT_FROM_END: + "Fügt das Element an der angegebenen Position in der Liste ein. #1 ist das letzte Element.", + LISTS_SET_INDEX_TOOLTIP_INSERT_FROM_START: + "Fügt das Element an der angegebenen Position in der Liste ein. #1 ist die erste Element.", + LISTS_SET_INDEX_TOOLTIP_INSERT_LAST: + "Fügt das Element ans Ende der Liste an.", + LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM: + "Fügt das Element zufällig in die Liste ein.", + LISTS_SET_INDEX_TOOLTIP_SET_FIRST: "Setzt das erste Element in der Liste.", + LISTS_SET_INDEX_TOOLTIP_SET_FROM_END: + "Setzt das Element an der angegebenen Position in der Liste. #1 ist das letzte Element.", + LISTS_SET_INDEX_TOOLTIP_SET_FROM_START: + "Setzte das Element an der angegebenen Position in der Liste. #1 ist das erste Element.", + LISTS_SET_INDEX_TOOLTIP_SET_LAST: "Setzt das letzte Element in der Liste.", + LISTS_SET_INDEX_TOOLTIP_SET_RANDOM: + "Setzt ein zufälliges Element in der Liste.", + LISTS_SORT_HELPURL: + "https://github.com/google/blockly/wiki/Lists#sorting-a-list", + LISTS_SORT_ORDER_ASCENDING: "aufsteigend", + LISTS_SORT_ORDER_DESCENDING: "absteigend", + LISTS_SORT_TITLE: "%1 %2 %3 sortieren", + LISTS_SORT_TOOLTIP: "Eine Kopie einer Liste sortieren.", + LISTS_SORT_TYPE_IGNORECASE: "alphabetisch, Schreibung ignorieren", + LISTS_SORT_TYPE_NUMERIC: "numerisch", + LISTS_SORT_TYPE_TEXT: "alphabetisch", + LISTS_SPLIT_HELPURL: + "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", + LISTS_SPLIT_LIST_FROM_TEXT: "Liste aus Text erstellen", + LISTS_SPLIT_TEXT_FROM_LIST: "Text aus Liste erstellen", + LISTS_SPLIT_TOOLTIP_JOIN: + "Liste mit Texten in einen Text vereinen, getrennt durch ein Trennzeichen.", + LISTS_SPLIT_TOOLTIP_SPLIT: + "Text in eine Liste mit Texten aufteilen, unterbrochen bei jedem Trennzeichen.", + LISTS_SPLIT_WITH_DELIMITER: "mit Trennzeichen", + LOGIC_BOOLEAN_FALSE: "falsch", - AUTH: "Bitte autorisiere diese App zum Aktivieren der Speicherung deiner Arbeit und zum Teilen.", - CHANGE_VALUE_TITLE: "Wert ändern:", - CHAT: "Chatte mit unserem Mitarbeiter durch Eingeben von Text in diesen Kasten!", - CLEAN_UP: "Blöcke aufräumen", - COLLAPSE_ALL: "Alle Blöcke zusammenfalten", - COLLAPSE_BLOCK: "Block zusammenfalten", - DELETE_ALL_BLOCKS: "Alle %1 Bausteine löschen?", - DELETE_BLOCK: "Block löschen", - DELETE_X_BLOCKS: "Block %1 löschen", - DISABLE_BLOCK: "Block deaktivieren", - DUPLICATE_BLOCK: "Kopieren", - ENABLE_BLOCK: "Block aktivieren", - EXPAND_ALL: "Alle Blöcke entfalten", - EXPAND_BLOCK: "Block entfalten", - EXTERNAL_INPUTS: "externe Eingänge", - HELP: "Hilfe", - INLINE_INPUTS: "interne Eingänge", - LISTS_CREATE_EMPTY_HELPURL: "https://github.com/google/blockly/wiki/Lists#create-empty-list", - LISTS_CREATE_EMPTY_TITLE: "Erzeuge eine leere Liste", - LISTS_CREATE_EMPTY_TOOLTIP: "Erzeugt eine leere Liste ohne Inhalt.", - LISTS_CREATE_WITH_CONTAINER_TITLE_ADD: "Liste", - LISTS_CREATE_WITH_CONTAINER_TOOLTIP: "Hinzufügen, entfernen und sortieren von Elementen.", - LISTS_CREATE_WITH_HELPURL: "https://github.com/google/blockly/wiki/Lists#create-list-with", - LISTS_CREATE_WITH_INPUT_WITH: "Erzeuge Liste mit", - LISTS_CREATE_WITH_ITEM_TOOLTIP: "Ein Element zur Liste hinzufügen.", - LISTS_CREATE_WITH_TOOLTIP: "Erzeugt eine List mit konfigurierten Elementen.", - LISTS_GET_INDEX_FIRST: "erstes", - LISTS_GET_INDEX_FROM_END: "#tes von hinten", - LISTS_GET_INDEX_FROM_START: "#tes", - LISTS_GET_INDEX_GET: "nimm", - LISTS_GET_INDEX_GET_REMOVE: "nimm und entferne", - LISTS_GET_INDEX_LAST: "letztes", - LISTS_GET_INDEX_RANDOM: "zufälliges", - LISTS_GET_INDEX_REMOVE: "entferne", - LISTS_GET_INDEX_TAIL: "", - LISTS_GET_INDEX_TOOLTIP_GET_FIRST: "Extrahiere das erste Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_FROM_END: "Extrahiere das #1te Element aus Ende der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_FROM_START: "Extrahiere das #1te Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_LAST: "Extrahiere das letzte Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_RANDOM: "Extrahiere ein zufälliges Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST: "Extrahiere und entfernt das erste Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM_END: "Extrahiere und entfernt das #1te Element aus Ende der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM_START: "Extrahiere und entfernt das #1te Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST: "Extrahiere und entfernt das letzte Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM: "Extrahiere und entfernt ein zufälliges Element aus der Liste.", - LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST: "Entfernt das erste Element von der Liste.", - LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM_END: "Entfernt das #1te Element von Ende der Liste.", - LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM_START: "Entfernt das #1te Element von der Liste.", - LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST: "Entfernt das letzte Element von der Liste.", - LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM: "Entfernt ein zufälliges Element von der Liste.", - LISTS_GET_SUBLIST_END_FROM_END: "bis zu # von hinten", - LISTS_GET_SUBLIST_END_FROM_START: "bis zu #", - LISTS_GET_SUBLIST_END_LAST: "bis zum Ende", - LISTS_GET_SUBLIST_HELPURL: "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", - LISTS_GET_SUBLIST_START_FIRST: "erhalte Unterliste vom Anfang", - LISTS_GET_SUBLIST_START_FROM_END: "erhalte Unterliste von # von hinten", - LISTS_GET_SUBLIST_START_FROM_START: "erhalte Unterliste von #", - LISTS_GET_SUBLIST_TAIL: "", - LISTS_GET_SUBLIST_TOOLTIP: "Erstellt eine Kopie mit dem angegebenen Abschnitt der Liste.", - LISTS_INDEX_OF_FIRST: "suche erstes Auftreten von", - LISTS_INDEX_OF_HELPURL: "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", - LISTS_INDEX_OF_LAST: "suche letztes Auftreten von", - LISTS_INDEX_OF_TOOLTIP: "Sucht die Position (index) eines Elementes in der Liste. Gibt 0 zurück, falls kein Element gefunden wurde.", - LISTS_INLIST: "von der Liste", - LISTS_ISEMPTY_HELPURL: "https://github.com/google/blockly/wiki/Lists#is-empty", // untranslated - LISTS_ISEMPTY_TITLE: "%1 ist leer?", - LISTS_ISEMPTY_TOOLTIP: "Ist wahr (true), wenn die Liste leer ist.", - LISTS_LENGTH_HELPURL: "https://github.com/google/blockly/wiki/Lists#length-of", // untranslated - LISTS_LENGTH_TITLE: "Länge von %1", - LISTS_LENGTH_TOOLTIP: "Die Anzahl von Elementen in der Liste.", - LISTS_REPEAT_HELPURL: "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", - LISTS_REPEAT_TITLE: "Erzeuge Liste mit Element %1 wiederhole es %2 mal", - LISTS_REPEAT_TOOLTIP: "Erzeugt eine Liste mit einer variablen Anzahl von Elementen", - LISTS_SET_INDEX_HELPURL: "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic:%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Farsubex.htm", - LISTS_SET_INDEX_INPUT_TO: "ein", - LISTS_SET_INDEX_INSERT: "füge", - LISTS_SET_INDEX_SET: "setze", - LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST: "Fügt das Element an den Anfang der Liste an.", - LISTS_SET_INDEX_TOOLTIP_INSERT_FROM_END: "Fügt das Element an der angegebenen Position in der Liste ein. #1 ist das letzte Element.", - LISTS_SET_INDEX_TOOLTIP_INSERT_FROM_START: "Fügt das Element an der angegebenen Position in der Liste ein. #1 ist die erste Element.", - LISTS_SET_INDEX_TOOLTIP_INSERT_LAST: "Fügt das Element ans Ende der Liste an.", - LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM: "Fügt das Element zufällig in die Liste ein.", - LISTS_SET_INDEX_TOOLTIP_SET_FIRST: "Setzt das erste Element in der Liste.", - LISTS_SET_INDEX_TOOLTIP_SET_FROM_END: "Setzt das Element an der angegebenen Position in der Liste. #1 ist das letzte Element.", - LISTS_SET_INDEX_TOOLTIP_SET_FROM_START: "Setzte das Element an der angegebenen Position in der Liste. #1 ist das erste Element.", - LISTS_SET_INDEX_TOOLTIP_SET_LAST: "Setzt das letzte Element in der Liste.", - LISTS_SET_INDEX_TOOLTIP_SET_RANDOM: "Setzt ein zufälliges Element in der Liste.", - LISTS_SORT_HELPURL: "https://github.com/google/blockly/wiki/Lists#sorting-a-list", - LISTS_SORT_ORDER_ASCENDING: "aufsteigend", - LISTS_SORT_ORDER_DESCENDING: "absteigend", - LISTS_SORT_TITLE: "%1 %2 %3 sortieren", - LISTS_SORT_TOOLTIP: "Eine Kopie einer Liste sortieren.", - LISTS_SORT_TYPE_IGNORECASE: "alphabetisch, Schreibung ignorieren", - LISTS_SORT_TYPE_NUMERIC: "numerisch", - LISTS_SORT_TYPE_TEXT: "alphabetisch", - LISTS_SPLIT_HELPURL: "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists", - LISTS_SPLIT_LIST_FROM_TEXT: "Liste aus Text erstellen", - LISTS_SPLIT_TEXT_FROM_LIST: "Text aus Liste erstellen", - LISTS_SPLIT_TOOLTIP_JOIN: "Liste mit Texten in einen Text vereinen, getrennt durch ein Trennzeichen.", - LISTS_SPLIT_TOOLTIP_SPLIT: "Text in eine Liste mit Texten aufteilen, unterbrochen bei jedem Trennzeichen.", - LISTS_SPLIT_WITH_DELIMITER: "mit Trennzeichen", - LOGIC_BOOLEAN_FALSE: "falsch", + ME: "Ich", + NEW_VARIABLE: "Neue Variable...", + NEW_VARIABLE_TITLE: "Name der neuen Variable:", + ORDINAL_NUMBER_SUFFIX: "", + PROCEDURES_ALLOW_STATEMENTS: "Aussagen erlauben", + PROCEDURES_CALLNORETURN_HELPURL: + "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", + PROCEDURES_CALLNORETURN_TOOLTIP: + "Rufe einen Funktionsblock ohne Rückgabewert auf.", + PROCEDURES_CALLRETURN_HELPURL: + "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", + PROCEDURES_CALLRETURN_TOOLTIP: + "Rufe einen Funktionsblock mit Rückgabewert auf.", + PROCEDURES_CALL: "Rufe", + PROCEDURES_CALL_END: "auf", + PROCEDURES_DEFNORETURN: "Erstelle Funktion", + PROCEDURES_BEFORE_PARAMS: "mit Eingabeparameter:", + PROCEDURES_DEFRETURN_RETURN_TYPE: "Rückgabetype", + PROCEDURES_CALL_BEFORE_PARAMS: "mit:", + PROCEDURES_CREATE_DO: 'Erzeuge "Aufruf %1"', + PROCEDURES_DEFNORETURN_COMMENT: "Beschreibe diese Funktion …", + PROCEDURES_DEFNORETURN_DO: "", + PROCEDURES_DEFNORETURN_HELPURL: + "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", + PROCEDURES_DEFNORETURN_PROCEDURE: "Funktionsblock", + PROCEDURES_DEFNORETURN_TITLE: "zu", + PROCEDURES_DEFNORETURN_TOOLTIP: "Ein Funktionsblock ohne Rückgabewert.", + PROCEDURES_DEFRETURN_HELPURL: + "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", + PROCEDURES_DEFRETURN_RETURN: "gebe zurück", + PROCEDURES_DEFRETURN_TOOLTIP: "Ein Funktionsblock mit Rückgabewert.", + PROCEDURES_DEF_DUPLICATE_WARNING: + "Warnung: dieser Funktionsblock hat zwei gleich benannte Parameter.", + PROCEDURES_HIGHLIGHT_DEF: "Markiere Funktionsblock", + PROCEDURES_IFRETURN_HELPURL: "http://c2.com/cgi/wiki?GuardClause", + PROCEDURES_IFRETURN_TOOLTIP: + "Wenn der erste Wert wahr (true) ist, Gebe den zweiten Wert zurück.", + PROCEDURES_IFRETURN_WARNING: + "Warnung: Dieser Block darf nur innerhalb eines Funktionsblock genutzt werden.", + PROCEDURES_MUTATORARG_TITLE: "Variable:", + PROCEDURES_MUTATORARG_TOOLTIP: "Eine Eingabe zur Funktion hinzufügen.", + PROCEDURES_MUTATORCONTAINER_TITLE: "Parameter", + PROCEDURES_MUTATORCONTAINER_TOOLTIP: + "Die Eingaben zu dieser Funktion hinzufügen, entfernen oder neu anordnen.", + REDO: "Wiederholen", + REMOVE_COMMENT: "Kommentar entfernen", + RENAME_VARIABLE: "Variable umbenennen...", + RENAME_VARIABLE_TITLE: 'Alle "%1" Variablen umbenennen in:', - ME: "Ich", - NEW_VARIABLE: "Neue Variable...", - NEW_VARIABLE_TITLE: "Name der neuen Variable:", - ORDINAL_NUMBER_SUFFIX: "", - PROCEDURES_ALLOW_STATEMENTS: "Aussagen erlauben", - PROCEDURES_CALLNORETURN_HELPURL: "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", - PROCEDURES_CALLNORETURN_TOOLTIP: "Rufe einen Funktionsblock ohne Rückgabewert auf.", - PROCEDURES_CALLRETURN_HELPURL: "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", - PROCEDURES_CALLRETURN_TOOLTIP: "Rufe einen Funktionsblock mit Rückgabewert auf.", - PROCEDURES_CALL: "Rufe", - PROCEDURES_CALL_END: "auf", - PROCEDURES_DEFNORETURN: "Erstelle Funktion", - PROCEDURES_BEFORE_PARAMS: "mit Eingabeparameter:", - PROCEDURES_DEFRETURN_RETURN_TYPE: "Rückgabetype", - PROCEDURES_CALL_BEFORE_PARAMS: "mit:", - PROCEDURES_CREATE_DO: "Erzeuge \"Aufruf %1\"", - PROCEDURES_DEFNORETURN_COMMENT: "Beschreibe diese Funktion …", - PROCEDURES_DEFNORETURN_DO: "", - PROCEDURES_DEFNORETURN_HELPURL: "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", - PROCEDURES_DEFNORETURN_PROCEDURE: "Funktionsblock", - PROCEDURES_DEFNORETURN_TITLE: "zu", - PROCEDURES_DEFNORETURN_TOOLTIP: "Ein Funktionsblock ohne Rückgabewert.", - PROCEDURES_DEFRETURN_HELPURL: "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29", - PROCEDURES_DEFRETURN_RETURN: "gebe zurück", - PROCEDURES_DEFRETURN_TOOLTIP: "Ein Funktionsblock mit Rückgabewert.", - PROCEDURES_DEF_DUPLICATE_WARNING: "Warnung: dieser Funktionsblock hat zwei gleich benannte Parameter.", - PROCEDURES_HIGHLIGHT_DEF: "Markiere Funktionsblock", - PROCEDURES_IFRETURN_HELPURL: "http://c2.com/cgi/wiki?GuardClause", - PROCEDURES_IFRETURN_TOOLTIP: "Wenn der erste Wert wahr (true) ist, Gebe den zweiten Wert zurück.", - PROCEDURES_IFRETURN_WARNING: "Warnung: Dieser Block darf nur innerhalb eines Funktionsblock genutzt werden.", - PROCEDURES_MUTATORARG_TITLE: "Variable:", - PROCEDURES_MUTATORARG_TOOLTIP: "Eine Eingabe zur Funktion hinzufügen.", - PROCEDURES_MUTATORCONTAINER_TITLE: "Parameter", - PROCEDURES_MUTATORCONTAINER_TOOLTIP: "Die Eingaben zu dieser Funktion hinzufügen, entfernen oder neu anordnen.", - REDO: "Wiederholen", - REMOVE_COMMENT: "Kommentar entfernen", - RENAME_VARIABLE: "Variable umbenennen...", - RENAME_VARIABLE_TITLE: "Alle \"%1\" Variablen umbenennen in:", + TODAY: "Heute", + UNDO: "Rückgängig", + VARIABLES_DEFAULT_NAME: "Element", + VARIABLES_GET_CREATE_SET: 'Erzeuge "Schreibe %1"', + VARIABLES_GET_HELPURL: + "https://de.wikipedia.org/wiki/Variable_%28Programmierung%29", + VARIABLES_GET_TOOLTIP: "Gibt den Wert der Variable zurück.", + VARIABLES_SET: "Schreibe %1 %2", + VARIABLES_SET_CREATE_GET: 'Erzeuge "Lese %1"', + VARIABLES_SET_HELPURL: + "https://de.wikipedia.org/wiki/Variable_%28Programmierung%29", + VARIABLES_SET_TOOLTIP: "Setzt den Wert einer Variable.", + MATH_CHANGE_TITLE_ITEM: "Element", + PROCEDURES_DEFRETURN_TITLE: "zu", + CONTROLS_IF_IF_TITLE_IF: "if", + CONTROLS_WHILEUNTIL_INPUT_DO: "mache", + CONTROLS_IF_MSG_THEN: "mache", + CONTROLS_IF_ELSE_TITLE_ELSE: "sonst", + PROCEDURES_DEFRETURN_PROCEDURE: "Funktionsblock", + LISTS_GET_SUBLIST_INPUT_IN_LIST: "in der Liste", + LISTS_GET_INDEX_INPUT_IN_LIST: "in der Liste", + PROCEDURES_DEFRETURN_DO: "", + CONTROLS_IF_ELSEIF_TITLE_ELSEIF: "sonst wenn", + LISTS_GET_INDEX_HELPURL: + "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list", + CONTROLS_FOREACH_INPUT_DO: "mache", + LISTS_SET_INDEX_INPUT_IN_LIST: "in der Liste", + CONTROLS_FOR_INPUT_DO: "mache", + LISTS_CREATE_WITH_ITEM_TITLE: "item", + TEXT_APPEND_VARIABLE: "item", + TEXT_CREATE_JOIN_ITEM_TITLE_ITEM: "item", + LISTS_INDEX_OF_INPUT_IN_LIST: "von der Liste", + PROCEDURES_DEFRETURN_COMMENT: "Beschreibe diese Funktion …", - TODAY: "Heute", - UNDO: "Rückgängig", - VARIABLES_DEFAULT_NAME: "Element", - VARIABLES_GET_CREATE_SET: "Erzeuge \"Schreibe %1\"", - VARIABLES_GET_HELPURL: "https://de.wikipedia.org/wiki/Variable_%28Programmierung%29", - VARIABLES_GET_TOOLTIP: "Gibt den Wert der Variable zurück.", - VARIABLES_SET: "Schreibe %1 %2", - VARIABLES_SET_CREATE_GET: "Erzeuge \"Lese %1\"", - VARIABLES_SET_HELPURL: "https://de.wikipedia.org/wiki/Variable_%28Programmierung%29", - VARIABLES_SET_TOOLTIP: "Setzt den Wert einer Variable.", - MATH_CHANGE_TITLE_ITEM: "Element", - PROCEDURES_DEFRETURN_TITLE: "zu", - CONTROLS_IF_IF_TITLE_IF: "if", - CONTROLS_WHILEUNTIL_INPUT_DO: "mache", - CONTROLS_IF_MSG_THEN: "mache", - CONTROLS_IF_ELSE_TITLE_ELSE: "sonst", - PROCEDURES_DEFRETURN_PROCEDURE: "Funktionsblock", - LISTS_GET_SUBLIST_INPUT_IN_LIST: "in der Liste", - LISTS_GET_INDEX_INPUT_IN_LIST: "in der Liste", - PROCEDURES_DEFRETURN_DO: "", - CONTROLS_IF_ELSEIF_TITLE_ELSEIF: "sonst wenn", - LISTS_GET_INDEX_HELPURL: "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list", - CONTROLS_FOREACH_INPUT_DO: "mache", - LISTS_SET_INDEX_INPUT_IN_LIST: "in der Liste", - CONTROLS_FOR_INPUT_DO: "mache", - LISTS_CREATE_WITH_ITEM_TITLE: "item", - TEXT_APPEND_VARIABLE: "item", - TEXT_CREATE_JOIN_ITEM_TITLE_ITEM: "item", - LISTS_INDEX_OF_INPUT_IN_LIST: "von der Liste", - PROCEDURES_DEFRETURN_COMMENT: "Beschreibe diese Funktion …", + /*senseBox Blockly Translations*/ - /*senseBox Blockly Translations*/ - - senseBox_basic_blue: "Blau", - senseBox_basic_green: "Grün", - senseBox_basic_red: "Rot", - senseBox_basic_state: "Status", - senseBox_off: "Aus", - senseBox_on: "Ein", - senseBox_sensor: "Sensoren", - senseBox_output_filename: "Daten", - senseBox_output_format: "Format:", - senseBox_output_linebreak: "Zeilenumbruch", - senseBox_output_networkid: "NetzwerkID", - senseBox_output_password: "Passwort", - senseBox_output_safetosd: "Auf SD Karte speichern", - senseBox_output_safetosd_tip: "Speichert Messwerte auf SD Karte", - senseBox_output_serialprint: "Auf Kommandozeile ausgeben", - senseBox_serial_tip: "Gibt Messwerte oder Daten auf dem Seriellen Monitor der Arduino IDE aus. Praktisch um ohne Display zu arbeiten", - senseBox_output_timestamp: "Zeitstempel", - senseBox_led: "LED an digitalen", - senseBox_led_tip: "Einfache LED. Beim Anschluss sollte immer ein Vorwiderstand verwendet werden", - senseBox_piezo: "Piezo an digital", - senseBox_piezo_tip: "Piezo an digital PIN. Beim Anschluss sollte immer ein Vorwiderstand verwendet werden", - senseBox_foto: "Fotowiderstand", - senseBox_foto_tip: "Fotowiderstand", - senseBox_hum: "Luftfeuchtigkeit in %", - senseBox_hum_tip: "Luftfeuchtigkeit", - senseBox_ir: "Infrarot Abstandssensor", - senseBox_ir_tip: "Infrarot Abstandssensor", - senseBox_lux: "Helligkeitssensor", - senseBox_lux_tip: "Helligkeitssensor", - senseBox_poti: "Potenziometer", - senseBox_poti_tip: "Potenziometer", - senseBox_soil: "Bodenfeuchte", - senseBox_watertemperature: "Wassertemperatur", - -} \ No newline at end of file + senseBox_basic_blue: "Blau", + senseBox_basic_green: "Grün", + senseBox_basic_red: "Rot", + senseBox_basic_state: "Status", + senseBox_off: "Aus", + senseBox_on: "Ein", + senseBox_sensor: "Sensoren", + senseBox_output_filename: "Daten", + senseBox_output_format: "Format:", + senseBox_output_linebreak: "Zeilenumbruch", + senseBox_output_networkid: "NetzwerkID", + senseBox_output_password: "Passwort", + senseBox_output_safetosd: "Auf SD Karte speichern", + senseBox_output_safetosd_tip: "Speichert Messwerte auf SD Karte", + senseBox_output_serialprint: "Auf Kommandozeile ausgeben", + senseBox_serial_tip: + "Gibt Messwerte oder Daten auf dem Seriellen Monitor der Arduino IDE aus. Praktisch um ohne Display zu arbeiten", + senseBox_output_timestamp: "Zeitstempel (RFC 3339)", + senseBox_led: "LED an digitalen", + senseBox_led_tip: + "Einfache LED. Beim Anschluss sollte immer ein Vorwiderstand verwendet werden", + senseBox_piezo: "Piezo an digital", + senseBox_piezo_tip: + "Piezo an digital PIN. Beim Anschluss sollte immer ein Vorwiderstand verwendet werden", + senseBox_foto: "Fotowiderstand", + senseBox_foto_tip: "Fotowiderstand", + senseBox_hum: "Luftfeuchtigkeit in %", + senseBox_hum_tip: "Luftfeuchtigkeit", + senseBox_ir: "Infrarot Abstandssensor", + senseBox_ir_tip: "Infrarot Abstandssensor", + senseBox_lux: "Helligkeitssensor", + senseBox_lux_tip: "Helligkeitssensor", + senseBox_poti: "Potenziometer", + senseBox_poti_tip: "Potenziometer", + senseBox_soil: "Bodenfeuchte", + senseBox_watertemperature: "Wassertemperatur", +}; diff --git a/src/components/Blockly/msg/de_old.js b/src/components/Blockly/msg/de_old.js index 51c65d2..1b3b413 100644 --- a/src/components/Blockly/msg/de_old.js +++ b/src/components/Blockly/msg/de_old.js @@ -726,7 +726,7 @@ Blockly.Msg.senseBox_output_safetosd_tip = "Speichert Messwerte auf SD Karte"; Blockly.Msg.senseBox_output_serialprint = "Auf Kommandozeile ausgeben"; Blockly.Msg.senseBox_serial_tip = "Gibt Messwerte oder Daten auf dem Seriellen Monitor der Arduino IDE aus. Praktisch um ohne Display zu arbeiten"; -Blockly.Msg.senseBox_output_timestamp = "Zeitstempel"; +Blockly.Msg.senseBox_output_timestamp = "Zeitstempel (RFC 3339)"; Blockly.Msg.senseBox_led = "LED an digitalen"; Blockly.Msg.senseBox_led_tip = diff --git a/src/components/Blockly/msg/en/sensebox-sd.js b/src/components/Blockly/msg/en/sensebox-sd.js index 042a584..4cfc392 100644 --- a/src/components/Blockly/msg/en/sensebox-sd.js +++ b/src/components/Blockly/msg/en/sensebox-sd.js @@ -1,15 +1,16 @@ export const SD = { - /** - * SD-Block - */ - senseBox_sd_create_file: "Create file on SD-Card", - senseBox_sd_write_file: " Write Data to SD-Card", - senseBox_sd_open_file: "Open a file from SD-Card", - senseBox_sd_create_file_tooltip: "Creates a file on the card. Plug the SD-Bee into the **XBEE2** slot. The **maximum** length of the file name is **8 characters**. The file should be created first in *Setup()*", - senseBox_sd_write_file_tooptip: "Write data to the SD card. Note that the file must be opened first.", - senseBox_sd_open_file_tooltip: "Open the file on the SD card to save files. At the end of the loop, the file will be closed again automatically.", - sensebox_sd_filename: "Data.txt", - senseBox_sd_decimals: "decimals", - -} - + /** + * SD-Block + */ + senseBox_sd_create_file: "Create file on SD-Card", + senseBox_sd_write_file: " Write Data to SD-Card", + senseBox_sd_open_file: "Open a file from SD-Card", + senseBox_sd_create_file_tooltip: + "Creates a file on the card. Plug the SD-Bee into the **XBEE2** slot. The **maximum** length of the file name is **8 characters**. The file should be created first in *Setup()*", + senseBox_sd_write_file_tooptip: + "Write data to the SD card. Note that the file must be opened first.", + senseBox_sd_open_file_tooltip: + "Open the file on the SD card to save files. At the end of the loop, the file will be closed again automatically.", + sensebox_sd_filename: "Data.csv", + senseBox_sd_decimals: "decimals", +}; From 6fc640159b5f598c0bc029d0d0dcbb43d871285a Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Fri, 17 Sep 2021 11:00:09 +0200 Subject: [PATCH 5/5] add missing translations and update toolbox --- src/components/Blockly/msg/en/sensebox-sd.js | 7 +++++++ src/components/Blockly/toolbox/Toolbox.js | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/Blockly/msg/en/sensebox-sd.js b/src/components/Blockly/msg/en/sensebox-sd.js index 4cfc392..4125596 100644 --- a/src/components/Blockly/msg/en/sensebox-sd.js +++ b/src/components/Blockly/msg/en/sensebox-sd.js @@ -13,4 +13,11 @@ export const SD = { "Open the file on the SD card to save files. At the end of the loop, the file will be closed again automatically.", sensebox_sd_filename: "Data.csv", senseBox_sd_decimals: "decimals", + sensebox_sd_osem: "Create CSV-file for openSenseMap", + sensebox_sd_osem_tip: "Creates a CSV-file for openSenseMap upload", + sensebox_sd_save_for_osem: "Save measurement", + sensebox_sd_save_for_osem_tip: + "Adds a measurement witht the corresponding Sensor ID to the CSV-file", + sensebox_sd_save_for_osem_id: "Sensor ID:", + sensebox_sd_measurement: "measurements", }; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index e6636d5..0ee760e 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -104,7 +104,11 @@ class Toolbox extends React.Component { - + + + + +