From 2874620a9f1d24fad4eb8797a08f75b410e40563 Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Mon, 12 Dec 2022 10:59:27 +0100 Subject: [PATCH 1/3] init implementation of sps30 block closes #218 --- .../Blockly/blocks/sensebox-sensors.js | 28 +++++++++++ .../Blockly/generator/sensebox-sensors.js | 49 +++++++++++++++++++ .../Blockly/msg/de/sensebox-sensors.js | 24 ++++++++- .../Blockly/msg/en/sensebox-sensors.js | 19 +++++++ src/components/Blockly/toolbox/Toolbox.js | 1 + 5 files changed, 119 insertions(+), 2 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index 7a69df1..707bb64 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -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); + }, +}; \ No newline at end of file diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 9d053c5..da46ec3 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -693,3 +693,52 @@ Blockly.Arduino.sensebox_sensor_dps310 = function () { } 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 "; + Blockly.Arduino.libraries_[ + "sps30" + ] = `#include // 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_ret"] = "int16_t ret;"; + 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]; +}; \ No newline at end of file diff --git a/src/components/Blockly/msg/de/sensebox-sensors.js b/src/components/Blockly/msg/de/sensebox-sensors.js index 64d0baa..fe4b37f 100644 --- a/src/components/Blockly/msg/de/sensebox-sensors.js +++ b/src/components/Blockly/msg/de/sensebox-sensors.js @@ -175,7 +175,7 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver * Feinstaubsensor (SDS011) */ - senseBox_sds011: "Feinstaubsensor", + senseBox_sds011: "Feinstaubsensor SDS011", senseBox_sds011_dimension: "in µg/m³ an", senseBox_sds011_pm25: "PM2.5", senseBox_sds011_pm10: "PM10", @@ -200,4 +200,24 @@ 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 - "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: "", -}; + + + + /** + * 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 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_sps30_helpurl: + "https://docs.sensebox.de/hardware/sensoren-feinstaub/", + + + + }; \ No newline at end of file diff --git a/src/components/Blockly/msg/en/sensebox-sensors.js b/src/components/Blockly/msg/en/sensebox-sensors.js index 94f698a..c6e872f 100644 --- a/src/components/Blockly/msg/en/sensebox-sensors.js +++ b/src/components/Blockly/msg/en/sensebox-sensors.js @@ -205,4 +205,23 @@ The measured values for temperature, humidity and air pressure can be used direc * */ senseBox_watertemperature: "Water Temperature", + + + /** + * 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 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_sps30_helpurl: + "https://docs.sensebox.de/hardware/sensoren-feinstaub/", + + + }; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 7fa9f5a..68c100a 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -61,6 +61,7 @@ class Toolbox extends React.Component { + From 745f6940ece1c3955f3b29364367c9babb8e2dd2 Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Tue, 13 Dec 2022 09:43:24 +0100 Subject: [PATCH 2/3] update tooltip --- src/components/Blockly/msg/de/sensebox-sensors.js | 5 ++--- src/components/Blockly/msg/en/sensebox-sensors.js | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/Blockly/msg/de/sensebox-sensors.js b/src/components/Blockly/msg/de/sensebox-sensors.js index fe4b37f..257301e 100644 --- a/src/components/Blockly/msg/de/sensebox-sensors.js +++ b/src/components/Blockly/msg/de/sensebox-sensors.js @@ -213,9 +213,8 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver senseBox_sps30_2p5: "PM2.5", senseBox_sps30_4p0: "PM4.0", senseBox_sps30_10p0: "PM10", - senseBox_sps30_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_sps30_helpurl: + 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/", diff --git a/src/components/Blockly/msg/en/sensebox-sensors.js b/src/components/Blockly/msg/en/sensebox-sensors.js index c6e872f..83ac1b1 100644 --- a/src/components/Blockly/msg/en/sensebox-sensors.js +++ b/src/components/Blockly/msg/en/sensebox-sensors.js @@ -211,14 +211,14 @@ The measured values for temperature, humidity and air pressure can be used direc * Feinstaubsensor Sensirion SPS30 */ - senseBox_sps30: "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: - "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", + "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/", From b05b3017e1b809fdc690bf2a89c9ca4a84e75bd5 Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Wed, 14 Dec 2022 13:59:31 +0100 Subject: [PATCH 3/3] remove duplicate variable --- .../Blockly/generator/sensebox-sensors.js | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index da46ec3..21b5bb2 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -434,7 +434,8 @@ if (airSensor.begin() == false) while (1) ; }`; - Blockly.Arduino.setupCode_["scd30_staleData"] = "airSensor.useStaleData(true);"; + Blockly.Arduino.setupCode_["scd30_staleData"] = + "airSensor.useStaleData(true);"; var code = ""; switch (dropdown) { case "temperature": @@ -694,24 +695,27 @@ Blockly.Arduino.sensebox_sensor_dps310 = function () { return [code, Blockly.Arduino.ORDER_ATOMIC]; }; - /** * Sensirion SPS30 Fine Particlar Matter * */ - Blockly.Arduino.sensebox_sensor_sps30 = function () { +Blockly.Arduino.sensebox_sensor_sps30 = function () { var dropdown_name = this.getFieldValue("value"); Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; Blockly.Arduino.libraries_[ "sps30" ] = `#include // 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_ret"] = "int16_t ret;"; - 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.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(){ @@ -731,8 +735,10 @@ do { `; 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.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) { @@ -741,4 +747,4 @@ if (time_startsps > time_actualsps + intervalsps) { }`; var code = `m.mc_${dropdown_name}`; return [code, Blockly.Arduino.ORDER_ATOMIC]; -}; \ No newline at end of file +};