Merge branch 'remove-senseboxmcu-lib' into block/add-ethernet-bee
This commit is contained in:
commit
54b4c47303
2
.env
2
.env
@ -1,4 +1,4 @@
|
|||||||
REACT_APP_COMPILER_URL=https://compiler.sensebox.de
|
REACT_APP_COMPILER_URL=https://test.compiler.sensebox.de
|
||||||
REACT_APP_BOARD=sensebox-mcu
|
REACT_APP_BOARD=sensebox-mcu
|
||||||
REACT_APP_BLOCKLY_API=https://api.blockly.sensebox.de
|
REACT_APP_BLOCKLY_API=https://api.blockly.sensebox.de
|
||||||
|
|
||||||
|
13512
package-lock.json
generated
13512
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,7 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@blockly/block-plus-minus": "^2.0.10",
|
"@blockly/block-plus-minus": "^2.0.10",
|
||||||
|
"@blockly/field-grid-dropdown": "^1.0.25",
|
||||||
"@blockly/field-slider": "^2.1.1",
|
"@blockly/field-slider": "^2.1.1",
|
||||||
"@blockly/plugin-scroll-options": "^1.0.2",
|
"@blockly/plugin-scroll-options": "^1.0.2",
|
||||||
"@blockly/plugin-typed-variable-modal": "^3.1.26",
|
"@blockly/plugin-typed-variable-modal": "^3.1.26",
|
||||||
@ -14,8 +15,8 @@
|
|||||||
"@material-ui/core": "^4.11.0",
|
"@material-ui/core": "^4.11.0",
|
||||||
"@sentry/react": "^6.0.0",
|
"@sentry/react": "^6.0.0",
|
||||||
"@sentry/tracing": "^6.0.0",
|
"@sentry/tracing": "^6.0.0",
|
||||||
"@testing-library/jest-dom": "^4.2.4",
|
"@testing-library/jest-dom": "^5.16.1",
|
||||||
"@testing-library/react": "^9.5.0",
|
"@testing-library/react": "^12.1.2",
|
||||||
"@testing-library/user-event": "^7.2.1",
|
"@testing-library/user-event": "^7.2.1",
|
||||||
"axios": "^0.22.0",
|
"axios": "^0.22.0",
|
||||||
"blockly": "^6.20210701.0",
|
"blockly": "^6.20210701.0",
|
||||||
@ -24,7 +25,7 @@
|
|||||||
"moment": "^2.28.0",
|
"moment": "^2.28.0",
|
||||||
"prismjs": "^1.25.0",
|
"prismjs": "^1.25.0",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-cookie-consent": "^5.2.0",
|
"react-cookie-consent": "^7.0.0",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
"react-markdown": "^5.0.2",
|
"react-markdown": "^5.0.2",
|
||||||
"react-mde": "^11.5.0",
|
"react-mde": "^11.5.0",
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
import { VISIT, LANGUAGE, RENDERER, STATISTICS, PLATFORM } from "./types";
|
import {
|
||||||
|
VISIT,
|
||||||
|
LANGUAGE,
|
||||||
|
RENDERER,
|
||||||
|
SOUNDS,
|
||||||
|
STATISTICS,
|
||||||
|
PLATFORM,
|
||||||
|
} from "./types";
|
||||||
|
|
||||||
export const visitPage = () => (dispatch) => {
|
export const visitPage = () => (dispatch) => {
|
||||||
dispatch({
|
dispatch({
|
||||||
@ -30,6 +37,13 @@ export const setRenderer = (renderer) => (dispatch) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const setSounds = (sounds) => (dispatch) => {
|
||||||
|
dispatch({
|
||||||
|
type: SOUNDS,
|
||||||
|
payload: sounds,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export const setStatistics = (showStatistics) => (dispatch) => {
|
export const setStatistics = (showStatistics) => (dispatch) => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: STATISTICS,
|
type: STATISTICS,
|
||||||
|
@ -45,6 +45,7 @@ export const VISIT = "VISIT";
|
|||||||
export const LANGUAGE = "LANGUAGE";
|
export const LANGUAGE = "LANGUAGE";
|
||||||
export const PLATFORM = "PLATFORM";
|
export const PLATFORM = "PLATFORM";
|
||||||
export const RENDERER = "RENDERER";
|
export const RENDERER = "RENDERER";
|
||||||
|
export const SOUNDS = "SOUNDS";
|
||||||
export const STATISTICS = "STATISTICS";
|
export const STATISTICS = "STATISTICS";
|
||||||
|
|
||||||
// messages
|
// messages
|
||||||
|
@ -72,6 +72,7 @@ class BlocklyWindow extends Component {
|
|||||||
this.props.trashcan !== undefined ? this.props.trashcan : true
|
this.props.trashcan !== undefined ? this.props.trashcan : true
|
||||||
}
|
}
|
||||||
renderer={this.props.renderer}
|
renderer={this.props.renderer}
|
||||||
|
sounds={this.props.sounds}
|
||||||
maxInstances={getMaxInstances()}
|
maxInstances={getMaxInstances()}
|
||||||
zoom={{
|
zoom={{
|
||||||
// https://developers.google.com/blockly/guides/configure/web/zoom
|
// https://developers.google.com/blockly/guides/configure/web/zoom
|
||||||
@ -123,11 +124,13 @@ BlocklyWindow.propTypes = {
|
|||||||
onChangeWorkspace: PropTypes.func.isRequired,
|
onChangeWorkspace: PropTypes.func.isRequired,
|
||||||
clearStats: PropTypes.func.isRequired,
|
clearStats: PropTypes.func.isRequired,
|
||||||
renderer: PropTypes.string.isRequired,
|
renderer: PropTypes.string.isRequired,
|
||||||
|
sounds: PropTypes.string.isRequired,
|
||||||
language: PropTypes.string.isRequired,
|
language: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapStateToProps = (state) => ({
|
const mapStateToProps = (state) => ({
|
||||||
renderer: state.general.renderer,
|
renderer: state.general.renderer,
|
||||||
|
sounds: state.general.sounds,
|
||||||
language: state.general.language,
|
language: state.general.language,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ import "./audio";
|
|||||||
import "./math";
|
import "./math";
|
||||||
import "./map";
|
import "./map";
|
||||||
import "./procedures";
|
import "./procedures";
|
||||||
|
import "./serial";
|
||||||
import "./time";
|
import "./time";
|
||||||
import "./variables";
|
import "./variables";
|
||||||
import "./lists";
|
import "./lists";
|
||||||
|
@ -24,16 +24,6 @@ Blockly.Blocks["sensebox_osem_connection"] = {
|
|||||||
this.setColour(getColour().sensebox);
|
this.setColour(getColour().sensebox);
|
||||||
this.appendDummyInput()
|
this.appendDummyInput()
|
||||||
.appendField(Blockly.Msg.senseBox_osem_connection)
|
.appendField(Blockly.Msg.senseBox_osem_connection)
|
||||||
.appendField(
|
|
||||||
new Blockly.FieldDropdown([
|
|
||||||
[Blockly.Msg.senseBox_osem_host, '"ingress.opensensemap.org"'],
|
|
||||||
[
|
|
||||||
Blockly.Msg.senseBox_osem_host_workshop,
|
|
||||||
'"ingress.workshop.opensensemap.org"',
|
|
||||||
],
|
|
||||||
]),
|
|
||||||
"host"
|
|
||||||
)
|
|
||||||
.appendField("SSL")
|
.appendField("SSL")
|
||||||
.appendField(new Blockly.FieldCheckbox(ssl), "SSL");
|
.appendField(new Blockly.FieldCheckbox(ssl), "SSL");
|
||||||
this.appendDummyInput()
|
this.appendDummyInput()
|
||||||
@ -70,6 +60,11 @@ Blockly.Blocks["sensebox_osem_connection"] = {
|
|||||||
.setCheck(null);
|
.setCheck(null);
|
||||||
this.setPreviousStatement(true, null);
|
this.setPreviousStatement(true, null);
|
||||||
this.setNextStatement(true, null);
|
this.setNextStatement(true, null);
|
||||||
|
this.getField("type").setValidator(
|
||||||
|
function (val) {
|
||||||
|
this.updateShape_(val === "Mobile");
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
},
|
},
|
||||||
onchange: function (e) {
|
onchange: function (e) {
|
||||||
var legal = false;
|
var legal = false;
|
||||||
@ -105,29 +100,9 @@ Blockly.Blocks["sensebox_osem_connection"] = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
updateShape_(isMobile) {
|
||||||
mutationToDom: function () {
|
if (isMobile) {
|
||||||
var container = document.createElement("mutation");
|
if (this.getInput("lat") == null) {
|
||||||
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(
|
this.appendValueInput("lat", "Number").appendField(
|
||||||
Blockly.Msg.senseBox_gps_lat,
|
Blockly.Msg.senseBox_gps_lat,
|
||||||
"gps"
|
"gps"
|
||||||
@ -142,12 +117,11 @@ Blockly.Blocks["sensebox_osem_connection"] = {
|
|||||||
Blockly.Msg.senseBox_gps_timeStamp
|
Blockly.Msg.senseBox_gps_timeStamp
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
if (input === "Stationary" && extraFieldExist !== null) {
|
this.removeInput("lat", true);
|
||||||
this.removeInput("lat");
|
this.removeInput("lng", true);
|
||||||
this.removeInput("lng");
|
this.removeInput("altitude", true);
|
||||||
this.removeInput("altitude");
|
this.removeInput("timeStamp", true);
|
||||||
this.removeInput("timeStamp");
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
LOOP_TYPES: ["sensebox_interval_timer"],
|
LOOP_TYPES: ["sensebox_interval_timer"],
|
||||||
|
@ -129,29 +129,16 @@ Blockly.Blocks["sensebox_sd_osem"] = {
|
|||||||
.setCheck(null);
|
.setCheck(null);
|
||||||
this.setPreviousStatement(true, null);
|
this.setPreviousStatement(true, null);
|
||||||
this.setNextStatement(true, null);
|
this.setNextStatement(true, null);
|
||||||
},
|
this.getField("type").setValidator(
|
||||||
mutationToDom: function () {
|
function (val) {
|
||||||
var container = document.createElement("mutation");
|
this.updateShape_(val === "Mobile");
|
||||||
var input = this.getFieldValue("type");
|
}.bind(this)
|
||||||
this.updateShape_(input);
|
);
|
||||||
container.setAttribute("type", input);
|
|
||||||
return container;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
domToMutation: function (xmlElement) {
|
updateShape_(isMobile) {
|
||||||
var connections = xmlElement.getAttribute("connections");
|
if (isMobile) {
|
||||||
this.updateShape_(connections);
|
if (this.getInput("lat") == null) {
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 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(
|
this.appendValueInput("lat", "Number").appendField(
|
||||||
Blockly.Msg.senseBox_gps_lat,
|
Blockly.Msg.senseBox_gps_lat,
|
||||||
"gps"
|
"gps"
|
||||||
@ -163,14 +150,14 @@ Blockly.Blocks["sensebox_sd_osem"] = {
|
|||||||
Blockly.Msg.senseBox_gps_alt
|
Blockly.Msg.senseBox_gps_alt
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
if (input === "Stationary" && extraFieldExist !== null) {
|
this.removeInput("lat", true);
|
||||||
this.removeInput("lat");
|
this.removeInput("lng", true);
|
||||||
this.removeInput("lng");
|
this.removeInput("altitude", true);
|
||||||
this.removeInput("altitude");
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Blocks["sensebox_sd_save_for_osem"] = {
|
Blockly.Blocks["sensebox_sd_save_for_osem"] = {
|
||||||
init: function () {
|
init: function () {
|
||||||
this.setTooltip(Blockly.Msg.sensebox_sd_save_for_osem_tip);
|
this.setTooltip(Blockly.Msg.sensebox_sd_save_for_osem_tip);
|
||||||
|
@ -2,6 +2,7 @@ import Blockly from "blockly";
|
|||||||
import { getColour } from "../helpers/colour";
|
import { getColour } from "../helpers/colour";
|
||||||
import * as Types from "../helpers/types";
|
import * as Types from "../helpers/types";
|
||||||
import { selectedBoard } from "../helpers/board";
|
import { selectedBoard } from "../helpers/board";
|
||||||
|
import { FieldGridDropdown } from "@blockly/field-grid-dropdown";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HDC1080 Temperature and Humidity Sensor
|
* HDC1080 Temperature and Humidity Sensor
|
||||||
@ -156,50 +157,23 @@ Blockly.Blocks["sensebox_sensor_pressure"] = {
|
|||||||
this.setOutput(true, Types.DECIMAL.typeName);
|
this.setOutput(true, Types.DECIMAL.typeName);
|
||||||
this.setTooltip(Blockly.Msg.senseBox_pressure_tooltip);
|
this.setTooltip(Blockly.Msg.senseBox_pressure_tooltip);
|
||||||
this.setHelpUrl(Blockly.Msg.senseBox_pressure_helpurl);
|
this.setHelpUrl(Blockly.Msg.senseBox_pressure_helpurl);
|
||||||
|
this.getField("NAME").setValidator(
|
||||||
|
function (val) {
|
||||||
|
this.updateShape_(val === "Altitude");
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
},
|
},
|
||||||
/**
|
updateShape_(isAltitude) {
|
||||||
* Parse XML to restore the number of pins available.
|
if (isAltitude) {
|
||||||
* @param {!Element} xmlElement XML storage element.
|
if (this.getInput("extraField") == null) {
|
||||||
* @this Blockly.Block
|
|
||||||
*/
|
|
||||||
|
|
||||||
domToMutation: function (xmlElement) {
|
|
||||||
xmlElement.getAttribute("port");
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Create XML to represent number of pins selection.
|
|
||||||
* @return {!Element} XML storage element.
|
|
||||||
* @this Blockly.Block
|
|
||||||
*/
|
|
||||||
mutationToDom: function () {
|
|
||||||
var container = document.createElement("mutation");
|
|
||||||
var input = this.getFieldValue("NAME");
|
|
||||||
this.updateShape_(input);
|
|
||||||
container.setAttribute("NAME", input);
|
|
||||||
return container;
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Modify this block to have the correct number of pins available.
|
|
||||||
* @param {boolean}
|
|
||||||
* @private
|
|
||||||
* @this Blockly.Block
|
|
||||||
*/
|
|
||||||
updateShape_: function () {
|
|
||||||
var extraFieldExist = this.getFieldValue("referencePressure");
|
|
||||||
var input = this.getFieldValue("NAME");
|
|
||||||
if (input === "Altitude" && extraFieldExist === null) {
|
|
||||||
this.appendDummyInput("extraField")
|
this.appendDummyInput("extraField")
|
||||||
.setAlign(Blockly.ALIGN_RIGHT)
|
.setAlign(Blockly.ALIGN_RIGHT)
|
||||||
.appendField(Blockly.Msg.senseBox_pressure_referencePressure)
|
.appendField(Blockly.Msg.senseBox_pressure_referencePressure)
|
||||||
.appendField(new Blockly.FieldTextInput("1013"), "referencePressure")
|
.appendField(new Blockly.FieldTextInput("1013"), "referencePressure")
|
||||||
.appendField(Blockly.Msg.senseBox_pressure_referencePressure_dim);
|
.appendField(Blockly.Msg.senseBox_pressure_referencePressure_dim);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
if (
|
this.removeInput("extraField", true);
|
||||||
(input === "Pressure" || input === "Temperature") &&
|
|
||||||
extraFieldExist !== null
|
|
||||||
) {
|
|
||||||
this.removeInput("extraField");
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -245,9 +219,7 @@ Blockly.Blocks["sensebox_sensor_ultrasonic_ranger"] = {
|
|||||||
[Blockly.Msg.senseBox_ultrasonic_port_B, "B"],
|
[Blockly.Msg.senseBox_ultrasonic_port_B, "B"],
|
||||||
[Blockly.Msg.senseBox_ultrasonic_port_C, "C"],
|
[Blockly.Msg.senseBox_ultrasonic_port_C, "C"],
|
||||||
];
|
];
|
||||||
var dropdown = new Blockly.FieldDropdown(dropdownOptions, function (
|
var dropdown = new FieldGridDropdown(dropdownOptions, function (option) {
|
||||||
option
|
|
||||||
) {
|
|
||||||
var input = option === "A" || option === "B" || option === "C";
|
var input = option === "A" || option === "B" || option === "C";
|
||||||
this.sourceBlock_.updateShape_(input);
|
this.sourceBlock_.updateShape_(input);
|
||||||
});
|
});
|
||||||
@ -268,6 +240,10 @@ Blockly.Blocks["sensebox_sensor_ultrasonic_ranger"] = {
|
|||||||
new Blockly.FieldDropdown(selectedBoard().digitalPins),
|
new Blockly.FieldDropdown(selectedBoard().digitalPins),
|
||||||
"ultrasonic_echo"
|
"ultrasonic_echo"
|
||||||
);
|
);
|
||||||
|
this.appendDummyInput("maxDistance")
|
||||||
|
.appendField(Blockly.Msg.senseBox_ultrasonic_maxDistance)
|
||||||
|
.appendField(new Blockly.FieldTextInput("250"), "maxDistance")
|
||||||
|
.appendField("cm");
|
||||||
this.setOutput(true, Types.NUMBER.typeName);
|
this.setOutput(true, Types.NUMBER.typeName);
|
||||||
this.setTooltip(Blockly.Msg.senseBox_ultrasonic_tooltip);
|
this.setTooltip(Blockly.Msg.senseBox_ultrasonic_tooltip);
|
||||||
this.setHelpUrl(Blockly.Msg.senseBox_ultrasonic_helpurl);
|
this.setHelpUrl(Blockly.Msg.senseBox_ultrasonic_helpurl);
|
||||||
@ -355,6 +331,7 @@ Blockly.Blocks["sensebox_button"] = {
|
|||||||
[Blockly.Msg.senseBox_button_isPressed, "isPressed"],
|
[Blockly.Msg.senseBox_button_isPressed, "isPressed"],
|
||||||
[Blockly.Msg.senseBox_button_wasPressed, "wasPressed"],
|
[Blockly.Msg.senseBox_button_wasPressed, "wasPressed"],
|
||||||
[Blockly.Msg.senseBox_button_switch, "Switch"],
|
[Blockly.Msg.senseBox_button_switch, "Switch"],
|
||||||
|
[Blockly.Msg.senseBox_button_longPress, "longPress"],
|
||||||
]),
|
]),
|
||||||
"FUNCTION"
|
"FUNCTION"
|
||||||
)
|
)
|
||||||
@ -366,6 +343,24 @@ Blockly.Blocks["sensebox_button"] = {
|
|||||||
this.setOutput(true, Types.BOOLEAN.typeName);
|
this.setOutput(true, Types.BOOLEAN.typeName);
|
||||||
this.setColour(getColour().sensebox);
|
this.setColour(getColour().sensebox);
|
||||||
this.setTooltip(Blockly.Msg.senseBox_button_tooltip);
|
this.setTooltip(Blockly.Msg.senseBox_button_tooltip);
|
||||||
|
this.getField("FUNCTION").setValidator(
|
||||||
|
function (val) {
|
||||||
|
this.updateShape_(val === "longPress");
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
updateShape_(isLongPress) {
|
||||||
|
if (isLongPress) {
|
||||||
|
if (this.getInput("extraField") == null) {
|
||||||
|
this.appendDummyInput("extraField")
|
||||||
|
.setAlign(Blockly.ALIGN_RIGHT)
|
||||||
|
.appendField(Blockly.Msg.senseBox_button_longPress_time)
|
||||||
|
.appendField(new Blockly.FieldTextInput("1000"), "time")
|
||||||
|
.appendField("ms");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.removeInput("extraField", true);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -519,3 +514,54 @@ Blockly.Blocks["sensebox_soundsensor_dfrobot"] = {
|
|||||||
this.setHelpUrl(Blockly.Msg.senseBox_soundsensor_dfrobot_helpurl);
|
this.setHelpUrl(Blockly.Msg.senseBox_soundsensor_dfrobot_helpurl);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Infineon DPS310 Pressure Sensor
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
Blockly.Blocks["sensebox_sensor_dps310"] = {
|
||||||
|
init: function () {
|
||||||
|
var dropdownOptions = [
|
||||||
|
[Blockly.Msg.senseBox_pressure, "Pressure"],
|
||||||
|
[Blockly.Msg.senseBox_temp, "Temperature"],
|
||||||
|
[Blockly.Msg.senseBox_gps_alt, "Altitude"],
|
||||||
|
];
|
||||||
|
var dropdown = new Blockly.FieldDropdown(dropdownOptions, function (
|
||||||
|
option
|
||||||
|
) {
|
||||||
|
var input =
|
||||||
|
option === "Pressure" ||
|
||||||
|
option === "Temperature" ||
|
||||||
|
option === "Altitude";
|
||||||
|
this.sourceBlock_.updateShape_(input);
|
||||||
|
});
|
||||||
|
this.appendDummyInput().appendField(Blockly.Msg.senseBox_sensor_dps310);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.setAlign(Blockly.ALIGN_RIGHT)
|
||||||
|
.appendField(Blockly.Msg.senseBox_value)
|
||||||
|
.appendField(dropdown, "NAME");
|
||||||
|
this.setColour(getColour().sensebox);
|
||||||
|
this.setOutput(true, Types.DECIMAL.typeName);
|
||||||
|
this.setTooltip(Blockly.Msg.senseBox_sensor_dps310_tooltip);
|
||||||
|
this.setHelpUrl(Blockly.Msg.senseBox_sensor_dps310_helpurl);
|
||||||
|
this.getField("NAME").setValidator(
|
||||||
|
function (val) {
|
||||||
|
this.updateShape_(val === "Altitude");
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
updateShape_(isAltitude) {
|
||||||
|
if (isAltitude) {
|
||||||
|
if (this.getInput("extraField") == null) {
|
||||||
|
this.appendDummyInput("extraField")
|
||||||
|
.setAlign(Blockly.ALIGN_RIGHT)
|
||||||
|
.appendField(Blockly.Msg.senseBox_pressure_referencePressure)
|
||||||
|
.appendField(new Blockly.FieldTextInput("1013"), "referencePressure")
|
||||||
|
.appendField(Blockly.Msg.senseBox_pressure_referencePressure_dim);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.removeInput("extraField", true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import Blockly from "blockly";
|
import Blockly from "blockly";
|
||||||
import { getColour } from "../helpers/colour";
|
import { getColour } from "../helpers/colour";
|
||||||
|
import * as Types from "../helpers/types";
|
||||||
|
|
||||||
Blockly.Blocks["sensebox_wifi"] = {
|
Blockly.Blocks["sensebox_wifi"] = {
|
||||||
init: function () {
|
init: function () {
|
||||||
@ -117,5 +118,36 @@ Blockly.Blocks["sensebox_ethernetIp"] = {
|
|||||||
this.setHelpUrl(Blockly.Msg.senseBox_ethernetIp_helpurl);
|
this.setHelpUrl(Blockly.Msg.senseBox_ethernetIp_helpurl);
|
||||||
this.setTooltip(Blockly.Msg.senseBox_ethernet_ip_tooltip);
|
this.setTooltip(Blockly.Msg.senseBox_ethernet_ip_tooltip);
|
||||||
this.setOutput(true, null);
|
this.setOutput(true, null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Blocks["sensebox_wifi_status"] = {
|
||||||
|
init: function () {
|
||||||
|
this.setTooltip(Blockly.Msg.senseBox_wifi_status_tooltip);
|
||||||
|
this.setColour(getColour().sensebox);
|
||||||
|
this.appendDummyInput().appendField(Blockly.Msg.senseBox_wifi_status);
|
||||||
|
this.setOutput(true, Types.BOOLEAN.typeName);
|
||||||
|
this.setHelpUrl(Blockly.Msg.senseBox_wifi_status_helpurl);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Blockly.Blocks["sensebox_get_ip"] = {
|
||||||
|
init: function () {
|
||||||
|
this.setTooltip(Blockly.Msg.senseBox_wifi_ip_tooltip);
|
||||||
|
this.setColour(getColour().sensebox);
|
||||||
|
this.appendDummyInput().appendField(Blockly.Msg.senseBox_wifi_ip);
|
||||||
|
this.setOutput(true, Types.TEXT.typeName);
|
||||||
|
this.setHelpUrl(Blockly.Msg.senseBox_wifi_ip_helpurl);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Blocks["sensebox_wifi_rssi"] = {
|
||||||
|
init: function () {
|
||||||
|
this.setTooltip(Blockly.Msg.senseBox_wifi_rssi_tooltip);
|
||||||
|
this.setColour(getColour().sensebox);
|
||||||
|
this.appendDummyInput().appendField(Blockly.Msg.senseBox_wifi_rssi);
|
||||||
|
this.setOutput(true, Types.NUMBER.typeName);
|
||||||
|
this.setHelpUrl(Blockly.Msg.senseBox_wifi_rssi_helpurl);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
47
src/components/Blockly/blocks/serial.js
Normal file
47
src/components/Blockly/blocks/serial.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import * as Blockly from "blockly/core";
|
||||||
|
import { getColour } from "../helpers/colour";
|
||||||
|
import { selectedBoard } from "../helpers/board";
|
||||||
|
|
||||||
|
Blockly.Blocks["init_serial_monitor"] = {
|
||||||
|
init: function () {
|
||||||
|
this.setPreviousStatement(true);
|
||||||
|
this.setNextStatement(true);
|
||||||
|
this.setColour(getColour().serial);
|
||||||
|
this.setHelpUrl("http://arduino.cc/en/Serial/Begin");
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField(Blockly.Msg.ARD_SERIAL_SETUP)
|
||||||
|
.appendField(
|
||||||
|
new Blockly.FieldDropdown(selectedBoard().serial),
|
||||||
|
"SERIAL_ID"
|
||||||
|
)
|
||||||
|
.appendField(Blockly.Msg.ARD_SERIAL_SPEED)
|
||||||
|
.appendField(
|
||||||
|
new Blockly.FieldDropdown(selectedBoard().serialSpeed),
|
||||||
|
"SPEED"
|
||||||
|
)
|
||||||
|
.appendField(Blockly.Msg.ARD_SERIAL_BPS);
|
||||||
|
this.setInputsInline(true);
|
||||||
|
this.setTooltip(Blockly.Msg.ARD_SERIAL_SETUP_TIP);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Blocks["print_serial_monitor"] = {
|
||||||
|
init: function () {
|
||||||
|
this.setPreviousStatement(true);
|
||||||
|
this.setNextStatement(true);
|
||||||
|
this.setColour(getColour().serial);
|
||||||
|
this.setHelpUrl("http://www.arduino.cc/en/Serial/Print");
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField(
|
||||||
|
new Blockly.FieldDropdown(selectedBoard().serial),
|
||||||
|
"SERIAL_ID"
|
||||||
|
)
|
||||||
|
.appendField(Blockly.Msg.ARD_SERIAL_PRINT);
|
||||||
|
this.appendValueInput("CONTENT");
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField(new Blockly.FieldCheckbox("TRUE"), "NEW_LINE")
|
||||||
|
.appendField(Blockly.Msg.ARD_SERIAL_PRINT_NEWLINE);
|
||||||
|
this.setInputsInline(true);
|
||||||
|
this.setTooltip(Blockly.Msg.ARD_SERIAL_PRINT_TIP);
|
||||||
|
},
|
||||||
|
};
|
@ -62,9 +62,7 @@ Blockly["Arduino"].addReservedWords(
|
|||||||
"pulseIn,millis,micros,delay,delayMicroseconds,min,max,abs,constrain," +
|
"pulseIn,millis,micros,delay,delayMicroseconds,min,max,abs,constrain," +
|
||||||
"map,pow,sqrt,sin,cos,tan,randomSeed,random,lowByte,highByte,bitRead," +
|
"map,pow,sqrt,sin,cos,tan,randomSeed,random,lowByte,highByte,bitRead," +
|
||||||
"bitWrite,bitSet,bitClear,ultraSonicDistance,parseDouble,setNeoPixelColor," +
|
"bitWrite,bitSet,bitClear,ultraSonicDistance,parseDouble,setNeoPixelColor," +
|
||||||
"bit,attachInterrupt,detachInterrupt,interrupts,noInterrupts",
|
"bit,attachInterrupt,detachInterrupt,interrupts,noInterrupts,short,isBtnPressed"
|
||||||
"short",
|
|
||||||
"isBtnPressed"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,6 +19,7 @@ import "./map";
|
|||||||
import "./io";
|
import "./io";
|
||||||
import "./audio";
|
import "./audio";
|
||||||
import "./procedures";
|
import "./procedures";
|
||||||
|
import "./serial";
|
||||||
import "./time";
|
import "./time";
|
||||||
import "./variables";
|
import "./variables";
|
||||||
import "./lists";
|
import "./lists";
|
||||||
|
@ -1,52 +1,77 @@
|
|||||||
import * as Blockly from 'blockly/core';
|
import * as Blockly from "blockly/core";
|
||||||
/**
|
/**
|
||||||
* MQTT Blocks
|
* MQTT Blocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
let service;
|
let service;
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_mqtt_setup = function () {
|
Blockly.Arduino.sensebox_mqtt_setup = function () {
|
||||||
var server = this.getFieldValue('server');
|
var server = this.getFieldValue("server");
|
||||||
var port = this.getFieldValue('port');
|
var port = this.getFieldValue("port");
|
||||||
var username = this.getFieldValue('username');
|
var username = this.getFieldValue("username");
|
||||||
var pass = this.getFieldValue('password');
|
var pass = this.getFieldValue("password");
|
||||||
service = this.getFieldValue('service');
|
service = this.getFieldValue("service");
|
||||||
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
Blockly.Arduino.libraries_['library_adafruitmqtt'] = '#include "Adafruit_MQTT.h"';
|
Blockly.Arduino.libraries_["library_adafruitmqtt"] =
|
||||||
Blockly.Arduino.libraries_['library_adafruitmqttclient'] = '#include "Adafruit_MQTT_Client.h"';
|
'#include "Adafruit_MQTT.h"';
|
||||||
Blockly.Arduino.definitions_['mqtt_server'] = '#define SERVER "' + server + '"';
|
Blockly.Arduino.libraries_["library_adafruitmqttclient"] =
|
||||||
Blockly.Arduino.definitions_['mqtt_port'] = '#define SERVERPORT ' + port + '';
|
'#include "Adafruit_MQTT_Client.h"';
|
||||||
Blockly.Arduino.definitions_['mqtt_username'] = '#define USERNAME "' + username + '"';
|
Blockly.Arduino.definitions_["mqtt_server"] =
|
||||||
Blockly.Arduino.definitions_['mqtt_pass'] = '#define PASS "' + pass + '"';
|
'#define SERVER "' + server + '"';
|
||||||
Blockly.Arduino.definitions_['wifi_client'] = 'WiFiClient client;';
|
Blockly.Arduino.definitions_["mqtt_port"] =
|
||||||
Blockly.Arduino.definitions_['mqtt_client'] = 'Adafruit_MQTT_Client mqtt(&client, SERVER, SERVERPORT, USERNAME, PASS);'
|
"#define SERVERPORT " + port + "";
|
||||||
var code = '';
|
Blockly.Arduino.definitions_["mqtt_username"] =
|
||||||
|
'#define USERNAME "' + username + '"';
|
||||||
|
Blockly.Arduino.definitions_["mqtt_pass"] =
|
||||||
|
'#define PASS "' + pass + '"';
|
||||||
|
Blockly.Arduino.definitions_["wifi_client"] = "WiFiClient client;";
|
||||||
|
Blockly.Arduino.definitions_["mqtt_client"] =
|
||||||
|
"Adafruit_MQTT_Client mqtt(&client, SERVER, SERVERPORT, USERNAME, PASS);";
|
||||||
|
var code = "";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_mqtt_publish = function (block) {
|
Blockly.Arduino.sensebox_mqtt_publish = function (block) {
|
||||||
var feedname = this.getFieldValue('publishfeed');
|
var feedname = this.getFieldValue("publishfeed");
|
||||||
var res = feedname.split("/");
|
var res = feedname.split("/");
|
||||||
var feed_client = res[res.length - 1];
|
var feed_client = res[res.length - 1];
|
||||||
var value = Blockly.Arduino.valueToCode(this, 'value', Blockly.Arduino.ORDER_ATOMIC) || '"No Block connected"';
|
var value =
|
||||||
|
Blockly.Arduino.valueToCode(this, "value", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
|
'"No Block connected"';
|
||||||
|
|
||||||
switch (service) {
|
switch (service) {
|
||||||
case 'adafruitio':
|
case "adafruitio":
|
||||||
Blockly.Arduino.definitions_['mqtt_' + feed_client + ''] = 'Adafruit_MQTT_Publish ' + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, USERNAME "/feeds/' + feedname + '");'
|
Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] =
|
||||||
|
"Adafruit_MQTT_Publish " +
|
||||||
|
feed_client +
|
||||||
|
' = Adafruit_MQTT_Publish(&mqtt, USERNAME "/feeds/' +
|
||||||
|
feedname +
|
||||||
|
'");';
|
||||||
break;
|
break;
|
||||||
case 'dioty':
|
case "dioty":
|
||||||
Blockly.Arduino.definitions_['mqtt_' + feed_client + ''] = 'Adafruit_MQTT_Publish ' + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, "/"USERNAME"/' + feedname + '");'
|
Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] =
|
||||||
|
"Adafruit_MQTT_Publish " +
|
||||||
|
feed_client +
|
||||||
|
' = Adafruit_MQTT_Publish(&mqtt, "/"USERNAME"/' +
|
||||||
|
feedname +
|
||||||
|
'");';
|
||||||
break;
|
break;
|
||||||
case 'custom':
|
case "custom":
|
||||||
Blockly.Arduino.definitions_['mqtt_' + feed_client + ''] = 'Adafruit_MQTT_Publish ' + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, "' + feedname + '");'
|
Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] =
|
||||||
|
"Adafruit_MQTT_Publish " +
|
||||||
|
feed_client +
|
||||||
|
' = Adafruit_MQTT_Publish(&mqtt, "' +
|
||||||
|
feedname +
|
||||||
|
'");';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Blockly.Arduino.definitions_['mqtt_' + feed_client + ''] = 'Adafruit_MQTT_Publish ' + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, USERNAME "/feeds/' + feedname + '");'
|
//Blockly.Arduino.definitions_['mqtt_' + feed_client + ''] = 'Adafruit_MQTT_Publish ' + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, USERNAME "/feeds/' + feedname + '");'
|
||||||
Blockly.Arduino.codeFunctions_['mqtt_connect_function'] = `// Function to connect and reconnect as necessary to the MQTT server.
|
Blockly.Arduino.codeFunctions_[
|
||||||
|
"mqtt_connect_function"
|
||||||
|
] = `// Function to connect and reconnect as necessary to the MQTT server.
|
||||||
// Should be called in the loop function and it will take care if connecting.
|
// Should be called in the loop function and it will take care if connecting.
|
||||||
void MQTT_connect() {
|
void MQTT_connect() {
|
||||||
int8_t ret;
|
int8_t ret;
|
||||||
@ -59,23 +84,34 @@ void MQTT_connect() {
|
|||||||
delay(5000); // wait 5 seconds
|
delay(5000); // wait 5 seconds
|
||||||
}
|
}
|
||||||
}`;
|
}`;
|
||||||
Blockly.Arduino.loopCodeOnce_['mqtt_connect'] = 'MQTT_connect();';
|
Blockly.Arduino.loopCodeOnce_["mqtt_connect"] = "MQTT_connect();";
|
||||||
var code = '' + feed_client + '.publish(' + value + ');';
|
var code = "" + feed_client + ".publish(" + value + ");";
|
||||||
return code
|
|
||||||
};
|
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_mqtt_subscribe = function (block) {
|
|
||||||
var feedname = this.getFieldValue('subscribefeed');
|
|
||||||
var x = 5, feed_client;
|
|
||||||
feed_client = feedname.substr(feedname.length - x, x);
|
|
||||||
Blockly.Arduino.definitions_['mqtt_' + feed_client + ''] = 'Adafruit_MQTT_Subscribe ' + feed_client + '= Adafruit_MQTT_Subscribe(&mqtt,' + feedname + ');';
|
|
||||||
Blockly.Arduino.codeFunctions_['mqtt_' + feed_client + 'callbackFunction'] = `void ` + feed_client + `Callback (double x){
|
|
||||||
Serial.println(x);
|
|
||||||
}`;
|
|
||||||
Blockly.Arduino.setupCode_['mqtt_' + feed_client + '_callback'] = '' + feed_client + '.setCallback(' + feed_client + 'Callback);';
|
|
||||||
Blockly.Arduino.setupCode_['mqtt_' + feed_client + '_subscribe'] = 'mqtt.subscribe(&' + feed_client + ');';
|
|
||||||
Blockly.Arduino.loopCodeOnce_['mqtt_processPackages'] = 'mqtt.processPackets(10);';
|
|
||||||
var code = '';
|
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Blockly.Arduino.sensebox_mqtt_subscribe = function (block) {
|
||||||
|
var feedname = this.getFieldValue("subscribefeed");
|
||||||
|
var x = 5,
|
||||||
|
feed_client;
|
||||||
|
feed_client = feedname.substr(feedname.length - x, x);
|
||||||
|
Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] =
|
||||||
|
"Adafruit_MQTT_Subscribe " +
|
||||||
|
feed_client +
|
||||||
|
"= Adafruit_MQTT_Subscribe(&mqtt," +
|
||||||
|
feedname +
|
||||||
|
");";
|
||||||
|
Blockly.Arduino.codeFunctions_["mqtt_" + feed_client + "callbackFunction"] =
|
||||||
|
`void ` +
|
||||||
|
feed_client +
|
||||||
|
`Callback (double x){
|
||||||
|
Serial.println(x);
|
||||||
|
}`;
|
||||||
|
Blockly.Arduino.setupCode_["mqtt_" + feed_client + "_callback"] =
|
||||||
|
"" + feed_client + ".setCallback(" + feed_client + "Callback);";
|
||||||
|
Blockly.Arduino.setupCode_["mqtt_" + feed_client + "_subscribe"] =
|
||||||
|
"mqtt.subscribe(&" + feed_client + ");";
|
||||||
|
Blockly.Arduino.loopCodeOnce_["mqtt_processPackages"] =
|
||||||
|
"mqtt.processPackets(10);";
|
||||||
|
var code = "";
|
||||||
|
return code;
|
||||||
|
};
|
||||||
|
@ -2,9 +2,8 @@ import * as Blockly from "blockly/core";
|
|||||||
|
|
||||||
Blockly.Arduino.sensebox_phyphox_init = function () {
|
Blockly.Arduino.sensebox_phyphox_init = function () {
|
||||||
var name = this.getFieldValue("devicename");
|
var name = this.getFieldValue("devicename");
|
||||||
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
Blockly.Arduino.libraries_["phyphox_library"] = `#include <phyphoxBle.h>`;
|
Blockly.Arduino.libraries_["phyphox_library"] = `#include <phyphoxBle.h>`;
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
|
||||||
'#include "SenseBoxMCU.h"';
|
|
||||||
Blockly.Arduino.phyphoxSetupCode_[
|
Blockly.Arduino.phyphoxSetupCode_[
|
||||||
"phyphox_start"
|
"phyphox_start"
|
||||||
] = `PhyphoxBLE::start("${name}");`;
|
] = `PhyphoxBLE::start("${name}");`;
|
||||||
|
@ -1,45 +1,75 @@
|
|||||||
import * as Blockly from 'blockly/core';
|
import * as Blockly from "blockly/core";
|
||||||
|
|
||||||
/*Display Blocks*/
|
/*Display Blocks*/
|
||||||
Blockly.Arduino.sensebox_display_beginDisplay = function () {
|
Blockly.Arduino.sensebox_display_beginDisplay = function () {
|
||||||
Blockly.Arduino.libraries_['library_spi'] = '#include <SPI.h>';
|
Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
|
||||||
Blockly.Arduino.libraries_['library_wire'] = '#include <Wire.h>';
|
Blockly.Arduino.libraries_["library_wire"] = "#include <Wire.h>";
|
||||||
Blockly.Arduino.libraries_['library_AdafruitGFX'] = '#include <Adafruit_GFX.h>';
|
Blockly.Arduino.libraries_["library_AdafruitGFX"] =
|
||||||
Blockly.Arduino.libraries_['library_AdafruitSSD1306'] = '#include <Adafruit_SSD1306.h>';
|
"#include <Adafruit_GFX.h>";
|
||||||
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_AdafruitSSD1306"] =
|
||||||
Blockly.Arduino.definitions_['define_display'] = '#define OLED_RESET 4\nAdafruit_SSD1306 display(OLED_RESET);';
|
"#include <Adafruit_SSD1306.h>";
|
||||||
Blockly.Arduino.setupCode_['sensebox_display_begin'] = 'senseBoxIO.powerI2C(true);\ndelay(2000);\ndisplay.begin(SSD1306_SWITCHCAPVCC, 0x3D);\ndisplay.display();\ndelay(100);\ndisplay.clearDisplay();';
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
var code = '';
|
Blockly.Arduino.definitions_["define_display"] =
|
||||||
|
"#define OLED_RESET 4\nAdafruit_SSD1306 display(OLED_RESET);";
|
||||||
|
Blockly.Arduino.setupCode_["sensebox_display_begin"] =
|
||||||
|
"senseBoxIO.powerI2C(true);\ndelay(2000);\ndisplay.begin(SSD1306_SWITCHCAPVCC, 0x3D);\ndisplay.display();\ndelay(100);\ndisplay.clearDisplay();";
|
||||||
|
var code = "";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_clearDisplay = function () {
|
Blockly.Arduino.sensebox_display_clearDisplay = function () {
|
||||||
var code = 'display.clearDisplay();\n';
|
var code = "display.clearDisplay();\n";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_printDisplay = function () {
|
Blockly.Arduino.sensebox_display_printDisplay = function () {
|
||||||
var x = this.getFieldValue('X');
|
var x = this.getFieldValue("X");
|
||||||
var y = this.getFieldValue('Y');
|
var y = this.getFieldValue("Y");
|
||||||
var printDisplay = Blockly.Arduino.valueToCode(this, 'printDisplay', Blockly.Arduino.ORDER_ATOMIC) || '"Keine Eingabe"';
|
var printDisplay =
|
||||||
var size = this.getFieldValue('SIZE');
|
Blockly.Arduino.valueToCode(
|
||||||
var color = this.getFieldValue('COLOR');
|
this,
|
||||||
var code = 'display.setCursor(' + x + ',' + y + ');\n';
|
"printDisplay",
|
||||||
code += 'display.setTextSize(' + size + ');\n';
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
code += 'display.setTextColor(' + color + ');\n';
|
) || '"Keine Eingabe"';
|
||||||
code += 'display.println(' + printDisplay + ');\n';
|
var size = this.getFieldValue("SIZE");
|
||||||
|
var color = this.getFieldValue("COLOR");
|
||||||
|
var code = "display.setCursor(" + x + "," + y + ");\n";
|
||||||
|
code += "display.setTextSize(" + size + ");\n";
|
||||||
|
code += "display.setTextColor(" + color + ");\n";
|
||||||
|
code += "display.println(" + printDisplay + ");\n";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_fastPrint = function () {
|
Blockly.Arduino.sensebox_display_fastPrint = function () {
|
||||||
var title1 = Blockly.Arduino.valueToCode(this, 'Title1', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var title1 =
|
||||||
var value1 = Blockly.Arduino.valueToCode(this, 'Value1', Blockly.Arduino.ORDER_ATOMIC);
|
Blockly.Arduino.valueToCode(this, "Title1", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
var dimension1 = Blockly.Arduino.valueToCode(this, 'Dimension1', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
"0";
|
||||||
var title2 = Blockly.Arduino.valueToCode(this, 'Title2', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var value1 = Blockly.Arduino.valueToCode(
|
||||||
var value2 = Blockly.Arduino.valueToCode(this, 'Value2', Blockly.Arduino.ORDER_ATOMIC);
|
this,
|
||||||
var dimension2 = Blockly.Arduino.valueToCode(this, 'Dimension2', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
"Value1",
|
||||||
Blockly.Arduino.codeFunctions_['sensebox_fastPrint'] = `
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
);
|
||||||
|
var dimension1 =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"Dimension1",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || "0";
|
||||||
|
var title2 =
|
||||||
|
Blockly.Arduino.valueToCode(this, "Title2", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
|
"0";
|
||||||
|
var value2 = Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"Value2",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
);
|
||||||
|
var dimension2 =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"Dimension2",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || "0";
|
||||||
|
Blockly.Arduino.codeFunctions_["sensebox_fastPrint"] = `
|
||||||
void printOnDisplay(String title1, String measurement1, String unit1, String title2, String measurement2, String unit2) {
|
void printOnDisplay(String title1, String measurement1, String unit1, String title2, String measurement2, String unit2) {
|
||||||
|
|
||||||
display.setCursor(0, 0);
|
display.setCursor(0, 0);
|
||||||
@ -62,67 +92,141 @@ Blockly.Arduino.sensebox_display_fastPrint = function () {
|
|||||||
display.setTextSize(1);
|
display.setTextSize(1);
|
||||||
display.println(unit2);
|
display.println(unit2);
|
||||||
}
|
}
|
||||||
`
|
`;
|
||||||
var code = ` printOnDisplay(${title1}, String(${value1}), ${dimension1}, ${title2}, String(${value2}), ${dimension2});\n`;
|
var code = ` printOnDisplay(${title1}, String(${value1}), ${dimension1}, ${title2}, String(${value2}), ${dimension2});\n`;
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_show = function (block) {
|
Blockly.Arduino.sensebox_display_show = function (block) {
|
||||||
var show = Blockly.Arduino.statementToCode(block, 'SHOW');
|
var show = Blockly.Arduino.statementToCode(block, "SHOW");
|
||||||
var code = '';
|
var code = "";
|
||||||
code += show;
|
code += show;
|
||||||
code += 'display.display();\n';
|
code += "display.display();\n";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
Blockly.Arduino.sensebox_display_plotDisplay = function () {
|
Blockly.Arduino.sensebox_display_plotDisplay = function () {
|
||||||
var YLabel = Blockly.Arduino.valueToCode(this, 'YLabel', Blockly.Arduino.ORDER_ATOMIC) || 'Y'
|
var YLabel =
|
||||||
var XLabel = Blockly.Arduino.valueToCode(this, 'XLabel', Blockly.Arduino.ORDER_ATOMIC) || 'X'
|
Blockly.Arduino.valueToCode(this, "YLabel", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
var Title = Blockly.Arduino.valueToCode(this, 'Title', Blockly.Arduino.ORDER_ATOMIC) || 'Title'
|
"Y";
|
||||||
var XRange1 = Blockly.Arduino.valueToCode(this, 'XRange1', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var XLabel =
|
||||||
var XRange2 = Blockly.Arduino.valueToCode(this, 'XRange2', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
Blockly.Arduino.valueToCode(this, "XLabel", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
var YRange1 = Blockly.Arduino.valueToCode(this, 'YRange1', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
"X";
|
||||||
var YRange2 = Blockly.Arduino.valueToCode(this, 'YRange2', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var Title =
|
||||||
var XTick = Blockly.Arduino.valueToCode(this, 'XTick', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
Blockly.Arduino.valueToCode(this, "Title", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
var YTick = Blockly.Arduino.valueToCode(this, 'YTick', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
"Title";
|
||||||
var TimeFrame = Blockly.Arduino.valueToCode(this, 'TimeFrame', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var XRange1 =
|
||||||
var plotDisplay = Blockly.Arduino.valueToCode(this, 'plotDisplay', Blockly.Arduino.ORDER_ATOMIC) || '"Keine Eingabe"';
|
Blockly.Arduino.valueToCode(
|
||||||
Blockly.Arduino.libraries_['library_plot'] = '#include <Plot.h>';
|
this,
|
||||||
Blockly.Arduino.definitions_['define_plot_class'] = 'Plot DataPlot(&display);\n';
|
"XRange1",
|
||||||
Blockly.Arduino.variables_['define_plot_class'] = 'const double TIMEFRAME = ' + TimeFrame + ';\n';
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
Blockly.Arduino.setupCode_['sensebox_plot_setup'] = 'DataPlot.setTitle(' + Title + ');\nDataPlot.setXLabel(' + XLabel + ');\nDataPlot.setYLabel(' + YLabel + ');\nDataPlot.setXRange(' + XRange1 + ',' + XRange2 + ');\nDataPlot.setYRange(' + YRange1 + ',' + YRange2 + ');\nDataPlot.setXTick(' + XTick + ');\nDataPlot.setYTick(' + YTick + ');\nDataPlot.setXPrecision(0);\nDataPlot.setYPrecision(0);\n';
|
) || "0";
|
||||||
var code = 'DataPlot.clear();'
|
var XRange2 =
|
||||||
code += 'double starttime = millis();\ndouble t = 0;\nwhile (t <= TIMEFRAME) {\nt = (millis() - starttime) / 1000.0;\nfloat value = ' + plotDisplay + ';\n';
|
Blockly.Arduino.valueToCode(
|
||||||
code += 'DataPlot.addDataPoint(t,value);\n}\n';
|
this,
|
||||||
|
"XRange2",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || "0";
|
||||||
|
var YRange1 =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"YRange1",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || "0";
|
||||||
|
var YRange2 =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"YRange2",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || "0";
|
||||||
|
var XTick =
|
||||||
|
Blockly.Arduino.valueToCode(this, "XTick", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
|
"0";
|
||||||
|
var YTick =
|
||||||
|
Blockly.Arduino.valueToCode(this, "YTick", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
|
"0";
|
||||||
|
var TimeFrame =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"TimeFrame",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || "0";
|
||||||
|
var plotDisplay =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"plotDisplay",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || '"Keine Eingabe"';
|
||||||
|
Blockly.Arduino.libraries_["library_plot"] = "#include <Plot.h>";
|
||||||
|
Blockly.Arduino.definitions_["define_plot_class"] =
|
||||||
|
"Plot DataPlot(&display);\n";
|
||||||
|
Blockly.Arduino.variables_["define_plot_class"] =
|
||||||
|
"const double TIMEFRAME = " + TimeFrame + ";\n";
|
||||||
|
Blockly.Arduino.setupCode_["sensebox_plot_setup"] =
|
||||||
|
"DataPlot.setTitle(" +
|
||||||
|
Title +
|
||||||
|
");\nDataPlot.setXLabel(" +
|
||||||
|
XLabel +
|
||||||
|
");\nDataPlot.setYLabel(" +
|
||||||
|
YLabel +
|
||||||
|
");\nDataPlot.setXRange(" +
|
||||||
|
XRange1 +
|
||||||
|
"," +
|
||||||
|
XRange2 +
|
||||||
|
");\nDataPlot.setYRange(" +
|
||||||
|
YRange1 +
|
||||||
|
"," +
|
||||||
|
YRange2 +
|
||||||
|
");\nDataPlot.setXTick(" +
|
||||||
|
XTick +
|
||||||
|
");\nDataPlot.setYTick(" +
|
||||||
|
YTick +
|
||||||
|
");\nDataPlot.setXPrecision(0);\nDataPlot.setYPrecision(0);\n";
|
||||||
|
var code = "DataPlot.clear();";
|
||||||
|
code +=
|
||||||
|
"double starttime = millis();\ndouble t = 0;\nwhile (t <= TIMEFRAME) {\nt = (millis() - starttime) / 1000.0;\nfloat value = " +
|
||||||
|
plotDisplay +
|
||||||
|
";\n";
|
||||||
|
code += "DataPlot.addDataPoint(t,value);\n}\n";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_fillCircle = function () {
|
Blockly.Arduino.sensebox_display_fillCircle = function () {
|
||||||
let code = '';
|
let code = "";
|
||||||
var x = Blockly.Arduino.valueToCode(this, 'X', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var x =
|
||||||
var y = Blockly.Arduino.valueToCode(this, 'Y', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
Blockly.Arduino.valueToCode(this, "X", Blockly.Arduino.ORDER_ATOMIC) || "0";
|
||||||
var radius = Blockly.Arduino.valueToCode(this, 'Radius', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var y =
|
||||||
var fill = this.getFieldValue('FILL');
|
Blockly.Arduino.valueToCode(this, "Y", Blockly.Arduino.ORDER_ATOMIC) || "0";
|
||||||
if (fill === 'TRUE') {
|
var radius =
|
||||||
code = 'display.fillCircle(' + x + ',' + y + ',' + radius + ',1);\n';
|
Blockly.Arduino.valueToCode(this, "Radius", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
}
|
"0";
|
||||||
else {
|
var fill = this.getFieldValue("FILL");
|
||||||
code = 'display.drawCircle(' + x + ',' + y + ',' + radius + ',1);\n';
|
if (fill === "TRUE") {
|
||||||
|
code = "display.fillCircle(" + x + "," + y + "," + radius + ",1);\n";
|
||||||
|
} else {
|
||||||
|
code = "display.drawCircle(" + x + "," + y + "," + radius + ",1);\n";
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_drawRectangle = function () {
|
Blockly.Arduino.sensebox_display_drawRectangle = function () {
|
||||||
let code = '';
|
let code = "";
|
||||||
var x = Blockly.Arduino.valueToCode(this, 'X', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var x =
|
||||||
var y = Blockly.Arduino.valueToCode(this, 'Y', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
Blockly.Arduino.valueToCode(this, "X", Blockly.Arduino.ORDER_ATOMIC) || "0";
|
||||||
var width = Blockly.Arduino.valueToCode(this, 'width', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var y =
|
||||||
var height = Blockly.Arduino.valueToCode(this, 'height', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
Blockly.Arduino.valueToCode(this, "Y", Blockly.Arduino.ORDER_ATOMIC) || "0";
|
||||||
var fill = this.getFieldValue('FILL');
|
var width =
|
||||||
if (fill === 'TRUE') {
|
Blockly.Arduino.valueToCode(this, "width", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
code = 'display.fillRect(' + x + ',' + y + ',' + width + ',' + height + ',1);\n';
|
"0";
|
||||||
}
|
var height =
|
||||||
else {
|
Blockly.Arduino.valueToCode(this, "height", Blockly.Arduino.ORDER_ATOMIC) ||
|
||||||
code = 'display.drawRect(' + x + ',' + y + ',' + width + ',' + height + ',1);\n';
|
"0";
|
||||||
|
var fill = this.getFieldValue("FILL");
|
||||||
|
if (fill === "TRUE") {
|
||||||
|
code =
|
||||||
|
"display.fillRect(" + x + "," + y + "," + width + "," + height + ",1);\n";
|
||||||
|
} else {
|
||||||
|
code =
|
||||||
|
"display.drawRect(" + x + "," + y + "," + width + "," + height + ",1);\n";
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
};
|
||||||
|
@ -5,8 +5,7 @@ Blockly.Arduino.sensebox_lora_initialize_otaa = function (block) {
|
|||||||
var appID = this.getFieldValue("APPID");
|
var appID = this.getFieldValue("APPID");
|
||||||
var appKey = this.getFieldValue("APPKEY");
|
var appKey = this.getFieldValue("APPKEY");
|
||||||
var interval = this.getFieldValue("INTERVAL");
|
var interval = this.getFieldValue("INTERVAL");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
|
||||||
Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
|
Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
|
||||||
Blockly.Arduino.libraries_["library_lmic"] = "#include <lmic.h>";
|
Blockly.Arduino.libraries_["library_lmic"] = "#include <lmic.h>";
|
||||||
Blockly.Arduino.libraries_["library_hal"] = "#include <hal/hal.h>";
|
Blockly.Arduino.libraries_["library_hal"] = "#include <hal/hal.h>";
|
||||||
@ -278,8 +277,7 @@ Blockly.Arduino.sensebox_lora_initialize_abp = function (block) {
|
|||||||
var appskey = this.getFieldValue("APPSKEY");
|
var appskey = this.getFieldValue("APPSKEY");
|
||||||
var devaddr = this.getFieldValue("DEVADDR");
|
var devaddr = this.getFieldValue("DEVADDR");
|
||||||
var interval = this.getFieldValue("INTERVAL");
|
var interval = this.getFieldValue("INTERVAL");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
|
||||||
Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
|
Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
|
||||||
Blockly.Arduino.libraries_["library_lmic"] = "#include <lmic.h>";
|
Blockly.Arduino.libraries_["library_lmic"] = "#include <lmic.h>";
|
||||||
Blockly.Arduino.libraries_["library_hal"] = "#include <hal/hal.h>";
|
Blockly.Arduino.libraries_["library_hal"] = "#include <hal/hal.h>";
|
||||||
|
@ -28,7 +28,6 @@ Blockly.Arduino.sensebox_osem_connection = function (Block) {
|
|||||||
wifi = false;
|
wifi = false;
|
||||||
}
|
}
|
||||||
var box_id = this.getFieldValue("BoxID");
|
var box_id = this.getFieldValue("BoxID");
|
||||||
var host = this.getFieldValue("host");
|
|
||||||
var branch = Blockly.Arduino.statementToCode(Block, "DO");
|
var branch = Blockly.Arduino.statementToCode(Block, "DO");
|
||||||
var access_token = this.getFieldValue("access_token");
|
var access_token = this.getFieldValue("access_token");
|
||||||
var blocks = this.getDescendants();
|
var blocks = this.getDescendants();
|
||||||
@ -44,8 +43,9 @@ Blockly.Arduino.sensebox_osem_connection = function (Block) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
var num_sensors = count;
|
var num_sensors = count;
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.setupCode_["initBearSSL"] =
|
||||||
|
"ArduinoBearSSL.onGetTime(getTime);";
|
||||||
Blockly.Arduino.definitions_["num_sensors"] =
|
Blockly.Arduino.definitions_["num_sensors"] =
|
||||||
"static const uint8_t NUM_SENSORS = " + num_sensors + ";";
|
"static const uint8_t NUM_SENSORS = " + num_sensors + ";";
|
||||||
Blockly.Arduino.definitions_["SenseBoxID"] =
|
Blockly.Arduino.definitions_["SenseBoxID"] =
|
||||||
@ -68,6 +68,22 @@ Blockly.Arduino.sensebox_osem_connection = function (Block) {
|
|||||||
Blockly.Arduino.definitions_["EthernetClient"] = "EthernetClient client;";
|
Blockly.Arduino.definitions_["EthernetClient"] = "EthernetClient client;";
|
||||||
port = 80;
|
port = 80;
|
||||||
}
|
}
|
||||||
|
'const char server [] PROGMEM ="ingress.opensensemap.org";';
|
||||||
|
if (ssl === "TRUE") {
|
||||||
|
Blockly.Arduino.libraries_["library_bearSSL"] =
|
||||||
|
"#include <ArduinoBearSSL.h>";
|
||||||
|
Blockly.Arduino.libraries_["library_arduinoECC08"] =
|
||||||
|
"#include <ArduinoECCX08.h>";
|
||||||
|
Blockly.Arduino.definitions_["WiFiClient"] = "WiFiClient wifiClient;";
|
||||||
|
Blockly.Arduino.definitions_["BearSSLClient"] =
|
||||||
|
"BearSSLClient client(wifiClient);";
|
||||||
|
Blockly.Arduino.functionNames_["getTime"] = `unsigned long getTime() {
|
||||||
|
return WiFi.getTime();
|
||||||
|
}`;
|
||||||
|
port = 443;
|
||||||
|
} else if (ssl === "FALSE") {
|
||||||
|
Blockly.Arduino.definitions_["WiFiClient"] = "WiFiClient client;";
|
||||||
|
port = 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
Blockly.Arduino.definitions_["measurement"] = `typedef struct measurement {
|
Blockly.Arduino.definitions_["measurement"] = `typedef struct measurement {
|
||||||
@ -141,6 +157,7 @@ Blockly.Arduino.sensebox_osem_connection = function (Block) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}`;
|
}`;
|
||||||
|
|
||||||
var code = "";
|
var code = "";
|
||||||
code += branch;
|
code += branch;
|
||||||
code += "submitValues();\n";
|
code += "submitValues();\n";
|
||||||
|
@ -3,8 +3,7 @@ import Blockly from "blockly";
|
|||||||
Blockly.Arduino.sensebox_rtc_init = function () {
|
Blockly.Arduino.sensebox_rtc_init = function () {
|
||||||
Blockly.Arduino.libraries_["RV8523"] = `#include <RV8523.h>`;
|
Blockly.Arduino.libraries_["RV8523"] = `#include <RV8523.h>`;
|
||||||
Blockly.Arduino.definitions_["RTC"] = `RV8523 rtc;`;
|
Blockly.Arduino.definitions_["RTC"] = `RV8523 rtc;`;
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
|
||||||
Blockly.Arduino.setupCode_["rtc.begin"] = `rtc.begin();`;
|
Blockly.Arduino.setupCode_["rtc.begin"] = `rtc.begin();`;
|
||||||
var code = ``;
|
var code = ``;
|
||||||
return code;
|
return code;
|
||||||
|
@ -7,11 +7,13 @@ import Blockly from "blockly";
|
|||||||
|
|
||||||
Blockly.Arduino.sensebox_sensor_temp_hum = function () {
|
Blockly.Arduino.sensebox_sensor_temp_hum = function () {
|
||||||
var dropdown_name = this.getFieldValue("NAME");
|
var dropdown_name = this.getFieldValue("NAME");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_adafruithdc1000"] =
|
||||||
Blockly.Arduino.definitions_["define_hdc"] = "HDC1080 hdc;";
|
"#include <Adafruit_HDC1000.h>";
|
||||||
|
Blockly.Arduino.definitions_["define_hdc"] =
|
||||||
|
"Adafruit_HDC1000 hdc = Adafruit_HDC1000();";
|
||||||
Blockly.Arduino.setupCode_["sensebox_sensor_temp_hum"] = "hdc.begin();";
|
Blockly.Arduino.setupCode_["sensebox_sensor_temp_hum"] = "hdc.begin();";
|
||||||
var code = "hdc.get" + dropdown_name + "()";
|
var code = `hdc.read${dropdown_name}()`;
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -23,24 +25,102 @@ Blockly.Arduino.sensebox_sensor_temp_hum = function () {
|
|||||||
Blockly.Arduino.sensebox_sensor_uv_light = function () {
|
Blockly.Arduino.sensebox_sensor_uv_light = function () {
|
||||||
var dropdown_name = this.getFieldValue("NAME");
|
var dropdown_name = this.getFieldValue("NAME");
|
||||||
let code = "";
|
let code = "";
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_ltr329"] = `#include <LTR329.h>`;
|
||||||
if (dropdown_name === "UvIntensity") {
|
if (dropdown_name === "UvIntensity") {
|
||||||
Blockly.Arduino.definitions_["define_veml"] = "VEML6070 veml;";
|
Blockly.Arduino.libraries_["library_veml6070"] = "#include <VEML6070.h>";
|
||||||
|
Blockly.Arduino.definitions_["define_veml"] = "VEML6070 veml;;";
|
||||||
Blockly.Arduino.setupCode_["sensebox_sensor_uv_light"] = "veml.begin();";
|
Blockly.Arduino.setupCode_["sensebox_sensor_uv_light"] = "veml.begin();";
|
||||||
code = "veml.get" + dropdown_name + "()";
|
code = "veml.get" + dropdown_name + "()";
|
||||||
}
|
}
|
||||||
// if (dropdown_name === 'Illuminance') {
|
|
||||||
// Blockly.Arduino.definitions_['define_tsl'] = 'TSL45315 tsl;'
|
|
||||||
// Blockly.Arduino.setupCode_['sensebox_sensor_illuminance'] = 'tsl.begin();'
|
|
||||||
// code = 'tsl.get' + dropdown_name + '()';
|
|
||||||
// }
|
|
||||||
if (dropdown_name === "Illuminance") {
|
if (dropdown_name === "Illuminance") {
|
||||||
Blockly.Arduino.definitions_["define_lightsensor"] =
|
Blockly.Arduino.codeFunctions_["read_reg"] = `
|
||||||
"Lightsensor lightsensor;";
|
int read_reg(byte address, uint8_t reg)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
Wire.beginTransmission(address);
|
||||||
|
Wire.write(reg);
|
||||||
|
Wire.endTransmission();
|
||||||
|
Wire.requestFrom((uint8_t)address, (uint8_t)1);
|
||||||
|
delay(1);
|
||||||
|
if(Wire.available())
|
||||||
|
i = Wire.read();
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
Blockly.Arduino.codeFunctions_["write_reg"] = `
|
||||||
|
void write_reg(byte address, uint8_t reg, uint8_t val)
|
||||||
|
{
|
||||||
|
Wire.beginTransmission(address);
|
||||||
|
Wire.write(reg);
|
||||||
|
Wire.write(val);
|
||||||
|
Wire.endTransmission();
|
||||||
|
}`;
|
||||||
|
|
||||||
|
Blockly.Arduino.codeFunctions_["Lightsensor_begin"] = `
|
||||||
|
void Lightsensor_begin()
|
||||||
|
{
|
||||||
|
Wire.begin();
|
||||||
|
unsigned int u = 0;
|
||||||
|
u = read_reg(0x29, 0x80 | 0x0A); //id register
|
||||||
|
if ((u & 0xF0) == 0xA0) // TSL45315
|
||||||
|
{
|
||||||
|
write_reg(0x29, 0x80 | 0x00, 0x03); //control: power on
|
||||||
|
write_reg(0x29, 0x80 | 0x01, 0x02); //config: M=4 T=100ms
|
||||||
|
delay(120);
|
||||||
|
lightsensortype = 0; //TSL45315
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LTR.begin();
|
||||||
|
LTR.setControl(gain, false, false);
|
||||||
|
LTR.setMeasurementRate(integrationTime, measurementRate);
|
||||||
|
LTR.setPowerUp(); //power on with default settings
|
||||||
|
delay(10); //Wait 10 ms (max) - wakeup time from standby
|
||||||
|
lightsensortype = 1; //
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
Blockly.Arduino.codeFunctions_["Lightsensor_getIlluminance"] = `
|
||||||
|
unsigned int Lightsensor_getIlluminance()
|
||||||
|
{
|
||||||
|
unsigned int lux = 0;
|
||||||
|
if (lightsensortype == 0) // TSL45315
|
||||||
|
{
|
||||||
|
unsigned int u = (read_reg(0x29, 0x80 | 0x04) << 0); //data low
|
||||||
|
u |= (read_reg(0x29, 0x80 | 0x05) << 8); //data high
|
||||||
|
lux = u * 4; // calc lux with M=4 and T=100ms
|
||||||
|
}
|
||||||
|
else if (lightsensortype == 1) //LTR-329ALS-01
|
||||||
|
{
|
||||||
|
delay(100);
|
||||||
|
unsigned int data0, data1;
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
if (LTR.getData(data0, data1)) {
|
||||||
|
if(LTR.getLux(gain, integrationTime, data0, data1, lux));
|
||||||
|
if(lux > 0) break;
|
||||||
|
else delay(10);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
byte error = LTR.getError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lux;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
Blockly.Arduino.definitions_["define_lightsensor"] = `
|
||||||
|
bool lightsensortype = 0; //0 for tsl - 1 for ltr
|
||||||
|
//settings for LTR sensor
|
||||||
|
LTR329 LTR;
|
||||||
|
unsigned char gain = 1;
|
||||||
|
unsigned char integrationTime = 0;
|
||||||
|
unsigned char measurementRate = 3;
|
||||||
|
`;
|
||||||
Blockly.Arduino.setupCode_["sensebox_sensor_illuminance"] =
|
Blockly.Arduino.setupCode_["sensebox_sensor_illuminance"] =
|
||||||
"lightsensor.begin();";
|
"Lightsensor_begin();";
|
||||||
code = "lightsensor.get" + dropdown_name + "()";
|
code = "Lightsensor_getIlluminance()";
|
||||||
}
|
}
|
||||||
|
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
@ -54,8 +134,8 @@ Blockly.Arduino.sensebox_sensor_uv_light = function () {
|
|||||||
Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () {
|
Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () {
|
||||||
var dropdown_value = this.getFieldValue("VALUE");
|
var dropdown_value = this.getFieldValue("VALUE");
|
||||||
var range = this.getFieldValue("RANGE");
|
var range = this.getFieldValue("RANGE");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_bmx055"] = `#include <BMX055.h>`;
|
||||||
Blockly.Arduino.definitions_["define_bmx"] = "BMX055 bmx;";
|
Blockly.Arduino.definitions_["define_bmx"] = "BMX055 bmx;";
|
||||||
Blockly.Arduino.setupCode_["sensebox_sensor_bmx055"] =
|
Blockly.Arduino.setupCode_["sensebox_sensor_bmx055"] =
|
||||||
"bmx.beginAcc(" + range + ");";
|
"bmx.beginAcc(" + range + ");";
|
||||||
@ -71,14 +151,17 @@ Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () {
|
|||||||
Blockly.Arduino.sensebox_sensor_sds011 = function () {
|
Blockly.Arduino.sensebox_sensor_sds011 = function () {
|
||||||
var dropdown_name = this.getFieldValue("NAME");
|
var dropdown_name = this.getFieldValue("NAME");
|
||||||
var serial_name = this.getFieldValue("SERIAL");
|
var serial_name = this.getFieldValue("SERIAL");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["SdsDustSensor"] = `#include "SdsDustSensor.h"`;
|
||||||
Blockly.Arduino.codeFunctions_["define_sds011"] =
|
Blockly.Arduino.definitions_["define_sds011"] =
|
||||||
"SDS011 my_sds(" + serial_name + ");";
|
"SdsDustSensor sds(" + serial_name + ");";
|
||||||
Blockly.Arduino.variables_["variables_sds011"] = "float p10,p25;\n";
|
Blockly.Arduino.setupCode_["sds011_begin"] = "sds.begin();";
|
||||||
Blockly.Arduino.setupCode_["sensebox_sensor_sds011"] =
|
Blockly.Arduino.setupCode_["sds011_setActiveReporting"] =
|
||||||
serial_name + ".begin(9600);";
|
"sds.setActiveReportingMode();";
|
||||||
var code = "my_sds.get" + dropdown_name + "()";
|
Blockly.Arduino.loopCodeOnce_[
|
||||||
|
"sds011_getData"
|
||||||
|
] = `PmResult pm = sds.readPm();`;
|
||||||
|
var code = `pm.${dropdown_name}`;
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -91,14 +174,31 @@ Blockly.Arduino.sensebox_sensor_pressure = function () {
|
|||||||
var dropdown_name = this.getFieldValue("NAME");
|
var dropdown_name = this.getFieldValue("NAME");
|
||||||
var code = "";
|
var code = "";
|
||||||
var referencePressure = this.getFieldValue("referencePressure");
|
var referencePressure = this.getFieldValue("referencePressure");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_[
|
||||||
Blockly.Arduino.definitions_["define_pressure"] = "BMP280 bmp_sensor;";
|
"adafruit_bmp280"
|
||||||
Blockly.Arduino.setupCode_["sensebox_bmp_sensor"] = "bmp_sensor.begin();";
|
] = `#include <Adafruit_BMP280.h>`;
|
||||||
if (dropdown_name === "Pressure" || dropdown_name === "Temperature") {
|
Blockly.Arduino.definitions_["define_pressure"] = "Adafruit_BMP280 bmp;";
|
||||||
code = "bmp_sensor.get" + dropdown_name + "()";
|
Blockly.Arduino.setupCode_["sensebox_bmp_sensor"] = "bmp.begin();";
|
||||||
} else if (dropdown_name === "Altitude") {
|
Blockly.Arduino.setupCode_["bmp_setSampling"] = `
|
||||||
code = "bmp_sensor.getAltitude(" + referencePressure + ")";
|
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
|
||||||
|
Adafruit_BMP280::SAMPLING_X2,
|
||||||
|
Adafruit_BMP280::SAMPLING_X16,
|
||||||
|
Adafruit_BMP280::FILTER_X16,
|
||||||
|
Adafruit_BMP280::STANDBY_MS_500);
|
||||||
|
`;
|
||||||
|
switch (dropdown_name) {
|
||||||
|
case "Temperature":
|
||||||
|
code = "bmp.readTemperature()";
|
||||||
|
break;
|
||||||
|
case "Pressure":
|
||||||
|
code = "bmp.readPressure()/100";
|
||||||
|
break;
|
||||||
|
case "Altitude":
|
||||||
|
code = "bmp.readAltitude(" + referencePressure + ")";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
code = "";
|
||||||
}
|
}
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
@ -222,18 +322,19 @@ Blockly.Arduino.sensebox_sensor_ultrasonic_ranger = function () {
|
|||||||
var dropdown_pin_RX = this.getFieldValue("ultrasonic_trigger");
|
var dropdown_pin_RX = this.getFieldValue("ultrasonic_trigger");
|
||||||
var dropdown_pin_TX = this.getFieldValue("ultrasonic_echo");
|
var dropdown_pin_TX = this.getFieldValue("ultrasonic_echo");
|
||||||
var port = this.getFieldValue("port");
|
var port = this.getFieldValue("port");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
var maxDistance = this.getFieldValue("maxDistance");
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
Blockly.Arduino.definitions_["var_ultrasonic" + port] =
|
Blockly.Arduino.libraries_["library_newPing"] = `#include <NewPing.h>`;
|
||||||
"Ultrasonic Ultrasonic" +
|
Blockly.Arduino.variables_["define_newPingVariables" + port] = `
|
||||||
port +
|
#define TRIGGER_PIN_${port} ${dropdown_pin_RX}
|
||||||
"(" +
|
#define ECHO_PIN_${port} ${dropdown_pin_TX}
|
||||||
dropdown_pin_RX +
|
#define MAX_DISTANCE_${port} ${maxDistance}
|
||||||
"," +
|
`;
|
||||||
dropdown_pin_TX +
|
Blockly.Arduino.definitions_[
|
||||||
");";
|
"define_newPing" + port
|
||||||
|
] = `NewPing sonar${port}(TRIGGER_PIN_${port}, ECHO_PIN_${port}, MAX_DISTANCE_${port})`;
|
||||||
var code;
|
var code;
|
||||||
code = "Ultrasonic" + port + ".getDistance()";
|
code = `sonar${port}.ping_cm()`;
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -244,11 +345,37 @@ Blockly.Arduino.sensebox_sensor_ultrasonic_ranger = function () {
|
|||||||
|
|
||||||
Blockly.Arduino.sensebox_sensor_sound = function () {
|
Blockly.Arduino.sensebox_sensor_sound = function () {
|
||||||
var dropdown_pin = this.getFieldValue("PIN");
|
var dropdown_pin = this.getFieldValue("PIN");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.codeFunctions_["define_sound"] = `
|
||||||
Blockly.Arduino.definitions_["define_microphone"] =
|
float getSoundValue(int pin) {
|
||||||
"Microphone microphone(" + dropdown_pin + ");";
|
unsigned long start = millis(); // Start des Messintervalls
|
||||||
var code = "microphone.getValue()";
|
unsigned int peakToPeak = 0; // Abstand von maximalem zu minimalem Amplitudenausschlag
|
||||||
|
unsigned int signalMax = 0;
|
||||||
|
unsigned int signalMin = 1023;
|
||||||
|
const int sampleTime = 100;
|
||||||
|
unsigned int micValue;
|
||||||
|
|
||||||
|
// Sammle Daten für 100 Millisekunden
|
||||||
|
while (millis() - start < sampleTime)
|
||||||
|
{
|
||||||
|
micValue = analogRead(pin); // Messe den aktuellen Wert
|
||||||
|
if (micValue < 1023) // sortiere Fehlmessungen aus, deren Werte über dem max Wert 1024 liegen
|
||||||
|
{
|
||||||
|
if (micValue > signalMax)
|
||||||
|
{
|
||||||
|
signalMax = micValue; // speichere den maximal gemessenen Wert
|
||||||
|
}
|
||||||
|
else if (micValue < signalMin)
|
||||||
|
{
|
||||||
|
signalMin = micValue; // speichere den minimal gemessenen Wert
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
peakToPeak = signalMax - signalMin; // max - min = Abstand von maximalem zu minimalem Amplitudenausschlag
|
||||||
|
double volts = (peakToPeak * 5.0) / 1023; // wandle in Volt um
|
||||||
|
return volts;
|
||||||
|
}`;
|
||||||
|
var code = "getSoundValue(" + dropdown_pin + ")";
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -260,12 +387,14 @@ Blockly.Arduino.sensebox_sensor_sound = function () {
|
|||||||
Blockly.Arduino.sensebox_button = function () {
|
Blockly.Arduino.sensebox_button = function () {
|
||||||
var dropdown_pin = this.getFieldValue("PIN");
|
var dropdown_pin = this.getFieldValue("PIN");
|
||||||
var dropown_function = this.getFieldValue("FUNCTION");
|
var dropown_function = this.getFieldValue("FUNCTION");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_jcButtons"] = `#include <JC_Button.h>`;
|
||||||
Blockly.Arduino.definitions_["define_button" + dropdown_pin + ""] =
|
Blockly.Arduino.definitions_["define_button" + dropdown_pin + ""] =
|
||||||
"Button button_" + dropdown_pin + "(" + dropdown_pin + ");";
|
"Button button_" + dropdown_pin + "(" + dropdown_pin + ");";
|
||||||
Blockly.Arduino.setupCode_["setup_button" + dropdown_pin + ""] =
|
Blockly.Arduino.setupCode_["setup_button" + dropdown_pin + ""] =
|
||||||
"button_" + dropdown_pin + ".begin();";
|
"button_" + dropdown_pin + ".begin();";
|
||||||
|
Blockly.Arduino.loopCodeOnce_["loop_button" + dropdown_pin + ""] =
|
||||||
|
"button_" + dropdown_pin + ".read();";
|
||||||
var code = "";
|
var code = "";
|
||||||
if (dropown_function === "isPressed") {
|
if (dropown_function === "isPressed") {
|
||||||
code = "button_" + dropdown_pin + ".isPressed()";
|
code = "button_" + dropdown_pin + ".isPressed()";
|
||||||
@ -273,6 +402,9 @@ Blockly.Arduino.sensebox_button = function () {
|
|||||||
code = "button_" + dropdown_pin + ".getSwitch()";
|
code = "button_" + dropdown_pin + ".getSwitch()";
|
||||||
} else if (dropown_function === "wasPressed") {
|
} else if (dropown_function === "wasPressed") {
|
||||||
code = "button_" + dropdown_pin + ".wasPressed()";
|
code = "button_" + dropdown_pin + ".wasPressed()";
|
||||||
|
} else if (dropown_function === "longPress") {
|
||||||
|
var time = this.getFieldValue("time");
|
||||||
|
code = "button_" + dropdown_pin + ".pressedFor(" + time + ")";
|
||||||
}
|
}
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
@ -284,10 +416,9 @@ Blockly.Arduino.sensebox_button = function () {
|
|||||||
|
|
||||||
Blockly.Arduino.sensebox_scd30 = function () {
|
Blockly.Arduino.sensebox_scd30 = function () {
|
||||||
var dropdown = this.getFieldValue("dropdown");
|
var dropdown = this.getFieldValue("dropdown");
|
||||||
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
Blockly.Arduino.libraries_["scd30_library"] =
|
Blockly.Arduino.libraries_["scd30_library"] =
|
||||||
'#include "SparkFun_SCD30_Arduino_Library.h"';
|
'#include "SparkFun_SCD30_Arduino_Library.h"';
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
|
||||||
'#include "SenseBoxMCU.h"';
|
|
||||||
Blockly.Arduino.definitions_["SCD30"] = "SCD30 airSensor;";
|
Blockly.Arduino.definitions_["SCD30"] = "SCD30 airSensor;";
|
||||||
Blockly.Arduino.setupCode_["init_scd30"] = ` Wire.begin();
|
Blockly.Arduino.setupCode_["init_scd30"] = ` Wire.begin();
|
||||||
if (airSensor.begin() == false)
|
if (airSensor.begin() == false)
|
||||||
@ -319,11 +450,10 @@ Blockly.Arduino.sensebox_scd30 = function () {
|
|||||||
|
|
||||||
Blockly.Arduino.sensebox_gps = function () {
|
Blockly.Arduino.sensebox_gps = function () {
|
||||||
var dropdown = this.getFieldValue("dropdown");
|
var dropdown = this.getFieldValue("dropdown");
|
||||||
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
Blockly.Arduino.libraries_["gps_library"] =
|
Blockly.Arduino.libraries_["gps_library"] =
|
||||||
"#include <SparkFun_u-blox_GNSS_Arduino_Library.h>";
|
"#include <SparkFun_u-blox_GNSS_Arduino_Library.h>";
|
||||||
Blockly.Arduino.libraries_["library_wire"] = "#include <Wire.h>";
|
Blockly.Arduino.libraries_["library_wire"] = "#include <Wire.h>";
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
|
||||||
'#include "SenseBoxMCU.h"';
|
|
||||||
Blockly.Arduino.definitions_["GPS"] = "SFE_UBLOX_GNSS myGNSS;";
|
Blockly.Arduino.definitions_["GPS"] = "SFE_UBLOX_GNSS myGNSS;";
|
||||||
Blockly.Arduino.setupCode_["init_gps"] = ` Wire.begin();
|
Blockly.Arduino.setupCode_["init_gps"] = ` Wire.begin();
|
||||||
|
|
||||||
@ -383,6 +513,7 @@ return tsBuffer;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_sensor_truebner_smt50 = function () {
|
Blockly.Arduino.sensebox_sensor_truebner_smt50 = function () {
|
||||||
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
var dropdown_port = this.getFieldValue("Port");
|
var dropdown_port = this.getFieldValue("Port");
|
||||||
var dropdown_value = this.getFieldValue("value");
|
var dropdown_value = this.getFieldValue("value");
|
||||||
var dropdown_pin = 1;
|
var dropdown_pin = 1;
|
||||||
@ -435,6 +566,7 @@ Blockly.Arduino.sensebox_sensor_watertemperature = function () {
|
|||||||
if (dropdown_port === "C") {
|
if (dropdown_port === "C") {
|
||||||
dropdown_pin = 5;
|
dropdown_pin = 5;
|
||||||
}
|
}
|
||||||
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
Blockly.Arduino.libraries_["library_oneWire"] = '#include "OneWire.h"';
|
Blockly.Arduino.libraries_["library_oneWire"] = '#include "OneWire.h"';
|
||||||
Blockly.Arduino.libraries_["library_oneDallasTemperature"] =
|
Blockly.Arduino.libraries_["library_oneDallasTemperature"] =
|
||||||
'#include "DallasTemperature.h"';
|
'#include "DallasTemperature.h"';
|
||||||
@ -488,6 +620,7 @@ float getWindspeed(){
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_soundsensor_dfrobot = function () {
|
Blockly.Arduino.sensebox_soundsensor_dfrobot = function () {
|
||||||
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
var dropdown_port = this.getFieldValue("Port");
|
var dropdown_port = this.getFieldValue("Port");
|
||||||
var dropdown_pin = 1;
|
var dropdown_pin = 1;
|
||||||
if (dropdown_port === "A") {
|
if (dropdown_port === "A") {
|
||||||
@ -511,3 +644,42 @@ float getSoundValue(){
|
|||||||
var code = "getSoundValue()";
|
var code = "getSoundValue()";
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Infineon DPS310 Pressure Sensor
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
Blockly.Arduino.sensebox_sensor_dps310 = function () {
|
||||||
|
var dropdown_name = this.getFieldValue("NAME");
|
||||||
|
var code = "";
|
||||||
|
var referencePressure = this.getFieldValue("referencePressure");
|
||||||
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
|
Blockly.Arduino.libraries_[
|
||||||
|
"adafruit_dps310"
|
||||||
|
] = `#include <Adafruit_DPS310.h>`;
|
||||||
|
Blockly.Arduino.definitions_["define_dps"] = "Adafruit_DPS310 dps;";
|
||||||
|
Blockly.Arduino.setupCode_["dps_begin"] = "dps.begin_I2C(0x76);";
|
||||||
|
Blockly.Arduino.setupCode_["dps_configuration"] = `
|
||||||
|
dps.configurePressure(DPS310_64HZ, DPS310_64SAMPLES);
|
||||||
|
dps.configureTemperature(DPS310_64HZ, DPS310_64SAMPLES);
|
||||||
|
`;
|
||||||
|
Blockly.Arduino.loopCodeOnce_["dps_events"] =
|
||||||
|
"sensors_event_t temp_event, pressure_event;";
|
||||||
|
Blockly.Arduino.loopCodeOnce_["dps_getEvents"] =
|
||||||
|
"dps.getEvents(&temp_event, &pressure_event);";
|
||||||
|
switch (dropdown_name) {
|
||||||
|
case "Temperature":
|
||||||
|
code = "temp_event.temperature";
|
||||||
|
break;
|
||||||
|
case "Pressure":
|
||||||
|
code = "pressure_event.pressure";
|
||||||
|
break;
|
||||||
|
case "Altitude":
|
||||||
|
code = "dps.readAltitude(" + referencePressure + ")";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
code = "";
|
||||||
|
}
|
||||||
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
|
};
|
||||||
|
@ -1,29 +1,40 @@
|
|||||||
import * as Blockly from 'blockly/core';
|
import * as Blockly from "blockly/core";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Telegram Bot by re:edu
|
* Telegram Bot by re:edu
|
||||||
*/
|
*/
|
||||||
Blockly.Arduino.sensebox_telegram = function (Block) {
|
Blockly.Arduino.sensebox_telegram = function (Block) {
|
||||||
let token = Block.getFieldValue('telegram_token');
|
let token = Block.getFieldValue("telegram_token");
|
||||||
Blockly['Arduino'].libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
Blockly['Arduino'].libraries_['library_telegram'] = `#include <UniversalTelegramBot.h>`
|
Blockly["Arduino"].libraries_[
|
||||||
Blockly['Arduino'].functionNames_['WiFiSSLClient'] = 'WiFiSSLClient client;';
|
"library_telegram"
|
||||||
Blockly['Arduino'].functionNames_['telegram_objects'] = `#define BOTtoken "${token}" // your Bot Token (Get from Botfather)
|
] = `#include <UniversalTelegramBot.h>`;
|
||||||
|
Blockly["Arduino"].functionNames_["WiFiSSLClient"] = "WiFiSSLClient client;";
|
||||||
|
Blockly["Arduino"].functionNames_[
|
||||||
|
"telegram_objects"
|
||||||
|
] = `#define BOTtoken "${token}" // your Bot Token (Get from Botfather)
|
||||||
|
|
||||||
UniversalTelegramBot bot(BOTtoken, client);`
|
UniversalTelegramBot bot(BOTtoken, client);`;
|
||||||
|
|
||||||
let code = '';
|
let code = "";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_telegram_do = function (block) {
|
Blockly.Arduino.sensebox_telegram_do = function (block) {
|
||||||
var messageProcessing = Blockly.Arduino.statementToCode(block, 'telegram_do', Blockly.Arduino.ORDER_ATOMIC);
|
var messageProcessing = Blockly.Arduino.statementToCode(
|
||||||
|
block,
|
||||||
|
"telegram_do",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
);
|
||||||
|
|
||||||
Blockly.Arduino.definitions_['telegram_variables'] = `int Bot_mtbs = 1000; //mean time between scan messages
|
Blockly.Arduino.definitions_[
|
||||||
long Bot_lasttime; //last time messages' scan has been done`
|
"telegram_variables"
|
||||||
|
] = `int Bot_mtbs = 1000; //mean time between scan messages
|
||||||
|
long Bot_lasttime; //last time messages' scan has been done`;
|
||||||
|
|
||||||
Blockly.Arduino.loopCodeOnce_['sensebox_telegram_loop'] = `if (millis() > Bot_lasttime + Bot_mtbs) {
|
Blockly.Arduino.loopCodeOnce_[
|
||||||
|
"sensebox_telegram_loop"
|
||||||
|
] = `if (millis() > Bot_lasttime + Bot_mtbs) {
|
||||||
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
||||||
while(numNewMessages) {
|
while(numNewMessages) {
|
||||||
for(int i=0; i<numNewMessages; i++) {
|
for(int i=0; i<numNewMessages; i++) {
|
||||||
@ -36,13 +47,17 @@ Blockly.Arduino.sensebox_telegram_do = function (block) {
|
|||||||
}
|
}
|
||||||
Bot_lasttime = millis();
|
Bot_lasttime = millis();
|
||||||
}`;
|
}`;
|
||||||
var code = '';
|
var code = "";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_telegram_do_on_message = function (block) {
|
Blockly.Arduino.sensebox_telegram_do_on_message = function (block) {
|
||||||
var message = this.getFieldValue('telegram_message');
|
var message = this.getFieldValue("telegram_message");
|
||||||
var stuffToDo = Blockly.Arduino.statementToCode(block, 'telegram_do_on_message', Blockly.Arduino.ORDER_ATOMIC);
|
var stuffToDo = Blockly.Arduino.statementToCode(
|
||||||
|
block,
|
||||||
|
"telegram_do_on_message",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
);
|
||||||
var code = `
|
var code = `
|
||||||
if (text == "${message}") {
|
if (text == "${message}") {
|
||||||
${stuffToDo}
|
${stuffToDo}
|
||||||
@ -51,7 +66,12 @@ Blockly.Arduino.sensebox_telegram_do_on_message = function (block) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_telegram_send = function (block) {
|
Blockly.Arduino.sensebox_telegram_send = function (block) {
|
||||||
var textToSend = Blockly.Arduino.valueToCode(this, 'telegram_text_to_send', Blockly.Arduino.ORDER_ATOMIC) || '"Keine Eingabe"';
|
var textToSend =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
this,
|
||||||
|
"telegram_text_to_send",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || '"Keine Eingabe"';
|
||||||
var code = `bot.sendMessage(chat_id, String(${textToSend}), "");\n`;
|
var code = `bot.sendMessage(chat_id, String(${textToSend}), "");\n`;
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
@ -4,30 +4,62 @@ import Blockly from "blockly";
|
|||||||
Blockly.Arduino.sensebox_wifi = function (block) {
|
Blockly.Arduino.sensebox_wifi = function (block) {
|
||||||
var pw = this.getFieldValue("Password");
|
var pw = this.getFieldValue("Password");
|
||||||
var ssid = this.getFieldValue("SSID");
|
var ssid = this.getFieldValue("SSID");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_WiFi"] = "#include <WiFi101.h>";
|
||||||
Blockly.Arduino.definitions_["define_network"] = "Bee* b = new Bee();";
|
Blockly.Arduino.variables_["ssid"] = `char ssid[] = "${ssid}";`;
|
||||||
|
Blockly.Arduino.variables_["pass"] = `char pass[] = "${pw}";`;
|
||||||
|
Blockly.Arduino.variables_["wifi_Status"] = "int status = WL_IDLE_STATUS;";
|
||||||
if (pw === "") {
|
if (pw === "") {
|
||||||
Blockly.Arduino.setupCode_["sensebox_network"] =
|
Blockly.Arduino.setupCode_["wifi_begin"] = `
|
||||||
'b->connectToWifi("' + ssid + '");\ndelay(1000);';
|
if (WiFi.status() == WL_NO_SHIELD) {
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
while (status != WL_CONNECTED) {
|
||||||
|
status = WiFi.begin(ssid);
|
||||||
|
delay(5000);
|
||||||
|
}
|
||||||
|
`;
|
||||||
} else
|
} else
|
||||||
Blockly.Arduino.setupCode_["sensebox_network"] =
|
Blockly.Arduino.setupCode_["wifi_begin"] = `
|
||||||
'b->connectToWifi("' + ssid + '","' + pw + '");\ndelay(1000);';
|
if (WiFi.status() == WL_NO_SHIELD) {
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
while (status != WL_CONNECTED) {
|
||||||
|
status = WiFi.begin(ssid, pass);
|
||||||
|
delay(5000);
|
||||||
|
}
|
||||||
|
`;
|
||||||
var code = "";
|
var code = "";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Blockly.Arduino.sensebox_wifi_status = function () {
|
||||||
|
var code = "WiFi.status()";
|
||||||
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Arduino.sensebox_wifi_rssi = function () {
|
||||||
|
var code = "WiFi.RSSI();";
|
||||||
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Arduino.sensebox_get_ip = function () {
|
||||||
|
Blockly.Arduino.definitions_["define_ipadress"] = "IPAddress ip;";
|
||||||
|
Blockly.Arduino.setupCode_["sensebox_get_ip"] = " ip = WiFi.localIP(ip);";
|
||||||
|
var code = "";
|
||||||
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_startap = function (block) {
|
Blockly.Arduino.sensebox_startap = function (block) {
|
||||||
var ssid = this.getFieldValue("SSID");
|
var ssid = this.getFieldValue("SSID");
|
||||||
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
|
||||||
'#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_WiFi"] = "#include <WiFi101.h>";
|
||||||
Blockly.Arduino.definitions_["define_network"] = "Bee* b = new Bee();";
|
Blockly.Arduino.setupCode_["wifi_startAP"] = `WiFi.beginAP(${ssid});`;
|
||||||
Blockly.Arduino.setupCode_["sensebox_network"] =
|
|
||||||
'b->startAP("' + ssid + '");';
|
|
||||||
var code = "";
|
var code = "";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_ethernet = function () {
|
Blockly.Arduino.sensebox_ethernet = function () {
|
||||||
var ip = this.getFieldValue("ip");
|
var ip = this.getFieldValue("ip");
|
||||||
var gateway = this.getFieldValue("gateway");
|
var gateway = this.getFieldValue("gateway");
|
||||||
@ -79,3 +111,4 @@ Blockly.Arduino.sensebox_ethernetIp = function () {
|
|||||||
var code = "Ethernet.localIP()";
|
var code = "Ethernet.localIP()";
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
35
src/components/Blockly/generator/serial.js
Normal file
35
src/components/Blockly/generator/serial.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import * as Blockly from "blockly/core";
|
||||||
|
|
||||||
|
Blockly.Arduino["print_serial_monitor"] = function (block) {
|
||||||
|
var serialId = block.getFieldValue("SERIAL_ID");
|
||||||
|
var content =
|
||||||
|
Blockly.Arduino.valueToCode(
|
||||||
|
block,
|
||||||
|
"CONTENT",
|
||||||
|
Blockly.Arduino.ORDER_ATOMIC
|
||||||
|
) || "0";
|
||||||
|
var checkbox_name = block.getFieldValue("NEW_LINE") === "TRUE";
|
||||||
|
var code = "";
|
||||||
|
if (checkbox_name) {
|
||||||
|
code = serialId + ".println(" + content + ");\n";
|
||||||
|
} else {
|
||||||
|
code = serialId + ".print(" + content + ");\n";
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code generator for block for setting the serial com speed.
|
||||||
|
* Arduino code: setup{ Serial.begin(X); }
|
||||||
|
* @param {!Blockly.Block} block Block to generate the code from.
|
||||||
|
* @return {array} Completed code.
|
||||||
|
*/
|
||||||
|
Blockly.Arduino["init_serial_monitor"] = function (block) {
|
||||||
|
var serialId = block.getFieldValue("SERIAL_ID");
|
||||||
|
var serialSpeed = block.getFieldValue("SPEED");
|
||||||
|
Blockly.Arduino.setupCode_[
|
||||||
|
"init_serial"
|
||||||
|
] = `${serialId}.begin(${serialSpeed});`;
|
||||||
|
var code = "";
|
||||||
|
return code;
|
||||||
|
};
|
@ -1,31 +1,35 @@
|
|||||||
import Blockly from 'blockly';
|
import Blockly from "blockly";
|
||||||
/**
|
/**
|
||||||
* Webserver Blocks by Lucas Steinmann
|
* Webserver Blocks by Lucas Steinmann
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_initialize_http_server = function (block) {
|
Blockly.Arduino.sensebox_initialize_http_server = function (block) {
|
||||||
var box_id = this.getFieldValue('Port');
|
var box_id = this.getFieldValue("Port");
|
||||||
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
|
Blockly.Arduino.libraries_["library_senseBoxMCU"] =
|
||||||
Blockly.Arduino.codeFunctions_['define_wifi_server'] = 'WiFiServer server(' + box_id + ');';
|
'#include "SenseBoxMCU.h"';
|
||||||
Blockly.Arduino.setupCode_['sensebox_wifi_server_beging'] = 'server.begin();';
|
Blockly.Arduino.libraries_["library_http"] = "#include .h>";
|
||||||
return '';
|
|
||||||
|
Blockly.Arduino.codeFunctions_["define_wifi_server"] =
|
||||||
|
"WiFiServer server(" + box_id + ");";
|
||||||
|
Blockly.Arduino.setupCode_["sensebox_wifi_server_beging"] = "server.begin();";
|
||||||
|
return "";
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_http_on_client_connect = function (block) {
|
Blockly.Arduino.sensebox_http_on_client_connect = function (block) {
|
||||||
var onConnect = Blockly.Arduino.statementToCode(block, 'ON_CONNECT');
|
var onConnect = Blockly.Arduino.statementToCode(block, "ON_CONNECT");
|
||||||
var code = '';
|
var code = "";
|
||||||
code += 'WiFiClient client = server.available();\n';
|
code += "WiFiClient client = server.available();\n";
|
||||||
code += 'if (client && client.available()) {\n';
|
code += "if (client && client.available()) {\n";
|
||||||
code += ' String request_string = listenClient(client);\n';
|
code += " String request_string = listenClient(client);\n";
|
||||||
code += ' Request request;\n';
|
code += " Request request;\n";
|
||||||
code += ' if (parseRequestSafe(request_string, request)) {\n';
|
code += " if (parseRequestSafe(request_string, request)) {\n";
|
||||||
code += onConnect;
|
code += onConnect;
|
||||||
code += ' }\n';
|
code += " }\n";
|
||||||
code += ' delay(1);\n';
|
code += " delay(1);\n";
|
||||||
code += ' client.stop();\n';
|
code += " client.stop();\n";
|
||||||
code += ' delay(1);\n';
|
code += " delay(1);\n";
|
||||||
code += '}\n';
|
code += "}\n";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -34,7 +38,6 @@ Blockly.Arduino.sensebox_http_method = function (block) {
|
|||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_http_uri = function (block) {
|
Blockly.Arduino.sensebox_http_uri = function (block) {
|
||||||
var code = "request.uri";
|
var code = "request.uri";
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
@ -51,64 +54,81 @@ Blockly.Arduino.sensebox_http_user_agent = function (block) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_generate_html_doc = function (block) {
|
Blockly.Arduino.sensebox_generate_html_doc = function (block) {
|
||||||
var header = Blockly.Arduino.valueToCode(block, 'HEADER', Blockly.Arduino.ORDER_NONE) || '""';
|
var header =
|
||||||
var body = Blockly.Arduino.valueToCode(block, 'BODY', Blockly.Arduino.ORDER_NONE) || '""';
|
Blockly.Arduino.valueToCode(block, "HEADER", Blockly.Arduino.ORDER_NONE) ||
|
||||||
var code = 'buildHTML(' + header + ', ' + body + ')';
|
'""';
|
||||||
|
var body =
|
||||||
|
Blockly.Arduino.valueToCode(block, "BODY", Blockly.Arduino.ORDER_NONE) ||
|
||||||
|
'""';
|
||||||
|
var code = "buildHTML(" + header + ", " + body + ")";
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_generate_http_succesful_response = function (block) {
|
Blockly.Arduino.sensebox_generate_http_succesful_response = function (block) {
|
||||||
var content = Blockly.Arduino.valueToCode(block, 'CONTENT', Blockly.Arduino.ORDER_NONE) || '""';
|
var content =
|
||||||
var code = 'client.println(buildSuccessfulResponse(request, ' + content + '));\n';
|
Blockly.Arduino.valueToCode(block, "CONTENT", Blockly.Arduino.ORDER_NONE) ||
|
||||||
|
'""';
|
||||||
|
var code =
|
||||||
|
"client.println(buildSuccessfulResponse(request, " + content + "));\n";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_generate_http_not_found_response = function (block) {
|
Blockly.Arduino.sensebox_generate_http_not_found_response = function (block) {
|
||||||
var code = 'client.println(buildNotFoundResponse(request));\n';
|
var code = "client.println(buildNotFoundResponse(request));\n";
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_ip_address = function (block) {
|
Blockly.Arduino.sensebox_ip_address = function (block) {
|
||||||
var code = "b->getIpAddress()";
|
var code = "b->getIpAddress()";
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_general_html_tag = function (block) {
|
Blockly.Arduino.sensebox_general_html_tag = function (block) {
|
||||||
var tag = this.getFieldValue('TAG');
|
var tag = this.getFieldValue("TAG");
|
||||||
var code = 'buildTag("' + tag + '",';
|
var code = 'buildTag("' + tag + '",';
|
||||||
var n = 0;
|
var n = 0;
|
||||||
var branch = Blockly.Arduino.valueToCode(block, 'DO' + n, Blockly.Arduino.ORDER_NONE);
|
var branch = Blockly.Arduino.valueToCode(
|
||||||
|
block,
|
||||||
|
"DO" + n,
|
||||||
|
Blockly.Arduino.ORDER_NONE
|
||||||
|
);
|
||||||
if (branch.length > 0) {
|
if (branch.length > 0) {
|
||||||
code += '\n ' + branch;
|
code += "\n " + branch;
|
||||||
} else {
|
} else {
|
||||||
code += '""';
|
code += '""';
|
||||||
}
|
}
|
||||||
for (n = 1; n <= block.additionalChildCount_; n++) {
|
for (n = 1; n <= block.additionalChildCount_; n++) {
|
||||||
branch = Blockly.Arduino.valueToCode(block, 'DO' + n, Blockly.Arduino.ORDER_NONE);
|
branch = Blockly.Arduino.valueToCode(
|
||||||
code += ' +' + branch;
|
block,
|
||||||
|
"DO" + n,
|
||||||
|
Blockly.Arduino.ORDER_NONE
|
||||||
|
);
|
||||||
|
code += " +" + branch;
|
||||||
}
|
}
|
||||||
return [code + ')', Blockly.Arduino.ORDER_ATOMIC];
|
return [code + ")", Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_web_readHTML = function (block) {
|
Blockly.Arduino.sensebox_web_readHTML = function (block) {
|
||||||
var filename = this.getFieldValue('FILENAME');
|
var filename = this.getFieldValue("FILENAME");
|
||||||
Blockly.Arduino.libraries_['library_spi'] = '#include <SPI.h>';
|
Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
|
||||||
Blockly.Arduino.libraries_['library_sd'] = '#include <SD.h>';
|
Blockly.Arduino.libraries_["library_sd"] = "#include <SD.h>";
|
||||||
Blockly.Arduino.codeFunctions_['define_sd' + filename] = 'File webFile;';
|
Blockly.Arduino.codeFunctions_["define_sd" + filename] = "File webFile;";
|
||||||
Blockly.Arduino.setupCode_['sensebox_sd'] = 'SD.begin(28);';
|
Blockly.Arduino.setupCode_["sensebox_sd"] = "SD.begin(28);";
|
||||||
var func = [
|
var func = [
|
||||||
'String generateHTML(){',
|
"String generateHTML(){",
|
||||||
' webFile = SD.open("' + filename + '", FILE_READ);',
|
' webFile = SD.open("' + filename + '", FILE_READ);',
|
||||||
' String finalString ="";',
|
' String finalString ="";',
|
||||||
' while (webFile.available())',
|
" while (webFile.available())",
|
||||||
' {',
|
" {",
|
||||||
' finalString+=(char)webFile.read();',
|
" finalString+=(char)webFile.read();",
|
||||||
' }',
|
" }",
|
||||||
' return finalString;',
|
" return finalString;",
|
||||||
'}'];
|
"}",
|
||||||
|
];
|
||||||
var functionName = Blockly.Arduino.addFunction(
|
var functionName = Blockly.Arduino.addFunction(
|
||||||
'generateHTML', func.join('\n'));
|
"generateHTML",
|
||||||
var code = functionName + '()';
|
func.join("\n")
|
||||||
|
);
|
||||||
|
var code = functionName + "()";
|
||||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||||
};
|
};
|
@ -11,6 +11,7 @@ const colours = {
|
|||||||
audio: 250,
|
audio: 250,
|
||||||
arrays: 33,
|
arrays: 33,
|
||||||
mqtt: 90,
|
mqtt: 90,
|
||||||
|
serial: 230,
|
||||||
webserver: 40,
|
webserver: 40,
|
||||||
phyphox: 25,
|
phyphox: 25,
|
||||||
};
|
};
|
||||||
|
@ -9,19 +9,29 @@ export const SENSORS = {
|
|||||||
* BMP280
|
* BMP280
|
||||||
*/
|
*/
|
||||||
senseBox_pressure_sensor: "Luftdruck-/Temperatursensor (BMP280)",
|
senseBox_pressure_sensor: "Luftdruck-/Temperatursensor (BMP280)",
|
||||||
senseBox_pressure: "Luftdruck in Pa",
|
senseBox_pressure: "Luftdruck in hPa",
|
||||||
senseBox_pressure_dimension: "Luftdruck in Pa",
|
senseBox_pressure_dimension: "Luftdruck in hPa",
|
||||||
senseBox_pressure_tip: "Schließe den Sensor an einen der 5 **I2C-Anschlüsse** an. Der Sensor gibt dir den Messwert für den Luftdruck in Pa. Um die korrekte Höhe über NN zu berechnen benötigt der Sensor einen aktuellen Referenzwert.",
|
senseBox_pressure_tooltip:
|
||||||
|
"Schließe den Sensor an einen der 5 **I2C-Anschlüsse** an. Der Sensor gibt dir den Messwert für den Luftdruck in hPa. Um die korrekte Höhe über NN zu berechnen benötigt der Sensor einen aktuellen Referenzwert.",
|
||||||
senseBox_pressure_referencePressure: "Luftdruck auf NN",
|
senseBox_pressure_referencePressure: "Luftdruck auf NN",
|
||||||
senseBox_pressure_referencePressure_dim: "hPa",
|
senseBox_pressure_referencePressure_dim: "hPa",
|
||||||
senseBox_pressure_helpurl: "",
|
senseBox_pressure_helpurl:
|
||||||
|
"https://docs.sensebox.de/hardware/sensoren-luftdruck-temperatur/",
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DPS310
|
||||||
|
*/
|
||||||
|
senseBox_sensor_dps310: "Luftdruck-/Temperatursensor (DPS310)",
|
||||||
|
senseBox_sensor_dps310_tooltip:
|
||||||
|
"Schließe den Sensor an einen der 5 **I2C-Anschlüsse** an. Der Sensor gibt dir den Messwert für den Luftdruck in hPa. Um die korrekte Höhe über NN zu berechnen benötigt der Sensor einen aktuellen Referenzwert.",
|
||||||
|
senseBox_sensor_dps310_helpurl: "",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mikro
|
* Mikro
|
||||||
*/
|
*/
|
||||||
senseBox_sound: "Mikrofon",
|
senseBox_sound: "Mikrofon",
|
||||||
senseBox_sound_tip: "Schließe den Sensor über das Breadbord an einen der 3 **analog/digital** Ports an. Gibt den Messwert des Mikrofons in Volt zurück",
|
senseBox_sound_tip:
|
||||||
|
"Schließe den Sensor über das Breadbord an einen der 3 **analog/digital** Ports an. Gibt den Messwert des Mikrofons in Volt zurück",
|
||||||
senseBox_sound_helpurl: "https://docs.sensebox.de/hardware/sensoren-mikro/",
|
senseBox_sound_helpurl: "https://docs.sensebox.de/hardware/sensoren-mikro/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,8 +39,10 @@ export const SENSORS = {
|
|||||||
*/
|
*/
|
||||||
senseBox_temp: "Temperatur in °C",
|
senseBox_temp: "Temperatur in °C",
|
||||||
senseBox_temp_hum: "Temperatur-/Luftfeuchtigkeitssensor (HDC1080)",
|
senseBox_temp_hum: "Temperatur-/Luftfeuchtigkeitssensor (HDC1080)",
|
||||||
senseBox_temp_hum_tooltip: "Dieser Block gibt dir die Messwerte des Temperatur- und Luftfeuchtigkeitssensor zurück. Schließe den Sensor an einen der 5 I2C Anschlüsse an. Messwert wird mit 2 Nachkommastellen ausgegeben.",
|
senseBox_temp_hum_tooltip:
|
||||||
senseBox_temp_hum_helpurl: "https://docs.sensebox.de/hardware/sensoren-temperatur-luftfeuchte/",
|
"Dieser Block gibt dir die Messwerte des Temperatur- und Luftfeuchtigkeitssensor zurück. Schließe den Sensor an einen der 5 I2C Anschlüsse an. Messwert wird mit 2 Nachkommastellen ausgegeben.",
|
||||||
|
senseBox_temp_hum_helpurl:
|
||||||
|
"https://docs.sensebox.de/hardware/sensoren-temperatur-luftfeuchte/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ultraschalldistanzsensor
|
* Ultraschalldistanzsensor
|
||||||
@ -39,23 +51,28 @@ export const SENSORS = {
|
|||||||
senseBox_ultrasonic: "Ultraschall-Abstandssensor an Port",
|
senseBox_ultrasonic: "Ultraschall-Abstandssensor an Port",
|
||||||
senseBox_ultrasonic_trigger: "Trigger",
|
senseBox_ultrasonic_trigger: "Trigger",
|
||||||
senseBox_ultrasonic_echo: "Echo",
|
senseBox_ultrasonic_echo: "Echo",
|
||||||
|
senseBox_ultrasonic_maxDistance: "Maximale Distanz",
|
||||||
senseBox_ultrasonic_port_A: "A",
|
senseBox_ultrasonic_port_A: "A",
|
||||||
senseBox_ultrasonic_port_B: "B",
|
senseBox_ultrasonic_port_B: "B",
|
||||||
senseBox_ultrasonic_port_C: "C",
|
senseBox_ultrasonic_port_C: "C",
|
||||||
senseBox_ultrasonic_tooltip: `Misst die Distanz mithilfe von Ultraschall in cm. Schließe den Sensor an einen der drei Digital/Analog Ports an:
|
senseBox_ultrasonic_tooltip: `Misst die Distanz mithilfe von Ultraschall in cm. Schließe den Sensor an einen der drei Digital/Analog Ports an:
|
||||||
|
|
||||||
- Trigger: Grünes Kabel
|
- Trigger: Grünes Kabel
|
||||||
- Echo: gelbes Kabel`,
|
- Echo: gelbes Kabel
|
||||||
senseBox_ultrasonic_helpurl: "https://docs.sensebox.de/hardware/sensoren-distanz/",
|
Wenn die maximale Distanz überschritten wird, wird ein Wert von **O** ausgegeben`,
|
||||||
|
senseBox_ultrasonic_helpurl:
|
||||||
|
"https://docs.sensebox.de/hardware/sensoren-distanz/",
|
||||||
/**
|
/**
|
||||||
* UV and Lightsensor
|
* UV and Lightsensor
|
||||||
*/
|
*/
|
||||||
senseBox_value: "Messwert:",
|
senseBox_value: "Messwert:",
|
||||||
senseBox_uv_light: "Helligkeit-/UV-Sensor",
|
senseBox_uv_light: "Helligkeit-/UV-Sensor",
|
||||||
senseBox_uv_light_tooltip: "Sensor misst UV-Licht oder die Helligkeit. Die Helligkeit wird als **Ganzezahl** in Lux ausgegeben. Die UV-Intensität als **Kommazahl** in µW/cm².",
|
senseBox_uv_light_tooltip:
|
||||||
|
"Sensor misst UV-Licht oder die Helligkeit. Die Helligkeit wird als **Ganzezahl** in Lux ausgegeben. Die UV-Intensität als **Kommazahl** in µW/cm².",
|
||||||
senseBox_uv: "UV-Intensität in µW/cm²",
|
senseBox_uv: "UV-Intensität in µW/cm²",
|
||||||
senseBox_light: "Beleuchtungsstärke in Lux",
|
senseBox_light: "Beleuchtungsstärke in Lux",
|
||||||
senseBox_uv_light_helpurl: "https://docs.sensebox.de/hardware/sensoren-helligkeit-uv/",
|
senseBox_uv_light_helpurl:
|
||||||
|
"https://docs.sensebox.de/hardware/sensoren-helligkeit-uv/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BMX055
|
* BMX055
|
||||||
@ -82,7 +99,6 @@ export const SENSORS = {
|
|||||||
senseBox_bmx055_accelerometer_tooltip: `Dieser Block gibt dir den Messwert des Beschleunigungssensors der direkt auf der senseBox MCU aufgelötet ist. Im Dropdown Menü kannst du die Richtung und den Messbereich auswählen.`,
|
senseBox_bmx055_accelerometer_tooltip: `Dieser Block gibt dir den Messwert des Beschleunigungssensors der direkt auf der senseBox MCU aufgelötet ist. Im Dropdown Menü kannst du die Richtung und den Messbereich auswählen.`,
|
||||||
senseBox_bmx055_helpurl: "",
|
senseBox_bmx055_helpurl: "",
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* GPS
|
* GPS
|
||||||
@ -112,8 +128,10 @@ export const SENSORS = {
|
|||||||
* Soundsensor
|
* Soundsensor
|
||||||
*/
|
*/
|
||||||
senseBox_soundsensor_dfrobot: "Soundsensor (DF Robot)",
|
senseBox_soundsensor_dfrobot: "Soundsensor (DF Robot)",
|
||||||
senseBox_soundsensor_dfrobot_tooltip: "Schließe den Sensor an einen der 3 **digital/analog Ports** an. Der Sensor gibt dir den Messwert in dB mit einer Nachkommastelle",
|
senseBox_soundsensor_dfrobot_tooltip:
|
||||||
senseBox_soundsensor_dfrobot_helpurl: "https://docs.sensebox.de/hardware/sensoren-lautstaerke/",
|
"Schließe den Sensor an einen der 3 **digital/analog Ports** an. Der Sensor gibt dir den Messwert in dB mit einer Nachkommastelle",
|
||||||
|
senseBox_soundsensor_dfrobot_helpurl:
|
||||||
|
"https://docs.sensebox.de/hardware/sensoren-lautstaerke/",
|
||||||
/*
|
/*
|
||||||
* BME680
|
* BME680
|
||||||
*/
|
*/
|
||||||
@ -132,21 +150,24 @@ Den Status der Kalibrierung kann über den Kalibrierungswert abgelesen werden. E
|
|||||||
- IAQ Accuracy : 3 heißt Sensor erfolgreich kalibriert.
|
- IAQ Accuracy : 3 heißt Sensor erfolgreich kalibriert.
|
||||||
|
|
||||||
Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt verwendet werden.`,
|
Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt verwendet werden.`,
|
||||||
senseBox_bme680_helpurl: "https://docs.sensebox.de/hardware/sensoren-umweltsensor/",
|
senseBox_bme680_helpurl:
|
||||||
|
"https://docs.sensebox.de/hardware/sensoren-umweltsensor/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Truebner SMT50
|
* Truebner SMT50
|
||||||
*/
|
*/
|
||||||
senseBox_smt50: "Bodenfeuchte/-temperatur (SMT50)",
|
senseBox_smt50: "Bodenfeuchte/-temperatur (SMT50)",
|
||||||
senseBox_smt50_helpurl: "https://docs.sensebox.de/hardware/sensoren-truebner/",
|
senseBox_smt50_helpurl:
|
||||||
senseBox_smt50_tooltip: "Schließe den Bodenfeuchtigkeit- und Temperatursensor an einen der 3 digital/analog Ports an und wähle den Port im Block aus. Der Sensor gibt die Bodentemperatur in °C und die Bodenfeuchtigkeit in % aus.",
|
"https://docs.sensebox.de/hardware/sensoren-truebner/",
|
||||||
|
senseBox_smt50_tooltip:
|
||||||
|
"Schließe den Bodenfeuchtigkeit- und Temperatursensor an einen der 3 digital/analog Ports an und wähle den Port im Block aus. Der Sensor gibt die Bodentemperatur in °C und die Bodenfeuchtigkeit in % aus.",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SCD30 CO2 Sensor
|
* SCD30 CO2 Sensor
|
||||||
*/
|
*/
|
||||||
senseBox_scd30: "CO2 Sensor (Sensirion SCD30)",
|
senseBox_scd30: "CO2 Sensor (Sensirion SCD30)",
|
||||||
senseBox_scd_tooltip: "Schließe den Sensor an einen der 5 **I2C-Anschlüsse** an. Der Sensor gibt dir den Messwert für die CO2-Konzentration in ppm. Der Temperaturmesswert kann aufgrund der Messung direkt am Sensor um einige Grad vom realen Wert abweichen.",
|
senseBox_scd_tooltip:
|
||||||
|
"Schließe den Sensor an einen der 5 **I2C-Anschlüsse** an. Der Sensor gibt dir den Messwert für die CO2-Konzentration in ppm. Der Temperaturmesswert kann aufgrund der Messung direkt am Sensor um einige Grad vom realen Wert abweichen.",
|
||||||
senseBox_scd_co2: "CO2 in ppm",
|
senseBox_scd_co2: "CO2 in ppm",
|
||||||
senseBox_scd_helpurl: "https://docs.sensebox.de/hardware/sensoren-co2/",
|
senseBox_scd_helpurl: "https://docs.sensebox.de/hardware/sensoren-co2/",
|
||||||
|
|
||||||
@ -158,11 +179,12 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver
|
|||||||
senseBox_sds011_dimension: "in µg/m³ an",
|
senseBox_sds011_dimension: "in µg/m³ an",
|
||||||
senseBox_sds011_pm25: "PM2.5",
|
senseBox_sds011_pm25: "PM2.5",
|
||||||
senseBox_sds011_pm10: "PM10",
|
senseBox_sds011_pm10: "PM10",
|
||||||
senseBox_sds011_tooltip: "Dieser Block gibt dir den Messwert des Feinstaubsensor. Schließe den Feinstaubsensor an einen der 2 **Serial/UART** Anschlüssen an. Im Dropdown Menü zwischen PM2.5 und PM10 auswählen. Der Messwert wird dir als **Kommazahl** in µg/m3",
|
senseBox_sds011_tooltip:
|
||||||
|
"Dieser Block gibt dir den Messwert des Feinstaubsensor. Schließe den Feinstaubsensor an einen der 2 **Serial/UART** Anschlüssen an. Im Dropdown Menü zwischen PM2.5 und PM10 auswählen. Der Messwert wird dir als **Kommazahl** in µg/m3",
|
||||||
senseBox_sds011_serial1: "Serial1",
|
senseBox_sds011_serial1: "Serial1",
|
||||||
senseBox_sds011_serial2: "Serial2",
|
senseBox_sds011_serial2: "Serial2",
|
||||||
senseBox_sds011_helpurl: "https://docs.sensebox.de/hardware/sensoren-feinstaub/",
|
senseBox_sds011_helpurl:
|
||||||
|
"https://docs.sensebox.de/hardware/sensoren-feinstaub/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Button
|
* Button
|
||||||
@ -171,10 +193,11 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver
|
|||||||
senseBox_button_isPressed: "ist gedrückt",
|
senseBox_button_isPressed: "ist gedrückt",
|
||||||
senseBox_button_switch: "als Schalter",
|
senseBox_button_switch: "als Schalter",
|
||||||
senseBox_button_wasPressed: "wurde gedrückt",
|
senseBox_button_wasPressed: "wurde gedrückt",
|
||||||
|
senseBox_button_longPress: "Gedrückt für",
|
||||||
|
|
||||||
senseBox_button_tooltip: `Dieser Block gibt dir den Status des angeschlossenen Buttons. Im Dropdown Menü können verschiedene Modi für den Button ausgewählt werden. Angesteuert können entweder der on Board Button oder ein Button, der an einen der 6 digitalen Pins angeschlossen ist. verschiedene Modi:
|
senseBox_button_tooltip: `Dieser Block gibt dir den Status des angeschlossenen Buttons. Im Dropdown Menü können verschiedene Modi für den Button ausgewählt werden. Angesteuert können entweder der on Board Button oder ein Button, der an einen der 6 digitalen Pins angeschlossen ist. verschiedene Modi:
|
||||||
- "ist gedrückt": Mit diesem Modus kannst du abfragen ob der Block gerade gedrückt wird. Du erhältst entweder den Wert TRUE oder FALSE.
|
- "ist gedrückt": Mit diesem Modus kannst du abfragen ob der Block gerade gedrückt wird. Du erhältst entweder den Wert TRUE oder FALSE.
|
||||||
- "wurde gedrückt": Mit diesem Modus kannst du abfragen ob der Block gedrückt wurde. Erst wenn der Knopf gedrückt und wieder losgelassen wurde erhältst du TRUE zurück
|
- "wurde gedrückt": Mit diesem Modus kannst du abfragen ob der Block gedrückt wurde. Erst wenn der Knopf gedrückt und wieder losgelassen wurde erhältst du TRUE zurück
|
||||||
- "als Schalter": Wenn du diesen Block verwendest kannst du den Knopf wie ein Lichtschalter verwenden. Der Status wird gespeichert bis der Button erneut gedrückt wird`,
|
- "als Schalter": Wenn du diesen Block verwendest kannst du den Knopf wie ein Lichtschalter verwenden. Der Status wird gespeichert bis der Button erneut gedrückt wird`,
|
||||||
senseBox_button_helpurl: "",
|
senseBox_button_helpurl: "",
|
||||||
|
};
|
||||||
}
|
|
||||||
|
@ -4,6 +4,12 @@ export const WEB = {
|
|||||||
*/
|
*/
|
||||||
senseBox_wifi_connect: "Verbinde mit WLAN",
|
senseBox_wifi_connect: "Verbinde mit WLAN",
|
||||||
senseBox_wifi_ssid: "Netzwerkname",
|
senseBox_wifi_ssid: "Netzwerkname",
|
||||||
|
senseBox_wifi_ip: "IP-Address",
|
||||||
|
senseBox_wifi_ip_tooltip: "Gibt die IP-Address der senseBox aus",
|
||||||
|
senseBox_wifi_status: "WiFi-Status",
|
||||||
|
senseBox_wifi_status_tooltip: "Gibt den Status der WiFi-Verbindung aus",
|
||||||
|
senseBox_wifi_rssi: "RSSI",
|
||||||
|
senseBox_wifi_rssi_tooltip: "Gibt die Sigal Stärke der WiFi-Verbindung",
|
||||||
senseBox_wifi_tooltip:
|
senseBox_wifi_tooltip:
|
||||||
"Stellt eine Verbindung mit einem WLAN-Netzwerk her. Möchtest du dich mit einem ungesicheren Netzwerk (z.B. Freifunk) verbinden lösche das Feld Passwort. Das WiFi-Bee muss auf den Steckplatz **XBEE1** aufgesteckt werden.",
|
"Stellt eine Verbindung mit einem WLAN-Netzwerk her. Möchtest du dich mit einem ungesicheren Netzwerk (z.B. Freifunk) verbinden lösche das Feld Passwort. Das WiFi-Bee muss auf den Steckplatz **XBEE1** aufgesteckt werden.",
|
||||||
senseBox_wifi_startap: "Initialisiere WLAN Access Point",
|
senseBox_wifi_startap: "Initialisiere WLAN Access Point",
|
||||||
|
@ -10,6 +10,7 @@ export const UI = {
|
|||||||
toolbox_time: "Zeit",
|
toolbox_time: "Zeit",
|
||||||
toolbox_functions: "Funktionen",
|
toolbox_functions: "Funktionen",
|
||||||
toolbox_variables: "Variablen",
|
toolbox_variables: "Variablen",
|
||||||
|
toolbox_serial: "Seriell",
|
||||||
variable_NUMBER: "Zahl (int)",
|
variable_NUMBER: "Zahl (int)",
|
||||||
variable_SHORT_NUMBER: "char",
|
variable_SHORT_NUMBER: "char",
|
||||||
variable_LONG: "große Zahl (long)",
|
variable_LONG: "große Zahl (long)",
|
||||||
@ -176,6 +177,9 @@ export const UI = {
|
|||||||
"Der Tablet Modus deaktiviert die Code anzeige und aktiviert die Möglichkeit den Programmcode über die senseBox Connect App zu übertragen. Weitere Informationen dazu findest du unter: ",
|
"Der Tablet Modus deaktiviert die Code anzeige und aktiviert die Möglichkeit den Programmcode über die senseBox Connect App zu übertragen. Weitere Informationen dazu findest du unter: ",
|
||||||
settings_ota_on: "Aktiviert",
|
settings_ota_on: "Aktiviert",
|
||||||
settings_ota_off: "Deaktiviert",
|
settings_ota_off: "Deaktiviert",
|
||||||
|
settings_sounds: "Töne",
|
||||||
|
settings_sounds_text:
|
||||||
|
"Aktiviere oder Deaktiviere Töne beim hinzufügen und löschen von Blöcken. Standardmäßig deaktiviert",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 404
|
* 404
|
||||||
|
@ -745,8 +745,8 @@ Blockly.Msg.senseBox_lux_tip = "Helligkeitssensor";
|
|||||||
Blockly.Msg.senseBox_poti = "Potenziometer";
|
Blockly.Msg.senseBox_poti = "Potenziometer";
|
||||||
Blockly.Msg.senseBox_poti_tip = "Potenziometer";
|
Blockly.Msg.senseBox_poti_tip = "Potenziometer";
|
||||||
Blockly.Msg.senseBox_pressure_sensor = "Luftdruck-/Temperatursensor (BMP280)";
|
Blockly.Msg.senseBox_pressure_sensor = "Luftdruck-/Temperatursensor (BMP280)";
|
||||||
Blockly.Msg.senseBox_pressure = "Luftdruck in Pa";
|
Blockly.Msg.senseBox_pressure = "Luftdruck in hPa";
|
||||||
Blockly.Msg.senseBox_pressure_dimension = "Luftdruck in Pa";
|
Blockly.Msg.senseBox_pressure_dimension = "Luftdruck in hPa";
|
||||||
Blockly.Msg.senseBox_pressure_tip = "Luftdrucksensor";
|
Blockly.Msg.senseBox_pressure_tip = "Luftdrucksensor";
|
||||||
Blockly.Msg.senseBox_pressure_referencePressure = "Luftdruck auf NN";
|
Blockly.Msg.senseBox_pressure_referencePressure = "Luftdruck auf NN";
|
||||||
Blockly.Msg.senseBox_pressure_referencePressure_dim = "hPa";
|
Blockly.Msg.senseBox_pressure_referencePressure_dim = "hPa";
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
export const SENSORS = {
|
export const SENSORS = {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sensors
|
* Sensors
|
||||||
* ---------------------------------------------------
|
* ---------------------------------------------------
|
||||||
@ -10,32 +9,42 @@ export const SENSORS = {
|
|||||||
* BMP280
|
* BMP280
|
||||||
*/
|
*/
|
||||||
senseBox_pressure_sensor: "Airpressure/Temperature Sensor (BMP280)",
|
senseBox_pressure_sensor: "Airpressure/Temperature Sensor (BMP280)",
|
||||||
senseBox_pressure: "Airpressure in Pa",
|
senseBox_pressure: "Airpressure in hPa",
|
||||||
senseBox_pressure_dimension: "Airpressure in Pa",
|
senseBox_pressure_dimension: "Airpressure in hPa",
|
||||||
senseBox_pressure_tip: "Connect the sensor to one of the 5 **I2C ports**. The sensor gives you the measured value for the air pressure in Pa. To calculate the correct altitude above sea level the sensor needs a current reference value.",
|
senseBox_pressure_tooltip:
|
||||||
|
"Connect the sensor to one of the 5 **I2C ports**. The sensor gives you the measured value for the air pressure in hPa. To calculate the correct altitude above sea level the sensor needs a current reference value.",
|
||||||
senseBox_pressure_referencePressure: "Pressure at Sea Level",
|
senseBox_pressure_referencePressure: "Pressure at Sea Level",
|
||||||
senseBox_pressure_referencePressure_dim: "hPa",
|
senseBox_pressure_referencePressure_dim: "hPa",
|
||||||
senseBox_pressure_helpurl: "",
|
senseBox_pressure_helpurl: "",
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DPS310
|
||||||
|
*/
|
||||||
|
senseBox_sensor_dps310: "Airpressure/Temperature Sensor (DPS310)",
|
||||||
|
senseBox_sensor_dps310_tooltip:
|
||||||
|
"Connect the sensor to one of the 5 **I2C ports**. The sensor gives you the measured value for the air pressure in hPa. To calculate the correct altitude above sea level the sensor needs a current reference value.",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mikro
|
* Mikro
|
||||||
*/
|
*/
|
||||||
senseBox_sound: "Microphone",
|
senseBox_sound: "Microphone",
|
||||||
senseBox_sound_tip: "Connect the sensor to one of the 3 **analog/digital** ports via the breadbord. Returns the reading of the microphone in volt",
|
senseBox_sound_tip:
|
||||||
senseBox_sound_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-mikro/",
|
"Connect the sensor to one of the 3 **analog/digital** ports via the breadbord. Returns the reading of the microphone in volt",
|
||||||
|
senseBox_sound_helpurl:
|
||||||
|
"https://en.docs.sensebox.de/hardware/sensoren-mikro/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Temperature and Humidity Sensor (HDC1080)
|
* Temperature and Humidity Sensor (HDC1080)
|
||||||
*/
|
*/
|
||||||
senseBox_temp: "Temperature in °C",
|
senseBox_temp: "Temperature in °C",
|
||||||
senseBox_temp_hum: "Temperature/Humidity Sensor (HDC1080)",
|
senseBox_temp_hum: "Temperature/Humidity Sensor (HDC1080)",
|
||||||
senseBox_temp_hum_tooltip: "This block returns the temperature and humidity sensor readings. Connect the sensor to one of the 5 I2C ports. Measured value is output with 2 decimal places.",
|
senseBox_temp_hum_tooltip:
|
||||||
senseBox_temp_hum_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-temperatur-luftfeuchte/",
|
"This block returns the temperature and humidity sensor readings. Connect the sensor to one of the 5 I2C ports. Measured value is output with 2 decimal places.",
|
||||||
|
senseBox_temp_hum_helpurl:
|
||||||
|
"https://en.docs.sensebox.de/hardware/sensoren-temperatur-luftfeuchte/",
|
||||||
senseBox_hum: "humidity in %",
|
senseBox_hum: "humidity in %",
|
||||||
senseBox_hum_tip: "Measures humidity in %",
|
senseBox_hum_tip: "Measures humidity in %",
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ultraschalldistanzsensor
|
* Ultraschalldistanzsensor
|
||||||
*/
|
*/
|
||||||
@ -43,13 +52,16 @@ export const SENSORS = {
|
|||||||
senseBox_ultrasonic: "Ultrasonic distance sensor at Port",
|
senseBox_ultrasonic: "Ultrasonic distance sensor at Port",
|
||||||
senseBox_ultrasonic_trigger: "Trigger",
|
senseBox_ultrasonic_trigger: "Trigger",
|
||||||
senseBox_ultrasonic_echo: "Echo",
|
senseBox_ultrasonic_echo: "Echo",
|
||||||
|
senseBox_ultrasonic_maxDistance: "Max distance",
|
||||||
senseBox_ultrasonic_port_A: "A",
|
senseBox_ultrasonic_port_A: "A",
|
||||||
senseBox_ultrasonic_port_B: "B",
|
senseBox_ultrasonic_port_B: "B",
|
||||||
senseBox_ultrasonic_port_C: "C",
|
senseBox_ultrasonic_port_C: "C",
|
||||||
senseBox_ultrasonic_tooltip: `Measures the distance using ultrasound in cm. Connect the sensor to one of the three digital/analog ports:
|
senseBox_ultrasonic_tooltip: `Measures the distance using ultrasound in cm. Connect the sensor to one of the three digital/analog ports:
|
||||||
- Trigger: Green Cable
|
- Trigger: Green Cable
|
||||||
- Echo: Yellow Cable`,
|
- Echo: Yellow Cable
|
||||||
senseBox_ultrasonic_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-distanz/",
|
If the max distance is reached the a value of **O** will be returned`,
|
||||||
|
senseBox_ultrasonic_helpurl:
|
||||||
|
"https://en.docs.sensebox.de/hardware/sensoren-distanz/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UV and Lightsensor
|
* UV and Lightsensor
|
||||||
@ -57,9 +69,11 @@ export const SENSORS = {
|
|||||||
senseBox_uv: "UV-Light in µW/cm²",
|
senseBox_uv: "UV-Light in µW/cm²",
|
||||||
senseBox_uv_light: "Light Visible + UV",
|
senseBox_uv_light: "Light Visible + UV",
|
||||||
senseBox_value: "Value:",
|
senseBox_value: "Value:",
|
||||||
senseBox_uv_light_tooltip: "Sensor measures UV light or brightness. Brightness is output as **integer** in lux. UV intensity as **decimal** in µW/cm².",
|
senseBox_uv_light_tooltip:
|
||||||
|
"Sensor measures UV light or brightness. Brightness is output as **integer** in lux. UV intensity as **decimal** in µW/cm².",
|
||||||
senseBox_light: "Illuminance in Lux",
|
senseBox_light: "Illuminance in Lux",
|
||||||
senseBox_uv_light_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-helligkeit-uv/",
|
senseBox_uv_light_helpurl:
|
||||||
|
"https://en.docs.sensebox.de/hardware/sensoren-helligkeit-uv/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BMX055
|
* BMX055
|
||||||
@ -86,7 +100,6 @@ export const SENSORS = {
|
|||||||
senseBox_bmx055_accelerometer_tooltip: `This block gives you the measurement value of the accelerometer which is soldered directly on the senseBox MCU. In the dropdown menu you can select the direction and the measuring range.`,
|
senseBox_bmx055_accelerometer_tooltip: `This block gives you the measurement value of the accelerometer which is soldered directly on the senseBox MCU. In the dropdown menu you can select the direction and the measuring range.`,
|
||||||
senseBox_bmx055_helpurl: "",
|
senseBox_bmx055_helpurl: "",
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* GPS
|
* GPS
|
||||||
@ -116,8 +129,10 @@ export const SENSORS = {
|
|||||||
* Soundsensor
|
* Soundsensor
|
||||||
*/
|
*/
|
||||||
senseBox_soundsensor_dfrobot: "Soundsensor (DF Robot)",
|
senseBox_soundsensor_dfrobot: "Soundsensor (DF Robot)",
|
||||||
senseBox_soundsensor_dfrobot_tooltip: "Connect the sensor to one of the 3 **digital/analog ports**. The sensor will give you the reading in dB with one decimal.",
|
senseBox_soundsensor_dfrobot_tooltip:
|
||||||
senseBox_soundsensor_dfrobot_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-lautstaerke/",
|
"Connect the sensor to one of the 3 **digital/analog ports**. The sensor will give you the reading in dB with one decimal.",
|
||||||
|
senseBox_soundsensor_dfrobot_helpurl:
|
||||||
|
"https://en.docs.sensebox.de/hardware/sensoren-lautstaerke/",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BME680
|
* BME680
|
||||||
@ -137,21 +152,24 @@ The status of the calibration can be read from the calibration value. It is eith
|
|||||||
- IAQ Accuracy : 3 means sensor calibrated successfully.
|
- IAQ Accuracy : 3 means sensor calibrated successfully.
|
||||||
|
|
||||||
The measured values for temperature, humidity and air pressure can be used directly,`,
|
The measured values for temperature, humidity and air pressure can be used directly,`,
|
||||||
senseBox_bme680_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-umweltsensor/",
|
senseBox_bme680_helpurl:
|
||||||
|
"https://en.docs.sensebox.de/hardware/sensoren-umweltsensor/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Truebner SMT50
|
* Truebner SMT50
|
||||||
*/
|
*/
|
||||||
senseBox_smt50: "Soil Moisture and Temperature (SMT50)",
|
senseBox_smt50: "Soil Moisture and Temperature (SMT50)",
|
||||||
senseBox_smt50_helpurl: "https://docs.sensebox.de/hardware/sensoren-truebner/",
|
senseBox_smt50_helpurl:
|
||||||
senseBox_smt50_tooltip: "Schließe den Bodenfeuchtigkeit- und Temperatursensor an einen der 3 digital/analog Ports an und wähle den Port im Block aus. Der Sensor gibt die Bodentemperatur in °C und die Bodenfeuchtigkeit in % aus.",
|
"https://docs.sensebox.de/hardware/sensoren-truebner/",
|
||||||
|
senseBox_smt50_tooltip:
|
||||||
|
"Schließe den Bodenfeuchtigkeit- und Temperatursensor an einen der 3 digital/analog Ports an und wähle den Port im Block aus. Der Sensor gibt die Bodentemperatur in °C und die Bodenfeuchtigkeit in % aus.",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SCD30 CO2 Sensor
|
* SCD30 CO2 Sensor
|
||||||
*/
|
*/
|
||||||
senseBox_scd30: "CO2 Sensor (Sensirion SCD30)",
|
senseBox_scd30: "CO2 Sensor (Sensirion SCD30)",
|
||||||
senseBox_scd_tooltip: "Connect the sensor to one of the 5 **I2C ports**. The sensor will give you the reading for the CO2 concentration in ppm. The temperature reading may differ from the real value by a few degrees due to the measurement directly at the sensor.",
|
senseBox_scd_tooltip:
|
||||||
|
"Connect the sensor to one of the 5 **I2C ports**. The sensor will give you the reading for the CO2 concentration in ppm. The temperature reading may differ from the real value by a few degrees due to the measurement directly at the sensor.",
|
||||||
senseBox_scd_co2: "CO2 in ppm",
|
senseBox_scd_co2: "CO2 in ppm",
|
||||||
senseBox_scd_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-co2/",
|
senseBox_scd_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-co2/",
|
||||||
/**
|
/**
|
||||||
@ -161,11 +179,12 @@ The measured values for temperature, humidity and air pressure can be used direc
|
|||||||
senseBox_sds011_dimension: "in µg/m³ at",
|
senseBox_sds011_dimension: "in µg/m³ at",
|
||||||
senseBox_sds011_pm25: "PM2.5",
|
senseBox_sds011_pm25: "PM2.5",
|
||||||
senseBox_sds011_pm10: "PM10",
|
senseBox_sds011_pm10: "PM10",
|
||||||
senseBox_sds011_tooltip: "This block gives you the reading of the fine dust sensor. Connect the fine dust sensor to one of the 2 **Serial/UART** ports. Select between PM2.5 and PM10 in the dropdown menu. The measured value will be displayed as **comma number** in µg/m3",
|
senseBox_sds011_tooltip:
|
||||||
|
"This block gives you the reading of the fine dust sensor. Connect the fine dust sensor to one of the 2 **Serial/UART** ports. Select between PM2.5 and PM10 in the dropdown menu. The measured value will be displayed as **comma number** in µg/m3",
|
||||||
senseBox_sds011_serial1: "Serial1",
|
senseBox_sds011_serial1: "Serial1",
|
||||||
senseBox_sds011_serial2: "Serial2",
|
senseBox_sds011_serial2: "Serial2",
|
||||||
senseBox_sds011_helpurl: "https://en.docs.sensebox.de/hardware/sensoren-feinstaub/",
|
senseBox_sds011_helpurl:
|
||||||
|
"https://en.docs.sensebox.de/hardware/sensoren-feinstaub/",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Button
|
* Button
|
||||||
@ -174,6 +193,7 @@ The measured values for temperature, humidity and air pressure can be used direc
|
|||||||
senseBox_button_isPressed: "is Pressed",
|
senseBox_button_isPressed: "is Pressed",
|
||||||
senseBox_button_switch: "as Switch",
|
senseBox_button_switch: "as Switch",
|
||||||
senseBox_button_wasPressed: "was Pressed",
|
senseBox_button_wasPressed: "was Pressed",
|
||||||
|
senseBox_button_longPress: "Pressed for",
|
||||||
senseBox_button_tooltip: `This block gives you the status of the connected button. In the dropdown menu you can select different modes for the button. Either the on board button or a button connected to one of the 6 digital pins can be controlled. different modes:
|
senseBox_button_tooltip: `This block gives you the status of the connected button. In the dropdown menu you can select different modes for the button. Either the on board button or a button connected to one of the 6 digital pins can be controlled. different modes:
|
||||||
- "is pressed": With this mode you can check if the block is currently pressed. You get either the value TRUE or FALSE.
|
- "is pressed": With this mode you can check if the block is currently pressed. You get either the value TRUE or FALSE.
|
||||||
- "was pressed": With this mode you can query if the block was pressed. Only if the button was pressed and released you will get TRUE.
|
- "was pressed": With this mode you can query if the block was pressed. Only if the button was pressed and released you will get TRUE.
|
||||||
@ -181,9 +201,8 @@ The measured values for temperature, humidity and air pressure can be used direc
|
|||||||
`,
|
`,
|
||||||
senseBox_button_helpurl: "",
|
senseBox_button_helpurl: "",
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
senseBox_watertemperature: "Water Temperature",
|
senseBox_watertemperature: "Water Temperature",
|
||||||
}
|
};
|
||||||
|
@ -4,6 +4,12 @@ export const WEB = {
|
|||||||
*/
|
*/
|
||||||
senseBox_wifi_connect: "Connect to Wifi",
|
senseBox_wifi_connect: "Connect to Wifi",
|
||||||
senseBox_wifi_ssid: "Networkname",
|
senseBox_wifi_ssid: "Networkname",
|
||||||
|
senseBox_wifi_ip: "IP-Address",
|
||||||
|
senseBox_wifi_ip_tooltip: "The IP-Address of the SenseBox",
|
||||||
|
senseBox_wifi_status: "Status",
|
||||||
|
senseBox_wifi_status_tooltip: "The status of the Wifi connection",
|
||||||
|
senseBox_wifi_rssi: "RSSI",
|
||||||
|
senseBox_wifi_rssi_tooltip: "The signal strength of the Wifi connection",
|
||||||
senseBox_wifi_tooltip:
|
senseBox_wifi_tooltip:
|
||||||
"Connects to a wireless network. If you want to connect to an unsecured network (e.g. Freifunk) clear the password field. The WiFi-Bee must be plugged into the **XBEE1** slot.",
|
"Connects to a wireless network. If you want to connect to an unsecured network (e.g. Freifunk) clear the password field. The WiFi-Bee must be plugged into the **XBEE1** slot.",
|
||||||
senseBox_wifi_startap: "Initialize Wifi Access Point",
|
senseBox_wifi_startap: "Initialize Wifi Access Point",
|
||||||
|
@ -10,6 +10,7 @@ export const UI = {
|
|||||||
toolbox_time: "Time",
|
toolbox_time: "Time",
|
||||||
toolbox_functions: "Functions",
|
toolbox_functions: "Functions",
|
||||||
toolbox_variables: "Variables",
|
toolbox_variables: "Variables",
|
||||||
|
toolbox_serial: "Serial",
|
||||||
variable_NUMBER: "Number (int)",
|
variable_NUMBER: "Number (int)",
|
||||||
variable_SHORT_NUMBER: "char",
|
variable_SHORT_NUMBER: "char",
|
||||||
variable_LONG: " Zahl (long)",
|
variable_LONG: " Zahl (long)",
|
||||||
@ -166,11 +167,14 @@ export const UI = {
|
|||||||
"The display of statistics on the usage of the blocks above the workspace can be shown or hidden.",
|
"The display of statistics on the usage of the blocks above the workspace can be shown or hidden.",
|
||||||
settings_statistics_on: "On",
|
settings_statistics_on: "On",
|
||||||
settings_statistics_off: "Off",
|
settings_statistics_off: "Off",
|
||||||
settings_ota_head: "tablet mode",
|
settings_ota_head: "Tablet mode",
|
||||||
settings_ota_text:
|
settings_ota_text:
|
||||||
"Tablet mode disables the code display and enables the possibility to transfer the program code via the senseBox Connect app. You can find more information on: ",
|
"Tablet mode disables the code display and enables the possibility to transfer the program code via the senseBox Connect app. You can find more information on: ",
|
||||||
settings_ota_on: "Activated",
|
settings_ota_on: "Activated",
|
||||||
settings_ota_off: "Deactivated",
|
settings_ota_off: "Deactivated",
|
||||||
|
settings_sounds: "Sound",
|
||||||
|
settings_sounds_text:
|
||||||
|
"Enable or disable sounds when adding and deleting blocks. Disabled by default",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 404
|
* 404
|
||||||
|
@ -887,13 +887,13 @@ Blockly.Msg.senseBox_output_timestamp = "timestamp";
|
|||||||
Blockly.Msg.senseBox_piezo_tip = "simple piezo to make sound";
|
Blockly.Msg.senseBox_piezo_tip = "simple piezo to make sound";
|
||||||
Blockly.Msg.senseBox_poti = "Potentiometer";
|
Blockly.Msg.senseBox_poti = "Potentiometer";
|
||||||
Blockly.Msg.senseBox_poti_tip = "Potentiometer";
|
Blockly.Msg.senseBox_poti_tip = "Potentiometer";
|
||||||
Blockly.Msg.senseBox_pressure = "Airpressure in Pa";
|
Blockly.Msg.senseBox_pressure = "Airpressure in hPa";
|
||||||
Blockly.Msg.senseBox_pressure_referencePressure = "Pressure at Sea Level";
|
Blockly.Msg.senseBox_pressure_referencePressure = "Pressure at Sea Level";
|
||||||
Blockly.Msg.senseBox_pressure_referencePressure_dim = "hPa";
|
Blockly.Msg.senseBox_pressure_referencePressure_dim = "hPa";
|
||||||
Blockly.Msg.senseBox_pressure_sensor =
|
Blockly.Msg.senseBox_pressure_sensor =
|
||||||
"Airpressure/Temperature Sensor (BMP280)";
|
"Airpressure/Temperature Sensor (BMP280)";
|
||||||
Blockly.Msg.senseBox_pressure_tip =
|
Blockly.Msg.senseBox_pressure_tip =
|
||||||
"airpressure sensor can measure the airpressure in Pa";
|
"airpressure sensor can measure the airpressure in hPa";
|
||||||
Blockly.Msg.senseBox_rgb_led = "RGB-LED";
|
Blockly.Msg.senseBox_rgb_led = "RGB-LED";
|
||||||
Blockly.Msg.senseBox_rgb_led_tip = "RGB-LED";
|
Blockly.Msg.senseBox_rgb_led_tip = "RGB-LED";
|
||||||
Blockly.Msg.senseBox_sd_create_file = "Create file on SD-Card";
|
Blockly.Msg.senseBox_sd_create_file = "Create file on SD-Card";
|
||||||
|
@ -65,6 +65,7 @@ class Toolbox extends React.Component {
|
|||||||
<Block type="sensebox_sensor_bmx055_accelerometer" />
|
<Block type="sensebox_sensor_bmx055_accelerometer" />
|
||||||
<Block type="sensebox_sensor_sds011" />
|
<Block type="sensebox_sensor_sds011" />
|
||||||
<Block type="sensebox_sensor_pressure" />
|
<Block type="sensebox_sensor_pressure" />
|
||||||
|
<Block type="sensebox_sensor_dps310" />
|
||||||
<Block type="sensebox_sensor_bme680_bsec" />
|
<Block type="sensebox_sensor_bme680_bsec" />
|
||||||
<Block type="sensebox_scd30" />
|
<Block type="sensebox_scd30" />
|
||||||
<Block type="sensebox_gps" />
|
<Block type="sensebox_gps" />
|
||||||
@ -92,6 +93,9 @@ class Toolbox extends React.Component {
|
|||||||
</Category>
|
</Category>
|
||||||
<Category name="WIFI" colour={getColour().sensebox}>
|
<Category name="WIFI" colour={getColour().sensebox}>
|
||||||
<Block type="sensebox_wifi" />
|
<Block type="sensebox_wifi" />
|
||||||
|
<Block type="sensebox_wifi_status" />
|
||||||
|
<Block type="sensebox_wifi_rssi" />
|
||||||
|
<Block type="sensebox_get_ip" />
|
||||||
<Block type="sensebox_startap" />
|
<Block type="sensebox_startap" />
|
||||||
</Category>
|
</Category>
|
||||||
<Category name="Ethernet" colour={getColour().sensebox}>
|
<Category name="Ethernet" colour={getColour().sensebox}>
|
||||||
@ -401,6 +405,10 @@ class Toolbox extends React.Component {
|
|||||||
<Block type="sensebox_phyphox_channel"></Block>
|
<Block type="sensebox_phyphox_channel"></Block>
|
||||||
<Block type="sensebox_phyphox_sendchannel"></Block>
|
<Block type="sensebox_phyphox_sendchannel"></Block>
|
||||||
</Category>
|
</Category>
|
||||||
|
<Category name={Blockly.Msg.toolbox_serial} colour={getColour().serial}>
|
||||||
|
<Block type="init_serial_monitor"></Block>
|
||||||
|
<Block type="print_serial_monitor"></Block>
|
||||||
|
</Category>
|
||||||
<Category
|
<Category
|
||||||
id="webserver"
|
id="webserver"
|
||||||
name="Webserver"
|
name="Webserver"
|
||||||
@ -598,11 +606,11 @@ class Toolbox extends React.Component {
|
|||||||
colour={getColour().variables}
|
colour={getColour().variables}
|
||||||
custom="CREATE_TYPED_VARIABLE"
|
custom="CREATE_TYPED_VARIABLE"
|
||||||
></Category>
|
></Category>
|
||||||
<Category name="Arrays" colour={getColour().arrays}>
|
{/* <Category name="Arrays" colour={getColour().arrays}>
|
||||||
<Block type="lists_create_empty" />
|
<Block type="lists_create_empty" />
|
||||||
<Block type="array_getIndex" />
|
<Block type="array_getIndex" />
|
||||||
<Block type="lists_length" />
|
<Block type="lists_length" />
|
||||||
</Category>
|
</Category> */}
|
||||||
<Category
|
<Category
|
||||||
name={Blockly.Msg.toolbox_functions}
|
name={Blockly.Msg.toolbox_functions}
|
||||||
colour={getColour().procedures}
|
colour={getColour().procedures}
|
||||||
|
@ -11,6 +11,7 @@ import LanguageSelector from "./LanguageSelector";
|
|||||||
import RenderSelector from "./RenderSelector";
|
import RenderSelector from "./RenderSelector";
|
||||||
import StatsSelector from "./StatsSelector";
|
import StatsSelector from "./StatsSelector";
|
||||||
import OtaSelector from "./OtaSelector";
|
import OtaSelector from "./OtaSelector";
|
||||||
|
import SoundsSelector from "./SoundsSelector";
|
||||||
|
|
||||||
import Button from "@material-ui/core/Button";
|
import Button from "@material-ui/core/Button";
|
||||||
import Paper from "@material-ui/core/Paper";
|
import Paper from "@material-ui/core/Paper";
|
||||||
@ -48,6 +49,9 @@ class Settings extends Component {
|
|||||||
<Paper style={{ margin: "10px 0px", padding: "10px" }}>
|
<Paper style={{ margin: "10px 0px", padding: "10px" }}>
|
||||||
<OtaSelector />
|
<OtaSelector />
|
||||||
</Paper>
|
</Paper>
|
||||||
|
<Paper style={{ margin: "10px 0px", padding: "10px" }}>
|
||||||
|
<SoundsSelector />
|
||||||
|
</Paper>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
style={{ marginTop: "10px" }}
|
style={{ marginTop: "10px" }}
|
||||||
|
63
src/components/Settings/SoundsSelector.js
Normal file
63
src/components/Settings/SoundsSelector.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import React, { Component } from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { setSounds } from "../../actions/generalActions";
|
||||||
|
|
||||||
|
import * as Blockly from "blockly/core";
|
||||||
|
|
||||||
|
import InputLabel from "@material-ui/core/InputLabel";
|
||||||
|
import MenuItem from "@material-ui/core/MenuItem";
|
||||||
|
import FormControl from "@material-ui/core/FormControl";
|
||||||
|
import Select from "@material-ui/core/Select";
|
||||||
|
import Typography from "@material-ui/core/Typography";
|
||||||
|
import FormHelperText from "@material-ui/core/FormHelperText";
|
||||||
|
|
||||||
|
class SoundsSelector extends Component {
|
||||||
|
componentDidMount() {
|
||||||
|
// Ensure that Blockly.setLocale is adopted in the component.
|
||||||
|
// Otherwise, the text will not be displayed until the next update of the component.
|
||||||
|
this.forceUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Typography style={{ fontWeight: "bold" }}>
|
||||||
|
{Blockly.Msg.settings_sounds}
|
||||||
|
</Typography>
|
||||||
|
<FormHelperText
|
||||||
|
style={{ color: "black", lineHeight: 1.3, marginBottom: "8px" }}
|
||||||
|
>
|
||||||
|
{Blockly.Msg.settings_sounds_text}
|
||||||
|
</FormHelperText>
|
||||||
|
<FormControl>
|
||||||
|
<InputLabel id="demo-simple-select-label">
|
||||||
|
{Blockly.Msg.settings_sounds}
|
||||||
|
</InputLabel>
|
||||||
|
<Select
|
||||||
|
labelId="demo-simple-select-label"
|
||||||
|
id="demo-simple-select"
|
||||||
|
value={this.props.sounds}
|
||||||
|
onChange={(e) => this.props.setSounds(e.target.value)}
|
||||||
|
>
|
||||||
|
<MenuItem value={false}>{Blockly.Msg.settings_ota_off}</MenuItem>
|
||||||
|
<MenuItem value={true}>{Blockly.Msg.settings_ota_on}</MenuItem>
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SoundsSelector.propTypes = {
|
||||||
|
setSounds: PropTypes.func.isRequired,
|
||||||
|
language: PropTypes.string.isRequired,
|
||||||
|
sounds: PropTypes.string.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapStateToProps = (state) => ({
|
||||||
|
sounds: state.general.sounds,
|
||||||
|
language: state.general.language,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default connect(mapStateToProps, { setSounds })(SoundsSelector);
|
@ -2,6 +2,7 @@ import {
|
|||||||
VISIT,
|
VISIT,
|
||||||
LANGUAGE,
|
LANGUAGE,
|
||||||
RENDERER,
|
RENDERER,
|
||||||
|
SOUNDS,
|
||||||
STATISTICS,
|
STATISTICS,
|
||||||
PLATFORM,
|
PLATFORM,
|
||||||
} from "../actions/types";
|
} from "../actions/types";
|
||||||
@ -20,6 +21,14 @@ const initialPlatform = () => {
|
|||||||
return getPlatform();
|
return getPlatform();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const initialSounds = () => {
|
||||||
|
if (window.localStorage.getItem("sounds")) {
|
||||||
|
return window.localStorage.getItem("sounds");
|
||||||
|
} else {
|
||||||
|
return "off";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const getPlatform = () => {
|
const getPlatform = () => {
|
||||||
if (window.localStorage.getItem("platform")) {
|
if (window.localStorage.getItem("platform")) {
|
||||||
return JSON.parse(window.localStorage.getItem("platform"));
|
return JSON.parse(window.localStorage.getItem("platform"));
|
||||||
@ -62,6 +71,7 @@ const initialState = {
|
|||||||
pageVisits: 0, // detect if previous URL was
|
pageVisits: 0, // detect if previous URL was
|
||||||
language: initialLanguage(),
|
language: initialLanguage(),
|
||||||
renderer: initialRenderer(),
|
renderer: initialRenderer(),
|
||||||
|
sounds: initialSounds(),
|
||||||
statistics: initialStatistics(),
|
statistics: initialStatistics(),
|
||||||
platform: initialPlatform(),
|
platform: initialPlatform(),
|
||||||
};
|
};
|
||||||
@ -90,6 +100,12 @@ export default function foo(state = initialState, action) {
|
|||||||
...state,
|
...state,
|
||||||
renderer: action.payload,
|
renderer: action.payload,
|
||||||
};
|
};
|
||||||
|
case SOUNDS:
|
||||||
|
window.localStorage.setItem("sounds", action.payload);
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
sounds: action.payload,
|
||||||
|
};
|
||||||
case STATISTICS:
|
case STATISTICS:
|
||||||
window.localStorage.setItem("statistics", action.payload);
|
window.localStorage.setItem("statistics", action.payload);
|
||||||
return {
|
return {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user