Compare commits

..
Author SHA1 Message Date
Mario Pesch 18b33946b5 add fields for ratelimit testing 2023-02-02 14:20:04 +01:00
Mario PeschandGitHub 69f3bf1db0 Merge pull request #231 from sensebox/fix-bme-dimension
hPa -> Pa
2023-01-13 07:43:15 +01:00
Mario Pesch 512839e1f5 hPa -> Pa 2023-01-12 15:17:09 +01:00
Mario PeschandGitHub ec141088cc Merge pull request #230 from sensebox/fix-rtc-hours
Update sensebox-rtc.js
2023-01-12 14:33:38 +01:00
Mario Pesch be51eff3c8 Update sensebox-rtc.js 2023-01-12 14:30:01 +01:00
Mario PeschandGitHub cfd6fedc6e Merge pull request #227 from sensebox/new-components
add new components
2023-01-06 17:09:18 +01:00
Mario Pesch 126606f4f5 add new components 2023-01-06 17:06:39 +01:00
Mario PeschandGitHub cb12aef535 Merge pull request #222 from sensebox/block/add-internalRTC-NTP
Block/add internal rtc ntp
2022-12-14 15:39:18 +01:00
Mario PeschandGitHub 345c15ed77 Merge pull request #221 from sensebox/block/add-sps30
init implementation of sps30 block
2022-12-14 15:35:19 +01:00
Mario Pesch b05b3017e1 remove duplicate variable 2022-12-14 13:59:31 +01:00
Mario Pesch a4641938f0 add block for timestamp from internal rtc 2022-12-14 08:56:55 +01:00
Mario Pesch 9526b154bf add blocks for internal RTC and NTP 2022-12-13 14:44:53 +01:00
Mario Pesch 745f6940ec update tooltip 2022-12-13 09:43:24 +01:00
Mario Pesch 2874620a9f init implementation of sps30 block
closes #218
2022-12-12 10:59:27 +01:00
Mario PeschandGitHub 9bf17aed67 Merge pull request #194 from sensebox/feat/mode-query-param
Add mode query parameter for opening from inside Connect App
2022-11-16 09:51:37 +01:00
Mario PeschandGitHub f6e5d086b5 Merge pull request #214 from sensebox/codegenerator/fix-co2-zeros
fix co2 zero issue
2022-11-11 15:13:39 +01:00
Mario Pesch 50ffad0ad2 fix co2 zero issue
closes #170
2022-11-11 15:08:16 +01:00
Mario PeschandGitHub 3a6fd07647 Update issue templates 2022-11-11 09:55:38 +01:00
Mario PeschandGitHub 9295d92c65 Merge pull request #205 from sensebox/fix/Serial-for-Sensors
fix Serial Ports for Sensors
2022-11-10 13:34:00 +01:00
Mario Pesch 338a0aada6 fix Serial Ports for Sensors 2022-11-10 12:40:51 +01:00
Mario PeschandGitHub a528bb7378 Merge pull request #197 from sensebox/fix/variable_db
fix variable db
2022-11-03 13:14:34 +01:00
Mario Pesch 719be33756 fix variable db
closes #192
2022-11-03 13:05:55 +01:00
Matthias Pfeil d983677d22 Add mode query parameter for opening from inside Connect App 2022-10-25 10:28:15 +02:00
42 changed files with 702 additions and 133 deletions
+38
View File
@@ -0,0 +1,38 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+14
View File
@@ -0,0 +1,14 @@
---
name: Short Issue
about: Template for Short Issues
title: ''
labels: ''
assignees: ''
---
### Current behaviour
Describe the current behaviour
### Expected behaviour
Describe how it is supposed to work
Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

-10
View File
@@ -62,13 +62,3 @@ td {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
:root {
--url: url('./data/mcu_opacity.png');
}
.blocklySvg {
background-image: var(--url);
background-position: center;
background-repeat: no-repeat;
}
+1
View File
@@ -10,6 +10,7 @@ import "./sensebox-motors";
import "./sensebox-lora"; import "./sensebox-lora";
import "./sensebox-led"; import "./sensebox-led";
import "./sensebox-rtc"; import "./sensebox-rtc";
import "./sensebox-ntp";
import "./sensebox-ble"; import "./sensebox-ble";
import "./sensebox-sd"; import "./sensebox-sd";
import "./mqtt"; import "./mqtt";
@@ -0,0 +1,42 @@
import * as Blockly from "blockly";
import { getColour } from "../helpers/colour";
import * as Types from "../helpers/types";
Blockly.Blocks["sensebox_ntp_init"] = {
init: function () {
this.setHelpUrl(Blockly.Msg.sensebox_ntp_helpurl);
this.setColour(getColour().time);
this.appendDummyInput().appendField(Blockly.Msg.sensebox_ntp_init);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.sensebox_ntp_tooltip);
},
};
Blockly.Blocks["sensebox_ntp_get"] = {
init: function () {
this.setHelpUrl(Blockly.Msg.sensebox_ntp_get_helpurl);
this.setColour(getColour().time);
this.appendDummyInput()
.appendField(Blockly.Msg.sensebox_ntp_get)
.appendField(
new Blockly.FieldDropdown([
[Blockly.Msg.sensebox_ntp_epochTime, "getEpochTime"],
[Blockly.Msg.sensebox_ntp_formattedTimeStamp, "getFormattedTime"],
]),
"dropdown"
);
this.setOutput(true, Types.LARGE_NUMBER.typeName);
this.setTooltip(Blockly.Msg.sensebox_rtc_get_tooltip);
},
};
Blockly.Blocks["sensebox_ntp_get_timestamp"] = {
init: function () {
this.setHelpUrl(Blockly.Msg.sensebox_rtc_helpurl);
this.setColour(getColour().time);
this.appendDummyInput().appendField(Blockly.Msg.sensebox_rtc_get_timestamp);
this.setOutput(true);
this.setTooltip(Blockly.Msg.sensebox_rtc_get_timestamp_tooltip);
},
};
@@ -19,6 +19,7 @@ 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, "opensensemap.org"], [Blockly.Msg.senseBox_osem_host_testing, "testing.opensensemap.org"]]), "HOST")
.appendField("SSL") .appendField("SSL")
.appendField(new Blockly.FieldCheckbox(ssl), "SSL"); .appendField(new Blockly.FieldCheckbox(ssl), "SSL");
this.appendDummyInput() this.appendDummyInput()
@@ -53,6 +54,10 @@ Blockly.Blocks["sensebox_osem_connection"] = {
.setAlign(Blockly.ALIGN_LEFT) .setAlign(Blockly.ALIGN_LEFT)
.appendField(Blockly.Msg.senseBox_osem_access_token) .appendField(Blockly.Msg.senseBox_osem_access_token)
.appendField(new Blockly.FieldTextInput("access_token"), "access_token"); .appendField(new Blockly.FieldTextInput("access_token"), "access_token");
this.appendDummyInput()
.setAlign(Blockly.ALIGN_LEFT)
.appendField(Blockly.Msg.senseBox_osem_xallowtoken)
.appendField(new Blockly.FieldTextInput("ratelimit-token"), "ratelimit-token");
this.appendStatementInput("DO") this.appendStatementInput("DO")
.appendField(Blockly.Msg.senseBox_sensor) .appendField(Blockly.Msg.senseBox_sensor)
.setCheck(null); .setCheck(null);
@@ -76,3 +76,67 @@ Blockly.Blocks["sensebox_rtc_get_timestamp"] = {
this.setTooltip(Blockly.Msg.sensebox_rtc_get_timestamp_tooltip); this.setTooltip(Blockly.Msg.sensebox_rtc_get_timestamp_tooltip);
}, },
}; };
/**
* Internal RTC
*
*/
Blockly.Blocks["sensebox_internal_rtc_init"] = {
init: function () {
this.setHelpUrl(Blockly.Msg.sensebox_internal_rtc_helpurl);
this.setColour(getColour().time);
this.appendDummyInput().appendField(Blockly.Msg.sensebox_internal_rtc_init);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.sensebox_internal_rtc_init_tooltip);
},
};
Blockly.Blocks["sensebox_internal_rtc_set"] = {
init: function () {
this.setHelpUrl(Blockly.Msg.sensebox_rtc_helpurl);
this.setColour(getColour().time);
this.appendValueInput("time").appendField(
Blockly.Msg.sensebox_internal_rtc_set
);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.sensebox_internal_rtc_set_tooltip);
},
};
Blockly.Blocks["sensebox_internal_rtc_get"] = {
init: function () {
this.setHelpUrl(Blockly.Msg.sensebox_rtc_helpurl);
this.setColour(getColour().time);
this.appendDummyInput()
.appendField(Blockly.Msg.sensebox_internal_rtc_get)
.appendField(
new Blockly.FieldDropdown([
[Blockly.Msg.sensebox_internal_rtc_epoch, "Epoch"],
[Blockly.Msg.sensebox_internal_rtc_year, "Year"],
[Blockly.Msg.sensebox_internal_rtc_month, "Month"],
[Blockly.Msg.sensebox_internal_rtc_day, "Day"],
[Blockly.Msg.sensebox_internal_rtc_hour, "Hours"],
[Blockly.Msg.sensebox_internal_rtc_minutes, "Minutes"],
[Blockly.Msg.sensebox_internal_rtc_seconds, "Seconds"],
]),
"dropdown"
);
this.setOutput(true, Types.LARGE_NUMBER.typeName);
this.setTooltip(Blockly.Msg.sensebox_internal_rtc_get_tooltip);
},
};
Blockly.Blocks["sensebox_internal_rtc_get_timestamp"] = {
init: function () {
this.setHelpUrl(Blockly.Msg.sensebox_internal_rtc_helpurl);
this.setColour(getColour().time);
this.appendDummyInput().appendField(
Blockly.Msg.sensebox_internal_rtc_get_timestamp
);
this.setOutput(true);
this.setTooltip(Blockly.Msg.sensebox_internal_rtc_get_timestamp_tooltip);
},
};
@@ -115,7 +115,7 @@ Blockly.Blocks["sensebox_sensor_sds011"] = {
.appendField(Blockly.Msg.senseBox_sds011_dimension) .appendField(Blockly.Msg.senseBox_sds011_dimension)
.appendField( .appendField(
new Blockly.FieldDropdown( new Blockly.FieldDropdown(
selectedBoard().serial), selectedBoard().serialSensors),
"SERIAL" "SERIAL"
); );
this.setOutput(true, Types.DECIMAL.typeName); this.setOutput(true, Types.DECIMAL.typeName);
@@ -186,7 +186,7 @@ Blockly.Blocks["sensebox_sensor_bme680_bsec"] = {
var dropdownOptions = [ var dropdownOptions = [
[Blockly.Msg.senseBox_temp, "temperature"], [Blockly.Msg.senseBox_temp, "temperature"],
[Blockly.Msg.senseBox_hum, "humidity"], [Blockly.Msg.senseBox_hum, "humidity"],
[Blockly.Msg.senseBox_pressure, "pressure"], [Blockly.Msg.senseBox_bme_pressure, "pressure"],
[Blockly.Msg.senseBox_bme_iaq, "IAQ"], [Blockly.Msg.senseBox_bme_iaq, "IAQ"],
[Blockly.Msg.senseBox_bme_iaq_accuracy, "IAQAccuracy"], [Blockly.Msg.senseBox_bme_iaq_accuracy, "IAQAccuracy"],
[Blockly.Msg.senseBox_bme_co2, "CO2"], [Blockly.Msg.senseBox_bme_co2, "CO2"],
@@ -562,3 +562,31 @@ Blockly.Blocks["sensebox_sensor_dps310"] = {
} }
}, },
}; };
/**
* Sensirion SPS30 Fine Particular Matter Sensor
* added 02.12.2022
*/
Blockly.Blocks["sensebox_sensor_sps30"] = {
init: function () {
this.appendDummyInput().appendField(Blockly.Msg.senseBox_sps30);
this.appendDummyInput()
.setAlign(Blockly.ALIGN_LEFT)
.appendField(Blockly.Msg.senseBox_value)
.appendField(
new Blockly.FieldDropdown([
[Blockly.Msg.senseBox_sps30_1p0, "1p0"],
[Blockly.Msg.senseBox_sps30_2p5, "2p5"],
[Blockly.Msg.senseBox_sps30_4p0, "4p0"],
[Blockly.Msg.senseBox_sps30_10p0, "10p0"],
]),
"value"
)
.appendField(Blockly.Msg.senseBox_sps30_dimension);
this.setOutput(true, Types.DECIMAL.typeName);
this.setColour(getColour().sensebox);
this.setTooltip(Blockly.Msg.senseBox_sps30_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_sps30_helpurl);
},
};
@@ -10,6 +10,7 @@ import "./sensebox-lora";
import "./sensebox-led"; import "./sensebox-led";
import "./sensebox"; import "./sensebox";
import "./sensebox-rtc"; import "./sensebox-rtc";
import "./sensebox-ntp";
import "./sensebox-ble"; import "./sensebox-ble";
import "./sensebox-sd"; import "./sensebox-sd";
import "./mqtt"; import "./mqtt";
+9 -4
View File
@@ -275,10 +275,15 @@ Blockly.Arduino["math_change"] = function (block) {
"DELTA", "DELTA",
Blockly.Arduino.ORDER_ADDITIVE Blockly.Arduino.ORDER_ADDITIVE
) || "0"; ) || "0";
var varName = Blockly.Arduino.nameDB_.getName( var id = block.getFieldValue("VAR")
block.getFieldValue("VAR"), const varName = Blockly.Variables.getVariable(
Blockly.Variables.NAME_TYPE Blockly.getMainWorkspace(),
); id
).name;
// var varName = Blockly.Arduino.nameDB_.getName(
// block.getFieldValue("VAR"),
// Blockly.Variables.NAME_TYPE
// );
return varName + " += " + argument0 + ";\n"; return varName + " += " + argument0 + ";\n";
}; };
@@ -0,0 +1,19 @@
import Blockly from "blockly";
Blockly.Arduino.sensebox_ntp_init = function () {
Blockly.Arduino.libraries_["WiFiUdp"] = `#include <WiFiUdp.h>`;
Blockly.Arduino.libraries_["NTPClient"] = `#include <NTPClient.h>`;
Blockly.Arduino.definitions_["WiFiUDP"] = `WiFiUDP ntpUDP;`;
Blockly.Arduino.definitions_["NTPClient"] = `NTPClient timeClient(ntpUDP);`;
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
Blockly.Arduino.setupCode_["timeclient.begin"] = `timeClient.begin();`;
Blockly.Arduino.setupCode_["timeclient.update"] = `timeClient.update();`;
var code = ``;
return code;
};
Blockly.Arduino.sensebox_ntp_get = function () {
var format = this.getFieldValue("dropdown");
var code = `timeClient.${format}()`;
return [code, Blockly.Arduino.ORDER_ATOMIC];
};
@@ -30,6 +30,8 @@ Blockly.Arduino.sensebox_osem_connection = function (Block) {
var box_id = this.getFieldValue("BoxID"); var box_id = this.getFieldValue("BoxID");
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 host = this.getFieldValue("HOST");
var ratelimit_token = this.getFieldValue("ratelimit-token");
var blocks = this.getDescendants(); var blocks = this.getDescendants();
var type = this.getFieldValue("type"); var type = this.getFieldValue("type");
var ssl = this.getFieldValue("SSL"); var ssl = this.getFieldValue("SSL");
@@ -50,7 +52,7 @@ Blockly.Arduino.sensebox_osem_connection = function (Block) {
Blockly.Arduino.definitions_["SenseBoxID"] = Blockly.Arduino.definitions_["SenseBoxID"] =
'const char SENSEBOX_ID [] PROGMEM = "' + box_id + '";'; 'const char SENSEBOX_ID [] PROGMEM = "' + box_id + '";';
Blockly.Arduino.definitions_["host"] = Blockly.Arduino.definitions_["host"] =
'const char server [] PROGMEM ="ingress.opensensemap.org";'; `const char server [] PROGMEM ="ingress.${host}";`;
if (wifi === true) { if (wifi === true) {
if (ssl === "TRUE") { if (ssl === "TRUE") {
Blockly.Arduino.libraries_["library_bearSSL"] = Blockly.Arduino.libraries_["library_bearSSL"] =
@@ -154,7 +156,7 @@ ${
if (connected == true) { if (connected == true) {
// construct the HTTP POST request: // construct the HTTP POST request:
sprintf_P(buffer, sprintf_P(buffer,
PSTR("POST /boxes/%s/data HTTP/1.1\\nAuthorization: ${access_token}\\nHost: %s\\nContent-Type: " PSTR("POST /boxes/%s/data HTTP/1.1\\nAuthorization: ${access_token}\\nX-Allow-Token: ${ratelimit_token}\\nHost: %s\\nContent-Type: "
"text/csv\\nConnection: close\\nContent-Length: %i\\n\\n"), "text/csv\\nConnection: close\\nContent-Length: %i\\n\\n"),
SENSEBOX_ID, server, num_measurements * lengthMultiplikator); SENSEBOX_ID, server, num_measurements * lengthMultiplikator);
// send the HTTP POST request: // send the HTTP POST request:
@@ -253,7 +255,7 @@ ${
if (connected == true) { if (connected == true) {
// construct the HTTP POST request: // construct the HTTP POST request:
sprintf_P(buffer, sprintf_P(buffer,
PSTR("POST /boxes/%s/data HTTP/1.1\\nAuthorization: ${access_token}\\nHost: %s\\nContent-Type: " PSTR("POST /boxes/%s/data HTTP/1.1\\nAuthorization: ${access_token}\\nX-Allow-Token: ${ratelimit_token}\\nHost: %s\\nContent-Type: "
"text/csv\\nConnection: close\\nContent-Length: %i\\n\\n"), "text/csv\\nConnection: close\\nContent-Length: %i\\n\\n"),
SENSEBOX_ID, server, num_measurements * lengthMultiplikator); SENSEBOX_ID, server, num_measurements * lengthMultiplikator);
// send the HTTP POST request: // send the HTTP POST request:
@@ -94,3 +94,46 @@ uint8_t sec, min, hour, day, month;
var code = `getTimeStamp()`; var code = `getTimeStamp()`;
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
Blockly.Arduino.sensebox_internal_rtc_init = function () {
Blockly.Arduino.libraries_["RTClib"] = `#include <RTCZero.h>`;
Blockly.Arduino.definitions_["RTC"] = `RTCZero rtc;`;
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
Blockly.Arduino.setupCode_["rtc.begin"] = `rtc.begin();`;
return "";
};
Blockly.Arduino.sensebox_internal_rtc_set = function () {
var branch =
Blockly.Arduino.valueToCode(this, "time", Blockly.Arduino.ORDER_ATOMIC) ||
"0";
Blockly.Arduino.setupCode_["rtc.setEpoch"] = `rtc.setEpoch(${branch});`;
var code = ``;
return code;
};
Blockly.Arduino.sensebox_internal_rtc_get = function () {
var dropdown = this.getFieldValue("dropdown");
var code = `rtc.get${dropdown}()`;
return [code, Blockly.Arduino.ORDER_ATOMIC];
};
Blockly.Arduino.sensebox_internal_rtc_get_timestamp = function () {
Blockly.Arduino.variables_["rtc_timestamp"] = `char timestamp[20];`;
Blockly.Arduino.codeFunctions_["getTimeStamp"] = `
char* getTimeStamp() {
uint8_t sec, min, hour, day, month;
uint16_t year;
sec = rtc.getSeconds();
min = rtc.getMinutes();
hour = rtc.getHours();
day = rtc.getDay();
month = rtc.getMonth();
year = rtc.getYear();
sprintf(timestamp, "%02d-%02d-%02dT%02d:%02d:%02dZ", year, month, day, hour, min, sec);
return timestamp;
}
`;
var code = `getTimeStamp()`;
return [code, Blockly.Arduino.ORDER_ATOMIC];
};
@@ -434,6 +434,8 @@ Blockly.Arduino.sensebox_scd30 = function () {
while (1) while (1)
; ;
}`; }`;
Blockly.Arduino.setupCode_["scd30_staleData"] =
"airSensor.useStaleData(true);";
var code = ""; var code = "";
switch (dropdown) { switch (dropdown) {
case "temperature": case "temperature":
@@ -692,3 +694,57 @@ Blockly.Arduino.sensebox_sensor_dps310 = function () {
} }
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
/**
* Sensirion SPS30 Fine Particlar Matter
*
*/
Blockly.Arduino.sensebox_sensor_sps30 = function () {
var dropdown_name = this.getFieldValue("value");
Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include <senseBoxIO.h>";
Blockly.Arduino.libraries_[
"sps30"
] = `#include <sps30.h> // http://librarymanager/All#`;
Blockly.Arduino.variables_["sps30_measurement"] =
"struct sps30_measurement m;";
Blockly.Arduino.variables_["sps30_auto_clean_days"] =
"uint32_t auto_clean_days = 4;";
Blockly.Arduino.variables_["sps30_interval_intervalsps"] =
"const long intervalsps = 1000;";
Blockly.Arduino.variables_["sps30_time_startsps"] =
"unsigned long time_startsps = 0;";
Blockly.Arduino.variables_["sps30_time_actualsps"] =
"unsigned long time_actualsps = 0;";
Blockly.Arduino.codeFunctions_["sps30_getData"] = `
void getSPS30Data(){
uint16_t data_ready;
int16_t ret;
do {
ret = sps30_read_data_ready(&data_ready);
if (ret < 0) {
} else if (!data_ready) {}
else
break;
delay(100); /* retry in 100ms */
} while (1);
ret = sps30_read_measurement(&m);
}
`;
Blockly.Arduino.setupCode_["sps30_begin"] = "sensirion_i2c_init();";
Blockly.Arduino.setupCode_["sps30_setFanCleaningInterval"] =
"sps30_set_fan_auto_cleaning_interval_days(auto_clean_days);";
Blockly.Arduino.setupCode_["sps30_startMeasurement"] =
"sps30_start_measurement();";
Blockly.Arduino.loopCodeOnce_["getSPS30Data();"] = `
time_startsps = millis();
if (time_startsps > time_actualsps + intervalsps) {
time_actualsps = millis();
getSPS30Data();
}`;
var code = `m.mc_${dropdown_name}`;
return [code, Blockly.Arduino.ORDER_ATOMIC];
};
+12 -5
View File
@@ -46,9 +46,13 @@ const sensebox_mcu = {
["C6", "6"], ["C6", "6"],
], ],
serial: [ serial: [
["serial", "SerialUSB"], ["SerialUSB", "SerialUSB"],
["serial_1", "Serial1"], ["Serial1", "Serial1"],
["serial_2", "Serial2"], ["Serial2", "Serial2"],
],
serialSensors: [
["Serial1", "Serial1"],
["Serial2", "Serial2"],
], ],
serialPins: { serialPins: {
SerialUSB: [ SerialUSB: [
@@ -161,8 +165,11 @@ const sensebox_mini = {
["IO2", "2"], ["IO2", "2"],
], ],
serial: [ serial: [
["serial", "SerialUSB"], ["SerialUSB", "SerialUSB"],
["serial_1", "Serial1"], ["Serial1", "Serial1"],
],
serialSensors: [
["Serial1", "Serial1"],
], ],
serialPins: { serialPins: {
SerialUSB: [ SerialUSB: [
+15 -3
View File
@@ -21,8 +21,8 @@
* @author samelh@google.com (Sam El-Husseini) * @author samelh@google.com (Sam El-Husseini)
*/ */
import React from 'react'; import React from "react";
import BlocklyComponent from './BlocklyComponent'; import BlocklyComponent from "./BlocklyComponent";
export default BlocklyComponent; export default BlocklyComponent;
@@ -56,4 +56,16 @@ const Shadow = (p) => {
return React.createElement("shadow", props, children); return React.createElement("shadow", props, children);
}; };
export { Block, Category, Value, Field, Shadow } const Sep = (p) => {
const { children, ...props } = p;
props.is = "blockly";
return React.createElement("sep", props, children);
};
const Label = (p) => {
const { children, ...props } = p;
props.is = "blockly";
return React.createElement("label", props, children);
};
export { Block, Category, Value, Field, Shadow, Sep, Label };
+2
View File
@@ -12,6 +12,7 @@ import { LED } from "./de/sensebox-led";
import { LORA } from "./de/sensebox-lora"; import { LORA } from "./de/sensebox-lora";
import { OSEM } from "./de/sensebox-osem"; import { OSEM } from "./de/sensebox-osem";
import { RTC } from "./de/sensebox-rtc"; import { RTC } from "./de/sensebox-rtc";
import { NTP } from "./de/sensebox-ntp";
import { SD } from "./de/sensebox-sd"; import { SD } from "./de/sensebox-sd";
import { SENSORS } from "./de/sensebox-sensors"; import { SENSORS } from "./de/sensebox-sensors";
import { SENSEBOX } from "./de/sensebox"; import { SENSEBOX } from "./de/sensebox";
@@ -40,6 +41,7 @@ export const De = {
...LORA, ...LORA,
...OSEM, ...OSEM,
...RTC, ...RTC,
...NTP,
...SD, ...SD,
...SENSORS, ...SENSORS,
...SENSEBOX, ...SENSEBOX,
@@ -0,0 +1,11 @@
export const NTP = {
sensebox_ntp_init: "Initialisiere NTP",
sensebox_ntp_init_tooltip: "Initialisiere den NTP Server.",
sensebox_ntp_get: "Hole Zeit von NTP Server: ",
sensebox_ntp_get_timestamp_tooltip:
"Gibt dir einen in ISO 8601 formatierten Zeitstempel zurück. Bsp: 2021-12-24T18:21Z",
sensebox_ntp_get_tooltip:
"Gibt dir den ausgewählten Wert zurück. Unix Zeit entspricht der Anzahl der Sekunden seit dem 1.1.1970",
sensebox_ntp_epochTime: "Unix Zeit",
sensebox_ntp_formattedTimeStamp: "Zeitstempel (hh:mm:ss)",
};
@@ -10,11 +10,12 @@ export const OSEM = {
senseBox_send_to_osem: "Sende Messwert an die openSenseMap", senseBox_send_to_osem: "Sende Messwert an die openSenseMap",
senseBox_osem_connection: "Verbinde mit openSenseMap:", senseBox_osem_connection: "Verbinde mit openSenseMap:",
senseBox_osem_host: "opensensemap.org", senseBox_osem_host: "opensensemap.org",
senseBox_osem_host_workshop: "workshop.opensensemap.org", senseBox_osem_host_testing: "testing.opensensemap.org",
senseBox_osem_exposure: "Typ", senseBox_osem_exposure: "Typ",
senseBox_osem_stationary: "Stationär", senseBox_osem_stationary: "Stationär",
senseBox_osem_mobile: "Mobil", senseBox_osem_mobile: "Mobil",
senseBox_osem_access_token: "API Schlüssel", senseBox_osem_access_token: "API Schlüssel",
senseBox_osem_xallowtoken: "X-ALLOW-TOKEN",
senseBox_send_mobile_to_osem: senseBox_send_mobile_to_osem:
"Sende Messwert und Standort an die openSenseMap", "Sende Messwert und Standort an die openSenseMap",
senseBox_send_mobile_to_osem_tip: senseBox_send_mobile_to_osem_tip:
+22 -4
View File
@@ -1,14 +1,14 @@
export const RTC = { export const RTC = {
sensebox_rtc_init: "Initialisiere RTC", sensebox_rtc_init: "Initialisiere externe RTC",
sensebox_rtc_init_tooltip: sensebox_rtc_init_tooltip:
"Initialisiere die RTC. Schließe diese an einen der 5 I2C/Wire Anschlüsse an und lege die Batterie ein. Bevor du die Uhrzeit auslesen kannst muss diese zunächst einmal gesetzt werden. Dieser Schritt muss normalerweise nur einmalig durchgeführt werden.", "Initialisiere die RTC. Schließe diese an einen der 5 I2C/Wire Anschlüsse an und lege die Batterie ein. Bevor du die Uhrzeit auslesen kannst muss diese zunächst einmal gesetzt werden. Dieser Schritt muss normalerweise nur einmalig durchgeführt werden.",
sensebox_rtc_set: "Setze Uhrzeit/Datum der RTC", sensebox_rtc_set: "Setze Uhrzeit/Datum der externen RTC",
sensebox_rtc_set_tooltip: sensebox_rtc_set_tooltip:
"Stellt die Uhrzeit der RTC ein. Beachte, dass du diesen Block im Setup ausführst.", "Stellt die Uhrzeit der RTC ein. Beachte, dass du diesen Block im Setup ausführst.",
sensebox_rtc_get_timestamp: "Zeitstempel (RFC 3339)", sensebox_rtc_get_timestamp: "Zeitstempel externe RTC (RFC 3339)",
sensebox_rtc_get_timestamp_tooltip: sensebox_rtc_get_timestamp_tooltip:
"Gibt dir einen in ISO 8601 formatierten Zeitstempel zurück. Bsp: 2021-12-24T18:21Z", "Gibt dir einen in ISO 8601 formatierten Zeitstempel zurück. Bsp: 2021-12-24T18:21Z",
sensebox_rtc_get: "Wert: ", sensebox_rtc_get: "Wert (externe RTC): ",
sensebox_rtc_get_tooltip: "Gibt dir den ausgewählten Wert zurück.", sensebox_rtc_get_tooltip: "Gibt dir den ausgewählten Wert zurück.",
sensebox_rtc_second: "Sekunden", sensebox_rtc_second: "Sekunden",
sensebox_rtc_minutes: "Minuten", sensebox_rtc_minutes: "Minuten",
@@ -16,4 +16,22 @@ export const RTC = {
sensebox_rtc_day: "Tag", sensebox_rtc_day: "Tag",
sensebox_rtc_month: "Monat", sensebox_rtc_month: "Monat",
sensebox_rtc_year: "Jahr", sensebox_rtc_year: "Jahr",
sensebox_internal_rtc_init: "Initialisiere interne RTC",
sensebox_internal_rtc_init_tooltip:
"Initialisieren der internen RTC. Diese RTC ist nicht batteriegepuffert und wird bei jedem Einschaltvorgang zurückgesetzt",
sensebox_internal_rtc_set: "Setze interne RTC Zeit/Datum (Unix Time)",
sensebox_internal_rtc_set_tooltip:
"Setzt die Zeit der internen RTC. Führe den Block einmalig im Setup aus und setzte die Uhrzeit über die Unix Zeit.",
sensebox_internal_rtc_get: "Wert (interne RTC): ",
sensebox_internal_rtc_get_timestamp: "Zeitstempel interne RTC (RFC 3339)",
sensebox_internal_rtc_get_timestamp_tooltip:
"Returns a timestamp formatted in ISO 8601. Ex: 2021-12-24T18:21Z",
sensebox_internal_rtc_get_tooltip: "Gibt den ausgewählten Wert zurück",
sensebox_internal_rtc_epoch: "Unix Zeit",
sensebox_internal_rtc_year: "Jahr",
sensebox_internal_rtc_month: "Monat",
sensebox_internal_rtc_day: "Tag",
sensebox_internal_rtc_hour: "Stunde",
sensebox_internal_rtc_minutes: "Minute",
sensebox_internal_rtc_seconds: "Sekunde",
}; };
@@ -140,6 +140,7 @@ Wenn die maximale Distanz überschritten wird, wird ein Wert von **O** ausgegebe
senseBox_bme_iaq: "Innenraumluftqualität (IAQ)", senseBox_bme_iaq: "Innenraumluftqualität (IAQ)",
senseBox_bme_iaq_accuracy: "Kalibrierungswert", senseBox_bme_iaq_accuracy: "Kalibrierungswert",
senseBox_bme_co2: "CO2 Äquivalent", senseBox_bme_co2: "CO2 Äquivalent",
senseBox_bme_pressure: "Luftdruck in Pa",
senseBox_bme_breatheVocEquivalent: "Atemluft VOC Äquivalent", senseBox_bme_breatheVocEquivalent: "Atemluft VOC Äquivalent",
senseBox_bme_tooltip: `Schließe den Umweltsensor an einen der 5 **I2C-Anschlüsse** an. **Beachte:** Der Sensor benöigt eine gewisse Zeit zum kalibrieren. senseBox_bme_tooltip: `Schließe den Umweltsensor an einen der 5 **I2C-Anschlüsse** an. **Beachte:** Der Sensor benöigt eine gewisse Zeit zum kalibrieren.
Den Status der Kalibrierung kann über den Kalibrierungswert abgelesen werden. Er ist entweder 0, 1, 2 oder 3 und sagt folgendes aus: Den Status der Kalibrierung kann über den Kalibrierungswert abgelesen werden. Er ist entweder 0, 1, 2 oder 3 und sagt folgendes aus:
@@ -175,7 +176,7 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver
* Feinstaubsensor (SDS011) * Feinstaubsensor (SDS011)
*/ */
senseBox_sds011: "Feinstaubsensor", senseBox_sds011: "Feinstaubsensor SDS011",
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",
@@ -200,4 +201,23 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver
- "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: "",
/**
* Feinstaubsensor Sensirion SPS30
*/
senseBox_sps30: "Feinstaubsensor Sensirion SPS30",
senseBox_sps30_dimension: "in µg/m³",
senseBox_sps30_1p0: "PM1.0",
senseBox_sps30_2p5: "PM2.5",
senseBox_sps30_4p0: "PM4.0",
senseBox_sps30_10p0: "PM10",
senseBox_sps30_tooltip:"Dieser Block gibt dir den Messwert des Sensirion SPS30 Feinstaubsensor. Schließe den Feinstaubsensor an einen der 5 **I2C** Anschlüssen an. Im Dropdown Menü zwischen PM1.0, PM2.5, PM4.0 und PM10 auswählen. Der Messwert wird dir als **Kommazahl** in µg/m3",
senseBox_sps30_helpurl:
"https://docs.sensebox.de/hardware/sensoren-feinstaub/",
}; };
+7 -2
View File
@@ -8,11 +8,15 @@ export const UI = {
toolbox_math: "Mathematik", toolbox_math: "Mathematik",
toolbox_io: "Eingang/Ausgang", toolbox_io: "Eingang/Ausgang",
toolbox_time: "Zeit", toolbox_time: "Zeit",
toolbox_rtc: "RTC",
toolbox_ntp: "NTP",
toolbox_functions: "Funktionen", toolbox_functions: "Funktionen",
toolbox_variables: "Variablen", toolbox_variables: "Variablen",
toolbox_serial: "Seriell", toolbox_serial: "Seriell",
toolbox_advanced: "Erweitert", toolbox_advanced: "Erweitert",
toolbox_motors: "Motoren", toolbox_motors: "Motoren",
toolbox_label_externalRTC: "Externe RTC",
toolbox_label_internalRTC: "Interne RTC",
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)",
@@ -309,7 +313,8 @@ export const UI = {
* Device Selction * Device Selction
* */ * */
deviceselection_head: "Welches Board benutzt du?", deviceselection_head: "Welches Board benutzt du?",
deviceselection_keep_selection: "Speichere meine Auswahl fürs nächste Mal (Du kannst das Board später in den Einstellungen wechseln)", deviceselection_keep_selection:
"Speichere meine Auswahl fürs nächste Mal (Du kannst das Board später in den Einstellungen wechseln)",
deviceselection_footnote: "Hier kommst du zur alten Blockly Version für den ", deviceselection_footnote: "Hier kommst du zur alten Blockly Version für den ",
deviceselection_footnote_02: "oder die" deviceselection_footnote_02: "oder die",
}; };
+2
View File
@@ -13,6 +13,7 @@ import { LED } from "./en/sensebox-led";
import { LORA } from "./en/sensebox-lora"; import { LORA } from "./en/sensebox-lora";
import { OSEM } from "./en/sensebox-osem"; import { OSEM } from "./en/sensebox-osem";
import { RTC } from "./en/sensebox-rtc"; import { RTC } from "./en/sensebox-rtc";
import { NTP } from "./en/sensebox-ntp";
import { SD } from "./en/sensebox-sd"; import { SD } from "./en/sensebox-sd";
import { SENSORS } from "./en/sensebox-sensors"; import { SENSORS } from "./en/sensebox-sensors";
import { TELEGRAM } from "./en/sensebox-telegram"; import { TELEGRAM } from "./en/sensebox-telegram";
@@ -40,6 +41,7 @@ export const En = {
...LORA, ...LORA,
...OSEM, ...OSEM,
...RTC, ...RTC,
...NTP,
...SD, ...SD,
...SENSORS, ...SENSORS,
...SENSEBOX, ...SENSEBOX,
@@ -0,0 +1,10 @@
export const NTP = {
sensebox_ntp_init: "Initialise NTP",
sensebox_ntp_init_tooltip:
"Initialisiere die RTC. Schließe diese an einen der 5 I2C/Wire Anschlüsse an und lege die Batterie ein. Bevor du die Uhrzeit auslesen kannst muss diese zunächst einmal gesetzt werden. Dieser Schritt muss normalerweise nur einmalig durchgeführt werden.",
sensebox_ntp_get: "Get time from NTP Server: ",
sensebox_ntp_get_tooltip:
"Gibt dir den ausgewählten Wert zurück. Unix Zeit entspricht der Anzahl der Sekunden seit dem 1.1.1970",
sensebox_ntp_epochTime: "Unix time",
sensebox_ntp_formattedTimeStamp: "Timestamp (hh:mm:ss)",
};
@@ -11,11 +11,12 @@ export const OSEM = {
senseBox_send_to_osem: "Send measurement to openSenseMap", senseBox_send_to_osem: "Send measurement to openSenseMap",
senseBox_osem_connection: "Connect to openSenseMap", senseBox_osem_connection: "Connect to openSenseMap",
senseBox_osem_host: "opensensemap.org", senseBox_osem_host: "opensensemap.org",
senseBox_osem_host_workshop: "workshop.opensensemap.org", senseBox_osem_host_testing: "testing.opensensemap.org",
senseBox_osem_exposure: "Type", senseBox_osem_exposure: "Type",
senseBox_osem_stationary: "Stationary", senseBox_osem_stationary: "Stationary",
senseBox_osem_mobile: "Mobile", senseBox_osem_mobile: "Mobile",
senseBox_osem_access_token: "API Key", senseBox_osem_access_token: "API Key",
senseBox_osem_xallowtoken: "X-ALLOW-TOKEN",
senseBox_send_mobile_to_osem: "Send measurement and location to openSenseMap", senseBox_send_mobile_to_osem: "Send measurement and location to openSenseMap",
senseBox_send_mobile_to_osem_tip: "Send Value and Location to openSenseMap", senseBox_send_mobile_to_osem_tip: "Send Value and Location to openSenseMap",
senseBox_osem_restart: "Restart device if disconnected?", senseBox_osem_restart: "Restart device if disconnected?",
+20 -2
View File
@@ -1,11 +1,11 @@
export const RTC = { export const RTC = {
sensebox_rtc_init: "Initialise RTC", sensebox_rtc_init: "Initialise external RTC",
sensebox_rtc_init_tooltip: sensebox_rtc_init_tooltip:
"Initialise the RTC. Connect it to one of the 5 I2C/Wire connections and insert the battery. Before you can read out the time, it must first be set. This step usually only needs to be done once.", "Initialise the RTC. Connect it to one of the 5 I2C/Wire connections and insert the battery. Before you can read out the time, it must first be set. This step usually only needs to be done once.",
sensebox_rtc_set: "Set RTC time/date:", sensebox_rtc_set: "Set RTC time/date:",
sensebox_rtc_set_tooltip: sensebox_rtc_set_tooltip:
"Sets the time of the RTC. Note that you execute this block in the setup.", "Sets the time of the RTC. Note that you execute this block in the setup.",
sensebox_rtc_get_timestamp: "Get timestamp", sensebox_rtc_get_timestamp: "Timestamp external RTC (RFC 3339)",
sensebox_rtc_get_timestamp_tooltip: sensebox_rtc_get_timestamp_tooltip:
"Returns a timestamp formatted in ISO 8601. Ex: 2021-12-24T18:21Z", "Returns a timestamp formatted in ISO 8601. Ex: 2021-12-24T18:21Z",
sensebox_rtc_get_tooltip: "Returns the selected value", sensebox_rtc_get_tooltip: "Returns the selected value",
@@ -17,4 +17,22 @@ export const RTC = {
sensebox_rtc_day: "day", sensebox_rtc_day: "day",
sensebox_rtc_month: "month", sensebox_rtc_month: "month",
sensebox_rtc_year: "year", sensebox_rtc_year: "year",
sensebox_internal_rtc_init: "Initialise internal RTC",
sensebox_internal_rtc_init_tooltip:
"Initialise the internal RTC. This RTC is not battery backed and will be reset on every power cycle.",
sensebox_internal_rtc_set: "Set internal RTC time/date:",
sensebox_internal_rtc_set_tooltip:
"Sets the time of the internal RTC. Note that you execute this block in the setup.",
sensebox_internal_rtc_get: "Get: ",
sensebox_internal_rtc_get_timestamp: "Timestamp internal RTC (RFC 3339)",
sensebox_internal_rtc_get_timestamp_tooltip:
"Returns a timestamp formatted in ISO 8601. Ex: 2021-12-24T18:21Z",
sensebox_internal_rtc_get_tooltip: "Returns the selected value",
sensebox_internal_rtc_epoch: "Unix Time",
sensebox_internal_rtc_year: "year",
sensebox_internal_rtc_month: "month",
sensebox_internal_rtc_day: "day",
sensebox_internal_rtc_hour: "hour",
sensebox_internal_rtc_minutes: "minutes",
sensebox_internal_rtc_seconds: "seconds",
}; };
@@ -141,6 +141,7 @@ If the max distance is reached the a value of **O** will be returned`,
senseBox_bme680: "Environmental sensor (BME680)", senseBox_bme680: "Environmental sensor (BME680)",
senseBox_bme_iaq: "Indoor Air Quality (IAQ)", senseBox_bme_iaq: "Indoor Air Quality (IAQ)",
senseBox_bme_iaq_accuracy: "Calibration Value", senseBox_bme_iaq_accuracy: "Calibration Value",
senseBox_bme_pressure: "Airpressure in Pa",
senseBox_bme_co2: "CO2 Equivalent", senseBox_bme_co2: "CO2 Equivalent",
senseBox_bme_breatheVocEquivalent: "Breathe VOC Equivalent", senseBox_bme_breatheVocEquivalent: "Breathe VOC Equivalent",
senseBox_bme_tooltip: `Connect the environmental sensor to one of the 5 **I2C ports**. **Note:** The sensor needs some time to calibrate. senseBox_bme_tooltip: `Connect the environmental sensor to one of the 5 **I2C ports**. **Note:** The sensor needs some time to calibrate.
@@ -205,4 +206,23 @@ The measured values for temperature, humidity and air pressure can be used direc
* *
*/ */
senseBox_watertemperature: "Water Temperature", senseBox_watertemperature: "Water Temperature",
/**
* Feinstaubsensor Sensirion SPS30
*/
senseBox_sps30: "Particulate Matter Sensor (Sensirion SPS30)",
senseBox_sps30_dimension: "in µg/m³",
senseBox_sps30_1p0: "PM1.0",
senseBox_sps30_2p5: "PM2.5",
senseBox_sps30_4p0: "PM4.0",
senseBox_sps30_10p0: "PM10",
senseBox_sps30_tooltip:
"This block gives you the measured value of the Sensirion SPS30 fine dust sensor. Connect the fine dust sensor to one of the 5 **I2C** connectors. Select between PM1.0, PM2.5, PM4.0 and PM10 in the dropdown menu. The measured value will be displayed as **decimal** in µg/m3",
senseBox_sps30_helpurl:
"https://docs.sensebox.de/hardware/sensoren-feinstaub/",
}; };
+8 -4
View File
@@ -8,11 +8,15 @@ export const UI = {
toolbox_math: "Math", toolbox_math: "Math",
toolbox_io: "Input/Output", toolbox_io: "Input/Output",
toolbox_time: "Time", toolbox_time: "Time",
toolbox_rtc: "RTC",
toolbox_ntp: "NTP",
toolbox_functions: "Functions", toolbox_functions: "Functions",
toolbox_variables: "Variables", toolbox_variables: "Variables",
toolbox_serial: "Serial", toolbox_serial: "Serial",
toolbox_advanced: "Erweitert", toolbox_advanced: "Erweitert",
toolbox_motors: "Motors", toolbox_motors: "Motors",
toolbox_label_externalRTC: "External RTC",
toolbox_label_internalRTC: "Internal RTC",
variable_NUMBER: "Number (int)", variable_NUMBER: "Number (int)",
variable_SHORT_NUMBER: "char", variable_SHORT_NUMBER: "char",
variable_LONG: " Zahl (long)", variable_LONG: " Zahl (long)",
@@ -304,9 +308,9 @@ export const UI = {
* Device Selction * Device Selction
* */ * */
deviceselection_head: "Which board are you using?", deviceselection_head: "Which board are you using?",
deviceselection_keep_selection: "Save my choice (You can change the board later in the settings)", deviceselection_keep_selection:
deviceselection_footnote: "Here you can access the old blockly Version for the", "Save my choice (You can change the board later in the settings)",
deviceselection_footnote:
"Here you can access the old blockly Version for the",
deviceselection_footnote_02: "or the", deviceselection_footnote_02: "or the",
}; };
+27 -2
View File
@@ -1,5 +1,5 @@
import React from "react"; import React from "react";
import { Block, Value, Field, Shadow, Category } from "../"; import { Block, Value, Field, Shadow, Category, Sep, Label } from "../";
import { getColour } from "../helpers/colour"; import { getColour } from "../helpers/colour";
import "@blockly/block-plus-minus"; import "@blockly/block-plus-minus";
import { TypedVariableModal } from "@blockly/plugin-typed-variable-modal"; import { TypedVariableModal } from "@blockly/plugin-typed-variable-modal";
@@ -61,6 +61,7 @@ class Toolbox extends React.Component {
<Block type="sensebox_sensor_uv_light" /> <Block type="sensebox_sensor_uv_light" />
<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_sps30" />
<Block type="sensebox_sensor_pressure" /> <Block type="sensebox_sensor_pressure" />
<Block type="sensebox_sensor_dps310" /> <Block type="sensebox_sensor_dps310" />
<Block type="sensebox_sensor_bme680_bsec" /> <Block type="sensebox_sensor_bme680_bsec" />
@@ -502,6 +503,12 @@ class Toolbox extends React.Component {
<Block type="time_micros"></Block> <Block type="time_micros"></Block>
<Block type="infinite_loop"></Block> <Block type="infinite_loop"></Block>
<Block type="sensebox_interval_timer"></Block> <Block type="sensebox_interval_timer"></Block>
<Category
id="time"
name={Blockly.Msg.toolbox_rtc}
colour={getColour().time}
>
<Label text={Blockly.Msg.toolbox_label_externalRTC}></Label>
<Block type="sensebox_rtc_init"></Block> <Block type="sensebox_rtc_init"></Block>
<Block type="sensebox_rtc_set"> <Block type="sensebox_rtc_set">
<Value name="second"> <Value name="second">
@@ -538,6 +545,21 @@ class Toolbox extends React.Component {
{/* <Block type="sensebox_rtc_set_ntp"></Block> */} {/* <Block type="sensebox_rtc_set_ntp"></Block> */}
<Block type="sensebox_rtc_get"></Block> <Block type="sensebox_rtc_get"></Block>
<Block type="sensebox_rtc_get_timestamp"></Block> <Block type="sensebox_rtc_get_timestamp"></Block>
<Sep gap="40"></Sep>
<Label text={Blockly.Msg.toolbox_label_internalRTC}></Label>
<Block type="sensebox_internal_rtc_init"></Block>
<Block type="sensebox_internal_rtc_set"></Block>
<Block type="sensebox_internal_rtc_get"></Block>
<Block type="sensebox_internal_rtc_get_timestamp"></Block>
</Category>
<Category
id="timeUTP"
name={Blockly.Msg.toolbox_ntp}
colour={getColour().time}
>
<Block type="sensebox_ntp_init"></Block>
<Block type="sensebox_ntp_get"></Block>
</Category>
</Category> </Category>
<Category <Category
id="math" id="math"
@@ -643,7 +665,10 @@ class Toolbox extends React.Component {
</Value> </Value>
</Block> </Block>
</Category> </Category>
<Category name={Blockly.Msg.toolbox_motors} colour={getColour().motors}> <Category
name={Blockly.Msg.toolbox_motors}
colour={getColour().motors}
>
<Block type="sensebox_motors_beginServoMotor" /> <Block type="sensebox_motors_beginServoMotor" />
<Block type="sensebox_motors_moveServoMotor"> <Block type="sensebox_motors_moveServoMotor">
<Value name="degrees"> <Value name="degrees">
+37 -12
View File
@@ -4,11 +4,11 @@ import { connect } from "react-redux";
import Dialog from "./Dialog"; import Dialog from "./Dialog";
import { withStyles } from "@material-ui/core/styles"; import { withStyles } from "@material-ui/core/styles";
import Checkbox from "@material-ui/core/Checkbox";
import FormControlLabel from "@material-ui/core/FormControlLabel";
import * as Blockly from "blockly"; import * as Blockly from "blockly";
import { IconButton, Grid, Avatar, Typography } from "@material-ui/core"; import { IconButton, Grid, Avatar, Typography } from "@material-ui/core";
import { setBoard } from "../actions/boardAction"; import { setBoard } from "../actions/boardAction";
import mini_opacity from "../data/mini_opacity.png"
import mcu_opacity from "../data/mcu_opacity.png"
const styles = (theme) => ({ const styles = (theme) => ({
link: { link: {
@@ -27,32 +27,41 @@ const styles = (theme) => ({
class DeviceSeclection extends Component { class DeviceSeclection extends Component {
constructor(props) { constructor(props) {
var previousPageWasAnotherDomain = props.pageVisits === 0;
var userWantToKeepBoard = window.localStorage.getItem("board")
? true
: false;
super(props); super(props);
this.state = { this.state = {
open: this.props.selectedBoard !== "" ? false : true, open: userWantToKeepBoard
selectedBoard : this.props.selectedBoard, ? !userWantToKeepBoard
: previousPageWasAnotherDomain,
selectedBoard : "",
saveSettings: false, saveSettings: false,
}; };
} }
toggleDialog = () => { toggleDialog = () => {
this.setState({ open: !this.state });
if(this.state.saveSettings){
window.localStorage.setItem("board", this.state.selectedBoard)
}
this.props.setBoard(this.state.selectedBoard) this.props.setBoard(this.state.selectedBoard)
}; };
onChange = (e) => {
if (e.target.checked) {
this.setState({ saveSettings: true});
} else {
this.setState({ saveSettings: false});
}
};
onclick = (e, value) => { onclick = (e, value) => {
console.log(e, value) console.log(e, value)
const root = document.querySelector(':root');
root.style.setProperty('--url', `url(${value === "mcu" ? mcu_opacity : mini_opacity })`);
this.setState({selectedBoard: value}) this.setState({selectedBoard: value})
this.props.setBoard(value)
this.setState({ open: !this.state });
}; };
render() { render() {
@@ -65,6 +74,7 @@ class DeviceSeclection extends Component {
title={Blockly.Msg.deviceselection_head} title={Blockly.Msg.deviceselection_head}
content={""} content={""}
onClick={this.toggleDialog} onClick={this.toggleDialog}
button={Blockly.Msg.button_accept}
disabled={this.state.selectedBoard===""} disabled={this.state.selectedBoard===""}
> >
<div> <div>
@@ -114,6 +124,21 @@ class DeviceSeclection extends Component {
</Grid> </Grid>
</Grid> </Grid>
</div> </div>
<FormControlLabel
style={{ marginTop: "20px" }}
classes={{ label: this.props.classes.label }}
control={
<Checkbox
size={"small"}
value={true}
checked={this.state.checked}
onChange={(e) => this.onChange(e)}
name="dialog"
color="primary"
/>
}
label={Blockly.Msg.deviceselection_keep_selection}
/>
<Typography variant="body1" > <Typography variant="body1" >
{Blockly.Msg.deviceselection_footnote} <a href="https://sensebox.github.io/blockly/">Arduino UNO</a> {Blockly.Msg.deviceselection_footnote_02} <a href="https://sensebox-blockly.netlify.app/ardublockly/?board=sensebox-mcu">senseBox MCU</a> {Blockly.Msg.deviceselection_footnote} <a href="https://sensebox.github.io/blockly/">Arduino UNO</a> {Blockly.Msg.deviceselection_footnote_02} <a href="https://sensebox-blockly.netlify.app/ardublockly/?board=sensebox-mcu">senseBox MCU</a>
</Typography> </Typography>
-1
View File
@@ -187,7 +187,6 @@ class Home extends Component {
</Grid> </Grid>
) : null} ) : null}
</Grid> </Grid>
<DeviceSelection /> <DeviceSelection />
{/* <HintTutorialExists /> */} {/* <HintTutorialExists /> */}
{this.props.platform ? ( {this.props.platform ? (
+26 -2
View File
@@ -1,7 +1,7 @@
import React, { Component } from "react"; import React, { Component } from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { visitPage } from "../../actions/generalActions"; import { visitPage, setPlatform } from "../../actions/generalActions";
import { Route, Switch, withRouter } from "react-router-dom"; import { Route, Switch, withRouter } from "react-router-dom";
@@ -27,6 +27,24 @@ import Faq from "../Faq";
import CodeEditor from "../CodeEditor/CodeEditor"; import CodeEditor from "../CodeEditor/CodeEditor";
class Routes extends Component { class Routes extends Component {
componentDidMount() {
const { location } = this.props;
const query = new URLSearchParams(location.search, [location.search]);
const mode = query.get('mode');
if (!this.props.platform && mode) {
switch (mode.toLowerCase()) {
case 'tablet':
this.props.setPlatform(true);
break;
default:
break;
}
}
}
componentDidUpdate() { componentDidUpdate() {
this.props.visitPage(); this.props.visitPage();
} }
@@ -105,6 +123,12 @@ class Routes extends Component {
Home.propTypes = { Home.propTypes = {
visitPage: PropTypes.func, visitPage: PropTypes.func,
platform: PropTypes.bool.isRequired,
setPlatform: PropTypes.func.isRequired
}; };
export default connect(null, { visitPage })(withRouter(Routes)); const mapStateToProps = (state) => ({
platform: state.general.platform,
});
export default connect(mapStateToProps, { visitPage, setPlatform })(withRouter(Routes));
+37 -3
View File
@@ -4,12 +4,22 @@
"name": "senseBox MCU", "name": "senseBox MCU",
"src": "senseboxmcu.png", "src": "senseboxmcu.png",
"url": "https://docs.sensebox.de/hardware/allgemein-sensebox-mcu/", "url": "https://docs.sensebox.de/hardware/allgemein-sensebox-mcu/",
"category": "boards",
"description": "test" "description": "test"
}, },
{
"id": "senseboxmcumini",
"name": "senseBox MCU:mini",
"src": "senseboxmcumini.png",
"url": "https://docs.sensebox.de/hardware/allgemein-sensebox-mcu-mini/",
"category": "boards",
"description": ""
},
{ {
"id": "breadboard", "id": "breadboard",
"name": "Breadboard", "name": "Breadboard",
"src": "breadboard.png", "src": "breadboard.png",
"category": "misc",
"url": "" "url": ""
}, },
{ {
@@ -56,10 +66,16 @@
}, },
{ {
"id": "feinstaub", "id": "feinstaub",
"name": "Feinstaubsensor", "name": "Feinstaubsensor (SDS011)",
"src": "feinstaub.png", "src": "feinstaub.png",
"url": "https://docs.sensebox.de/hardware/sensoren-feinstaub/" "url": "https://docs.sensebox.de/hardware/sensoren-feinstaub/"
}, },
{
"id": "feinstaub-sps30",
"name": "Feinstaubsensor (SPS30)",
"src": "sps30.png",
"url": "https://docs.sensebox.de/hardware/sensoren-feinstaub/"
},
{ {
"id": "gps", "id": "gps",
"name": "GPS-Modul", "name": "GPS-Modul",
@@ -140,8 +156,14 @@
}, },
{ {
"id": "ds1820b", "id": "ds1820b",
"name": "Wassertemperatur", "name": "Wassertemperatur Sensor",
"src": "ws2818.png", "src": "wassertemp.png",
"url": ""
},
{
"id": "expander",
"name": "I2C Expander",
"src": "expander.png",
"url": "" "url": ""
}, },
{ {
@@ -162,6 +184,18 @@
"src": "jst-jst.png", "src": "jst-jst.png",
"url": "" "url": ""
}, },
{
"id": "jst-qwiic",
"name": "JST-QWIIC Kabel",
"src": "jst-qwiic.png",
"url": ""
},
{
"id": "qwiic-qwiic",
"name": "QWIIC-QWICC Kabel",
"src": "qwiic-qwiic.png",
"url": ""
},
{ {
"id": "jumperwire", "id": "jumperwire",
"name": "Steckkabel", "name": "Steckkabel",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

+4 -1
View File
@@ -1,7 +1,10 @@
import { BOARD } from '../actions/types'; import { BOARD } from '../actions/types';
const initialValue = () => { const initialValue = () => {
return ""; if (window.localStorage.getItem("board")) {
return window.localStorage.getItem("board");
}
return "bla";
}; };
const initialState = { const initialState = {