diff --git a/src/components/Blockly/blocks/sensebox-osem.js b/src/components/Blockly/blocks/sensebox-osem.js index a572e82..9981dd2 100644 --- a/src/components/Blockly/blocks/sensebox-osem.js +++ b/src/components/Blockly/blocks/sensebox-osem.js @@ -1,202 +1,227 @@ -import * as Blockly from 'blockly/core'; -import { getColour } from '../helpers/colour'; +import * as Blockly from "blockly/core"; +import { getColour } from "../helpers/colour"; -import store from '../../../store'; +import store from "../../../store"; -var boxes = store.getState().auth.user ? store.getState().auth.user.boxes : null; +var boxes = store.getState().auth.user + ? store.getState().auth.user.boxes + : null; store.subscribe(() => { - boxes = store.getState().auth.user ? store.getState().auth.user.boxes : null; + boxes = store.getState().auth.user ? store.getState().auth.user.boxes : null; }); -var selectedBox = ''; +var selectedBox = ""; +Blockly.Blocks["sensebox_osem_connection"] = { + init: function () { + var ssl = "TRUE"; + var workspace = Blockly.getMainWorkspace(); + if (workspace.getBlocksByType("sensebox_ethernet").length > 0) { + ssl = "FALSE"; + console.log("ethernet"); + } + this.setTooltip(Blockly.Msg.senseBox_osem_connection_tip); + this.setHelpUrl(""); + this.setColour(getColour().sensebox); + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_osem_connection) + .appendField( + new Blockly.FieldDropdown([ + [Blockly.Msg.senseBox_osem_host, '"ingress.opensensemap.org"'], + [ + Blockly.Msg.senseBox_osem_host_workshop, + '"ingress.workshop.opensensemap.org"', + ], + ]), + "host" + ) + .appendField("SSL") + .appendField(new Blockly.FieldCheckbox(ssl), "SSL"); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField(Blockly.Msg.senseBox_osem_exposure) + .appendField( + new Blockly.FieldDropdown([ + [Blockly.Msg.senseBox_osem_stationary, "Stationary"], + [Blockly.Msg.senseBox_osem_mobile, "Mobile"], + ]), + "type" + ); + if (!boxes) { + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField("senseBox ID") + .appendField(new Blockly.FieldTextInput("senseBox ID"), "BoxID"); + } else { + var dropdown = []; + for (var i = 0; i < boxes.length; i++) { + dropdown.push([boxes[i].name, boxes[i]._id]); + } + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField("senseBox ID") + .appendField(new Blockly.FieldDropdown(dropdown), "BoxID"); + } + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField(Blockly.Msg.senseBox_osem_access_token) + .appendField(new Blockly.FieldTextInput("access_token"), "access_token"); + this.appendStatementInput("DO") + .appendField(Blockly.Msg.senseBox_sensor) + .setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + }, + onchange: function (e) { + var legal = false; + // Is the block nested in a loop? + var block = this; + do { + if (this.LOOP_TYPES.indexOf(block.type) !== -1) { + legal = true; + break; + } + block = block.getSurroundParent(); + } while (block); + if (legal) { + this.setWarningText(null); + } else { + this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); + } -Blockly.Blocks['sensebox_osem_connection'] = { - init: function () { - this.setTooltip(Blockly.Msg.senseBox_osem_connection_tip); - this.setHelpUrl(''); - this.setColour(getColour().sensebox); - this.appendDummyInput() - .appendField(Blockly.Msg.senseBox_osem_connection) - .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_osem_host, '"ingress.opensensemap.org"'], [Blockly.Msg.senseBox_osem_host_workshop, '"ingress.workshop.opensensemap.org"']]), "host") - .appendField('SSL') - .appendField(new Blockly.FieldCheckbox("TRUE"), "SSL"); - this.appendDummyInput() - .setAlign(Blockly.ALIGN_LEFT) - .appendField(Blockly.Msg.senseBox_osem_exposure) - .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_osem_stationary, 'Stationary'], [Blockly.Msg.senseBox_osem_mobile, 'Mobile']]), "type"); - if (!boxes) { - this.appendDummyInput() - .setAlign(Blockly.ALIGN_LEFT) - .appendField("senseBox ID") - .appendField(new Blockly.FieldTextInput("senseBox ID"), "BoxID"); - } else { - var dropdown = [] - for (var i = 0; i < boxes.length; i++) { - dropdown.push([boxes[i].name, boxes[i]._id]) - } - this.appendDummyInput() - .setAlign(Blockly.ALIGN_LEFT) - .appendField("senseBox ID") - .appendField(new Blockly.FieldDropdown(dropdown), 'BoxID'); - } - this.appendDummyInput() - .setAlign(Blockly.ALIGN_LEFT) - .appendField(Blockly.Msg.senseBox_osem_access_token) - .appendField(new Blockly.FieldTextInput("access_token"), "access_token"); - this.appendStatementInput('DO') - .appendField(Blockly.Msg.senseBox_sensor) - .setCheck(null); - this.setPreviousStatement(true, null); - this.setNextStatement(true, null); - }, - onchange: function (e) { - - var legal = false; - // Is the block nested in a loop? - var block = this; - do { - if (this.LOOP_TYPES.indexOf(block.type) !== -1) { - legal = true; - break; - } - block = block.getSurroundParent(); - } while (block); - if (legal) { - this.setWarningText(null); - } else { - this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); - } - - /** - * List of block types that are loops and thus do not need warnings. - * To add a new loop type add this to your code: - * Blockly.Blocks['controls_flow_statements'].LOOP_TYPES.push('custom_loop'); - */ - selectedBox = this.getFieldValue('BoxID'); - if (selectedBox !== '' && boxes) { - var accessToken = boxes.find(element => element._id === selectedBox).access_token - if (accessToken !== undefined) { - this.getField('access_token').setValue(accessToken) - } else { - this.getField('access_token').setValue('access_token') - } - } - - }, - - mutationToDom: function () { - var container = document.createElement('mutation'); - var input = this.getFieldValue('type'); - this.updateShape_(input); - container.setAttribute('type', input); - return container; - }, - - domToMutation: function (xmlElement) { - var connections = xmlElement.getAttribute('connections'); - this.updateShape_(connections); - }, /** - * Modify this block to have the correct number of pins available. - * @param {boolean} - * @private - * @this Blockly.Block + * List of block types that are loops and thus do not need warnings. + * To add a new loop type add this to your code: + * Blockly.Blocks['controls_flow_statements'].LOOP_TYPES.push('custom_loop'); */ - updateShape_: function () { - var extraFieldExist = this.getFieldValue('gps'); - var input = this.getFieldValue('type'); - if ((input === 'Mobile') && extraFieldExist === null) { - this.appendValueInput('lat', 'Number') - .appendField(Blockly.Msg.senseBox_gps_lat, 'gps'); - this.appendValueInput('lng', 'Number') - .appendField(Blockly.Msg.senseBox_gps_lng); - this.appendValueInput('altitude', 'Number') - .appendField(Blockly.Msg.senseBox_gps_alt); - this.appendValueInput('timeStamp', 'Number') - .appendField(Blockly.Msg.senseBox_gps_timeStamp); - } + selectedBox = this.getFieldValue("BoxID"); + if (selectedBox !== "" && boxes) { + var accessToken = boxes.find( + (element) => element._id === selectedBox + ).access_token; + if (accessToken !== undefined) { + this.getField("access_token").setValue(accessToken); + } else { + this.getField("access_token").setValue("access_token"); + } + } + }, - if (input === 'Stationary' && extraFieldExist !== null) { - this.removeInput('lat'); - this.removeInput('lng'); - this.removeInput('altitude'); - this.removeInput('timeStamp'); - } - }, - LOOP_TYPES: ['sensebox_interval_timer'] + mutationToDom: function () { + var container = document.createElement("mutation"); + var input = this.getFieldValue("type"); + this.updateShape_(input); + container.setAttribute("type", input); + return container; + }, + + domToMutation: function (xmlElement) { + var connections = xmlElement.getAttribute("connections"); + this.updateShape_(connections); + }, + /** + * Modify this block to have the correct number of pins available. + * @param {boolean} + * @private + * @this Blockly.Block + */ + updateShape_: function () { + var extraFieldExist = this.getFieldValue("gps"); + var input = this.getFieldValue("type"); + if (input === "Mobile" && extraFieldExist === null) { + this.appendValueInput("lat", "Number").appendField( + Blockly.Msg.senseBox_gps_lat, + "gps" + ); + this.appendValueInput("lng", "Number").appendField( + Blockly.Msg.senseBox_gps_lng + ); + this.appendValueInput("altitude", "Number").appendField( + Blockly.Msg.senseBox_gps_alt + ); + this.appendValueInput("timeStamp", "Number").appendField( + Blockly.Msg.senseBox_gps_timeStamp + ); + } + + if (input === "Stationary" && extraFieldExist !== null) { + this.removeInput("lat"); + this.removeInput("lng"); + this.removeInput("altitude"); + this.removeInput("timeStamp"); + } + }, + LOOP_TYPES: ["sensebox_interval_timer"], }; -Blockly.Blocks['sensebox_send_to_osem'] = { - init: function () { - this.setTooltip(Blockly.Msg.senseBox_send_to_osem_tip); - this.setHelpUrl(''); - this.setColour(getColour().sensebox); - this.appendDummyInput() - .appendField(Blockly.Msg.senseBox_send_to_osem); - if (boxes) { - this.appendValueInput('Value') - .appendField('Phänomen') - .appendField(new Blockly.FieldDropdown( - this.generateOptions), 'SensorID'); - } else { - this.appendValueInput('Value') - .setAlign(Blockly.ALIGN_LEFT) - .appendField('Phänomen') - .appendField(new Blockly.FieldTextInput( - 'sensorID'), 'SensorID') +Blockly.Blocks["sensebox_send_to_osem"] = { + init: function () { + this.setTooltip(Blockly.Msg.senseBox_send_to_osem_tip); + this.setHelpUrl(""); + this.setColour(getColour().sensebox); + this.appendDummyInput().appendField(Blockly.Msg.senseBox_send_to_osem); + if (boxes) { + this.appendValueInput("Value") + .appendField("Phänomen") + .appendField( + new Blockly.FieldDropdown(this.generateOptions), + "SensorID" + ); + } else { + this.appendValueInput("Value") + .setAlign(Blockly.ALIGN_LEFT) + .appendField("Phänomen") + .appendField(new Blockly.FieldTextInput("sensorID"), "SensorID"); + } + + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + }, + + generateOptions: function () { + var dropdown = [["", ""]]; + var boxID = selectedBox; + if (boxID !== "" && boxes) { + let box = boxes.find((el) => el._id === boxID); + if (box !== undefined) { + for (var i = 0; i < box.sensors.length; i++) { + dropdown.push([box.sensors[i].title, box.sensors[i]._id]); } - - this.setPreviousStatement(true, null); - this.setNextStatement(true, null); - }, - - generateOptions: function () { - var dropdown = [['', '']]; - var boxID = selectedBox; - if (boxID !== '' && boxes) { - - let box = boxes.find(el => el._id === boxID); - if (box !== undefined) { - for (var i = 0; i < box.sensors.length; i++) { - dropdown.push([box.sensors[i].title, box.sensors[i]._id]) - } - } - if (dropdown.length > 1) { - var options = dropdown.slice(1) - return options - } else { - return dropdown - } - } - return dropdown - }, - /** - * Called whenever anything on the workspace changes. - * Add warning if block is not nested inside a the correct loop. - * @param {!Blockly.Events.Abstract} e Change event. - * @this Blockly.Block - */ - onchange: function () { - - var legal = false; - // Is the block nested in a loop? - var block = this; - do { - if (this.LOOP_TYPES.indexOf(block.type) !== -1) { - legal = true; - break; - } - block = block.getSurroundParent(); - } while (block); - if (legal) { - this.setWarningText(null); - } else { - this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); - } - }, - /** - * List of block types that are loops and thus do not need warnings. - * To add a new loop type add this to your code: - * Blockly.Blocks['controls_flow_statements'].LOOP_TYPES.push('custom_loop'); - */ - LOOP_TYPES: ['sensebox_osem_connection'] + } + if (dropdown.length > 1) { + var options = dropdown.slice(1); + return options; + } else { + return dropdown; + } + } + return dropdown; + }, + /** + * Called whenever anything on the workspace changes. + * Add warning if block is not nested inside a the correct loop. + * @param {!Blockly.Events.Abstract} e Change event. + * @this Blockly.Block + */ + onchange: function () { + var legal = false; + // Is the block nested in a loop? + var block = this; + do { + if (this.LOOP_TYPES.indexOf(block.type) !== -1) { + legal = true; + break; + } + block = block.getSurroundParent(); + } while (block); + if (legal) { + this.setWarningText(null); + } else { + this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); + } + }, + /** + * List of block types that are loops and thus do not need warnings. + * To add a new loop type add this to your code: + * Blockly.Blocks['controls_flow_statements'].LOOP_TYPES.push('custom_loop'); + */ + LOOP_TYPES: ["sensebox_osem_connection"], }; diff --git a/src/components/Blockly/blocks/sensebox-web.js b/src/components/Blockly/blocks/sensebox-web.js index 3d77fa9..5471e75 100644 --- a/src/components/Blockly/blocks/sensebox-web.js +++ b/src/components/Blockly/blocks/sensebox-web.js @@ -61,17 +61,16 @@ Blockly.Blocks["sensebox_ethernet"] = { this.setHelpUrl(""); this.setColour(getColour().sensebox); this.appendDummyInput() - .appendField("Connect with Ethernet") - .appendField("using") + .appendField(Blockly.Msg.senseBox_ethernet) .appendField( new Blockly.FieldDropdown([ - ["dhcp", "Dhcp"], - ["manual configuration", "Manual"], + [Blockly.Msg.senseBox_ethernet_dhcp, "Dhcp"], + [Blockly.Msg.senseBox_ethernet_manuel_config, "Manual"], ]), "dhcp" ); this.appendDummyInput() - .appendField("MAC-Address") + .appendField(Blockly.Msg.senseBox_ethernet_mac) .appendField( new Blockly.FieldTextInput("0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED"), "mac" @@ -88,19 +87,18 @@ Blockly.Blocks["sensebox_ethernet"] = { }, updateShape_(isManual) { - // console.log(isDhcp); if (isManual) { this.appendDummyInput("ip-field") - .appendField("Ip Adress") + .appendField(Blockly.Msg.senseBox_ethernet_ip) .appendField(new Blockly.FieldTextInput("192.168.1.100"), "ip"); this.appendDummyInput("subnetmask-field") - .appendField("Subnetmask") + .appendField(Blockly.Msg.senseBox_ethernet_subnetmask) .appendField(new Blockly.FieldTextInput("255.255.255.0"), "subnetmask"); this.appendDummyInput("gateway-field") - .appendField("Gateway") + .appendField(Blockly.Msg.senseBox_ethernet_gateway) .appendField(new Blockly.FieldTextInput("192.168.1.1"), "gateway"); this.appendDummyInput("dns-field") - .appendField("DNS") + .appendField(Blockly.Msg.senseBox_ethernet_dns) .appendField(new Blockly.FieldTextInput("8.8.8.8"), "dns"); } else { this.removeInput("ip-field", true); diff --git a/src/components/Blockly/generator/sensebox-web.js b/src/components/Blockly/generator/sensebox-web.js index eedf246..359cfd4 100644 --- a/src/components/Blockly/generator/sensebox-web.js +++ b/src/components/Blockly/generator/sensebox-web.js @@ -47,8 +47,8 @@ Blockly.Arduino.sensebox_ethernet = function () { //Configure static IP setup (only needed if DHCP is disabled) IPAddress myIp(${ip.replaceAll(".", ", ")}); IPAddress myDns(${dns.replaceAll(".", ",")}); - IPAddress myGateway(${gateway.replaceAll(".", ",")}192, 168, 0, 177); - IPAddress mySubnet(${subnetmask.replaceAll(".", ",")}255, 255, 255, 0); + IPAddress myGateway(${gateway.replaceAll(".", ",")}); + IPAddress mySubnet(${subnetmask.replaceAll(".", ",")}); `; Blockly.Arduino.setupCode_["ethernet_setup"] = ` Ethernet.init(23); diff --git a/src/components/Blockly/msg/de/sensebox-web.js b/src/components/Blockly/msg/de/sensebox-web.js index d86618c..f38b96f 100644 --- a/src/components/Blockly/msg/de/sensebox-web.js +++ b/src/components/Blockly/msg/de/sensebox-web.js @@ -1,11 +1,23 @@ export const WEB = { - /** - * WiFi - */ - senseBox_wifi_connect: "Verbinde mit WLAN", - senseBox_wifi_ssid: "Netzwerkname", - senseBox_wifi_tooltip: "Stellt eine Verbindung mit einem WLAN-Netzwerk her. Möchtest du dich mit einem ungesicheren Netzwerk (z.B. Freifunk) verbinden lösche das Feld Passwort. Das WiFi-Bee muss auf den Steckplatz **XBEE1** aufgesteckt werden.", - senseBox_wifi_startap: "Initialisiere WLAN Access Point", - senseBox_wifi_startap_tooltip: "Erstellt einen WiFi-Accesspoint zu dem du dich verbinden kannst. Beachte, dass immer nur 1 Gerät gleichzeitig verbunden werden kann.", - senseBox_wifi_helpurl: "https://docs.sensebox.de/blockly/blockly-web-wifi/", -} \ No newline at end of file + /** + * WiFi + */ + senseBox_wifi_connect: "Verbinde mit WLAN", + senseBox_wifi_ssid: "Netzwerkname", + senseBox_wifi_tooltip: + "Stellt eine Verbindung mit einem WLAN-Netzwerk her. Möchtest du dich mit einem ungesicheren Netzwerk (z.B. Freifunk) verbinden lösche das Feld Passwort. Das WiFi-Bee muss auf den Steckplatz **XBEE1** aufgesteckt werden.", + senseBox_wifi_startap: "Initialisiere WLAN Access Point", + senseBox_wifi_startap_tooltip: + "Erstellt einen WiFi-Accesspoint zu dem du dich verbinden kannst. Beachte, dass immer nur 1 Gerät gleichzeitig verbunden werden kann.", + senseBox_wifi_helpurl: "https://docs.sensebox.de/blockly/blockly-web-wifi/", + senseBox_ethernet: "Verbinde mit Ethernet", + senseBox_ethernet_dhcp: "DHCP", + senseBox_ethernet_manuel_config: "Manuelle Konfiguration", + senseBox_ethernet_ip: "IP-Adresse", + senseBox_ethernet_gateway: "Gateway", + senseBox_ethernet_subnetmask: "Subnetzmaske", + senseBox_ethernet_mac: "MAC-Adresse", + senseBox_ethernet_dns: "DNS-Server", + senseBox_ethernet_tooltip: + "Verbinde das LAN-Bee mit dem Steckplatz XBEE1. Die meisten Netzwerke verwenden DHCP und vergeben automatisch eine IP-Adresse. Solltest du eine Manuelle Konfiguration durchführen wollen wählen im Dropdown Menü **Manuelle Konfiguration** aus und gebe die entsprechenden Daten ein.", +}; diff --git a/src/components/Blockly/msg/en/sensebox-web.js b/src/components/Blockly/msg/en/sensebox-web.js index 63fc98a..3ca102e 100644 --- a/src/components/Blockly/msg/en/sensebox-web.js +++ b/src/components/Blockly/msg/en/sensebox-web.js @@ -1,11 +1,24 @@ export const WEB = { - /** - * WiFi - */ - senseBox_wifi_connect: "Connect to Wifi", - senseBox_wifi_ssid: "Networkname", - senseBox_wifi_tooltip: "Connects to a wireless network. If you want to connect to an unsecured network (e.g. Freifunk) clear the password field. The WiFi-Bee must be plugged into the **XBEE1** slot.", - senseBox_wifi_startap: "Initialize Wifi Access Point", - senseBox_wifi_startap_tooltip: "Creates a WiFi access point to which you can connect. Note that only 1 device can be connected at a time.", - senseBox_wifi_helpurl: "https://en.docs.sensebox.de/blockly/blockly-web-wifi/", -} \ No newline at end of file + /** + * WiFi + */ + senseBox_wifi_connect: "Connect to Wifi", + senseBox_wifi_ssid: "Networkname", + senseBox_wifi_tooltip: + "Connects to a wireless network. If you want to connect to an unsecured network (e.g. Freifunk) clear the password field. The WiFi-Bee must be plugged into the **XBEE1** slot.", + senseBox_wifi_startap: "Initialize Wifi Access Point", + senseBox_wifi_startap_tooltip: + "Creates a WiFi access point to which you can connect. Note that only 1 device can be connected at a time.", + senseBox_wifi_helpurl: + "https://en.docs.sensebox.de/blockly/blockly-web-wifi/", + senseBox_ethernet: "Connect to Ethernet", + senseBox_ethernet_dhcp: "DHCP", + senseBox_ethernet_manuel_config: "Manual configuration", + senseBox_ethernet_ip: "IP address", + senseBox_ethernet_gateway: "Gateway", + senseBox_ethernet_subnetmask: "Subnet mask", + senseBox_ethernet_mac: "MAC address", + senseBox_ethernet_dns: "DNS-Server", + senseBox_ethernet_tooltip: + "Connect the LAN-Bee to the XBEE1 slot. Most networks use DHCP and assign an IP address automatically. If you want to do a manual configuration select **Manual Configuration** in the dropdown menu and enter the appropriate data.", +};