import Blockly from 'blockly'; import { getColour } from '../helpers/colour' import * as Types from '../helpers/types' import { selectedBoard } from '../helpers/board' /** * HDC1080 Temperature and Humidity Sensor * */ Blockly.Blocks['sensebox_sensor_temp_hum'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_temp_hum); this.appendDummyInput() .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_value) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_temp, "Temperature"], [Blockly.Msg.senseBox_hum, "Humidity"]]), "NAME"); this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_temp_hum_tip); this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/temp_und_luftfeuchte.html'); } }; /** * VEML6070 and TSL4513 * */ Blockly.Blocks['sensebox_sensor_uv_light'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_uv_light); this.appendDummyInput() .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_value) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_light, "Illuminance"], [Blockly.Msg.senseBox_uv, "UvIntensity"]]), "NAME"); this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_uv_light_tip); this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/temp_und_luftfeuchte.html'); } }; /* BMX055 Three differen Blocks for Accelerometer, Gyroscope, Compass */ Blockly.Blocks['sensebox_sensor_bmx055_accelerometer'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_bmx055_accelerometer); this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_bmx055_accelerometer_direction) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_bmx055_accelerometer_direction_x, "X"], [Blockly.Msg.senseBox_bmx055_accelerometer_direction_y, "Y"], [Blockly.Msg.senseBox_bmx055_accelerometer_direction_z, "Z"], [Blockly.Msg.senseBox_bmx055_accelerometer_direction_total, "Total"]]), "VALUE"); this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_bmx055_accelerometer_range) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_bmx055_accelerometer_range_2g, "0x3"], [Blockly.Msg.senseBox_bmx055_accelerometer_range_4g, "0x5"], [Blockly.Msg.senseBox_bmx055_accelerometer_range_8g, "0x8"], [Blockly.Msg.senseBox_bmx055_accelerometer_range_16g, "0x0C"]]), "RANGE"); this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_bmx055_accelerometer_tip); this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/temp_und_luftfeuchte.html'); } }; /** * SDS011 Fine Particular Matter Sensor * */ Blockly.Blocks['sensebox_sensor_sds011'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_sds011); this.appendDummyInput() .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_value) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_sds011_pm25, "Pm25"], [Blockly.Msg.senseBox_sds011_pm10, "Pm10"]]), "NAME") .appendField(Blockly.Msg.senseBox_sds011_dimension) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_sds011_serial1, "Serial1"], [Blockly.Msg.senseBox_sds011_serial2, "Serial2"]]), "SERIAL"); this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_sds011_tip); this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/temp_und_luftfeuchte.html'); } }; /** * BMP280 Pressure Sensor * */ Blockly.Blocks['sensebox_sensor_pressure'] = { init: function () { var dropdownOptions = [[Blockly.Msg.senseBox_pressure, "Pressure"], [Blockly.Msg.senseBox_temp, "Temperature"], [Blockly.Msg.senseBox_gps_alt, "Altitude"]]; var dropdown = new Blockly.FieldDropdown(dropdownOptions, function (option) { var input = (option === 'Pressure') || (option === 'Temperature') || (option === 'Altitude'); this.sourceBlock_.updateShape_(input); }); this.appendDummyInput() .appendField(Blockly.Msg.senseBox_pressure_sensor); this.appendDummyInput() .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_value) .appendField(dropdown, "NAME"); this.setColour(getColour().sensebox); this.setOutput(true, Types.DECIMAL.typeName); this.setTooltip(Blockly.Msg.senseBox_pressure_tip); this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/luftdruck.html'); }, /** * Parse XML to restore the number of pins available. * @param {!Element} xmlElement XML storage element. * @this Blockly.Block */ domToMutation: function (xmlElement) { (xmlElement.getAttribute('port')); }, /** * Create XML to represent number of pins selection. * @return {!Element} XML storage element. * @this Blockly.Block */ mutationToDom: function () { var container = document.createElement('mutation'); var input = this.getFieldValue('NAME'); this.updateShape_(input); container.setAttribute('NAME', input); return container; }, /** * Modify this block to have the correct number of pins available. * @param {boolean} * @private * @this Blockly.Block */ updateShape_: function () { var extraFieldExist = this.getFieldValue('referencePressure'); var input = this.getFieldValue('NAME'); if (input === 'Altitude' && extraFieldExist === null) { this.appendDummyInput('extraField') .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_pressure_referencePressure) .appendField(new Blockly.FieldTextInput("1013"), "referencePressure") .appendField(Blockly.Msg.senseBox_pressure_referencePressure_dim); } if ((input === 'Pressure' || input === 'Temperature') && extraFieldExist !== null) { this.removeInput('extraField'); } } }; /** * BME680 Environmental Sensor * */ Blockly.Blocks['sensebox_sensor_bme680_bsec'] = { init: function () { var dropdownOptions = [[Blockly.Msg.senseBox_temp, "temperature"], [Blockly.Msg.senseBox_hum, "humidity"], [Blockly.Msg.senseBox_pressure, "pressure"], [Blockly.Msg.senseBox_bme_iaq, "IAQ"], [Blockly.Msg.senseBox_bme_iaq_accuracy, "IAQAccuracy"], [Blockly.Msg.senseBox_bme_co2, "CO2"], [Blockly.Msg.senseBox_bme_breatheVocEquivalent, "breathVocEquivalent"]]; this.appendDummyInput() .appendField(Blockly.Msg.senseBox_bme680); this.appendDummyInput() .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_value) .appendField(new Blockly.FieldDropdown(dropdownOptions), "dropdown") this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_bme_tip); } }; /** * Ultrasonic Sensor * * */ Blockly.Blocks['sensebox_sensor_ultrasonic_ranger'] = { init: function () { var dropdownOptions = [[Blockly.Msg.senseBox_ultrasonic_port_A, 'A'], [Blockly.Msg.senseBox_ultrasonic_port_B, 'B'], [Blockly.Msg.senseBox_ultrasonic_port_C, 'C']]; var dropdown = new Blockly.FieldDropdown(dropdownOptions, function (option) { var input = (option === 'A') || (option === 'B') || (option === 'C'); this.sourceBlock_.updateShape_(input); }); this.setColour(getColour().sensebox); this.appendDummyInput() .appendField(Blockly.Msg.senseBox_ultrasonic) .appendField(dropdown, "port"); this.appendDummyInput('TrigEcho') .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_ultrasonic_trigger) .appendField(new Blockly.FieldDropdown( selectedBoard().digitalPins), 'ultrasonic_trigger') .appendField(Blockly.Msg.senseBox_ultrasonic_echo) .appendField(new Blockly.FieldDropdown( selectedBoard().digitalPins), 'ultrasonic_echo'); this.setOutput(true, Types.NUMBER.typeName); this.setTooltip(Blockly.Msg.senseBox_ultrasonic_tip); this.setHelpUrl('https://sensebox.de/books'); }, /** * Parse XML to restore the number of pins available. * @param {!Element} xmlElement XML storage element. * @this Blockly.Block */ domToMutation: function (xmlElement) { (xmlElement.getAttribute('port')); }, /** * Create XML to represent number of pins selection. * @return {!Element} XML storage element. * @this Blockly.Block */ mutationToDom: function () { var container = document.createElement('mutation'); var input = this.getFieldValue('port'); this.updateShape_(input); container.setAttribute("port", input); return container; }, /** * Modify this block to have the correct number of pins available. * @param {boolean} * @private * @this Blockly.Block */ updateShape_: function () { var input = this.getFieldValue('port'); switch (input) { case 'A': this.setFieldValue('1', 'ultrasonic_trigger'); this.setFieldValue('2', 'ultrasonic_echo'); break; case 'B': this.setFieldValue('3', 'ultrasonic_trigger'); this.setFieldValue('4', 'ultrasonic_echo'); break; case 'C': this.setFieldValue('5', 'ultrasonic_trigger'); this.setFieldValue('6', 'ultrasonic_echo'); break; default: break; } } }; /** * Microphone * */ Blockly.Blocks['sensebox_sensor_sound'] = { init: function () { this.setColour(getColour().sensebox); this.appendDummyInput() .appendField(Blockly.Msg.senseBox_sound) .appendField("Pin:") .appendField(new Blockly.FieldDropdown(selectedBoard().analogPins), "PIN") this.setOutput(true, Types.NUMBER.typeName); this.setHelpUrl(Blockly.Msg.senseBox_sound_tip); this.setTooltip('Dieser Sensor mist den Geräuschpegel.'); } }; /** * Button * * */ Blockly.Blocks['sensebox_button'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_button) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_button_isPressed, "isPressed"], [Blockly.Msg.senseBox_button_wasPressed, "wasPressed"], [Blockly.Msg.senseBox_button_switch, "Switch"]]), "FUNCTION") .appendField("Pin:") .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPinsButton), "PIN"); this.setOutput(true, Types.BOOLEAN.typeName); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_button_tip); this.setHelpUrl('https://sensebox.de/books'); } }; /** * SCD30 CO2 Sensor * */ Blockly.Blocks['sensebox_scd30'] = { init: function () { var dropdownOptions = [[Blockly.Msg.senseBox_temp, "temperature"], [Blockly.Msg.senseBox_hum, "humidity"], [Blockly.Msg.senseBox_bme_co2, "CO2"]]; this.appendDummyInput() .appendField(Blockly.Msg.senseBox_scd30); this.appendDummyInput() .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_value) .appendField(new Blockly.FieldDropdown(dropdownOptions), "dropdown") this.setOutput(true, Types.NUMBER.typeName); this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_bme_tip); } };