Merge pull request #108 from sensebox/improve-sd-blocks
Improve sd blocks
This commit is contained in:
commit
abfa5d0bed
@ -1,80 +1,187 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { getColour } from '../helpers/colour';
|
||||
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');
|
||||
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", 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(Blockly.Msg.sensebox_sd_helpurl);
|
||||
},
|
||||
};
|
||||
|
||||
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", 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(Blockly.Msg.sensebox_sd_helpurl);
|
||||
},
|
||||
};
|
||||
|
||||
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(Blockly.Msg.sensebox_sd_helpurl);
|
||||
},
|
||||
/**
|
||||
* 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_sd_osem_tip);
|
||||
this.setHelpUrl(Blockly.Msg.sensebox_sd_helpurl);
|
||||
this.setColour(getColour().sensebox);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.ALIGN_LEFT)
|
||||
.appendField(Blockly.Msg.sensebox_sd_osem);
|
||||
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_sd_measurement)
|
||||
.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_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(Blockly.Msg.sensebox_sd_save_for_osem_id)
|
||||
.appendField(new Blockly.FieldTextInput("sensorID"), "SensorID");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
},
|
||||
};
|
||||
|
@ -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");
|
||||
|
@ -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];
|
||||
};
|
||||
|
@ -1,5 +1,4 @@
|
||||
import Blockly from 'blockly';
|
||||
|
||||
import Blockly from "blockly";
|
||||
|
||||
/* SD-Card Blocks using the Standard SD Library*/
|
||||
/**
|
||||
@ -10,45 +9,200 @@ 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 <SPI.h>';
|
||||
Blockly.Arduino.libraries_['library_sd'] = '#include <SD.h>';
|
||||
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 extension = this.getFieldValue("extension");
|
||||
var newFileName = filename.concat(".", extension);
|
||||
Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
|
||||
Blockly.Arduino.libraries_["library_sd"] = "#include <SD.h>";
|
||||
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 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 extension = this.getFieldValue("extension");
|
||||
var newFileName = filename.concat(".", extension);
|
||||
var branch = Blockly.Arduino.statementToCode(block, "SD");
|
||||
var code = `${filename} = SD.open("${newFileName}", FILE_WRITE);\n`;
|
||||
code += branch;
|
||||
code += `${filename}.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 branch =
|
||||
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 (branch === "gps.getLongitude()" || branch === "gps.getLatitude()") {
|
||||
code = `${filename}.print${linebreak}(${branch},5);\n`;
|
||||
} else {
|
||||
code = `${filename}.print${linebreak}(${branch});\n`;
|
||||
}
|
||||
return code;
|
||||
};
|
||||
|
||||
Blockly.Arduino.sensebox_sd_osem = function () {
|
||||
if (this.parentBlock_ != null) {
|
||||
var filename = this.getSurroundParent().getFieldValue("Filename");
|
||||
}
|
||||
|
||||
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
|
||||
${filename}.println(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 <avr/dtostrf.h>";
|
||||
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
|
||||
${filename}.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;
|
||||
};
|
||||
|
@ -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: ",
|
||||
|
@ -1,13 +1,25 @@
|
||||
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",
|
||||
}
|
||||
/**
|
||||
* 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:
|
||||
"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-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",
|
||||
};
|
||||
|
@ -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",
|
||||
|
||||
}
|
||||
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",
|
||||
};
|
||||
|
@ -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 =
|
||||
|
@ -1,15 +1,23 @@
|
||||
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",
|
||||
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",
|
||||
};
|
||||
|
@ -102,6 +102,17 @@ class Toolbox extends React.Component {
|
||||
</Value>
|
||||
</Block>
|
||||
<Block type="sensebox_sd_write_file" />
|
||||
<Block type="sensebox_sd_open_file">
|
||||
<Value name="SD">
|
||||
<Block type="sensebox_sd_osem">
|
||||
<Value name="DO">
|
||||
<Block type="sensebox_sd_save_for_osem"></Block>
|
||||
</Value>
|
||||
</Block>
|
||||
</Value>
|
||||
</Block>
|
||||
<Block type="sensebox_sd_osem" />
|
||||
<Block type="sensebox_sd_save_for_osem" />
|
||||
</Category>
|
||||
<Category name="LED" colour={getColour().sensebox}>
|
||||
<Block type="sensebox_rgb_led"></Block>
|
||||
|
Loading…
x
Reference in New Issue
Block a user