From fab53ac92e9832ea7bdf9e07b5f9efc69fff5e08 Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Tue, 17 Sep 2024 16:25:53 +0200 Subject: [PATCH 01/14] added solarcharger as sensor --- .../Blockly/blocks/sensebox-sensors.js | 27 +++++ .../Blockly/generator/sensebox-sensors.js | 111 ++++++++++++++++++ .../Blockly/msg/de/sensebox-sensors.js | 12 ++ src/components/Blockly/toolbox/ToolboxMcu.js | 1 + 4 files changed, 151 insertions(+) diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index b7950689..00a15f7e 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -681,6 +681,33 @@ Blockly.Blocks["sensebox_sensor_sps30"] = { }, }; +/** + * SB-041 SolarCharger + */ + +Blockly.Blocks["sensebox_sensor_sb041"] = { + init: function () { + this.appendDummyInput().appendField(Blockly.Msg.senseBox_sensor_sb041); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField(Blockly.Msg.senseBox_value) + .appendField( + new Blockly.FieldDropdown([ + [Blockly.Msg.senseBox_sensor_sb041_solar_voltage, "solar_voltage"], + [Blockly.Msg.senseBox_sensor_sb041_battery_voltage, "battery_voltage"], + [Blockly.Msg.senseBox_sensor_sb041_battery_level, "battery_level"], + [Blockly.Msg.senseBox_sensor_sb041_battery_temp, "battery_temp"], + // [Blockly.Msg.senseBox_sensor_sb041_battery_status_info, "battery_status_info"], + ]), + "value" + ) + this.setOutput(true, Types.DECIMAL.typeName); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_sensor_sb041_tooltip); + this.setHelpUrl(Blockly.Msg.senseBox_sensor_sb041_helpurl); + }, +}; + /** * senseBox-MCU-S2 onBoard Light Sensor * diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 6cecb0b5..d0d113c5 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -892,6 +892,42 @@ Blockly.Arduino.sensebox_soundsensor_dfrobot = function () { * */ +Blockly.Arduino.sensebox_sensor_dps310 = function () { + var dropdown_name = this.getFieldValue("NAME"); + var code = ""; + var referencePressure = this.getFieldValue("referencePressure"); + Blockly.Arduino.libraries_[ + "adafruit_dps310" + ] = `#include // http://librarymanager/All#Adafruit_DPS310`; + 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]; +};/** + * Infineon DPS310 Pressure Sensor + * + */ + Blockly.Arduino.sensebox_sensor_dps310 = function () { var dropdown_name = this.getFieldValue("NAME"); var code = ""; @@ -978,6 +1014,81 @@ if (time_startsps > time_actualsps + intervalsps) { return [code, Blockly.Arduino.ORDER_ATOMIC]; }; +/** + * SB-041 SolarCharger + * + */ +Blockly.Arduino.sensebox_sensor_sb041 = function () { + var dropdown_name = this.getFieldValue("value"); + Blockly.Arduino.libraries_["library_wire"] = `#include `; + Blockly.Arduino.variables_["sb041_solar_voltage"] = "float solar_voltage;"; + Blockly.Arduino.variables_["sb041_battery_voltage"] = "float battery_voltage;"; + Blockly.Arduino.variables_["sb041_battery_level"] = "int battery_level;"; + Blockly.Arduino.variables_["sb041_battery_temp"] = "float battery_temp;"; + Blockly.Arduino.variables_["sb041_battery_status_info"] = "String battery_status_info;"; + Blockly.Arduino.codeFunctions_["sb041_solar_update"] = ` +void solar_update() { + /* + * I2C i/f with following info on address 0x32: + * - Register 0: cell voltage, 20mV/LSB + * - Register 1: input voltage, 100mV/LSB + * - Register 2: status bits: [B,I,L3,L2,L1,L0,F,C] + * B=battery present >2.8V + * I=Input voltage present > 4.5V + * L0-L3=battery status LEDs + * F=Fast charge enabled + * C=Charging + * - Register 3: temperature in C, signed 8-bit + * Thresholds: L0: 3.2V, L1: 3.6V, L2: 3.7V, L3: 3.9V <- somewhere the order + * is wrong + * + * i Switch to slow charge at 8*C Switch to fast charge at 12*C + */ + byte address = 0x32; + Wire.beginTransmission(address); + byte error = Wire.endTransmission(); + if (error == 0) { + Wire.requestFrom((uint8_t)address, (uint8_t)4); + uint vbat = Wire.read(); + uint vin = Wire.read(); + uint flags = Wire.read(); + int temp = (int8_t)(Wire.read()); + battery_voltage = 0.02 * vbat; + solar_voltage = 0.1 * vin; + if (flags & 32) + battery_level = 4; + else if (flags & 16) + battery_level = 3; + else if (flags & 8) + battery_level = 2; + else if (flags & 4) + battery_level = 1; + else + battery_level = 0; + if (flags & 1) + battery_status_info = "charging\\n" + String(flags); + else + battery_status_info = "not charging\\n"; + if (flags & 64) + battery_status_info += "good input voltage\\n"; + else + battery_status_info += "low input voltage\\n"; + if (flags & 128) + battery_status_info += "battery present"; + else + battery_status_info += "battery missing"; + } else if (error == 2) { + battery_status_info = "solar module not connected"; + } else if (error) { + battery_status_info = "unknown error "; + battery_status_info += String(error); + } +} + `; + Blockly.Arduino.setupCode_["solar_update"] = "solar_update();"; + return [dropdown_name, Blockly.Arduino.ORDER_ATOMIC]; +}; + /** * senseBox MCU-S2 onboard Light Sensor * diff --git a/src/components/Blockly/msg/de/sensebox-sensors.js b/src/components/Blockly/msg/de/sensebox-sensors.js index b8ca134b..133cd31d 100644 --- a/src/components/Blockly/msg/de/sensebox-sensors.js +++ b/src/components/Blockly/msg/de/sensebox-sensors.js @@ -26,6 +26,18 @@ export const SENSORS = { "Schließe den Sensor an einen der **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: "", + /** + * SB-041 + */ + senseBox_sensor_sb041: "Solarladeregler (SB-041)", + senseBox_sensor_sb041_solar_voltage: "Spannung der Solarplatte in V", + senseBox_sensor_sb041_battery_voltage: "Spannung der Batterie in V", + senseBox_sensor_sb041_battery_level: "Ladelevel der batterie in 1/4", + senseBox_sensor_sb041_battery_temp: "Temperatur der Batterie in C", + senseBox_sensor_sb041_tooltip: + "Schließe den Sensor an einen der **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_sb041_helpurl: "", + /** * Mikro */ diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index 0da13b44..0adc569b 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -19,6 +19,7 @@ import * as Blockly from "blockly/core"; + From bb51c3d3041dfa032c7e01a3401af899e9150542 Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Thu, 26 Sep 2024 17:16:38 +0200 Subject: [PATCH 02/14] first blocks prototypes added --- src/components/Blockly/blocks/time.js | 19 +++++++++++++++++++ src/components/Blockly/generator/time.js | 14 ++++++++++++++ src/components/Blockly/msg/de/time.js | 3 +++ src/components/Blockly/toolbox/ToolboxEsp.js | 2 ++ 4 files changed, 38 insertions(+) diff --git a/src/components/Blockly/blocks/time.js b/src/components/Blockly/blocks/time.js index 497c353b..cfd243c5 100644 --- a/src/components/Blockly/blocks/time.js +++ b/src/components/Blockly/blocks/time.js @@ -104,6 +104,25 @@ Blockly.Blocks["infinite_loop"] = { }, }; +Blockly.Blocks["deep_sleep_esp32s2"] = { + /** + * Enter deep sleep and wake up after specific time. + * @this Blockly.Block + */ + init: function () { + this.setColour(getColour().time); + this.appendDummyInput().appendField(); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.appendValueInput("sleep_time") + .setCheck(Types.NUMBER.checkList) + .appendField(Blockly.Msg.deep_sleep_esp32s2); + this.appendDummyInput().appendField(Blockly.Msg.deep_sleep_esp32s2_unit); + this.setHelpUrl(deep_sleep_esp32s2_tooltip); + this.setTooltip(deep_sleep_esp32s2_helpurl); + }, +}; + // Blockly.Blocks["sensebox_interval_timer"] = { // init: function () { // this.setTooltip(Blockly.Msg.senseBox_interval_timer_tip); diff --git a/src/components/Blockly/generator/time.js b/src/components/Blockly/generator/time.js index 1310fa53..957c12e4 100644 --- a/src/components/Blockly/generator/time.js +++ b/src/components/Blockly/generator/time.js @@ -91,6 +91,20 @@ Blockly.Arduino["infinite_loop"] = function (block) { // return code; // }; +/** + * Code generator for deep sleep of ESP32-S2 + * @param {!Blockly.Block} block Block to generate the code from. + * @return {string} Completed code. + */ +Blockly.Arduino["deep_sleep_esp32s2"] = function (block) { + Blockly.Arduino.libraries_["library_wire"] = `#include `; + Blockly.Arduino.variables_["sb041_solar_voltage"] = "float solar_voltage;"; + Blockly.Arduino.variables_["sb041_battery_voltage"] = "float battery_voltage;"; + Blockly.Arduino.variables_["sb041_battery_level"] = "int battery_level;"; + Blockly.Arduino.variables_["sb041_battery_temp"] = "float battery_temp;"; + return "while(true);\n"; +}; + Blockly.Arduino.sensebox_interval_timer = function (block) { var intervalTime = this.getFieldValue("interval"); var intervalName = this.getFieldValue("name"); diff --git a/src/components/Blockly/msg/de/time.js b/src/components/Blockly/msg/de/time.js index 800c3aa8..454b54c9 100644 --- a/src/components/Blockly/msg/de/time.js +++ b/src/components/Blockly/msg/de/time.js @@ -19,4 +19,7 @@ export const TIME = { ARD_TIME_MILLIS_TIP: "Gibt eine Zahl in Millisekunden zurück, die der Zeitdauer des Aktuellen Programms entspricht. Muss als positiven Integer gespeichert werden", // untranslated ARD_TIME_MS: "Millisekunden", + + deep_sleep_esp32s2: "Tiefschlaf und Neustart nach", + deep_sleep_esp32s2_unit: "Sekunden" }; diff --git a/src/components/Blockly/toolbox/ToolboxEsp.js b/src/components/Blockly/toolbox/ToolboxEsp.js index 2e9b9858..a247022c 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.js +++ b/src/components/Blockly/toolbox/ToolboxEsp.js @@ -19,6 +19,7 @@ export const ToolboxEsp = () => { + @@ -486,6 +487,7 @@ export const ToolboxEsp = () => { + Date: Tue, 22 Oct 2024 17:04:42 +0200 Subject: [PATCH 03/14] progress on implementation --- .vscode/settings.json | 3 + src/components/Blockly/blocks/index.js | 1 + .../Blockly/blocks/sensebox-sensors.js | 27 ----- .../Blockly/blocks/sensebox-solar.js | 66 +++++++++++ src/components/Blockly/blocks/time.js | 19 --- src/components/Blockly/generator/index.js | 1 + .../Blockly/generator/sensebox-sensors.js | 75 ------------ .../Blockly/generator/sensebox-solar.js | 109 ++++++++++++++++++ src/components/Blockly/helpers/colour.js | 1 + src/components/Blockly/index.js | 8 +- src/components/Blockly/msg/de.js | 2 + .../Blockly/msg/de/sensebox-sensors.js | 12 -- .../Blockly/msg/de/sensebox-solar.js | 25 ++++ src/components/Blockly/msg/de/time.js | 4 +- src/components/Blockly/toolbox/ToolboxMcu.js | 28 ++++- 15 files changed, 244 insertions(+), 137 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/components/Blockly/blocks/sensebox-solar.js create mode 100644 src/components/Blockly/generator/sensebox-solar.js create mode 100644 src/components/Blockly/msg/de/sensebox-solar.js diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..335f886a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode" +} \ No newline at end of file diff --git a/src/components/Blockly/blocks/index.js b/src/components/Blockly/blocks/index.js index b713426d..dbf688aa 100644 --- a/src/components/Blockly/blocks/index.js +++ b/src/components/Blockly/blocks/index.js @@ -14,6 +14,7 @@ import "./sensebox-rtc"; import "./sensebox-ntp"; import "./sensebox-ble"; import "./sensebox-sd"; +import "./sensebox-solar"; import "./mqtt"; import "./text"; import "./io"; diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index 00a15f7e..b7950689 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -681,33 +681,6 @@ Blockly.Blocks["sensebox_sensor_sps30"] = { }, }; -/** - * SB-041 SolarCharger - */ - -Blockly.Blocks["sensebox_sensor_sb041"] = { - init: function () { - this.appendDummyInput().appendField(Blockly.Msg.senseBox_sensor_sb041); - this.appendDummyInput() - .setAlign(Blockly.ALIGN_LEFT) - .appendField(Blockly.Msg.senseBox_value) - .appendField( - new Blockly.FieldDropdown([ - [Blockly.Msg.senseBox_sensor_sb041_solar_voltage, "solar_voltage"], - [Blockly.Msg.senseBox_sensor_sb041_battery_voltage, "battery_voltage"], - [Blockly.Msg.senseBox_sensor_sb041_battery_level, "battery_level"], - [Blockly.Msg.senseBox_sensor_sb041_battery_temp, "battery_temp"], - // [Blockly.Msg.senseBox_sensor_sb041_battery_status_info, "battery_status_info"], - ]), - "value" - ) - this.setOutput(true, Types.DECIMAL.typeName); - this.setColour(getColour().sensebox); - this.setTooltip(Blockly.Msg.senseBox_sensor_sb041_tooltip); - this.setHelpUrl(Blockly.Msg.senseBox_sensor_sb041_helpurl); - }, -}; - /** * senseBox-MCU-S2 onBoard Light Sensor * diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js new file mode 100644 index 00000000..62fad389 --- /dev/null +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -0,0 +1,66 @@ +import Blockly from "blockly"; +import { getColour } from "../helpers/colour"; +import * as Types from "../helpers/types"; +import { selectedBoard } from "../helpers/board"; +import { FieldGridDropdown } from "@blockly/field-grid-dropdown"; +import { FieldSlider } from "@blockly/field-slider"; + +/** + * Solar Charger (SB-041) + */ +Blockly.Blocks["sensebox_solar_charger_sb041"] = { + init: function () { + this.appendDummyInput().appendField( + Blockly.Msg.senseBox_solar_charger_sb041 + ); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField(Blockly.Msg.senseBox_value) + .appendField( + new Blockly.FieldDropdown([ + [ + Blockly.Msg.senseBox_solar_charger_sb041_solar_voltage, + "solar_voltage", + ], + [ + Blockly.Msg.senseBox_solar_charger_sb041_battery_voltage, + "battery_voltage", + ], + [ + Blockly.Msg.senseBox_solar_charger_sb041_battery_level, + "battery_level", + ], + [ + Blockly.Msg.senseBox_solar_charger_sb041_battery_temp, + "battery_temp", + ], + ]), + "value" + ); + this.setOutput(true, Types.DECIMAL.typeName); + this.setColour(getColour().solar); + this.setTooltip(Blockly.Msg.senseBox_solar_charger_sb041_tooltip); + this.setHelpUrl(Blockly.Msg.senseBox_solar_charger_sb041_helpurl); + }, +}; + +/** + * Deep Sleep for Specific Time + */ + +Blockly.Blocks["sensebox_solar_deep_sleep"] = { + init: function () { + this.setColour(getColour().solar); + this.appendDummyInput().appendField(); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.appendValueInput("sleep_time") + .setCheck(Types.NUMBER.checkList) + .appendField(Blockly.Msg.sensebox_solar_deep_sleep); + this.appendDummyInput().appendField( + Blockly.Msg.sensebox_solar_deep_sleep_unit + ); + this.setHelpUrl(sensebox_solar_deep_sleep_tooltip); + this.setTooltip(sensebox_solar_deep_sleep_helpurl); + }, +}; diff --git a/src/components/Blockly/blocks/time.js b/src/components/Blockly/blocks/time.js index cfd243c5..497c353b 100644 --- a/src/components/Blockly/blocks/time.js +++ b/src/components/Blockly/blocks/time.js @@ -104,25 +104,6 @@ Blockly.Blocks["infinite_loop"] = { }, }; -Blockly.Blocks["deep_sleep_esp32s2"] = { - /** - * Enter deep sleep and wake up after specific time. - * @this Blockly.Block - */ - init: function () { - this.setColour(getColour().time); - this.appendDummyInput().appendField(); - this.setInputsInline(true); - this.setPreviousStatement(true); - this.appendValueInput("sleep_time") - .setCheck(Types.NUMBER.checkList) - .appendField(Blockly.Msg.deep_sleep_esp32s2); - this.appendDummyInput().appendField(Blockly.Msg.deep_sleep_esp32s2_unit); - this.setHelpUrl(deep_sleep_esp32s2_tooltip); - this.setTooltip(deep_sleep_esp32s2_helpurl); - }, -}; - // Blockly.Blocks["sensebox_interval_timer"] = { // init: function () { // this.setTooltip(Blockly.Msg.senseBox_interval_timer_tip); diff --git a/src/components/Blockly/generator/index.js b/src/components/Blockly/generator/index.js index ddd64130..59155104 100644 --- a/src/components/Blockly/generator/index.js +++ b/src/components/Blockly/generator/index.js @@ -14,6 +14,7 @@ import "./sensebox-rtc"; import "./sensebox-ntp"; import "./sensebox-ble"; import "./sensebox-sd"; +import "./sensebox-solar"; import "./mqtt"; import "./logic"; import "./text"; diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index d0d113c5..d35e844d 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -1014,81 +1014,6 @@ if (time_startsps > time_actualsps + intervalsps) { return [code, Blockly.Arduino.ORDER_ATOMIC]; }; -/** - * SB-041 SolarCharger - * - */ -Blockly.Arduino.sensebox_sensor_sb041 = function () { - var dropdown_name = this.getFieldValue("value"); - Blockly.Arduino.libraries_["library_wire"] = `#include `; - Blockly.Arduino.variables_["sb041_solar_voltage"] = "float solar_voltage;"; - Blockly.Arduino.variables_["sb041_battery_voltage"] = "float battery_voltage;"; - Blockly.Arduino.variables_["sb041_battery_level"] = "int battery_level;"; - Blockly.Arduino.variables_["sb041_battery_temp"] = "float battery_temp;"; - Blockly.Arduino.variables_["sb041_battery_status_info"] = "String battery_status_info;"; - Blockly.Arduino.codeFunctions_["sb041_solar_update"] = ` -void solar_update() { - /* - * I2C i/f with following info on address 0x32: - * - Register 0: cell voltage, 20mV/LSB - * - Register 1: input voltage, 100mV/LSB - * - Register 2: status bits: [B,I,L3,L2,L1,L0,F,C] - * B=battery present >2.8V - * I=Input voltage present > 4.5V - * L0-L3=battery status LEDs - * F=Fast charge enabled - * C=Charging - * - Register 3: temperature in C, signed 8-bit - * Thresholds: L0: 3.2V, L1: 3.6V, L2: 3.7V, L3: 3.9V <- somewhere the order - * is wrong - * - * i Switch to slow charge at 8*C Switch to fast charge at 12*C - */ - byte address = 0x32; - Wire.beginTransmission(address); - byte error = Wire.endTransmission(); - if (error == 0) { - Wire.requestFrom((uint8_t)address, (uint8_t)4); - uint vbat = Wire.read(); - uint vin = Wire.read(); - uint flags = Wire.read(); - int temp = (int8_t)(Wire.read()); - battery_voltage = 0.02 * vbat; - solar_voltage = 0.1 * vin; - if (flags & 32) - battery_level = 4; - else if (flags & 16) - battery_level = 3; - else if (flags & 8) - battery_level = 2; - else if (flags & 4) - battery_level = 1; - else - battery_level = 0; - if (flags & 1) - battery_status_info = "charging\\n" + String(flags); - else - battery_status_info = "not charging\\n"; - if (flags & 64) - battery_status_info += "good input voltage\\n"; - else - battery_status_info += "low input voltage\\n"; - if (flags & 128) - battery_status_info += "battery present"; - else - battery_status_info += "battery missing"; - } else if (error == 2) { - battery_status_info = "solar module not connected"; - } else if (error) { - battery_status_info = "unknown error "; - battery_status_info += String(error); - } -} - `; - Blockly.Arduino.setupCode_["solar_update"] = "solar_update();"; - return [dropdown_name, Blockly.Arduino.ORDER_ATOMIC]; -}; - /** * senseBox MCU-S2 onboard Light Sensor * diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js new file mode 100644 index 00000000..0aeb0543 --- /dev/null +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -0,0 +1,109 @@ +import Blockly from "blockly"; +import { selectedBoard } from "../helpers/board"; + +/** + * Solar Charger (SB-041) + */ +Blockly.Arduino.sensebox_solar_charger_SB041 = function () { + var dropdown_name = this.getFieldValue("value"); + Blockly.Arduino.libraries_["library_wire"] = "#include ;"; + Blockly.Arduino.variables_["solar_voltage"] = "float solar_voltage;"; + Blockly.Arduino.variables_["solar_is_connected"] = "bool solar_is_connected;"; + Blockly.Arduino.variables_["battery_voltage"] = "float battery_voltage;"; + Blockly.Arduino.variables_["battery_level"] = "int battery_level;"; + Blockly.Arduino.variables_["battery_is_charging"] = + "bool battery_is_charging;"; + Blockly.Arduino.variables_["battery_is_fast_charging"] = + "bool battery_is_fast_charging ;"; + Blockly.Arduino.variables_["battery_temperature"] = + "float battery_temperature;"; + Blockly.Arduino.codeFunctions_["solar_update_SB041"] = ` +// update the values of the solar charger (SB-041) +void solar_update_SB041() { + /* + * I2C i/f with following info on address 0x32: + * - Register 0: cell voltage, 20mV/LSB + * - Register 1: input voltage, 100mV/LSB + * - Register 2: status bits: [B,I,L3,L2,L1,L0,F,C] + * B=battery present >2.8V + * I=Input voltage present > 4.5V + * L0-L3=battery status LEDs + * F=Fast charge enabled + * C=Charging + * - Register 3: temperature in C, signed 8-bit + * Thresholds: L0: 3.2V, L1: 3.6V, L2: 3.7V, L3: 3.9V + */ + byte address = 0x32; + Wire.beginTransmission(address); + byte error = Wire.endTransmission(); + if (error == 0) { + solar_is_connected = true; + Wire.requestFrom((uint8_t)address, (uint8_t)4); + + // register 0 + uint vbat_raw = Wire.read(); + battery_voltage = 0.02 * vbat_raw; + + // register 1 + uint vin_raw = Wire.read(); + solar_panal_voltage = 0.1 * vin_raw; + + // register 2 + uint flags = Wire.read(); + battery_is_charging = flags & 1; + if (flags & 32) + battery_level = 4; + else if (flags & 16) + battery_level = 3; + else if (flags & 8) + battery_level = 2; + else if (flags & 4) + battery_level = 1; + else + battery_level = 0; + battery_is_fast_charging = flags & 64; + battery_is_charging = flags & 128; + + // register 3 + battery_temperature = (int8_t)(Wire.read()); + } else if (error == 2) { // solar not connected + solar_is_connected = true; + Wire.requestFrom((uint8_t)address, (uint8_t)4); + + // register 0 + uint vbat_raw = Wire.read(); + battery_voltage = 0.02 * vbat_raw; + + // register 1 + uint vin_raw = Wire.read(); + solar_panal_voltage = 0.1 * vin_raw; + + // register 2 + uint flags = Wire.read(); + battery_is_charging = flags & 1; + if (flags & 32) + battery_level = 4; + else if (flags & 16) + battery_level = 3; + else if (flags & 8) + battery_level = 2; + else if (flags & 4) + battery_level = 1; + else + battery_level = 0; + battery_is_fast_charging = flags & 64; + battery_is_charging = flags & 128; + + // register 3 + battery_temperature = (int8_t)(Wire.read()); + } else if (error) { // different error + solar_panal_voltage_SB041 = -1; + battery_voltage_SB041 = -1; + } +} + `; + Blockly.Arduino.setupCode_["Wire.begin()"] = "Wire.begin();"; + Blockly.Arduino.setupCode_["solar_update_SB041"] = "solar_update_SB041();"; + Blockly.Arduino.loopCodeOnce_["solar_update_SB041"] = "solar_update_SB041();"; + return [dropdown_name, Blockly.Arduino.ORDER_ATOMIC]; +}; diff --git a/src/components/Blockly/helpers/colour.js b/src/components/Blockly/helpers/colour.js index 6fdc8af5..5bf7fe25 100644 --- a/src/components/Blockly/helpers/colour.js +++ b/src/components/Blockly/helpers/colour.js @@ -16,6 +16,7 @@ const colours = { webserver: 40, phyphox: 25, motors: 190, + solar: 0, }; export const getColour = () => { diff --git a/src/components/Blockly/index.js b/src/components/Blockly/index.js index 62e99c68..c84700a4 100644 --- a/src/components/Blockly/index.js +++ b/src/components/Blockly/index.js @@ -44,6 +44,12 @@ const Value = (p) => { return React.createElement("value", props, children); }; +const Statement = (p) => { + const { children, ...props } = p; + props.is = "blockly"; + return React.createElement("statement", props, children); +}; + const Field = (p) => { const { children, ...props } = p; props.is = "blockly"; @@ -68,4 +74,4 @@ const Label = (p) => { return React.createElement("label", props, children); }; -export { Block, Category, Value, Field, Shadow, Sep, Label }; +export { Block, Category, Value, Statement, Field, Shadow, Sep, Label }; diff --git a/src/components/Blockly/msg/de.js b/src/components/Blockly/msg/de.js index 124eba44..79c879a3 100644 --- a/src/components/Blockly/msg/de.js +++ b/src/components/Blockly/msg/de.js @@ -15,6 +15,7 @@ import { RTC } from "./de/sensebox-rtc"; import { NTP } from "./de/sensebox-ntp"; import { SD } from "./de/sensebox-sd"; import { SENSORS } from "./de/sensebox-sensors"; +import { SOLAR } from "./de/sensebox-solar"; import { SENSEBOX } from "./de/sensebox"; import { TELEGRAM } from "./de/sensebox-telegram"; import { WEB } from "./de/sensebox-web"; @@ -45,6 +46,7 @@ export const De = { ...NTP, ...SD, ...SENSORS, + ...SOLAR, ...SENSEBOX, ...TELEGRAM, ...WEB, diff --git a/src/components/Blockly/msg/de/sensebox-sensors.js b/src/components/Blockly/msg/de/sensebox-sensors.js index 133cd31d..b8ca134b 100644 --- a/src/components/Blockly/msg/de/sensebox-sensors.js +++ b/src/components/Blockly/msg/de/sensebox-sensors.js @@ -26,18 +26,6 @@ export const SENSORS = { "Schließe den Sensor an einen der **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: "", - /** - * SB-041 - */ - senseBox_sensor_sb041: "Solarladeregler (SB-041)", - senseBox_sensor_sb041_solar_voltage: "Spannung der Solarplatte in V", - senseBox_sensor_sb041_battery_voltage: "Spannung der Batterie in V", - senseBox_sensor_sb041_battery_level: "Ladelevel der batterie in 1/4", - senseBox_sensor_sb041_battery_temp: "Temperatur der Batterie in C", - senseBox_sensor_sb041_tooltip: - "Schließe den Sensor an einen der **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_sb041_helpurl: "", - /** * Mikro */ diff --git a/src/components/Blockly/msg/de/sensebox-solar.js b/src/components/Blockly/msg/de/sensebox-solar.js new file mode 100644 index 00000000..855c2e12 --- /dev/null +++ b/src/components/Blockly/msg/de/sensebox-solar.js @@ -0,0 +1,25 @@ +export const SOLAR = { + /** + * Solar + * --------------------------------------------------- + * + */ + + + + /** + * Solar Charger (SB-041) + */ + senseBox_solar_charger_sb041: "Solarladeregler (SB-041)", + senseBox_solar_charger_sb041_solar_voltage: "Spannung der Solarplatte in V", + senseBox_solar_charger_sb041_battery_voltage: "Spannung der Batterie in V", + senseBox_solar_charger_sb041_battery_level: "Ladelevel der batterie in 1/4", + senseBox_solar_charger_sb041_battery_temp: "Temperatur der Batterie in C", + senseBox_solar_charger_sb041_tooltip_MCU: + "Schließe den Solarladeregler an einen der **I2C-Anschlüsse** der senseBox an. Der Solarladeregler liefert sowohl Strom, als auch Daten über die Batterie und Solarplatte.", + senseBox_solar_charger_sb041_tooltip_ESP: + "Schließe den Solarladeregler an das mitgelieferte Kabel an. Der Stecker mit dem **roten und schwarzen Kabel** versorgt die senseBox mit Strom und kommt in den entsprechend Anschluss. Der zweite Stecker mit **gelbem und grünen Kabel** liefert Daten über die Batterie und Solarplatte und kommt in einen der **I2C-Anschlüsse**.", + senseBox_solar_charger_sb041_helpurl: "", //TODO + +}; + diff --git a/src/components/Blockly/msg/de/time.js b/src/components/Blockly/msg/de/time.js index 454b54c9..1876e7a9 100644 --- a/src/components/Blockly/msg/de/time.js +++ b/src/components/Blockly/msg/de/time.js @@ -21,5 +21,7 @@ export const TIME = { ARD_TIME_MS: "Millisekunden", deep_sleep_esp32s2: "Tiefschlaf und Neustart nach", - deep_sleep_esp32s2_unit: "Sekunden" + deep_sleep_esp32s2_unit: "Sekunden", + deep_sleep_esp32s2_tooltip: "TODO", + deep_sleep_esp32s2_helpurl: "TODO" }; diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index 0adc569b..e4dcf13a 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -1,4 +1,4 @@ -import { Block, Value, Field, Shadow, Category, Sep, Label } from ".."; +import { Block, Value, Field, Statement, Shadow, Category, Sep, Label } from ".."; import { getColour } from "../helpers/colour"; import * as Blockly from "blockly/core"; @@ -19,7 +19,6 @@ import * as Blockly from "blockly/core"; - @@ -357,6 +356,31 @@ import * as Blockly from "blockly/core"; + + + + + + + LTE + + + + + + 2 + + + + + + + + + + + + From f625f5b4a0873f502eba2dceffcdc49c7825abbe Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Mon, 28 Oct 2024 16:05:14 +0100 Subject: [PATCH 04/14] progress on blocks and generators --- .../Blockly/blocks/sensebox-solar.js | 10 +- .../Blockly/generator/sensebox-solar.js | 99 +++++++++++-------- 2 files changed, 62 insertions(+), 47 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index 62fad389..33506a81 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -11,7 +11,7 @@ import { FieldSlider } from "@blockly/field-slider"; Blockly.Blocks["sensebox_solar_charger_sb041"] = { init: function () { this.appendDummyInput().appendField( - Blockly.Msg.senseBox_solar_charger_sb041 + Blockly.Msg.senseBox_solar_charger_sb041, ); this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT) @@ -35,7 +35,7 @@ Blockly.Blocks["sensebox_solar_charger_sb041"] = { "battery_temp", ], ]), - "value" + "measurement", ); this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().solar); @@ -45,10 +45,10 @@ Blockly.Blocks["sensebox_solar_charger_sb041"] = { }; /** - * Deep Sleep for Specific Time + * Deep Sleep and Restart */ -Blockly.Blocks["sensebox_solar_deep_sleep"] = { +Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { init: function () { this.setColour(getColour().solar); this.appendDummyInput().appendField(); @@ -58,7 +58,7 @@ Blockly.Blocks["sensebox_solar_deep_sleep"] = { .setCheck(Types.NUMBER.checkList) .appendField(Blockly.Msg.sensebox_solar_deep_sleep); this.appendDummyInput().appendField( - Blockly.Msg.sensebox_solar_deep_sleep_unit + Blockly.Msg.sensebox_solar_deep_sleep_unit, ); this.setHelpUrl(sensebox_solar_deep_sleep_tooltip); this.setTooltip(sensebox_solar_deep_sleep_helpurl); diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index 0aeb0543..0fff786f 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -5,7 +5,7 @@ import { selectedBoard } from "../helpers/board"; * Solar Charger (SB-041) */ Blockly.Arduino.sensebox_solar_charger_SB041 = function () { - var dropdown_name = this.getFieldValue("value"); + var dropdown_name = this.getFieldValue("measurement"); Blockly.Arduino.libraries_["library_wire"] = "#include ;"; Blockly.Arduino.variables_["solar_voltage"] = "float solar_voltage;"; Blockly.Arduino.variables_["solar_is_connected"] = "bool solar_is_connected;"; @@ -14,7 +14,7 @@ Blockly.Arduino.sensebox_solar_charger_SB041 = function () { Blockly.Arduino.variables_["battery_is_charging"] = "bool battery_is_charging;"; Blockly.Arduino.variables_["battery_is_fast_charging"] = - "bool battery_is_fast_charging ;"; + "bool battery_is_fast_charging;"; Blockly.Arduino.variables_["battery_temperature"] = "float battery_temperature;"; Blockly.Arduino.codeFunctions_["solar_update_SB041"] = ` @@ -33,23 +33,23 @@ void solar_update_SB041() { * - Register 3: temperature in C, signed 8-bit * Thresholds: L0: 3.2V, L1: 3.6V, L2: 3.7V, L3: 3.9V */ - byte address = 0x32; - Wire.beginTransmission(address); + byte address_SB041 = 0x32; + Wire.beginTransmission(address_SB041); byte error = Wire.endTransmission(); - if (error == 0) { - solar_is_connected = true; - Wire.requestFrom((uint8_t)address, (uint8_t)4); + if (error == 0 || error == 2) { // no error or solar panel not connected + solar_is_connected = (error == 0); + Wire.requestFrom((uint8_t)address_SB041, (uint8_t)4); // register 0 - uint vbat_raw = Wire.read(); + uint8_t vbat_raw = Wire.read(); battery_voltage = 0.02 * vbat_raw; // register 1 - uint vin_raw = Wire.read(); - solar_panal_voltage = 0.1 * vin_raw; + uint8_t vin_raw = Wire.read(); + solar_panel_voltage = 0.1 * vin_raw; // register 2 - uint flags = Wire.read(); + uint8_t flags = Wire.read(); battery_is_charging = flags & 1; if (flags & 32) battery_level = 4; @@ -66,39 +66,18 @@ void solar_update_SB041() { // register 3 battery_temperature = (int8_t)(Wire.read()); - } else if (error == 2) { // solar not connected - solar_is_connected = true; - Wire.requestFrom((uint8_t)address, (uint8_t)4); + } else { // different error - // register 0 - uint vbat_raw = Wire.read(); - battery_voltage = 0.02 * vbat_raw; - - // register 1 - uint vin_raw = Wire.read(); - solar_panal_voltage = 0.1 * vin_raw; - - // register 2 - uint flags = Wire.read(); - battery_is_charging = flags & 1; - if (flags & 32) - battery_level = 4; - else if (flags & 16) - battery_level = 3; - else if (flags & 8) - battery_level = 2; - else if (flags & 4) - battery_level = 1; - else - battery_level = 0; - battery_is_fast_charging = flags & 64; - battery_is_charging = flags & 128; + // set all booleans to false because of error + solar_is_connected = false; + battery_is_fast_charging = false; + battery_is_charging = false; - // register 3 - battery_temperature = (int8_t)(Wire.read()); - } else if (error) { // different error - solar_panal_voltage_SB041 = -1; - battery_voltage_SB041 = -1; + // set all numbers to -1 because of error + battery_voltage = -1; + solar_panel_voltage = -1; + battery_level = -1; + battery_temperature = -1; } } `; @@ -107,3 +86,39 @@ void solar_update_SB041() { Blockly.Arduino.loopCodeOnce_["solar_update_SB041"] = "solar_update_SB041();"; return [dropdown_name, Blockly.Arduino.ORDER_ATOMIC]; }; + +/** + * Deep Sleep and Restart + */ +Blockly.Arduino.sensebox_solar_deep_sleep_and_restart = function () { + var sleep_time = this.getFieldValue("sleep_time"); + var board = selectedBoard().title; + if (board === "MCU" || board === "Mini") { + Blockly.Arduino.libraries_["library_low_power"] = + "#include ;"; + Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` +// power saving deep sleep for specific time and a final restart +void deep_sleep_and_restart(uint32_t sleep-time) { + senseBoxIO.powerNone(); + LowPower.deepSleep(max(0, sleep_time - 1000)); + delay(1000); + noInterrupts(); + NVIC_SystemReset(); + while (1) + ; +} + `; + } else { + //TODO + Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` +// power saving deep sleep for specific time and a final restart +void deep_sleep_and_restart(uint32_t sleep-time) { + //senseBoxIO.powerNone(); //TODO + esp_sleep_enable_timer_wakeup(max(0, sleep_time - 1000)); + delay(1000); + esp_deep_sleep_start(); +} + `; + } + return `sleep_and_restart(${sleep_time});`; +}; From 2a81dabf279f4db570014c89b002c10f4cda39be Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Mon, 4 Nov 2024 17:09:40 +0100 Subject: [PATCH 05/14] testet code generation and added english messages --- .vscode/settings.json | 5 +- .../Blockly/blocks/sensebox-solar.js | 63 +++++++++----- .../Blockly/generator/sensebox-solar.js | 53 +++++++----- src/components/Blockly/generator/time.js | 14 --- .../Blockly/msg/de/sensebox-solar.js | 48 +++++++---- src/components/Blockly/msg/de/time.js | 5 -- src/components/Blockly/msg/en.js | 2 + .../Blockly/msg/en/sensebox-solar.js | 40 +++++++++ src/components/Blockly/toolbox/ToolboxEsp.js | 52 ++++++++++- src/components/Blockly/toolbox/ToolboxMcu.js | 86 +++++++++++++------ 10 files changed, 262 insertions(+), 106 deletions(-) create mode 100644 src/components/Blockly/msg/en/sensebox-solar.js diff --git a/.vscode/settings.json b/.vscode/settings.json index 335f886a..c4d516ce 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "editor.defaultFormatter": "esbenp.prettier-vscode" -} \ No newline at end of file + "editor.defaultFormatter": "esbenp.prettier-vscode", + "prettier.configPath": ".prettierrc.json" +} diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index 33506a81..077fc774 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -1,17 +1,17 @@ import Blockly from "blockly"; import { getColour } from "../helpers/colour"; import * as Types from "../helpers/types"; -import { selectedBoard } from "../helpers/board"; -import { FieldGridDropdown } from "@blockly/field-grid-dropdown"; -import { FieldSlider } from "@blockly/field-slider"; /** * Solar Charger (SB-041) */ -Blockly.Blocks["sensebox_solar_charger_sb041"] = { +Blockly.Blocks["sensebox_solar_charger_SB041"] = { init: function () { + var board = window.sessionStorage.getItem("board"); + this.setOutput(true, Types.DECIMAL.typeName); + this.setColour(getColour().solar); this.appendDummyInput().appendField( - Blockly.Msg.senseBox_solar_charger_sb041, + Blockly.Msg.senseBox_solar_charger_SB041, ); this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT) @@ -19,28 +19,45 @@ Blockly.Blocks["sensebox_solar_charger_sb041"] = { .appendField( new Blockly.FieldDropdown([ [ - Blockly.Msg.senseBox_solar_charger_sb041_solar_voltage, - "solar_voltage", + Blockly.Msg.senseBox_solar_charger_SB041_solar_panel_voltage, + "solar_panel_voltage", ], [ - Blockly.Msg.senseBox_solar_charger_sb041_battery_voltage, + Blockly.Msg.senseBox_solar_charger_SB041_solar_is_connected, + "solar_is_connected", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_battery_voltage, "battery_voltage", ], [ - Blockly.Msg.senseBox_solar_charger_sb041_battery_level, + Blockly.Msg.senseBox_solar_charger_SB041_battery_level, "battery_level", ], [ - Blockly.Msg.senseBox_solar_charger_sb041_battery_temp, - "battery_temp", + Blockly.Msg.senseBox_solar_charger_SB041_battery_is_charging, + "battery_is_charging", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_battery_is_fast_charging, + "battery_is_fast_charging", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_battery_temperature, + "battery_temperature", ], ]), - "measurement", + "value", ); - this.setOutput(true, Types.DECIMAL.typeName); - this.setColour(getColour().solar); - this.setTooltip(Blockly.Msg.senseBox_solar_charger_sb041_tooltip); - this.setHelpUrl(Blockly.Msg.senseBox_solar_charger_sb041_helpurl); + if (board === "mini") { + this.setTooltip(Blockly.Msg.senseBox_solar_charger_SB041_tooltip_mini); + } else if (board === "esp32") { + this.setTooltip(Blockly.Msg.senseBox_solar_charger_SB041_tooltip_esp32); + } else { + // assume board === "mcu" + this.setTooltip(Blockly.Msg.senseBox_solar_charger_SB041_tooltip_mcu); + } + this.setHelpUrl(Blockly.Msg.senseBox_solar_charger_SB041_helpurl); }, }; @@ -51,16 +68,20 @@ Blockly.Blocks["sensebox_solar_charger_sb041"] = { Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { init: function () { this.setColour(getColour().solar); - this.appendDummyInput().appendField(); this.setInputsInline(true); this.setPreviousStatement(true); this.appendValueInput("sleep_time") .setCheck(Types.NUMBER.checkList) - .appendField(Blockly.Msg.sensebox_solar_deep_sleep); + .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart); this.appendDummyInput().appendField( - Blockly.Msg.sensebox_solar_deep_sleep_unit, + new Blockly.FieldDropdown([ + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, ""], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, " * 60000"], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, " * 3600000"], + ]), + "time_scale", ); - this.setHelpUrl(sensebox_solar_deep_sleep_tooltip); - this.setTooltip(sensebox_solar_deep_sleep_helpurl); + this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); + this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); }, }; diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index 0fff786f..3b8a64fd 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -5,9 +5,10 @@ import { selectedBoard } from "../helpers/board"; * Solar Charger (SB-041) */ Blockly.Arduino.sensebox_solar_charger_SB041 = function () { - var dropdown_name = this.getFieldValue("measurement"); + var value = this.getFieldValue("value"); Blockly.Arduino.libraries_["library_wire"] = "#include ;"; - Blockly.Arduino.variables_["solar_voltage"] = "float solar_voltage;"; + Blockly.Arduino.variables_["solar_panel_voltage"] = + "float solar_panel_voltage;"; Blockly.Arduino.variables_["solar_is_connected"] = "bool solar_is_connected;"; Blockly.Arduino.variables_["battery_voltage"] = "float battery_voltage;"; Blockly.Arduino.variables_["battery_level"] = "int battery_level;"; @@ -36,7 +37,7 @@ void solar_update_SB041() { byte address_SB041 = 0x32; Wire.beginTransmission(address_SB041); byte error = Wire.endTransmission(); - if (error == 0 || error == 2) { // no error or solar panel not connected + if (error == 0 || error == 2) { solar_is_connected = (error == 0); Wire.requestFrom((uint8_t)address_SB041, (uint8_t)4); @@ -66,8 +67,7 @@ void solar_update_SB041() { // register 3 battery_temperature = (int8_t)(Wire.read()); - } else { // different error - + } else { // set all booleans to false because of error solar_is_connected = false; battery_is_fast_charging = false; @@ -84,21 +84,41 @@ void solar_update_SB041() { Blockly.Arduino.setupCode_["Wire.begin()"] = "Wire.begin();"; Blockly.Arduino.setupCode_["solar_update_SB041"] = "solar_update_SB041();"; Blockly.Arduino.loopCodeOnce_["solar_update_SB041"] = "solar_update_SB041();"; - return [dropdown_name, Blockly.Arduino.ORDER_ATOMIC]; + return [value, Blockly.Arduino.ORDER_ATOMIC]; }; /** * Deep Sleep and Restart */ Blockly.Arduino.sensebox_solar_deep_sleep_and_restart = function () { - var sleep_time = this.getFieldValue("sleep_time"); - var board = selectedBoard().title; - if (board === "MCU" || board === "Mini") { + var board = window.sessionStorage.getItem("board"); + var sleep_time = + Blockly.Arduino.valueToCode( + this, + "sleep_time", + Blockly.Arduino.ORDER_ATOMIC, + ) || "0"; + var time_scale = this.getFieldValue("time_scale"); + if (board === "esp") { + Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` +// power saving deep sleep for specific time and a final restart +void deep_sleep_and_restart(int sleep_time) { + digitalWrite(PIN_RGB_LED, HIGH); + digitalWrite(PIN_XB1_ENABLE, HIGH); + digitalWrite(PIN_UART_ENABLE, HIGH); + digitalWrite(PD_ENABLE, LOW); + esp_sleep_enable_timer_wakeup(max(0, sleep_time - 1000)); + delay(1000); + esp_deep_sleep_start(); +} +`; + } else { + // assume else board === "mcu" || board === "mini" Blockly.Arduino.libraries_["library_low_power"] = "#include ;"; Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart -void deep_sleep_and_restart(uint32_t sleep-time) { +void deep_sleep_and_restart(int sleep_time) { senseBoxIO.powerNone(); LowPower.deepSleep(max(0, sleep_time - 1000)); delay(1000); @@ -106,19 +126,8 @@ void deep_sleep_and_restart(uint32_t sleep-time) { NVIC_SystemReset(); while (1) ; -} - `; - } else { - //TODO - Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` -// power saving deep sleep for specific time and a final restart -void deep_sleep_and_restart(uint32_t sleep-time) { - //senseBoxIO.powerNone(); //TODO - esp_sleep_enable_timer_wakeup(max(0, sleep_time - 1000)); - delay(1000); - esp_deep_sleep_start(); } `; } - return `sleep_and_restart(${sleep_time});`; + return `deep_sleep_and_restart(${sleep_time}${time_scale});`; }; diff --git a/src/components/Blockly/generator/time.js b/src/components/Blockly/generator/time.js index 7970049f..fb89c6d3 100644 --- a/src/components/Blockly/generator/time.js +++ b/src/components/Blockly/generator/time.js @@ -91,20 +91,6 @@ Blockly.Arduino["infinite_loop"] = function (block) { // return code; // }; -/** - * Code generator for deep sleep of ESP32-S2 - * @param {!Blockly.Block} block Block to generate the code from. - * @return {string} Completed code. - */ -Blockly.Arduino["deep_sleep_esp32s2"] = function (block) { - Blockly.Arduino.libraries_["library_wire"] = `#include `; - Blockly.Arduino.variables_["sb041_solar_voltage"] = "float solar_voltage;"; - Blockly.Arduino.variables_["sb041_battery_voltage"] = "float battery_voltage;"; - Blockly.Arduino.variables_["sb041_battery_level"] = "int battery_level;"; - Blockly.Arduino.variables_["sb041_battery_temp"] = "float battery_temp;"; - return "while(true);\n"; -}; - Blockly.Arduino.sensebox_interval_timer = function (block) { var intervalTime = this.getFieldValue("interval"); var intervalName = this.getFieldValue("name"); diff --git a/src/components/Blockly/msg/de/sensebox-solar.js b/src/components/Blockly/msg/de/sensebox-solar.js index 855c2e12..6338f1bc 100644 --- a/src/components/Blockly/msg/de/sensebox-solar.js +++ b/src/components/Blockly/msg/de/sensebox-solar.js @@ -1,25 +1,43 @@ export const SOLAR = { /** - * Solar + * All Blocks Necessary for Solar Operation * --------------------------------------------------- - * */ - - /** * Solar Charger (SB-041) */ - senseBox_solar_charger_sb041: "Solarladeregler (SB-041)", - senseBox_solar_charger_sb041_solar_voltage: "Spannung der Solarplatte in V", - senseBox_solar_charger_sb041_battery_voltage: "Spannung der Batterie in V", - senseBox_solar_charger_sb041_battery_level: "Ladelevel der batterie in 1/4", - senseBox_solar_charger_sb041_battery_temp: "Temperatur der Batterie in C", - senseBox_solar_charger_sb041_tooltip_MCU: - "Schließe den Solarladeregler an einen der **I2C-Anschlüsse** der senseBox an. Der Solarladeregler liefert sowohl Strom, als auch Daten über die Batterie und Solarplatte.", - senseBox_solar_charger_sb041_tooltip_ESP: - "Schließe den Solarladeregler an das mitgelieferte Kabel an. Der Stecker mit dem **roten und schwarzen Kabel** versorgt die senseBox mit Strom und kommt in den entsprechend Anschluss. Der zweite Stecker mit **gelbem und grünen Kabel** liefert Daten über die Batterie und Solarplatte und kommt in einen der **I2C-Anschlüsse**.", - senseBox_solar_charger_sb041_helpurl: "", //TODO + senseBox_solar_charger_SB041: "Solarladeregler (SB-041)", + senseBox_solar_charger_SB041_solar_panel_voltage: + "Spannung der Solarplatte in V", + senseBox_solar_charger_SB041_solar_is_connected: + "Solarplatte ist angeschlossen", + senseBox_solar_charger_SB041_battery_voltage: "Spannung der Batterie in V", + senseBox_solar_charger_SB041_battery_level: "Ladelevel der Batterie in 1/4", + senseBox_solar_charger_SB041_battery_is_charging: "Batterie wird geladen", + senseBox_solar_charger_SB041_battery_is_fast_charging: + "Batterie wird schnell geladen", + senseBox_solar_charger_SB041_battery_temperature: + "Temperatur der Batterie in C", + senseBox_solar_charger_SB041_tooltip_mcu: + "Schließe den Solarladeregler (SB-041) an einen der **I2C-Anschlüsse** der senseBox MCU an. Der Solarladeregler liefert sowohl Strom, als auch Daten über den Ladeprozess, die Batterie und die Solarplatte.", + senseBox_solar_charger_SB041_tooltip_mini: + "Schließe den Solarladeregler (SB-041) mit einem **JST auf Qwic Kabel** an einen der **I2C-Anschlüsse** der senseBox MCU mini an. Der Solarladeregler liefert sowohl Strom, als auch Daten über den Ladeprozess, die Batterie und die Solarplatte.", + senseBox_solar_charger_SB041_tooltip_esp32: + "Schließe den Solarladeregler (SB-041) an das **mitgelieferte adapter Kabel** an. Der Stecker mit dem **roten und schwarzen Kabel** versorgt die senseBox MCU-S2 mit Strom und kommt in den entsprechend Anschluss. Der zweite Stecker mit **gelbem und grünen Kabel** liefert Daten über die Batterie und Solarplatte und kommt in einen der **I2C-Anschlüsse**.", + senseBox_solar_charger_SB041_helpurl: + "https://sensebox.kaufen/product/solar-set", + /** + * Deep Sleep and Restart + */ + sensebox_solar_deep_sleep_and_restart: + "Stromsparender Tiefschlaf und Neustart nach", + sensebox_solar_deep_sleep_and_restart_milliseconds: "Millisekunden", + sensebox_solar_deep_sleep_and_restart_minutes: "Minuten", + sensebox_solar_deep_sleep_and_restart_hours: "Stunden", + sensebox_solar_deep_sleep_and_restart_tooltip: + "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen Stromsparenden Tiefschlaf. Dabei werden jegliche Funktionen und angeschlossene Sensoren deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb.", + sensebox_solar_deep_sleep_and_restart_helpurl: + "https://sensebox.kaufen/product/solar-set", }; - diff --git a/src/components/Blockly/msg/de/time.js b/src/components/Blockly/msg/de/time.js index 1876e7a9..800c3aa8 100644 --- a/src/components/Blockly/msg/de/time.js +++ b/src/components/Blockly/msg/de/time.js @@ -19,9 +19,4 @@ export const TIME = { ARD_TIME_MILLIS_TIP: "Gibt eine Zahl in Millisekunden zurück, die der Zeitdauer des Aktuellen Programms entspricht. Muss als positiven Integer gespeichert werden", // untranslated ARD_TIME_MS: "Millisekunden", - - deep_sleep_esp32s2: "Tiefschlaf und Neustart nach", - deep_sleep_esp32s2_unit: "Sekunden", - deep_sleep_esp32s2_tooltip: "TODO", - deep_sleep_esp32s2_helpurl: "TODO" }; diff --git a/src/components/Blockly/msg/en.js b/src/components/Blockly/msg/en.js index 38267b08..b76bcc71 100644 --- a/src/components/Blockly/msg/en.js +++ b/src/components/Blockly/msg/en.js @@ -16,6 +16,7 @@ import { RTC } from "./en/sensebox-rtc"; import { NTP } from "./en/sensebox-ntp"; import { SD } from "./en/sensebox-sd"; import { SENSORS } from "./en/sensebox-sensors"; +import { SOLAR } from "./en/sensebox-solar"; import { TELEGRAM } from "./en/sensebox-telegram"; import { WEB } from "./en/sensebox-web"; import { ESP_NOW } from "./en/sensebox-esp-now"; @@ -45,6 +46,7 @@ export const En = { ...NTP, ...SD, ...SENSORS, + ...SOLAR, ...SENSEBOX, ...TELEGRAM, ...WEB, diff --git a/src/components/Blockly/msg/en/sensebox-solar.js b/src/components/Blockly/msg/en/sensebox-solar.js new file mode 100644 index 00000000..0e60b2ea --- /dev/null +++ b/src/components/Blockly/msg/en/sensebox-solar.js @@ -0,0 +1,40 @@ +export const SOLAR = { + /** + * All Blocks Necessary for Solar Operation + * --------------------------------------------------- + */ + + /** + * Solar Charger (SB-041) + */ + senseBox_solar_charger_SB041: "Solar Charger (SB-041)", + senseBox_solar_charger_SB041_solar_panel_voltage: "Solar panel voltage in V", + senseBox_solar_charger_SB041_solar_is_connected: "Solar panel is connected", + senseBox_solar_charger_SB041_battery_voltage: "Battery voltage in V", + senseBox_solar_charger_SB041_battery_level: "Battery charge level in 1/4", + senseBox_solar_charger_SB041_battery_is_charging: "Battery is charging", + senseBox_solar_charger_SB041_battery_is_fast_charging: + "Battery is fast charging", + senseBox_solar_charger_SB041_battery_temperature: "Battery temperature in C", + senseBox_solar_charger_SB041_tooltip_mcu: + "Connect the solar charger (SB-041) to one of the **I2C ports** of the senseBox MCU. The solar charger provides both power and data about the charging process, battery, and solar panel.", + senseBox_solar_charger_SB041_tooltip_mini: + "Connect the solar charger (SB-041) with a **JST to Qwic cable** to one of the **I2C ports** of the senseBox MCU mini. The solar charger provides both power and data about the charging process, battery, and solar panel.", + senseBox_solar_charger_SB041_tooltip_esp32: + "Connect the solar charger (SB-041) to the **supplied adapter cable**. The connector with the **red and black wires** provides power to the senseBox MCU-S2 and connects to the appropriate port. The second connector with **yellow and green wires** provides data about the battery and solar panel and connects to one of the **I2C ports**.", + senseBox_solar_charger_SB041_helpurl: + "https://sensebox.kaufen/product/solar-set", + + /** + * Deep Sleep and Restart + */ + sensebox_solar_deep_sleep_and_restart: + "Power-saving deep sleep and restart after", + sensebox_solar_deep_sleep_and_restart_milliseconds: "milliseconds", + sensebox_solar_deep_sleep_and_restart_minutes: "minutes", + sensebox_solar_deep_sleep_and_restart_hours: "hours", + sensebox_solar_deep_sleep_and_restart_tooltip: + "This block puts the senseBox into a power-saving deep sleep mode for a specified time. During this time, all functions and connected sensors are disabled. After the specified time, the senseBox wakes up and restarts. This block is useful for solar operation. ", + sensebox_solar_deep_sleep_and_restart_helpurl: + "https://sensebox.kaufen/product/solar-set", +}; diff --git a/src/components/Blockly/toolbox/ToolboxEsp.js b/src/components/Blockly/toolbox/ToolboxEsp.js index a247022c..0306ab20 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.js +++ b/src/components/Blockly/toolbox/ToolboxEsp.js @@ -1,4 +1,4 @@ -import { Block, Value, Field, Shadow, Category, Label } from ".."; +import { Block, Value, Field, Statement, Shadow, Category, Label } from ".."; import { getColour } from "../helpers/colour"; import * as Blockly from "blockly/core"; @@ -394,6 +394,56 @@ export const ToolboxEsp = () => { */} + + + battery_level + + + + + 30 + + + * 60000 + + + + + GT + + + battery_level + + + + + 2 + + + + + + + + + 30 + + + * 60000 + + + + + + + 12 + + + * 3600000 + + + + diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index ff29664a..c1620d66 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -1,4 +1,13 @@ -import { Block, Value, Field, Statement, Shadow, Category, Sep, Label } from ".."; +import { + Block, + Value, + Field, + Statement, + Shadow, + Category, + Sep, + Label, +} from ".."; import { getColour } from "../helpers/colour"; import * as Blockly from "blockly/core"; @@ -355,31 +364,6 @@ export const ToolboxMcu = () => { - - - - - - - LTE - - - - - - 2 - - - - - - - - - - - - @@ -404,6 +388,56 @@ export const ToolboxMcu = () => { + + + battery_level + + + + + 30 + + + * 60000 + + + + + GT + + + battery_level + + + + + 2 + + + + + + + + + 30 + + + * 60000 + + + + + + + 12 + + + * 3600000 + + + + From ed3166a35a901a7b0d4e37c413b1b581b28708df Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Thu, 14 Nov 2024 17:22:53 +0100 Subject: [PATCH 06/14] added checkboxes for different port types --- .../Blockly/blocks/sensebox-solar.js | 45 +++++++++++++------ .../Blockly/generator/sensebox-solar.js | 36 ++++++++------- .../Blockly/msg/de/sensebox-solar.js | 7 ++- src/components/Blockly/toolbox/ToolboxMcu.js | 27 +++++------ 4 files changed, 69 insertions(+), 46 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index 077fc774..39e5a671 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -14,7 +14,6 @@ Blockly.Blocks["sensebox_solar_charger_SB041"] = { Blockly.Msg.senseBox_solar_charger_SB041, ); this.appendDummyInput() - .setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_value) .appendField( new Blockly.FieldDropdown([ @@ -68,19 +67,39 @@ Blockly.Blocks["sensebox_solar_charger_SB041"] = { Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { init: function () { this.setColour(getColour().solar); - this.setInputsInline(true); this.setPreviousStatement(true); - this.appendValueInput("sleep_time") - .setCheck(Types.NUMBER.checkList) - .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart); - this.appendDummyInput().appendField( - new Blockly.FieldDropdown([ - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, ""], - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, " * 60000"], - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, " * 3600000"], - ]), - "time_scale", - ); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart) + .appendField(new Blockly.FieldNumber(0), "sleep_time") + .appendField( + new Blockly.FieldDropdown([ + [ + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, + " * 3600000", + ], + [ + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, + " * 60000", + ], + [ + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds, + " * 1000", + ], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, ""], + ]), + "time_scale", + ); + this.appendDummyInput() + .appendField( + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, + ) + .appendField("I2C") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffI2C") + .appendField(", UART") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") + .appendField(", XB") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); + this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); }, diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index 3b8a64fd..3a8549bd 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -1,5 +1,4 @@ import Blockly from "blockly"; -import { selectedBoard } from "../helpers/board"; /** * Solar Charger (SB-041) @@ -92,20 +91,22 @@ void solar_update_SB041() { */ Blockly.Arduino.sensebox_solar_deep_sleep_and_restart = function () { var board = window.sessionStorage.getItem("board"); - var sleep_time = - Blockly.Arduino.valueToCode( - this, - "sleep_time", - Blockly.Arduino.ORDER_ATOMIC, - ) || "0"; + var sleep_time = this.getFieldValue("sleep_time"); var time_scale = this.getFieldValue("time_scale"); - if (board === "esp") { + var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + if (board === "esp32") { + Blockly.Arduino.libraries_["library_esp32_hal_gpio"] = + "#include ;"; + Blockly.Arduino.libraries_["library_pins_arduino"] = + "#include ;"; Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart -void deep_sleep_and_restart(int sleep_time) { - digitalWrite(PIN_RGB_LED, HIGH); - digitalWrite(PIN_XB1_ENABLE, HIGH); - digitalWrite(PIN_UART_ENABLE, HIGH); +void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, bool powerOffXB) { + digitalWrite(IO_ENABLE, powerOffI2C ? HIGH : LOW); + digitalWrite(PIN_XB1_ENABLE, powerOffUART ? HIGH : LOW); + digitalWrite(PIN_UART_ENABLE, powerOffXB ? HIGH : LOW); digitalWrite(PD_ENABLE, LOW); esp_sleep_enable_timer_wakeup(max(0, sleep_time - 1000)); delay(1000); @@ -113,13 +114,16 @@ void deep_sleep_and_restart(int sleep_time) { } `; } else { - // assume else board === "mcu" || board === "mini" + // assume board === "mcu" || board === "mini" Blockly.Arduino.libraries_["library_low_power"] = "#include ;"; Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart -void deep_sleep_and_restart(int sleep_time) { - senseBoxIO.powerNone(); +void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, bool powerOffXB) { + senseBoxIO.powerI2C(!powerOffI2C); + senseBoxIO.powerUART(!powerOffUART); + senseBoxIO.powerXB1(!powerOffXB); + senseBoxIO.powerXB2(!powerOffXB); LowPower.deepSleep(max(0, sleep_time - 1000)); delay(1000); noInterrupts(); @@ -129,5 +133,5 @@ void deep_sleep_and_restart(int sleep_time) { } `; } - return `deep_sleep_and_restart(${sleep_time}${time_scale});`; + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; }; diff --git a/src/components/Blockly/msg/de/sensebox-solar.js b/src/components/Blockly/msg/de/sensebox-solar.js index 6338f1bc..531b31b4 100644 --- a/src/components/Blockly/msg/de/sensebox-solar.js +++ b/src/components/Blockly/msg/de/sensebox-solar.js @@ -33,11 +33,14 @@ export const SOLAR = { */ sensebox_solar_deep_sleep_and_restart: "Stromsparender Tiefschlaf und Neustart nach", - sensebox_solar_deep_sleep_and_restart_milliseconds: "Millisekunden", + sensebox_solar_deep_sleep_and_restart_seconds: "Sekunden", sensebox_solar_deep_sleep_and_restart_minutes: "Minuten", sensebox_solar_deep_sleep_and_restart_hours: "Stunden", + sensebox_solar_deep_sleep_and_restart_milliseconds: "Millisekunden", + sensebox_solar_deep_sleep_and_restart_deactivate_ports: + "Anschlüsse zum deaktivieren:", sensebox_solar_deep_sleep_and_restart_tooltip: - "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen Stromsparenden Tiefschlaf. Dabei werden jegliche Funktionen und angeschlossene Sensoren deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb.", + "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen Stromsparenden Tiefschlaf. Dabei werden jegliche Funktionen und die Sensoren an den angegebenen Anschlüssen deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb.", sensebox_solar_deep_sleep_and_restart_helpurl: "https://sensebox.kaufen/product/solar-set", }; diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index c1620d66..a104d641 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -393,12 +393,11 @@ export const ToolboxMcu = () => { battery_level - - - 30 - - + 30 * 60000 + TRUE + TRUE + TRUE @@ -418,22 +417,20 @@ export const ToolboxMcu = () => { - - - 30 - - + 30 * 60000 + TRUE + TRUE + TRUE - - - 12 - - + 12 * 3600000 + TRUE + TRUE + TRUE From 38e9e143144f079c025117407ebfc36feb337f23 Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Tue, 19 Nov 2024 12:16:57 +0100 Subject: [PATCH 07/14] comment esp deep sleep for now --- src/components/Blockly/toolbox/ToolboxEsp.js | 33 +++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/components/Blockly/toolbox/ToolboxEsp.js b/src/components/Blockly/toolbox/ToolboxEsp.js index 0306ab20..0e7ee0c3 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.js +++ b/src/components/Blockly/toolbox/ToolboxEsp.js @@ -19,7 +19,6 @@ export const ToolboxEsp = () => { - @@ -398,13 +397,12 @@ export const ToolboxEsp = () => { battery_level - - - - 30 - - + {/* + 30 * 60000 + TRUE + TRUE + TRUE @@ -424,25 +422,23 @@ export const ToolboxEsp = () => { - - - 30 - - + 30 * 60000 + TRUE + TRUE + TRUE - - - 12 - - + 12 * 3600000 + TRUE + TRUE + TRUE - + */} @@ -537,7 +533,6 @@ export const ToolboxEsp = () => { - Date: Wed, 20 Nov 2024 09:57:26 +0100 Subject: [PATCH 08/14] final edit and check on esp deep sleep --- .../Blockly/blocks/sensebox-solar.js | 91 +++++++++++++++++-- .../Blockly/generator/sensebox-solar.js | 18 ++-- src/components/Blockly/toolbox/ToolboxEsp.js | 8 +- 3 files changed, 97 insertions(+), 20 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index 39e5a671..b804c574 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -66,6 +66,7 @@ Blockly.Blocks["sensebox_solar_charger_SB041"] = { Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { init: function () { + var board = window.sessionStorage.getItem("board"); this.setColour(getColour().solar); this.setPreviousStatement(true); this.appendDummyInput() @@ -89,17 +90,89 @@ Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { ]), "time_scale", ); + if (board === "esp32") { + this.appendDummyInput() + .appendField( + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, + ) + .appendField("GPIO") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffGPIO") + .appendField(", UART") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") + .appendField(", XB") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); + } else { + // assume board === "mcu" || board === "mini" + this.appendDummyInput() + .appendField( + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, + ) + .appendField("I2C") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffI2C") + .appendField(", UART") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") + .appendField(", XB") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); + } + this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); + this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); + }, +}; + +/** + * Ensure Wake Time + */ + +Blockly.Blocks["sensebox_solar_ensure_wake_time"] = { + init: function () { + this.setColour(getColour().solar); + this.setPreviousStatement(true); + this.setNestStatement(); this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_solar_ensure_wake_time) + .appendField(new Blockly.FieldNumber(0), "sleep_time") .appendField( - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, - ) - .appendField("I2C") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffI2C") - .appendField(", UART") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") - .appendField(", XB") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); - + new Blockly.FieldDropdown([ + [ + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, + " * 3600000", + ], + [ + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, + " * 60000", + ], + [ + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds, + " * 1000", + ], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, ""], + ]), + "time_scale", + ); + if (board === "esp32") { + this.appendDummyInput() + .appendField( + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, + ) + .appendField("GPIO") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffGPIO") + .appendField(", UART") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") + .appendField(", XB") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); + } else { + // assume board === "mcu" || board === "mini" + this.appendDummyInput() + .appendField( + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, + ) + .appendField("I2C") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffI2C") + .appendField(", UART") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") + .appendField(", XB") + .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); + } this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); }, diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index 3a8549bd..be3ae24a 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -93,18 +93,18 @@ Blockly.Arduino.sensebox_solar_deep_sleep_and_restart = function () { var board = window.sessionStorage.getItem("board"); var sleep_time = this.getFieldValue("sleep_time"); var time_scale = this.getFieldValue("time_scale"); - var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; if (board === "esp32") { + var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; Blockly.Arduino.libraries_["library_esp32_hal_gpio"] = "#include ;"; Blockly.Arduino.libraries_["library_pins_arduino"] = "#include ;"; Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart -void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, bool powerOffXB) { - digitalWrite(IO_ENABLE, powerOffI2C ? HIGH : LOW); +void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART, bool powerOffXB) { + digitalWrite(IO_ENABLE, powerOffGPIO ? HIGH : LOW); digitalWrite(PIN_XB1_ENABLE, powerOffUART ? HIGH : LOW); digitalWrite(PIN_UART_ENABLE, powerOffXB ? HIGH : LOW); digitalWrite(PD_ENABLE, LOW); @@ -113,8 +113,12 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, esp_deep_sleep_start(); } `; + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; } else { // assume board === "mcu" || board === "mini" + var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; Blockly.Arduino.libraries_["library_low_power"] = "#include ;"; Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` @@ -131,7 +135,7 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, while (1) ; } - `; +`; + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; } - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; }; diff --git a/src/components/Blockly/toolbox/ToolboxEsp.js b/src/components/Blockly/toolbox/ToolboxEsp.js index 0e7ee0c3..ca8c5a06 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.js +++ b/src/components/Blockly/toolbox/ToolboxEsp.js @@ -397,7 +397,7 @@ export const ToolboxEsp = () => { battery_level - {/* + 30 * 60000 TRUE @@ -424,7 +424,7 @@ export const ToolboxEsp = () => { 30 * 60000 - TRUE + TRUE TRUE TRUE @@ -433,12 +433,12 @@ export const ToolboxEsp = () => { 12 * 3600000 - TRUE + TRUE TRUE TRUE - */} + From a2c43ee871b664abcbfa989aa9314a1d6ba2981f Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Wed, 20 Nov 2024 11:13:45 +0100 Subject: [PATCH 09/14] added ensure wake time block --- .../Blockly/blocks/sensebox-solar.js | 84 +++++-------------- .../Blockly/generator/sensebox-solar.js | 70 +++++++++++++++- .../Blockly/msg/de/sensebox-solar.js | 33 +++++--- .../Blockly/msg/en/sensebox-solar.js | 13 ++- src/components/Blockly/toolbox/ToolboxEsp.js | 4 + src/components/Blockly/toolbox/ToolboxMcu.js | 4 + 6 files changed, 125 insertions(+), 83 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index b804c574..6c6a24f9 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -61,91 +61,47 @@ Blockly.Blocks["sensebox_solar_charger_SB041"] = { }; /** - * Deep Sleep and Restart + * Ensure Wake Time */ - -Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { +Blockly.Blocks["sensebox_solar_ensure_wake_time"] = { init: function () { - var board = window.sessionStorage.getItem("board"); this.setColour(getColour().solar); this.setPreviousStatement(true); + this.setNextStatement(true); this.appendDummyInput() - .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart) - .appendField(new Blockly.FieldNumber(0), "sleep_time") + .appendField(Blockly.Msg.sensebox_solar_ensure_wake_time) + .appendField(new Blockly.FieldNumber(0), "wake_time") .appendField( new Blockly.FieldDropdown([ - [ - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, - " * 3600000", - ], - [ - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, - " * 60000", - ], - [ - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds, - " * 1000", - ], - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, ""], + [Blockly.Msg.sensebox_solar_hours, " * 3600000"], + [Blockly.Msg.sensebox_solar_minutes, " * 60000"], + [Blockly.Msg.sensebox_solar_seconds, " * 1000"], + [Blockly.Msg.sensebox_solar_milliseconds, ""], ]), "time_scale", ); - if (board === "esp32") { - this.appendDummyInput() - .appendField( - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, - ) - .appendField("GPIO") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffGPIO") - .appendField(", UART") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") - .appendField(", XB") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); - } else { - // assume board === "mcu" || board === "mini" - this.appendDummyInput() - .appendField( - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, - ) - .appendField("I2C") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffI2C") - .appendField(", UART") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") - .appendField(", XB") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); - } - this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); - this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); + this.setTooltip(Blockly.Msg.sensebox_solar_ensure_wake_time_tooltip); + //this.setHelpUrl(Blockly.Msg.sensebox_solar_ensure_wake_time_helpurl); }, }; /** - * Ensure Wake Time + * Deep Sleep and Restart */ - -Blockly.Blocks["sensebox_solar_ensure_wake_time"] = { +Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { init: function () { + var board = window.sessionStorage.getItem("board"); this.setColour(getColour().solar); this.setPreviousStatement(true); - this.setNestStatement(); this.appendDummyInput() - .appendField(Blockly.Msg.sensebox_solar_ensure_wake_time) + .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart) .appendField(new Blockly.FieldNumber(0), "sleep_time") .appendField( new Blockly.FieldDropdown([ - [ - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, - " * 3600000", - ], - [ - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, - " * 60000", - ], - [ - Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds, - " * 1000", - ], - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, ""], + [Blockly.Msg.sensebox_solar_hours, " * 3600000"], + [Blockly.Msg.sensebox_solar_minutes, " * 60000"], + [Blockly.Msg.sensebox_solar_seconds, " * 1000"], + [Blockly.Msg.sensebox_solar_milliseconds, ""], ]), "time_scale", ); @@ -173,7 +129,7 @@ Blockly.Blocks["sensebox_solar_ensure_wake_time"] = { .appendField(", XB") .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); } - this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); + //this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); }, }; diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index be3ae24a..51c44d40 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -79,7 +79,7 @@ void solar_update_SB041() { battery_temperature = -1; } } - `; +`; Blockly.Arduino.setupCode_["Wire.begin()"] = "Wire.begin();"; Blockly.Arduino.setupCode_["solar_update_SB041"] = "solar_update_SB041();"; Blockly.Arduino.loopCodeOnce_["solar_update_SB041"] = "solar_update_SB041();"; @@ -132,8 +132,72 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, delay(1000); noInterrupts(); NVIC_SystemReset(); - while (1) - ; + while (true); +} +`; + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; + } +}; + +/** + * Ensure Wake Time + */ +Blockly.Arduino.sensebox_solar_ensure_wake_time = function () { + var wake_time = this.getFieldValue("wake_time"); + var time_scale = this.getFieldValue("time_scale"); + return ` +// ensure minimal wake time +while(millis() < ${wake_time}${time_scale}); +`; +}; + +/** + * Deep Sleep and Restart + */ +Blockly.Arduino.sensebox_solar_deep_sleep_and_restart = function () { + var board = window.sessionStorage.getItem("board"); + var sleep_time = this.getFieldValue("sleep_time"); + var time_scale = this.getFieldValue("time_scale"); + if (board === "esp32") { + var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + Blockly.Arduino.libraries_["library_esp32_hal_gpio"] = + "#include ;"; + Blockly.Arduino.libraries_["library_pins_arduino"] = + "#include ;"; + Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` +// power saving deep sleep for specific time and a final restart +void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART, bool powerOffXB) { + digitalWrite(IO_ENABLE, powerOffGPIO ? HIGH : LOW); + digitalWrite(PIN_XB1_ENABLE, powerOffUART ? HIGH : LOW); + digitalWrite(PIN_UART_ENABLE, powerOffXB ? HIGH : LOW); + digitalWrite(PD_ENABLE, LOW); + esp_sleep_enable_timer_wakeup(max(0, sleep_time - 1000)); + delay(1000); + esp_deep_sleep_start(); +} +`; + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; + } else { + // assume board === "mcu" || board === "mini" + var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + Blockly.Arduino.libraries_["library_low_power"] = + "#include ;"; + Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` +// power saving deep sleep for specific time and a final restart +void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, bool powerOffXB) { + senseBoxIO.powerI2C(!powerOffI2C); + senseBoxIO.powerUART(!powerOffUART); + senseBoxIO.powerXB1(!powerOffXB); + senseBoxIO.powerXB2(!powerOffXB); + LowPower.deepSleep(max(0, sleep_time - 1000)); + delay(1000); + noInterrupts(); + NVIC_SystemReset(); + while (true); } `; return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; diff --git a/src/components/Blockly/msg/de/sensebox-solar.js b/src/components/Blockly/msg/de/sensebox-solar.js index 531b31b4..650741d2 100644 --- a/src/components/Blockly/msg/de/sensebox-solar.js +++ b/src/components/Blockly/msg/de/sensebox-solar.js @@ -9,38 +9,45 @@ export const SOLAR = { */ senseBox_solar_charger_SB041: "Solarladeregler (SB-041)", senseBox_solar_charger_SB041_solar_panel_voltage: - "Spannung der Solarplatte in V", + "Spannung des Solarmoduls in V", senseBox_solar_charger_SB041_solar_is_connected: - "Solarplatte ist angeschlossen", + "Solarmodul ist angeschlossen", senseBox_solar_charger_SB041_battery_voltage: "Spannung der Batterie in V", senseBox_solar_charger_SB041_battery_level: "Ladelevel der Batterie in 1/4", senseBox_solar_charger_SB041_battery_is_charging: "Batterie wird geladen", senseBox_solar_charger_SB041_battery_is_fast_charging: "Batterie wird schnell geladen", senseBox_solar_charger_SB041_battery_temperature: - "Temperatur der Batterie in C", + "Temperatur der Batterie in °C", senseBox_solar_charger_SB041_tooltip_mcu: - "Schließe den Solarladeregler (SB-041) an einen der **I2C-Anschlüsse** der senseBox MCU an. Der Solarladeregler liefert sowohl Strom, als auch Daten über den Ladeprozess, die Batterie und die Solarplatte.", + "Schließe den Solarladeregler (SB-041) an einen der **I2C-Anschlüsse** der senseBox MCU an. Der Solarladeregler liefert sowohl Strom als auch Daten über den Ladeprozess, die Batterie und das Solarmodul.", senseBox_solar_charger_SB041_tooltip_mini: - "Schließe den Solarladeregler (SB-041) mit einem **JST auf Qwic Kabel** an einen der **I2C-Anschlüsse** der senseBox MCU mini an. Der Solarladeregler liefert sowohl Strom, als auch Daten über den Ladeprozess, die Batterie und die Solarplatte.", + "Schließe den Solarladeregler (SB-041) mit einem **JST-auf-Qwiic-Kabel** an einen der **I2C-Anschlüsse** der senseBox MCU mini an. Der Solarladeregler liefert sowohl Strom als auch Daten über den Ladeprozess, die Batterie und das Solarmodul.", senseBox_solar_charger_SB041_tooltip_esp32: - "Schließe den Solarladeregler (SB-041) an das **mitgelieferte adapter Kabel** an. Der Stecker mit dem **roten und schwarzen Kabel** versorgt die senseBox MCU-S2 mit Strom und kommt in den entsprechend Anschluss. Der zweite Stecker mit **gelbem und grünen Kabel** liefert Daten über die Batterie und Solarplatte und kommt in einen der **I2C-Anschlüsse**.", + "Schließe den Solarladeregler (SB-041) an das **mitgelieferte Adapterkabel** an. Der Stecker mit dem **roten und schwarzen Kabel** versorgt die senseBox MCU-S2 mit Strom und kommt in den entsprechenden Anschluss. Der zweite Stecker mit dem **gelben und grünen Kabel** liefert Daten über die Batterie und das Solarmodul und kommt in einen der **I2C-Anschlüsse**.", senseBox_solar_charger_SB041_helpurl: "https://sensebox.kaufen/product/solar-set", + /** + * Ensure Wake Time + */ + sensebox_solar_ensure_wake_time: "Mindestwachzeit von", + sensebox_solar_ensure_wake_time_tooltip: + "Dieser Block stellt sicher, dass die senseBox mindestens die angegebene Zeit seit dem letzten Neustart wach war. **Wenn du den Tiefschlaf-Block am Ende der Endlosschleife verwendest, dann platziere diesen Block am Anfang der Endlosschleife, um sicherzugehen, dass alle Sensoren mindestens die angegebene Zeit lang aktiv waren.** Für die Feinstaubsensoren wird beispielsweise eine Mindestwachzeit von 30 Sekunden empfohlen.", + sensebox_solar_ensure_wake_time_helpurl: "", + /** * Deep Sleep and Restart */ sensebox_solar_deep_sleep_and_restart: "Stromsparender Tiefschlaf und Neustart nach", - sensebox_solar_deep_sleep_and_restart_seconds: "Sekunden", - sensebox_solar_deep_sleep_and_restart_minutes: "Minuten", - sensebox_solar_deep_sleep_and_restart_hours: "Stunden", - sensebox_solar_deep_sleep_and_restart_milliseconds: "Millisekunden", + sensebox_solar_seconds: "Sekunden", + sensebox_solar_minutes: "Minuten", + sensebox_solar_hours: "Stunden", + sensebox_solar_milliseconds: "Millisekunden", sensebox_solar_deep_sleep_and_restart_deactivate_ports: "Anschlüsse zum deaktivieren:", sensebox_solar_deep_sleep_and_restart_tooltip: - "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen Stromsparenden Tiefschlaf. Dabei werden jegliche Funktionen und die Sensoren an den angegebenen Anschlüssen deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb.", - sensebox_solar_deep_sleep_and_restart_helpurl: - "https://sensebox.kaufen/product/solar-set", + "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen **Stromsparenden Tiefschlaf**. Dabei werden jegliche Funktionen und die Sensoren an den angegebenen Anschlüssen deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb.", + sensebox_solar_deep_sleep_and_restart_helpurl: "", }; diff --git a/src/components/Blockly/msg/en/sensebox-solar.js b/src/components/Blockly/msg/en/sensebox-solar.js index 0e60b2ea..e77eb1ef 100644 --- a/src/components/Blockly/msg/en/sensebox-solar.js +++ b/src/components/Blockly/msg/en/sensebox-solar.js @@ -25,6 +25,14 @@ export const SOLAR = { senseBox_solar_charger_SB041_helpurl: "https://sensebox.kaufen/product/solar-set", + /** + * Ensure Wake Time + */ + sensebox_solar_ensure_wake_time: "Minimum wake time of", + sensebox_solar_ensure_wake_time_tooltip: + "This block ensures that the senseBox has been awake for at least the specified amount of time since the last restart. **If you use the deep sleep block at the end of the main loop, place this block at the beginning of the main loop to ensure that all sensors have been active for at least the specified time.** For fine particular sensors, a minimum wake time of 30 seconds is recommended.", + sensebox_solar_ensure_wake_time_helpurl: "", + /** * Deep Sleep and Restart */ @@ -34,7 +42,6 @@ export const SOLAR = { sensebox_solar_deep_sleep_and_restart_minutes: "minutes", sensebox_solar_deep_sleep_and_restart_hours: "hours", sensebox_solar_deep_sleep_and_restart_tooltip: - "This block puts the senseBox into a power-saving deep sleep mode for a specified time. During this time, all functions and connected sensors are disabled. After the specified time, the senseBox wakes up and restarts. This block is useful for solar operation. ", - sensebox_solar_deep_sleep_and_restart_helpurl: - "https://sensebox.kaufen/product/solar-set", + "This block puts the senseBox into a **power-saving deep sleep** for a specified time. During this time, all functions and connected sensors are disabled. After the specified time, the senseBox wakes up and restarts. This block is useful for solar operation.", + sensebox_solar_deep_sleep_and_restart_helpurl: "", }; diff --git a/src/components/Blockly/toolbox/ToolboxEsp.js b/src/components/Blockly/toolbox/ToolboxEsp.js index ca8c5a06..f1be32a0 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.js +++ b/src/components/Blockly/toolbox/ToolboxEsp.js @@ -397,6 +397,10 @@ export const ToolboxEsp = () => { battery_level + + 30 + * 1000 + 30 * 60000 diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index a104d641..88eae48b 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -392,6 +392,10 @@ export const ToolboxMcu = () => { battery_level + + 30 + * 1000 + 30 * 60000 From 3c8ce416c17d5347792ad8c2d75af0c9a8a5e810 Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Wed, 20 Nov 2024 11:38:08 +0100 Subject: [PATCH 10/14] delted accidental copy past of sensor --- .../Blockly/generator/sensebox-sensors.js | 39 +------------------ 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index f8b4f572..8d136fba 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -362,8 +362,7 @@ Blockly.Arduino.sensebox_tof_imager = function () { var dropdown_name = this.getFieldValue("dropdown"); var maxDistance = this.getFieldValue("maxDistance"); Blockly.Arduino.libraries_["library_wire"] = "#include "; - Blockly.Arduino.libraries_[`library_vl53l8cx`] = - `#include `; + Blockly.Arduino.libraries_[`library_vl53l8cx`] = `#include `; Blockly.Arduino.variables_["define:_vl53l8cx"] = ` VL53L8CX sensor_vl53l8cx(&Wire, -1, -1); `; @@ -915,42 +914,6 @@ Blockly.Arduino.sensebox_sensor_dps310 = function () { code = ""; } 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_[ - "adafruit_dps310" - ] = `#include // http://librarymanager/All#Adafruit_DPS310`; - 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]; }; /** From a85a194deb50b84d970bfeecfba7300958272838 Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Wed, 20 Nov 2024 11:44:17 +0100 Subject: [PATCH 11/14] small fix --- src/components/Blockly/toolbox/ToolboxEsp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Blockly/toolbox/ToolboxEsp.js b/src/components/Blockly/toolbox/ToolboxEsp.js index f1be32a0..f3abd71e 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.js +++ b/src/components/Blockly/toolbox/ToolboxEsp.js @@ -404,7 +404,7 @@ export const ToolboxEsp = () => { 30 * 60000 - TRUE + TRUE TRUE TRUE From 6de5ad61cf9489550a409412e38110ee48b3de2a Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Fri, 6 Dec 2024 15:13:22 +0100 Subject: [PATCH 12/14] aligning with development branche --- .../Blockly/blocks/sensebox-solar.js | 11 +- .../Blockly/generator/sensebox-solar.js | 161 +++++++++--------- src/components/Blockly/toolbox/ToolboxMcu.js | 6 +- 3 files changed, 94 insertions(+), 84 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index 6c6a24f9..631226be 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -1,6 +1,7 @@ -import Blockly from "blockly"; +import * as Blockly from "blockly"; import { getColour } from "../helpers/colour"; import * as Types from "../helpers/types"; +import { selectedBoard } from "../helpers/board"; /** * Solar Charger (SB-041) @@ -73,10 +74,10 @@ Blockly.Blocks["sensebox_solar_ensure_wake_time"] = { .appendField(new Blockly.FieldNumber(0), "wake_time") .appendField( new Blockly.FieldDropdown([ - [Blockly.Msg.sensebox_solar_hours, " * 3600000"], - [Blockly.Msg.sensebox_solar_minutes, " * 60000"], - [Blockly.Msg.sensebox_solar_seconds, " * 1000"], - [Blockly.Msg.sensebox_solar_milliseconds, ""], + [Blockly.Msg.sensebox_solar_hours, "3600000"], + [Blockly.Msg.sensebox_solar_minutes, "60000"], + [Blockly.Msg.sensebox_solar_seconds, "1000"], + [Blockly.Msg.sensebox_solar_milliseconds, "1"], ]), "time_scale", ); diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index 51c44d40..0fb5d507 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -1,23 +1,27 @@ -import Blockly from "blockly"; +import * as Blockly from "blockly"; /** * Solar Charger (SB-041) */ -Blockly.Arduino.sensebox_solar_charger_SB041 = function () { - var value = this.getFieldValue("value"); - Blockly.Arduino.libraries_["library_wire"] = "#include ;"; - Blockly.Arduino.variables_["solar_panel_voltage"] = - "float solar_panel_voltage;"; - Blockly.Arduino.variables_["solar_is_connected"] = "bool solar_is_connected;"; - Blockly.Arduino.variables_["battery_voltage"] = "float battery_voltage;"; - Blockly.Arduino.variables_["battery_level"] = "int battery_level;"; - Blockly.Arduino.variables_["battery_is_charging"] = - "bool battery_is_charging;"; - Blockly.Arduino.variables_["battery_is_fast_charging"] = - "bool battery_is_fast_charging;"; - Blockly.Arduino.variables_["battery_temperature"] = - "float battery_temperature;"; - Blockly.Arduino.codeFunctions_["solar_update_SB041"] = ` +Blockly.Generator.Arduino.forBlock["sensebox_solar_charger_SB041"] = + function () { + var value = this.getFieldValue("value"); + Blockly.Generator.Arduino.libraries_["library_wire"] = "#include ;"; + Blockly.Generator.Arduino.variables_["solar_panel_voltage"] = + "float solar_panel_voltage;"; + Blockly.Generator.Arduino.variables_["solar_is_connected"] = + "bool solar_is_connected;"; + Blockly.Generator.Arduino.variables_["battery_voltage"] = + "float battery_voltage;"; + Blockly.Generator.Arduino.variables_["battery_level"] = + "int battery_level;"; + Blockly.Generator.Arduino.variables_["battery_is_charging"] = + "bool battery_is_charging;"; + Blockly.Generator.Arduino.variables_["battery_is_fast_charging"] = + "bool battery_is_fast_charging;"; + Blockly.Generator.Arduino.variables_["battery_temperature"] = + "float battery_temperature;"; + Blockly.Generator.Arduino.codeFunctions_["solar_update_SB041"] = ` // update the values of the solar charger (SB-041) void solar_update_SB041() { /* @@ -80,28 +84,31 @@ void solar_update_SB041() { } } `; - Blockly.Arduino.setupCode_["Wire.begin()"] = "Wire.begin();"; - Blockly.Arduino.setupCode_["solar_update_SB041"] = "solar_update_SB041();"; - Blockly.Arduino.loopCodeOnce_["solar_update_SB041"] = "solar_update_SB041();"; - return [value, Blockly.Arduino.ORDER_ATOMIC]; -}; + Blockly.Generator.Arduino.setupCode_["Wire.begin()"] = "Wire.begin();"; + Blockly.Generator.Arduino.setupCode_["solar_update_SB041"] = + "solar_update_SB041();"; + Blockly.Generator.Arduino.loopCodeOnce_["solar_update_SB041"] = + "solar_update_SB041();"; + return [value, Blockly.Generator.Arduino.ORDER_ATOMIC]; + }; /** * Deep Sleep and Restart */ -Blockly.Arduino.sensebox_solar_deep_sleep_and_restart = function () { - var board = window.sessionStorage.getItem("board"); - var sleep_time = this.getFieldValue("sleep_time"); - var time_scale = this.getFieldValue("time_scale"); - if (board === "esp32") { - var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; - Blockly.Arduino.libraries_["library_esp32_hal_gpio"] = - "#include ;"; - Blockly.Arduino.libraries_["library_pins_arduino"] = - "#include ;"; - Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` +Blockly.Generator.Arduino.forBlock["sensebox_solar_deep_sleep_and_restart"] = + function () { + var board = window.sessionStorage.getItem("board"); + var sleep_time = this.getFieldValue("sleep_time"); + var time_scale = this.getFieldValue("time_scale"); + if (board === "esp32") { + var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + Blockly.Generator.Arduino.libraries_["library_esp32_hal_gpio"] = + "#include ;"; + Blockly.Generator.Arduino.libraries_["library_pins_arduino"] = + "#include ;"; + Blockly.Generator.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART, bool powerOffXB) { digitalWrite(IO_ENABLE, powerOffGPIO ? HIGH : LOW); @@ -113,15 +120,15 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART esp_deep_sleep_start(); } `; - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; - } else { - // assume board === "mcu" || board === "mini" - var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; - Blockly.Arduino.libraries_["library_low_power"] = - "#include ;"; - Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; + } else { + // assume board === "mcu" || board === "mini" + var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + Blockly.Generator.Arduino.libraries_["library_low_power"] = + "#include ;"; + Blockly.Generator.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, bool powerOffXB) { senseBoxIO.powerI2C(!powerOffI2C); @@ -135,38 +142,40 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, while (true); } `; - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; - } -}; + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; + } + }; /** * Ensure Wake Time */ -Blockly.Arduino.sensebox_solar_ensure_wake_time = function () { - var wake_time = this.getFieldValue("wake_time"); - var time_scale = this.getFieldValue("time_scale"); - return ` +Blockly.Generator.Arduino.forBlock["sensebox_solar_ensure_wake_time"] = + function () { + var wake_time = this.getFieldValue("wake_time"); + var time_scale = this.getFieldValue("time_scale"); + return ` // ensure minimal wake time while(millis() < ${wake_time}${time_scale}); `; -}; + }; /** * Deep Sleep and Restart */ -Blockly.Arduino.sensebox_solar_deep_sleep_and_restart = function () { - var board = window.sessionStorage.getItem("board"); - var sleep_time = this.getFieldValue("sleep_time"); - var time_scale = this.getFieldValue("time_scale"); - if (board === "esp32") { - var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; - Blockly.Arduino.libraries_["library_esp32_hal_gpio"] = - "#include ;"; - Blockly.Arduino.libraries_["library_pins_arduino"] = - "#include ;"; - Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` +Blockly.Generator.Arduino.forBlock["sensebox_solar_deep_sleep_and_restart"] = + function () { + var board = window.sessionStorage.getItem("board"); + var sleep_time = this.getFieldValue("sleep_time"); + var time_scale = this.getFieldValue("time_scale"); + if (board === "esp32") { + var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + Blockly.Generator.Arduino.libraries_["library_esp32_hal_gpio"] = + "#include ;"; + Blockly.Generator.Arduino.libraries_["library_pins_arduino"] = + "#include ;"; + Blockly.Generator.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART, bool powerOffXB) { digitalWrite(IO_ENABLE, powerOffGPIO ? HIGH : LOW); @@ -178,15 +187,15 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART esp_deep_sleep_start(); } `; - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; - } else { - // assume board === "mcu" || board === "mini" - var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; - Blockly.Arduino.libraries_["library_low_power"] = - "#include ;"; - Blockly.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` + return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; + } else { + // assume board === "mcu" || board === "mini" + var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; + var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; + var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + Blockly.Generator.Arduino.libraries_["library_low_power"] = + "#include ;"; + Blockly.Generator.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` // power saving deep sleep for specific time and a final restart void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, bool powerOffXB) { senseBoxIO.powerI2C(!powerOffI2C); @@ -200,6 +209,6 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, while (true); } `; - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; - } -}; + return `deep_sleep_and_restart(${sleep_time} * ${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; + } + }; diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index 88eae48b..b5b0cc9a 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -394,9 +394,9 @@ export const ToolboxMcu = () => { 30 - * 1000 + 1000 - + {/* 30 * 60000 TRUE @@ -437,7 +437,7 @@ export const ToolboxMcu = () => { TRUE - + */} From 850d9bf65fab7e181f542aff9ee32baf9c6d273b Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Mon, 9 Dec 2024 16:01:36 +0100 Subject: [PATCH 13/14] use library, fix language bug and integrate ensurance of wake time into deep sleep --- .../Blockly/blocks/sensebox-solar.js | 128 +++++++++++------- .../Blockly/generator/sensebox-solar.js | 94 ++----------- .../Blockly/msg/de/sensebox-solar.js | 32 ++--- .../Blockly/msg/en/sensebox-solar.js | 20 ++- src/components/Blockly/msg/en/ui.js | 5 +- src/components/Blockly/toolbox/ToolboxEsp.js | 6 +- src/components/Blockly/toolbox/ToolboxMcu.js | 42 +++--- 7 files changed, 143 insertions(+), 184 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index 631226be..98c0a6a2 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -8,7 +8,7 @@ import { selectedBoard } from "../helpers/board"; */ Blockly.Blocks["sensebox_solar_charger_SB041"] = { init: function () { - var board = window.sessionStorage.getItem("board"); + var board = selectedBoard().title; this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().solar); this.appendDummyInput().appendField( @@ -17,48 +17,79 @@ Blockly.Blocks["sensebox_solar_charger_SB041"] = { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_value) .appendField( - new Blockly.FieldDropdown([ - [ - Blockly.Msg.senseBox_solar_charger_SB041_solar_panel_voltage, - "solar_panel_voltage", - ], - [ - Blockly.Msg.senseBox_solar_charger_SB041_solar_is_connected, - "solar_is_connected", - ], - [ - Blockly.Msg.senseBox_solar_charger_SB041_battery_voltage, - "battery_voltage", - ], - [ - Blockly.Msg.senseBox_solar_charger_SB041_battery_level, - "battery_level", - ], - [ - Blockly.Msg.senseBox_solar_charger_SB041_battery_is_charging, - "battery_is_charging", - ], - [ - Blockly.Msg.senseBox_solar_charger_SB041_battery_is_fast_charging, - "battery_is_fast_charging", - ], + new Blockly.FieldDropdown( [ - Blockly.Msg.senseBox_solar_charger_SB041_battery_temperature, - "battery_temperature", + [ + Blockly.Msg.senseBox_solar_charger_SB041_charger_connected, + "isChargerConnected", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_solar_panel_voltage, + "getSolarPanelVoltage", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_battery_voltage, + "getBatteryVoltage", + ], + [Blockly.Msg.senseBox_solar_charger_SB041_charging, "isCharging"], + [ + Blockly.Msg.senseBox_solar_charger_SB041_fast_charging, + "isFastCharging", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_battery_level, + "getBatteryLevel", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_good_input_voltage, + "isGoodInputVoltage", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_battery_present, + "isBatteryPresent", + ], + [ + Blockly.Msg.senseBox_solar_charger_SB041_battery_temperature, + "getBatteryTemperature", + ], ], - ]), - "value", + this.updateOutputType.bind(this), + ), + "MEASUREMENT", ); - if (board === "mini") { + if (board === "Mini") { this.setTooltip(Blockly.Msg.senseBox_solar_charger_SB041_tooltip_mini); - } else if (board === "esp32") { + } else if (board === "MCU-S2") { this.setTooltip(Blockly.Msg.senseBox_solar_charger_SB041_tooltip_esp32); } else { - // assume board === "mcu" + // assume board === "MCU" this.setTooltip(Blockly.Msg.senseBox_solar_charger_SB041_tooltip_mcu); } this.setHelpUrl(Blockly.Msg.senseBox_solar_charger_SB041_helpurl); }, + + // Function to update the output type dynamically + updateOutputType: function (newMeasurement) { + switch (newMeasurement) { + case "isChargerConnected": + case "isCharging": + case "isFastCharging": + case "isGoodInputVoltage": + case "isBatteryPresent": + this.setOutput(true, Types.BOOLEAN.typeName); + break; + + case "getSolarPanelVoltage": + case "getBatteryVoltage": + case "getBatteryLevel": + case "getBatteryTemperature": + this.setOutput(true, Types.NUMBER.typeName); + break; + + default: + this.setOutput(true, null); // Fallback + } + }, }; /** @@ -91,45 +122,46 @@ Blockly.Blocks["sensebox_solar_ensure_wake_time"] = { */ Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { init: function () { - var board = window.sessionStorage.getItem("board"); + var board = selectedBoard().title; this.setColour(getColour().solar); this.setPreviousStatement(true); this.appendDummyInput() .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart) - .appendField(new Blockly.FieldNumber(0), "sleep_time") + .appendField(new Blockly.FieldNumber(0), "SLEEP_TIME") .appendField( new Blockly.FieldDropdown([ - [Blockly.Msg.sensebox_solar_hours, " * 3600000"], - [Blockly.Msg.sensebox_solar_minutes, " * 60000"], - [Blockly.Msg.sensebox_solar_seconds, " * 1000"], - [Blockly.Msg.sensebox_solar_milliseconds, ""], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, "3600000"], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, "60000"], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds, "1000"], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, "1"], ]), - "time_scale", + "TIME_SCALE", ); - if (board === "esp32") { + if (board === "MCU-S2") { this.appendDummyInput() .appendField( Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, ) .appendField("GPIO") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffGPIO") + .appendField(new Blockly.FieldCheckbox("TRUE"), "POWER_OFF_GPIO") .appendField(", UART") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") + .appendField(new Blockly.FieldCheckbox("TRUE"), "POWER_OFF_UART") .appendField(", XB") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); + .appendField(new Blockly.FieldCheckbox("TRUE"), "POWER_OFF_XB"); } else { - // assume board === "mcu" || board === "mini" + // assume board === "MCU" || board === "MINI" this.appendDummyInput() .appendField( Blockly.Msg.sensebox_solar_deep_sleep_and_restart_deactivate_ports, ) .appendField("I2C") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffI2C") + .appendField(new Blockly.FieldCheckbox("TRUE"), "POWER_OFF_I2C") .appendField(", UART") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffUART") + .appendField(new Blockly.FieldCheckbox("TRUE"), "POWER_OFF_UART") .appendField(", XB") - .appendField(new Blockly.FieldCheckbox("TRUE"), "powerOffXB"); + .appendField(new Blockly.FieldCheckbox("TRUE"), "POWER_OFF_XB"); } + this.appendDummyInput().appendField(Blockly.Msg.) this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); //this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); }, diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index 0fb5d507..6cc11d2a 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -5,91 +5,17 @@ import * as Blockly from "blockly"; */ Blockly.Generator.Arduino.forBlock["sensebox_solar_charger_SB041"] = function () { - var value = this.getFieldValue("value"); - Blockly.Generator.Arduino.libraries_["library_wire"] = "#include ;"; - Blockly.Generator.Arduino.variables_["solar_panel_voltage"] = - "float solar_panel_voltage;"; - Blockly.Generator.Arduino.variables_["solar_is_connected"] = - "bool solar_is_connected;"; - Blockly.Generator.Arduino.variables_["battery_voltage"] = - "float battery_voltage;"; - Blockly.Generator.Arduino.variables_["battery_level"] = - "int battery_level;"; - Blockly.Generator.Arduino.variables_["battery_is_charging"] = - "bool battery_is_charging;"; - Blockly.Generator.Arduino.variables_["battery_is_fast_charging"] = - "bool battery_is_fast_charging;"; - Blockly.Generator.Arduino.variables_["battery_temperature"] = - "float battery_temperature;"; - Blockly.Generator.Arduino.codeFunctions_["solar_update_SB041"] = ` -// update the values of the solar charger (SB-041) -void solar_update_SB041() { - /* - * I2C i/f with following info on address 0x32: - * - Register 0: cell voltage, 20mV/LSB - * - Register 1: input voltage, 100mV/LSB - * - Register 2: status bits: [B,I,L3,L2,L1,L0,F,C] - * B=battery present >2.8V - * I=Input voltage present > 4.5V - * L0-L3=battery status LEDs - * F=Fast charge enabled - * C=Charging - * - Register 3: temperature in C, signed 8-bit - * Thresholds: L0: 3.2V, L1: 3.6V, L2: 3.7V, L3: 3.9V - */ - byte address_SB041 = 0x32; - Wire.beginTransmission(address_SB041); - byte error = Wire.endTransmission(); - if (error == 0 || error == 2) { - solar_is_connected = (error == 0); - Wire.requestFrom((uint8_t)address_SB041, (uint8_t)4); + var measurement = this.getFieldValue("MEASUREMENT"); + Blockly.Generator.Arduino.libraries_["library_solar_charger_SB041"] = + "#include ;"; + Blockly.Generator.Arduino.variables_["define_solar_charger_SB041"] = + "SolarChargerSB041 charger;"; - // register 0 - uint8_t vbat_raw = Wire.read(); - battery_voltage = 0.02 * vbat_raw; - - // register 1 - uint8_t vin_raw = Wire.read(); - solar_panel_voltage = 0.1 * vin_raw; - - // register 2 - uint8_t flags = Wire.read(); - battery_is_charging = flags & 1; - if (flags & 32) - battery_level = 4; - else if (flags & 16) - battery_level = 3; - else if (flags & 8) - battery_level = 2; - else if (flags & 4) - battery_level = 1; - else - battery_level = 0; - battery_is_fast_charging = flags & 64; - battery_is_charging = flags & 128; - - // register 3 - battery_temperature = (int8_t)(Wire.read()); - } else { - // set all booleans to false because of error - solar_is_connected = false; - battery_is_fast_charging = false; - battery_is_charging = false; - - // set all numbers to -1 because of error - battery_voltage = -1; - solar_panel_voltage = -1; - battery_level = -1; - battery_temperature = -1; - } -} -`; - Blockly.Generator.Arduino.setupCode_["Wire.begin()"] = "Wire.begin();"; - Blockly.Generator.Arduino.setupCode_["solar_update_SB041"] = - "solar_update_SB041();"; - Blockly.Generator.Arduino.loopCodeOnce_["solar_update_SB041"] = - "solar_update_SB041();"; - return [value, Blockly.Generator.Arduino.ORDER_ATOMIC]; + Blockly.Generator.Arduino.setupCode_["begin_solar_charger_SB041"] = + "charger.begin();"; + Blockly.Generator.Arduino.loopCodeOnce_["update_solar_charger_SB041"] = + "charger.update();"; + return [`charger.${measurement}()`, Blockly.Generator.Arduino.ORDER_ATOMIC]; }; /** diff --git a/src/components/Blockly/msg/de/sensebox-solar.js b/src/components/Blockly/msg/de/sensebox-solar.js index 650741d2..0cf616e1 100644 --- a/src/components/Blockly/msg/de/sensebox-solar.js +++ b/src/components/Blockly/msg/de/sensebox-solar.js @@ -8,15 +8,19 @@ export const SOLAR = { * Solar Charger (SB-041) */ senseBox_solar_charger_SB041: "Solarladeregler (SB-041)", + senseBox_solar_charger_SB041_charger_connected: + "Laderegler ist angeschlossen (wahr/falsch)", senseBox_solar_charger_SB041_solar_panel_voltage: "Spannung des Solarmoduls in V", - senseBox_solar_charger_SB041_solar_is_connected: - "Solarmodul ist angeschlossen", senseBox_solar_charger_SB041_battery_voltage: "Spannung der Batterie in V", + senseBox_solar_charger_SB041_charging: "Batterie wird geladen (wahr/falsch)", + senseBox_solar_charger_SB041_fast_charging: + "Batterie wird schnell geladen (wahr/falsch)", senseBox_solar_charger_SB041_battery_level: "Ladelevel der Batterie in 1/4", - senseBox_solar_charger_SB041_battery_is_charging: "Batterie wird geladen", - senseBox_solar_charger_SB041_battery_is_fast_charging: - "Batterie wird schnell geladen", + senseBox_solar_charger_SB041_good_input_voltage: + "Ausreichende Eingangsspannung (wahr/falsch)", + senseBox_solar_charger_SB041_battery_present: + "Batterie angeschlossen (wahr/falsch)", senseBox_solar_charger_SB041_battery_temperature: "Temperatur der Batterie in °C", senseBox_solar_charger_SB041_tooltip_mcu: @@ -28,26 +32,20 @@ export const SOLAR = { senseBox_solar_charger_SB041_helpurl: "https://sensebox.kaufen/product/solar-set", - /** - * Ensure Wake Time - */ - sensebox_solar_ensure_wake_time: "Mindestwachzeit von", - sensebox_solar_ensure_wake_time_tooltip: - "Dieser Block stellt sicher, dass die senseBox mindestens die angegebene Zeit seit dem letzten Neustart wach war. **Wenn du den Tiefschlaf-Block am Ende der Endlosschleife verwendest, dann platziere diesen Block am Anfang der Endlosschleife, um sicherzugehen, dass alle Sensoren mindestens die angegebene Zeit lang aktiv waren.** Für die Feinstaubsensoren wird beispielsweise eine Mindestwachzeit von 30 Sekunden empfohlen.", - sensebox_solar_ensure_wake_time_helpurl: "", - /** * Deep Sleep and Restart */ sensebox_solar_deep_sleep_and_restart: "Stromsparender Tiefschlaf und Neustart nach", - sensebox_solar_seconds: "Sekunden", - sensebox_solar_minutes: "Minuten", - sensebox_solar_hours: "Stunden", + sensebox_solar_deep_sleep_and_restart_hours: "Stunden", + sensebox_solar_deep_sleep_and_restart_minutes: "Minuten", + sensebox_solar_deep_sleep_and_restart_seconds: "Sekunden", + sensebox_solar_deep_sleep_and_restart_milliseconds: "Millisekunden", sensebox_solar_milliseconds: "Millisekunden", sensebox_solar_deep_sleep_and_restart_deactivate_ports: "Anschlüsse zum deaktivieren:", + sensebox_solar_deep_sleep_and_restart_minimal_wake_time: "Mindestwachzeit:", sensebox_solar_deep_sleep_and_restart_tooltip: - "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen **Stromsparenden Tiefschlaf**. Dabei werden jegliche Funktionen und die Sensoren an den angegebenen Anschlüssen deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb.", + "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen **Stromsparenden Tiefschlaf**. Dabei werden jegliche Funktionen und die Sensoren an den angegebenen Anschlüssen deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb. \n Dieser Block stellt sicher, dass die senseBox mindestens die angegebene Zeit seit dem letzten Neustart wach war. **Wenn du den Tiefschlaf-Block am Ende der Endlosschleife verwendest, dann platziere diesen Block am Anfang der Endlosschleife, um sicherzugehen, dass alle Sensoren mindestens die angegebene Zeit lang aktiv waren.** Für die Feinstaubsensoren wird beispielsweise eine Mindestwachzeit von 30 Sekunden empfohlen.", sensebox_solar_deep_sleep_and_restart_helpurl: "", }; diff --git a/src/components/Blockly/msg/en/sensebox-solar.js b/src/components/Blockly/msg/en/sensebox-solar.js index e77eb1ef..76a9e7bf 100644 --- a/src/components/Blockly/msg/en/sensebox-solar.js +++ b/src/components/Blockly/msg/en/sensebox-solar.js @@ -8,14 +8,19 @@ export const SOLAR = { * Solar Charger (SB-041) */ senseBox_solar_charger_SB041: "Solar Charger (SB-041)", + senseBox_solar_charger_SB041_charger_connected: + "Charge controller is connected (true/false)", senseBox_solar_charger_SB041_solar_panel_voltage: "Solar panel voltage in V", - senseBox_solar_charger_SB041_solar_is_connected: "Solar panel is connected", senseBox_solar_charger_SB041_battery_voltage: "Battery voltage in V", + senseBox_solar_charger_SB041_charging: "Battery is charging (true/false)", + senseBox_solar_charger_SB041_fast_charging: + "Battery is fast charging (true/false)", senseBox_solar_charger_SB041_battery_level: "Battery charge level in 1/4", - senseBox_solar_charger_SB041_battery_is_charging: "Battery is charging", - senseBox_solar_charger_SB041_battery_is_fast_charging: - "Battery is fast charging", - senseBox_solar_charger_SB041_battery_temperature: "Battery temperature in C", + senseBox_solar_charger_SB041_good_input_voltage: + "Sufficient input voltage (true/false)", + senseBox_solar_charger_SB041_battery_present: + "Battery is connected (true/false)", + senseBox_solar_charger_SB041_battery_temperature: "Battery temperature in °C", senseBox_solar_charger_SB041_tooltip_mcu: "Connect the solar charger (SB-041) to one of the **I2C ports** of the senseBox MCU. The solar charger provides both power and data about the charging process, battery, and solar panel.", senseBox_solar_charger_SB041_tooltip_mini: @@ -38,9 +43,10 @@ export const SOLAR = { */ sensebox_solar_deep_sleep_and_restart: "Power-saving deep sleep and restart after", - sensebox_solar_deep_sleep_and_restart_milliseconds: "milliseconds", - sensebox_solar_deep_sleep_and_restart_minutes: "minutes", sensebox_solar_deep_sleep_and_restart_hours: "hours", + sensebox_solar_deep_sleep_and_restart_minutes: "minutes", + sensebox_solar_deep_sleep_and_restart_seconds: "seconds", + sensebox_solar_deep_sleep_and_restart_milliseconds: "milliseconds", sensebox_solar_deep_sleep_and_restart_tooltip: "This block puts the senseBox into a **power-saving deep sleep** for a specified time. During this time, all functions and connected sensors are disabled. After the specified time, the senseBox wakes up and restarts. This block is useful for solar operation.", sensebox_solar_deep_sleep_and_restart_helpurl: "", diff --git a/src/components/Blockly/msg/en/ui.js b/src/components/Blockly/msg/en/ui.js index 837e8426..86fa0ebf 100644 --- a/src/components/Blockly/msg/en/ui.js +++ b/src/components/Blockly/msg/en/ui.js @@ -13,7 +13,7 @@ export const UI = { toolbox_functions: "Functions", toolbox_variables: "Variables", toolbox_serial: "Serial", - toolbox_advanced: "Erweitert", + toolbox_advanced: "Advanced", toolbox_motors: "Motors", toolbox_label_externalRTC: "External RTC", toolbox_label_internalRTC: "Internal RTC", @@ -344,7 +344,8 @@ export const UI = { suggestion_pre_text: "Maybe you should try:", display_not_declared: "Initialise the display in the setup() function", - variable_redeclared: "Make sure that you do not use any special characters in your variable names. This includes spaces, asterisks or quotation marks.", + variable_redeclared: + "Make sure that you do not use any special characters in your variable names. This includes spaces, asterisks or quotation marks.", /** * Device Selection * */ diff --git a/src/components/Blockly/toolbox/ToolboxEsp.js b/src/components/Blockly/toolbox/ToolboxEsp.js index f3abd71e..8627e14e 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.js +++ b/src/components/Blockly/toolbox/ToolboxEsp.js @@ -403,7 +403,7 @@ export const ToolboxEsp = () => { 30 - * 60000 + 60000 TRUE TRUE TRUE @@ -427,7 +427,7 @@ export const ToolboxEsp = () => { 30 - * 60000 + 60000 TRUE TRUE TRUE @@ -436,7 +436,7 @@ export const ToolboxEsp = () => { 12 - * 3600000 + 3600000 TRUE TRUE TRUE diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index b5b0cc9a..a459ceff 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -390,26 +390,22 @@ export const ToolboxMcu = () => { - battery_level + getBatteryLevel - - 30 - 1000 + + 30 + 60000 + TRUE + TRUE + TRUE - {/* - 30 - * 60000 - TRUE - TRUE - TRUE - - + {/* GT - battery_level + getBatteryLevel @@ -421,20 +417,20 @@ export const ToolboxMcu = () => { - 30 - * 60000 - TRUE - TRUE - TRUE + 30 + 60000 + TRUE + TRUE + TRUE - 12 - * 3600000 - TRUE - TRUE - TRUE + 12 + 3600000 + TRUE + TRUE + TRUE */} From b2878078fd4e44c5d399e6c5fff485dbfb7bb776 Mon Sep 17 00:00:00 2001 From: BjoernLuig Date: Tue, 17 Dec 2024 10:31:32 +0100 Subject: [PATCH 14/14] quick save of current stage --- .../Blockly/blocks/sensebox-solar.js | 61 +++++------- src/components/Blockly/generator/generator.js | 8 +- .../Blockly/generator/sensebox-solar.js | 82 +++------------- .../Blockly/msg/de/sensebox-solar.js | 5 +- src/components/Blockly/toolbox/ToolboxMcu.js | 95 ++++++++++--------- 5 files changed, 94 insertions(+), 157 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-solar.js b/src/components/Blockly/blocks/sensebox-solar.js index 98c0a6a2..ca45da44 100644 --- a/src/components/Blockly/blocks/sensebox-solar.js +++ b/src/components/Blockly/blocks/sensebox-solar.js @@ -92,51 +92,41 @@ Blockly.Blocks["sensebox_solar_charger_SB041"] = { }, }; -/** - * Ensure Wake Time - */ -Blockly.Blocks["sensebox_solar_ensure_wake_time"] = { - init: function () { - this.setColour(getColour().solar); - this.setPreviousStatement(true); - this.setNextStatement(true); - this.appendDummyInput() - .appendField(Blockly.Msg.sensebox_solar_ensure_wake_time) - .appendField(new Blockly.FieldNumber(0), "wake_time") - .appendField( - new Blockly.FieldDropdown([ - [Blockly.Msg.sensebox_solar_hours, "3600000"], - [Blockly.Msg.sensebox_solar_minutes, "60000"], - [Blockly.Msg.sensebox_solar_seconds, "1000"], - [Blockly.Msg.sensebox_solar_milliseconds, "1"], - ]), - "time_scale", - ); - this.setTooltip(Blockly.Msg.sensebox_solar_ensure_wake_time_tooltip); - //this.setHelpUrl(Blockly.Msg.sensebox_solar_ensure_wake_time_helpurl); - }, -}; - /** * Deep Sleep and Restart */ Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { init: function () { var board = selectedBoard().title; + var time_scales = [ + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, "3600000"], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, "60000"], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds, "1000"], + [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, "1"], + ]; + var sensor_wake_up_seconds = [ + ["30", "30"], + ["60", "60"], + ["120", "120"], + ]; this.setColour(getColour().solar); this.setPreviousStatement(true); + this.appendDummyInput().appendField( + Blockly.Msg.sensebox_solar_deep_sleep_and_restart, + ); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_sleep_time) + .appendField(new Blockly.FieldNumber(1), "SLEEP_TIME") + .appendField(new Blockly.FieldDropdown(time_scales), "TIME_SCALE"); this.appendDummyInput() - .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart) - .appendField(new Blockly.FieldNumber(0), "SLEEP_TIME") .appendField( - new Blockly.FieldDropdown([ - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_hours, "3600000"], - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minutes, "60000"], - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds, "1000"], - [Blockly.Msg.sensebox_solar_deep_sleep_and_restart_milliseconds, "1"], - ]), - "TIME_SCALE", - ); + Blockly.Msg.sensebox_solar_deep_sleep_and_restart_minimal_wake_up_time, + ) + .appendField( + new Blockly.FieldDropdown(sensor_wake_up_seconds), + "WAKE_SECONDS", + ) + .appendField(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_seconds); if (board === "MCU-S2") { this.appendDummyInput() .appendField( @@ -161,7 +151,6 @@ Blockly.Blocks["sensebox_solar_deep_sleep_and_restart"] = { .appendField(", XB") .appendField(new Blockly.FieldCheckbox("TRUE"), "POWER_OFF_XB"); } - this.appendDummyInput().appendField(Blockly.Msg.) this.setTooltip(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_tooltip); //this.setHelpUrl(Blockly.Msg.sensebox_solar_deep_sleep_and_restart_helpurl); }, diff --git a/src/components/Blockly/generator/generator.js b/src/components/Blockly/generator/generator.js index 6d1ecec0..473d4eec 100644 --- a/src/components/Blockly/generator/generator.js +++ b/src/components/Blockly/generator/generator.js @@ -106,13 +106,13 @@ Blockly.Generator.Arduino.init = function (workspace) { Blockly.Generator.Arduino.definitions_ = Object.create(null); - // creates a list of code to be setup before the setup block + // creates a list of code to be in the setup block Blockly.Generator.Arduino.setupCode_ = {}; - // creates a list of code to be setup before the setup block + // creates a list of phyphox code to be in the setup block Blockly.Generator.Arduino.phyphoxSetupCode_ = Object.create(null); - // creates a list of code to be setup before the setup block + // creates a list of lora code to be in the setup block Blockly.Generator.Arduino.loraSetupCode_ = Object.create(null); // creates a list of code for the loop to be runned once @@ -201,8 +201,6 @@ Blockly.Generator.Arduino.finish = function (code) { loraSetupCode += Blockly.Generator.Arduino.loraSetupCode_[key] + "\n" || ""; } - setupCode = - "\nvoid setup() { \n" + preSetupCode + "\n" + loraSetupCode + "\n}\n"; for (const key in Blockly.Generator.Arduino.phyphoxSetupCode_) { phyphoxSetupCode += Blockly.Generator.Arduino.phyphoxSetupCode_[key] + "\n" || ""; diff --git a/src/components/Blockly/generator/sensebox-solar.js b/src/components/Blockly/generator/sensebox-solar.js index 6cc11d2a..2d5ee23c 100644 --- a/src/components/Blockly/generator/sensebox-solar.js +++ b/src/components/Blockly/generator/sensebox-solar.js @@ -1,4 +1,5 @@ import * as Blockly from "blockly"; +import { selectedBoard } from "../helpers/board"; /** * Solar Charger (SB-041) @@ -23,13 +24,14 @@ Blockly.Generator.Arduino.forBlock["sensebox_solar_charger_SB041"] = */ Blockly.Generator.Arduino.forBlock["sensebox_solar_deep_sleep_and_restart"] = function () { - var board = window.sessionStorage.getItem("board"); - var sleep_time = this.getFieldValue("sleep_time"); - var time_scale = this.getFieldValue("time_scale"); - if (board === "esp32") { - var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + var board = selectedBoard().title; + var sleep_time = this.getFieldValue("SLEEP_TIME"); + var time_scale = this.getFieldValue("TIME_SCALE"); + var wake_seconds = this.getFieldValue("WAKE_UP_SECONDS"); + if (board === "MCU-S2") { + var powerOffGPIO = this.getFieldValue("POWER_OFF_GPIO") === "TRUE"; + var powerOffUART = this.getFieldValue("POWER_OFF_UART") === "TRUE"; + var powerOffXB = this.getFieldValue("POWER_OFF_XB") === "TRUE"; Blockly.Generator.Arduino.libraries_["library_esp32_hal_gpio"] = "#include ;"; Blockly.Generator.Arduino.libraries_["library_pins_arduino"] = @@ -46,12 +48,12 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART esp_deep_sleep_start(); } `; - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; + return `deep_sleep_and_restart(${sleep_time} * ${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; } else { - // assume board === "mcu" || board === "mini" - var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; + // assume board === "MCU" || board === "Mini" + var powerOffI2C = this.getFieldValue("POWER_OFF_I2C") === "TRUE"; + var powerOffUART = this.getFieldValue("POWER_OFF_UART") === "TRUE"; + var powerOffXB = this.getFieldValue("POWER_OFF_XB") === "TRUE"; Blockly.Generator.Arduino.libraries_["library_low_power"] = "#include ;"; Blockly.Generator.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` @@ -68,7 +70,7 @@ void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, while (true); } `; - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; + return `deep_sleep_and_restart(${sleep_time} * ${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; } }; @@ -84,57 +86,3 @@ Blockly.Generator.Arduino.forBlock["sensebox_solar_ensure_wake_time"] = while(millis() < ${wake_time}${time_scale}); `; }; - -/** - * Deep Sleep and Restart - */ -Blockly.Generator.Arduino.forBlock["sensebox_solar_deep_sleep_and_restart"] = - function () { - var board = window.sessionStorage.getItem("board"); - var sleep_time = this.getFieldValue("sleep_time"); - var time_scale = this.getFieldValue("time_scale"); - if (board === "esp32") { - var powerOffGPIO = this.getFieldValue("powerOffGPIO") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; - Blockly.Generator.Arduino.libraries_["library_esp32_hal_gpio"] = - "#include ;"; - Blockly.Generator.Arduino.libraries_["library_pins_arduino"] = - "#include ;"; - Blockly.Generator.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` -// power saving deep sleep for specific time and a final restart -void deep_sleep_and_restart(int sleep_time, bool powerOffGPIO, bool powerOffUART, bool powerOffXB) { - digitalWrite(IO_ENABLE, powerOffGPIO ? HIGH : LOW); - digitalWrite(PIN_XB1_ENABLE, powerOffUART ? HIGH : LOW); - digitalWrite(PIN_UART_ENABLE, powerOffXB ? HIGH : LOW); - digitalWrite(PD_ENABLE, LOW); - esp_sleep_enable_timer_wakeup(max(0, sleep_time - 1000)); - delay(1000); - esp_deep_sleep_start(); -} -`; - return `deep_sleep_and_restart(${sleep_time}${time_scale}, ${powerOffGPIO}, ${powerOffUART}, ${powerOffXB});`; - } else { - // assume board === "mcu" || board === "mini" - var powerOffI2C = this.getFieldValue("powerOffI2C") === "TRUE"; - var powerOffUART = this.getFieldValue("powerOffUART") === "TRUE"; - var powerOffXB = this.getFieldValue("powerOffXB") === "TRUE"; - Blockly.Generator.Arduino.libraries_["library_low_power"] = - "#include ;"; - Blockly.Generator.Arduino.codeFunctions_["deep_sleep_and_restart"] = ` -// power saving deep sleep for specific time and a final restart -void deep_sleep_and_restart(int sleep_time, bool powerOffI2C, bool powerOffUART, bool powerOffXB) { - senseBoxIO.powerI2C(!powerOffI2C); - senseBoxIO.powerUART(!powerOffUART); - senseBoxIO.powerXB1(!powerOffXB); - senseBoxIO.powerXB2(!powerOffXB); - LowPower.deepSleep(max(0, sleep_time - 1000)); - delay(1000); - noInterrupts(); - NVIC_SystemReset(); - while (true); -} -`; - return `deep_sleep_and_restart(${sleep_time} * ${time_scale}, ${powerOffI2C}, ${powerOffUART}, ${powerOffXB});`; - } - }; diff --git a/src/components/Blockly/msg/de/sensebox-solar.js b/src/components/Blockly/msg/de/sensebox-solar.js index 0cf616e1..4bbd2e0d 100644 --- a/src/components/Blockly/msg/de/sensebox-solar.js +++ b/src/components/Blockly/msg/de/sensebox-solar.js @@ -36,7 +36,8 @@ export const SOLAR = { * Deep Sleep and Restart */ sensebox_solar_deep_sleep_and_restart: - "Stromsparender Tiefschlaf und Neustart nach", + "Stromsparender Tiefschlaf und Neustart", + sensebox_solar_deep_sleep_and_restart_sleep_time: "Schlafenszeit:", sensebox_solar_deep_sleep_and_restart_hours: "Stunden", sensebox_solar_deep_sleep_and_restart_minutes: "Minuten", sensebox_solar_deep_sleep_and_restart_seconds: "Sekunden", @@ -44,7 +45,7 @@ export const SOLAR = { sensebox_solar_milliseconds: "Millisekunden", sensebox_solar_deep_sleep_and_restart_deactivate_ports: "Anschlüsse zum deaktivieren:", - sensebox_solar_deep_sleep_and_restart_minimal_wake_time: "Mindestwachzeit:", + sensebox_solar_deep_sleep_and_restart_minimal_wake_up_time: "Aufwachzeit:", sensebox_solar_deep_sleep_and_restart_tooltip: "Dieser Block versetzt die senseBox für vorgegebene Zeit in einen **Stromsparenden Tiefschlaf**. Dabei werden jegliche Funktionen und die Sensoren an den angegebenen Anschlüssen deaktiviert. Nach der vorgegebenen Zeit wacht die senseBox auf und startet neu. Dieser Block ist nützlich für den Solarbetrieb. \n Dieser Block stellt sicher, dass die senseBox mindestens die angegebene Zeit seit dem letzten Neustart wach war. **Wenn du den Tiefschlaf-Block am Ende der Endlosschleife verwendest, dann platziere diesen Block am Anfang der Endlosschleife, um sicherzugehen, dass alle Sensoren mindestens die angegebene Zeit lang aktiv waren.** Für die Feinstaubsensoren wird beispielsweise eine Mindestwachzeit von 30 Sekunden empfohlen.", sensebox_solar_deep_sleep_and_restart_helpurl: "", diff --git a/src/components/Blockly/toolbox/ToolboxMcu.js b/src/components/Blockly/toolbox/ToolboxMcu.js index a459ceff..51f12db2 100644 --- a/src/components/Blockly/toolbox/ToolboxMcu.js +++ b/src/components/Blockly/toolbox/ToolboxMcu.js @@ -388,53 +388,7 @@ export const ToolboxMcu = () => { - - - getBatteryLevel - - - 30 - 60000 - TRUE - TRUE - TRUE - - {/* - - - GT - - - getBatteryLevel - - - - - 2 - - - - - - - 30 - 60000 - TRUE - TRUE - TRUE - - - - - 12 - 3600000 - TRUE - TRUE - TRUE - - - */} - + @@ -714,6 +668,53 @@ export const ToolboxMcu = () => { */} + + + getBatteryLevel + + + 30 + 60000 + TRUE + TRUE + TRUE + + {/* + + + GT + + + getBatteryLevel + + + + + 2 + + + + + + + 30 + 60000 + TRUE + TRUE + TRUE + + + + + 12 + 3600000 + TRUE + TRUE + TRUE + + + */} +