add curly brackets

closes #93
This commit is contained in:
Mario Pesch 2021-06-22 12:15:39 +02:00
parent f6947f8c6b
commit 1e979f948c
2 changed files with 440 additions and 381 deletions

View File

@ -1,284 +1,301 @@
import * as Blockly from 'blockly/core'; import * as Blockly from "blockly/core";
import { getColour } from '../helpers/colour'; import { getColour } from "../helpers/colour";
/* /*
----------------------------------LoRa-------------------------------------------------- ----------------------------------LoRa--------------------------------------------------
*/ */
Blockly.Blocks['sensebox_lora_initialize_otaa'] = { Blockly.Blocks["sensebox_lora_initialize_otaa"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_init_otaa_tooltip); this.setTooltip(Blockly.Msg.senseBox_LoRa_init_otaa_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_LoRa_init_helpurl); this.setHelpUrl(Blockly.Msg.senseBox_LoRa_init_helpurl);
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendDummyInput() this.appendDummyInput().appendField("Initialize LoRa (OTAA)");
.appendField("Initialize LoRa (OTAA)"); this.appendDummyInput()
this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT)
.setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_LoRa_device_id)
.appendField(Blockly.Msg.senseBox_LoRa_device_id) .appendField("{")
.appendField(new Blockly.FieldTextInput("DEVICE ID"), "DEVICEID"); .appendField(new Blockly.FieldTextInput("DEVICE ID"), "DEVICEID")
this.appendDummyInput() .appendField("}");
.setAlign(Blockly.ALIGN_LEFT) this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_LoRa_app_id) .setAlign(Blockly.ALIGN_LEFT)
.appendField(new Blockly.FieldTextInput("APP ID"), "APPID"); .appendField(Blockly.Msg.senseBox_LoRa_app_id)
this.appendDummyInput() .appendField("{")
.setAlign(Blockly.ALIGN_LEFT) .appendField(new Blockly.FieldTextInput("APP ID"), "APPID")
.appendField(Blockly.Msg.senseBox_LoRa_app_key) .appendField("}");
.appendField(new Blockly.FieldTextInput("APP KEY"), "APPKEY"); this.appendDummyInput()
this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT)
.setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_LoRa_app_key)
.appendField(Blockly.Msg.senseBox_LoRa_interval) .appendField("{")
.appendField(new Blockly.FieldTextInput("5"), "INTERVAL"); .appendField(new Blockly.FieldTextInput("APP KEY"), "APPKEY")
this.setPreviousStatement(true, null); .appendField("}");
this.setNextStatement(true, null); this.appendDummyInput()
}, .setAlign(Blockly.ALIGN_LEFT)
.appendField(Blockly.Msg.senseBox_LoRa_interval)
.appendField(new Blockly.FieldTextInput("5"), "INTERVAL");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
}; };
Blockly.Blocks['sensebox_lora_initialize_abp'] = { Blockly.Blocks["sensebox_lora_initialize_abp"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_init_abp_tooltip); this.setTooltip(Blockly.Msg.senseBox_LoRa_init_abp_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_LoRa_init_helpurl); this.setHelpUrl(Blockly.Msg.senseBox_LoRa_init_helpurl);
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendDummyInput() this.appendDummyInput().appendField("Initialize LoRa (ABP)");
.appendField("Initialize LoRa (ABP)"); this.appendDummyInput()
this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT)
.setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_LoRa_nwskey_id)
.appendField(Blockly.Msg.senseBox_LoRa_nwskey_id) .appendField("{")
.appendField(new Blockly.FieldTextInput("NWSKEY"), "NWSKEY"); .appendField(new Blockly.FieldTextInput("NWSKEY"), "NWSKEY")
this.appendDummyInput() .appendField("}");
.setAlign(Blockly.ALIGN_LEFT) this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_LoRa_appskey_id) .setAlign(Blockly.ALIGN_LEFT)
.appendField(new Blockly.FieldTextInput("APPSKEY"), "APPSKEY"); .appendField(Blockly.Msg.senseBox_LoRa_appskey_id)
this.appendDummyInput() .appendField("{")
.setAlign(Blockly.ALIGN_LEFT) .appendField(new Blockly.FieldTextInput("APPSKEY"), "APPSKEY")
.appendField(Blockly.Msg.senseBox_LoRa_devaddr_id) .appendField("}");
.appendField(new Blockly.FieldTextInput("DEVADDR"), "DEVADDR"); this.appendDummyInput()
this.appendDummyInput() .setAlign(Blockly.ALIGN_LEFT)
.setAlign(Blockly.ALIGN_LEFT) .appendField(Blockly.Msg.senseBox_LoRa_devaddr_id)
.appendField(Blockly.Msg.senseBox_LoRa_interval) .appendField(new Blockly.FieldTextInput("DEVADDR"), "DEVADDR");
.appendField(new Blockly.FieldTextInput("5"), "INTERVAL"); this.appendDummyInput()
// this.appendStatementInput('DO') .setAlign(Blockly.ALIGN_LEFT)
// .appendField(Blockly.Msg.senseBox_measurements) .appendField(Blockly.Msg.senseBox_LoRa_interval)
// .setCheck(null); .appendField(new Blockly.FieldTextInput("5"), "INTERVAL");
this.setPreviousStatement(true, null); // this.appendStatementInput('DO')
this.setNextStatement(true, null); // .appendField(Blockly.Msg.senseBox_measurements)
}, // .setCheck(null);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
}; };
Blockly.Blocks['sensebox_lora_message_send'] = { Blockly.Blocks["sensebox_lora_message_send"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_message_tooltip); this.setTooltip(Blockly.Msg.senseBox_LoRa_message_tooltip);
this.setHelpUrl(''); this.setHelpUrl("");
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendStatementInput('DO') this.appendStatementInput("DO")
.appendField(Blockly.Msg.senseBox_LoRa_send_message) .appendField(Blockly.Msg.senseBox_LoRa_send_message)
.setCheck(null); .setCheck(null);
this.setPreviousStatement(true, null); this.setPreviousStatement(true, null);
this.setNextStatement(true, null); this.setNextStatement(true, null);
},
};
Blockly.Blocks["sensebox_send_lora_sensor_value"] = {
init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_sensor_tip);
this.setHelpUrl("");
this.setColour(getColour().sensebox);
this.appendValueInput("Value").appendField(
Blockly.Msg.senseBox_measurement
);
this.appendDummyInput()
.setAlign(Blockly.ALIGN_LEFT)
.appendField("Bytes")
.appendField(new Blockly.FieldTextInput("2"), "MESSAGE_BYTES");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
/**
* 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 (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);
} }
},
LOOP_TYPES: ["sensebox_lora_message_send"],
}; };
Blockly.Blocks['sensebox_send_lora_sensor_value'] = { Blockly.Blocks["sensebox_lora_ttn_mapper"] = {
init: function () { init: function (block) {
this.setTooltip(Blockly.Msg.senseBox_LoRa_sensor_tip); this.setColour(getColour().sensebox);
this.setHelpUrl(''); this.appendDummyInput().appendField("TTN Mapper");
this.setColour(getColour().sensebox); this.appendDummyInput()
this.appendValueInput('Value') .setAlign(Blockly.ALIGN_RIGHT)
.appendField(Blockly.Msg.senseBox_measurement) .appendField("Fix Type Limit")
this.appendDummyInput() .appendField(
.setAlign(Blockly.ALIGN_LEFT) new Blockly.FieldDropdown(
.appendField("Bytes") [
.appendField(new Blockly.FieldTextInput("2"), "MESSAGE_BYTES"); ["0", "0"],
this.setPreviousStatement(true, null); ["1", "1"],
this.setNextStatement(true, null); ["2", "2"],
}, ["3", "3"],
/** ].reverse()
* Called whenever anything on the workspace changes. ),
* Add warning if block is not nested inside a the correct loop. "dropdown"
* @param {!Blockly.Events.Abstract} e Change event. );
* @this Blockly.Block // reverse() because i want 3 be be at first and i'm to lazy to write the array again
*/ this.appendValueInput("Latitude")
onchange: function (e) { .appendField(Blockly.Msg.senseBox_gps_lat)
var legal = false; .setCheck(null);
// Is the block nested in a loop? this.appendValueInput("Longitude")
var block = this; .appendField(Blockly.Msg.senseBox_gps_lng)
do { .setCheck(null);
if (this.LOOP_TYPES.indexOf(block.type) !== -1) { this.appendValueInput("Altitude")
legal = true; .appendField(Blockly.Msg.senseBox_gps_alt)
break; .setCheck(null);
} this.appendValueInput("pDOP").appendField("pDOP").setCheck(null);
block = block.getSurroundParent(); this.appendValueInput("Fix Type").appendField("Fix Type").setCheck(null);
} while (block); this.setPreviousStatement(true, null);
if (legal) { this.setNextStatement(true, null);
this.setWarningText(null); this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tip);
} else { },
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
}
},
LOOP_TYPES: ['sensebox_lora_message_send'],
}; };
Blockly.Blocks['sensebox_lora_ttn_mapper'] = { Blockly.Blocks["sensebox_lora_cayenne_send"] = {
init: function (block) { init: function () {
this.setColour(getColour().sensebox); this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_tip);
this.appendDummyInput() this.setHelpUrl("");
.appendField("TTN Mapper"); this.setColour(getColour().sensebox);
this.appendDummyInput() this.appendStatementInput("DO")
.setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.senseBox_LoRa_send_cayenne)
.appendField("Fix Type Limit") .setCheck(null);
.appendField(new Blockly.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]].reverse()), "dropdown"); this.setPreviousStatement(true, null);
// reverse() because i want 3 be be at first and i'm to lazy to write the array again this.setNextStatement(true, null);
this.appendValueInput('Latitude') },
.appendField(Blockly.Msg.senseBox_gps_lat)
.setCheck(null);
this.appendValueInput('Longitude')
.appendField(Blockly.Msg.senseBox_gps_lng)
.setCheck(null);
this.appendValueInput('Altitude')
.appendField(Blockly.Msg.senseBox_gps_alt)
.setCheck(null);
this.appendValueInput('pDOP')
.appendField('pDOP')
.setCheck(null);
this.appendValueInput('Fix Type')
.appendField('Fix Type')
.setCheck(null);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tip);
}
}; };
Blockly.Blocks["sensebox_lora_cayenne_temperature"] = {
Blockly.Blocks['sensebox_lora_cayenne_send'] = { init: function () {
init: function () { this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_temperature_tip);
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_tip); this.setHelpUrl("");
this.setHelpUrl(''); this.setColour(getColour().sensebox);
this.setColour(getColour().sensebox); this.appendValueInput("Value").appendField(
this.appendStatementInput('DO') Blockly.Msg.senseBox_LoRa_cayenne_temperature
.appendField(Blockly.Msg.senseBox_LoRa_send_cayenne) );
.setCheck(null); this.appendDummyInput()
this.setPreviousStatement(true, null); .setAlign(Blockly.ALIGN_LEFT)
this.setNextStatement(true, null); .appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
} .appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
LOOP_TYPES: ["sensebox_lora_cayenne_send"],
}; };
Blockly.Blocks['sensebox_lora_cayenne_temperature'] = { Blockly.Blocks["sensebox_lora_cayenne_humidity"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_temperature_tip); this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_humidity_tip);
this.setHelpUrl(''); this.setHelpUrl("");
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendValueInput('Value') this.appendValueInput("Value").appendField(
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_temperature) Blockly.Msg.senseBox_LoRa_cayenne_humidity
this.appendDummyInput() );
.setAlign(Blockly.ALIGN_LEFT) this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel) .setAlign(Blockly.ALIGN_LEFT)
.appendField(new Blockly.FieldTextInput("1"), "CHANNEL"); .appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
this.setPreviousStatement(true, null); .appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
this.setNextStatement(true, null); this.setPreviousStatement(true, null);
}, this.setNextStatement(true, null);
LOOP_TYPES: ['sensebox_lora_cayenne_send'], },
LOOP_TYPES: ["sensebox_lora_cayenne_send"],
}; };
Blockly.Blocks['sensebox_lora_cayenne_humidity'] = { Blockly.Blocks["sensebox_lora_cayenne_pressure"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_humidity_tip); this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_pressure_tip);
this.setHelpUrl(''); this.setHelpUrl("");
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendValueInput('Value') this.appendValueInput("Value").appendField(
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_humidity) Blockly.Msg.senseBox_LoRa_cayenne_pressure
this.appendDummyInput() );
.setAlign(Blockly.ALIGN_LEFT) this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel) .setAlign(Blockly.ALIGN_LEFT)
.appendField(new Blockly.FieldTextInput("1"), "CHANNEL"); .appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
this.setPreviousStatement(true, null); .appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
this.setNextStatement(true, null); this.setPreviousStatement(true, null);
}, this.setNextStatement(true, null);
LOOP_TYPES: ['sensebox_lora_cayenne_send'], },
LOOP_TYPES: ["sensebox_lora_cayenne_send"],
}; };
Blockly.Blocks['sensebox_lora_cayenne_pressure'] = { Blockly.Blocks["sensebox_lora_cayenne_luminosity"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_pressure_tip); this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_luminosity_tip);
this.setHelpUrl(''); this.setHelpUrl("");
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendValueInput('Value') this.appendValueInput("Value").appendField(
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_pressure) Blockly.Msg.senseBox_LoRa_cayenne_luminosity
this.appendDummyInput() );
.setAlign(Blockly.ALIGN_LEFT) this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel) .setAlign(Blockly.ALIGN_LEFT)
.appendField(new Blockly.FieldTextInput("1"), "CHANNEL"); .appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
this.setPreviousStatement(true, null); .appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
this.setNextStatement(true, null); this.setPreviousStatement(true, null);
}, this.setNextStatement(true, null);
LOOP_TYPES: ['sensebox_lora_cayenne_send'], },
LOOP_TYPES: ["sensebox_lora_cayenne_send"],
}; };
Blockly.Blocks['sensebox_lora_cayenne_luminosity'] = { Blockly.Blocks["sensebox_lora_cayenne_sensor"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_luminosity_tip); this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_analog_tip);
this.setHelpUrl(''); this.setHelpUrl("");
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendValueInput('Value') this.appendValueInput("Value").appendField(
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_luminosity) Blockly.Msg.senseBox_LoRa_cayenne_analog
this.appendDummyInput() );
.setAlign(Blockly.ALIGN_LEFT) this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel) .setAlign(Blockly.ALIGN_LEFT)
.appendField(new Blockly.FieldTextInput("1"), "CHANNEL"); .appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
this.setPreviousStatement(true, null); .appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
this.setNextStatement(true, null); this.setPreviousStatement(true, null);
}, this.setNextStatement(true, null);
LOOP_TYPES: ['sensebox_lora_cayenne_send'], },
LOOP_TYPES: ["sensebox_lora_cayenne_send"],
}; };
Blockly.Blocks['sensebox_lora_cayenne_sensor'] = { Blockly.Blocks["sensebox_lora_cayenne_accelerometer"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_analog_tip); this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_gyros_tip);
this.setHelpUrl(''); this.setHelpUrl("");
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendValueInput('Value') this.appendValueInput("X").appendField(Blockly.Msg.senseBox_LoRa_cayenne_x);
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_analog) this.appendValueInput("Y").appendField(Blockly.Msg.senseBox_LoRa_cayenne_y);
this.appendDummyInput() this.appendValueInput("Z").appendField(Blockly.Msg.senseBox_LoRa_cayenne_z);
.setAlign(Blockly.ALIGN_LEFT) this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel) .setAlign(Blockly.ALIGN_LEFT)
.appendField(new Blockly.FieldTextInput("1"), "CHANNEL"); .appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
this.setPreviousStatement(true, null); .appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
this.setNextStatement(true, null); this.setPreviousStatement(true, null);
}, this.setNextStatement(true, null);
LOOP_TYPES: ['sensebox_lora_cayenne_send'], },
LOOP_TYPES: ["sensebox_lora_cayenne_send"],
}; };
Blockly.Blocks['sensebox_lora_cayenne_accelerometer'] = { Blockly.Blocks["sensebox_lora_cayenne_gps"] = {
init: function () { init: function () {
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_gyros_tip); this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_gps_tip);
this.setHelpUrl(''); this.setHelpUrl("");
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendValueInput('X') this.appendValueInput("LAT").appendField(
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_x) Blockly.Msg.senseBox_LoRa_cayenne_lat
this.appendValueInput('Y') );
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_y) this.appendValueInput("LNG").appendField(
this.appendValueInput('Z') Blockly.Msg.senseBox_LoRa_cayenne_lng
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_z) );
this.appendDummyInput() this.appendValueInput("ALT").appendField(
.setAlign(Blockly.ALIGN_LEFT) Blockly.Msg.senseBox_LoRa_cayenne_alt
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel) );
.appendField(new Blockly.FieldTextInput("1"), "CHANNEL"); this.appendDummyInput()
this.setPreviousStatement(true, null); .setAlign(Blockly.ALIGN_LEFT)
this.setNextStatement(true, null); .appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
}, .appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
LOOP_TYPES: ['sensebox_lora_cayenne_send'], this.setPreviousStatement(true, null);
}; this.setNextStatement(true, null);
Blockly.Blocks['sensebox_lora_cayenne_gps'] = { },
init: function () { LOOP_TYPES: ["sensebox_lora_cayenne_send"],
this.setTooltip(Blockly.Msg.senseBox_LoRa_cayenne_gps_tip);
this.setHelpUrl('');
this.setColour(getColour().sensebox);
this.appendValueInput('LAT')
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_lat)
this.appendValueInput('LNG')
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_lng)
this.appendValueInput('ALT')
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_alt)
this.appendDummyInput()
.setAlign(Blockly.ALIGN_LEFT)
.appendField(Blockly.Msg.senseBox_LoRa_cayenne_channel)
.appendField(new Blockly.FieldTextInput("1"), "CHANNEL");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
LOOP_TYPES: ['sensebox_lora_cayenne_send'],
}; };

View File

@ -1,27 +1,27 @@
import * as Blockly from 'blockly/core'; import * as Blockly from "blockly/core";
Blockly.Arduino.sensebox_lora_initialize_otaa = function (block) { Blockly.Arduino.sensebox_lora_initialize_otaa = function (block) {
var deivceID = this.getFieldValue('DEVICEID'); var deivceID = this.getFieldValue("DEVICEID");
var appID = this.getFieldValue('APPID'); var appID = this.getFieldValue("APPID");
var appKey = this.getFieldValue('APPKEY'); var appKey = this.getFieldValue("APPKEY");
var interval = this.getFieldValue('INTERVAL'); var interval = this.getFieldValue("INTERVAL");
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_["library_senseBoxMCU"] =
Blockly.Arduino.libraries_['library_spi'] = '#include <SPI.h>'; '#include "SenseBoxMCU.h"';
Blockly.Arduino.libraries_['library_lmic'] = '#include <lmic.h>'; Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
Blockly.Arduino.libraries_['library_hal'] = '#include <hal/hal.h>'; Blockly.Arduino.libraries_["library_lmic"] = "#include <lmic.h>";
Blockly.Arduino.definitions_['define_LoRaVariablesOTAA'] = ` Blockly.Arduino.libraries_["library_hal"] = "#include <hal/hal.h>";
static const u1_t PROGMEM APPEUI[8]= `+ appID + ` ; Blockly.Arduino.definitions_["define_LoRaVariablesOTAA"] = `
static const u1_t PROGMEM APPEUI[8]= {${appID}};
void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI , 8);} void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI , 8);}
static const u1_t PROGMEM DEVEUI[8]= `+ deivceID + `; static const u1_t PROGMEM DEVEUI[8]= {${deivceID}};
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI , 8);} void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI , 8);}
// This key should be in big endian format (or, since it is not really a // This key should be in big endian format (or, since it is not really a
// number but a block of memory, endianness does not really apply). In // number but a block of memory, endianness does not really apply). In
// practice, a key taken from ttnctl can be copied as-is. // practice, a key taken from ttnctl can be copied as-is.
// The key shown here is the semtech default key. // The key shown here is the semtech default key.
static const u1_t PROGMEM APPKEY[16] = `+ appKey + `; static const u1_t PROGMEM APPKEY[16] = {${appKey}};
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY , 16);} void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY , 16);}
static osjob_t sendjob; static osjob_t sendjob;
@ -38,7 +38,7 @@ Blockly.Arduino.sensebox_lora_initialize_otaa = function (block) {
.dio = {PIN_XB1_INT, PIN_XB1_INT, LMIC_UNUSED_PIN}, .dio = {PIN_XB1_INT, PIN_XB1_INT, LMIC_UNUSED_PIN},
};`; };`;
Blockly.Arduino.codeFunctions_['functions_initLora'] = ` Blockly.Arduino.codeFunctions_["functions_initLora"] = `
void initLora() { void initLora() {
delay(2000); delay(2000);
// LMIC init // LMIC init
@ -48,9 +48,9 @@ Blockly.Arduino.sensebox_lora_initialize_otaa = function (block) {
// Start job (sending automatically starts OTAA too) // Start job (sending automatically starts OTAA too)
do_send(&sendjob); do_send(&sendjob);
}` }`;
Blockly.Arduino.codeFunctions_['functions_onEvent'] = ` Blockly.Arduino.codeFunctions_["functions_onEvent"] = `
void onEvent (ev_t ev) { void onEvent (ev_t ev) {
Serial.print(os_getTime()); Serial.print(os_getTime());
Serial.print(": "); Serial.print(": ");
@ -120,16 +120,18 @@ Blockly.Arduino.sensebox_lora_initialize_otaa = function (block) {
break; break;
} }
}`; }`;
Blockly.Arduino.loraSetupCode_['initLora'] = 'initLora();\n'; Blockly.Arduino.loraSetupCode_["initLora"] = "initLora();\n";
Blockly.Arduino.setupCode_['serial.begin'] = 'Serial.begin(9600);\ndelay(1000);\n'; Blockly.Arduino.setupCode_["serial.begin"] =
var code = ''; "Serial.begin(9600);\ndelay(1000);\n";
return code; var code = "";
return code;
}; };
Blockly.Arduino.sensebox_lora_message_send = function (block) { Blockly.Arduino.sensebox_lora_message_send = function (block) {
Blockly.Arduino.libraries_['library_lora_message'] = '#include <LoraMessage.h>'; Blockly.Arduino.libraries_["library_lora_message"] =
var lora_sensor_values = Blockly.Arduino.statementToCode(block, 'DO'); "#include <LoraMessage.h>";
Blockly.Arduino.functionNames_['functions_do_send'] = ` var lora_sensor_values = Blockly.Arduino.statementToCode(block, "DO");
Blockly.Arduino.functionNames_["functions_do_send"] = `
void do_send(osjob_t* j){ void do_send(osjob_t* j){
// Check if there is not a current TX/RX job running // Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) { if (LMIC.opmode & OP_TXRXPEND) {
@ -144,39 +146,41 @@ Blockly.Arduino.sensebox_lora_message_send = function (block) {
} }
// Next TX is scheduled after TX_COMPLETE event. // Next TX is scheduled after TX_COMPLETE event.
}`; }`;
Blockly.Arduino.loopCodeOnce_['os_runloop'] = 'os_runloop_once();' Blockly.Arduino.loopCodeOnce_["os_runloop"] = "os_runloop_once();";
return '' return "";
} };
/** /**
* Block send Data to TTN * Block send Data to TTN
*/ */
Blockly.Arduino.sensebox_send_lora_sensor_value = function (block) { Blockly.Arduino.sensebox_send_lora_sensor_value = function (block) {
const reading = Blockly.Arduino.valueToCode(this, 'Value', Blockly.Arduino.ORDER_ATOMIC) || '"Keine Eingabe"'; const reading =
var messageBytes = this.getFieldValue('MESSAGE_BYTES'); Blockly.Arduino.valueToCode(this, "Value", Blockly.Arduino.ORDER_ATOMIC) ||
var code = '' '"Keine Eingabe"';
switch (Number(messageBytes)) { var messageBytes = this.getFieldValue("MESSAGE_BYTES");
case 1: var code = "";
code = `message.addUint8(${reading});\n` switch (Number(messageBytes)) {
break; case 1:
case 2: code = `message.addUint8(${reading});\n`;
code = `message.addUint16(${reading});\n` break;
break; case 2:
case 3: code = `message.addUint16(${reading});\n`;
code = `message.addUint8(${reading}); break;
message.addUint16(${reading} >> 8);\n` case 3:
break; code = `message.addUint8(${reading});
default: message.addUint16(${reading} >> 8);\n`;
code = `message.addUint16(${reading});\n` break;
} default:
return code; code = `message.addUint16(${reading});\n`;
}
return code;
}; };
Blockly.Arduino.sensebox_lora_cayenne_send = function (block) { Blockly.Arduino.sensebox_lora_cayenne_send = function (block) {
Blockly.Arduino.libraries_['library_cayene'] = '#include <CayenneLPP.h>'; Blockly.Arduino.libraries_["library_cayene"] = "#include <CayenneLPP.h>";
Blockly.Arduino.variables_['variable_cayenne'] = 'CayenneLPP lpp(51);' Blockly.Arduino.variables_["variable_cayenne"] = "CayenneLPP lpp(51);";
var lora_sensor_values = Blockly.Arduino.statementToCode(block, 'DO'); var lora_sensor_values = Blockly.Arduino.statementToCode(block, "DO");
Blockly.Arduino.functionNames_['functions_do_send'] = ` Blockly.Arduino.functionNames_["functions_do_send"] = `
void do_send(osjob_t* j){ void do_send(osjob_t* j){
// Check if there is not a current TX/RX job running // Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) { if (LMIC.opmode & OP_TXRXPEND) {
@ -191,18 +195,38 @@ Blockly.Arduino.sensebox_lora_cayenne_send = function (block) {
} }
// Next TX is scheduled after TX_COMPLETE event. // Next TX is scheduled after TX_COMPLETE event.
}`; }`;
Blockly.Arduino.loopCodeOnce_['os_runloop'] = 'os_runloop_once();' Blockly.Arduino.loopCodeOnce_["os_runloop"] = "os_runloop_once();";
return ''; return "";
} };
Blockly.Arduino.sensebox_lora_ttn_mapper = function (block) { Blockly.Arduino.sensebox_lora_ttn_mapper = function (block) {
var latitude = Blockly.Arduino.valueToCode(this, 'Latitude', Blockly.Arduino.ORDER_ATOMIC) var latitude = Blockly.Arduino.valueToCode(
var longitude = Blockly.Arduino.valueToCode(this, 'Longitude', Blockly.Arduino.ORDER_ATOMIC) this,
var altitude = Blockly.Arduino.valueToCode(this, 'Altitude', Blockly.Arduino.ORDER_ATOMIC) "Latitude",
var pDOP = Blockly.Arduino.valueToCode(this, 'pDOP', Blockly.Arduino.ORDER_ATOMIC) Blockly.Arduino.ORDER_ATOMIC
var fixType = Blockly.Arduino.valueToCode(this, 'Fix Type', Blockly.Arduino.ORDER_ATOMIC) );
var fixTypeLimit = this.getFieldValue('dropdown'); var longitude = Blockly.Arduino.valueToCode(
Blockly.Arduino.functionNames_['functions_do_send'] = ` this,
"Longitude",
Blockly.Arduino.ORDER_ATOMIC
);
var altitude = Blockly.Arduino.valueToCode(
this,
"Altitude",
Blockly.Arduino.ORDER_ATOMIC
);
var pDOP = Blockly.Arduino.valueToCode(
this,
"pDOP",
Blockly.Arduino.ORDER_ATOMIC
);
var fixType = Blockly.Arduino.valueToCode(
this,
"Fix Type",
Blockly.Arduino.ORDER_ATOMIC
);
var fixTypeLimit = this.getFieldValue("dropdown");
Blockly.Arduino.functionNames_["functions_do_send"] = `
void do_send(osjob_t* j){ void do_send(osjob_t* j){
// Check if there is not a current TX/RX job running // Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) { if (LMIC.opmode & OP_TXRXPEND) {
@ -245,29 +269,30 @@ Blockly.Arduino.sensebox_lora_ttn_mapper = function (block) {
} }
// Next TX is scheduled after TX_COMPLETE event. // Next TX is scheduled after TX_COMPLETE event.
}`; }`;
Blockly.Arduino.loopCodeOnce_['os_runloop'] = 'os_runloop_once();' Blockly.Arduino.loopCodeOnce_["os_runloop"] = "os_runloop_once();";
return ''; return "";
} };
Blockly.Arduino.sensebox_lora_initialize_abp = function (block) { Blockly.Arduino.sensebox_lora_initialize_abp = function (block) {
var nwskey = this.getFieldValue('NWSKEY'); var nwskey = this.getFieldValue("NWSKEY");
var appskey = this.getFieldValue('APPSKEY'); var appskey = this.getFieldValue("APPSKEY");
var devaddr = this.getFieldValue('DEVADDR'); var devaddr = this.getFieldValue("DEVADDR");
var interval = this.getFieldValue('INTERVAL'); var interval = this.getFieldValue("INTERVAL");
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_["library_senseBoxMCU"] =
Blockly.Arduino.libraries_['library_spi'] = '#include <SPI.h>'; '#include "SenseBoxMCU.h"';
Blockly.Arduino.libraries_['library_lmic'] = '#include <lmic.h>'; Blockly.Arduino.libraries_["library_spi"] = "#include <SPI.h>";
Blockly.Arduino.libraries_['library_hal'] = '#include <hal/hal.h>'; Blockly.Arduino.libraries_["library_lmic"] = "#include <lmic.h>";
Blockly.Arduino.definitions_['define_LoRaVariablesABP'] = ` Blockly.Arduino.libraries_["library_hal"] = "#include <hal/hal.h>";
Blockly.Arduino.definitions_["define_LoRaVariablesABP"] = `
// LoRaWAN NwkSKey, network session key // LoRaWAN NwkSKey, network session key
// This is the default Semtech key, which is used by the early prototype TTN // This is the default Semtech key, which is used by the early prototype TTN
// network. // network.
static const PROGMEM u1_t NWKSKEY[16] = ${nwskey}; static const PROGMEM u1_t NWKSKEY[16] = { ${nwskey} };
// LoRaWAN AppSKey, application session key // LoRaWAN AppSKey, application session key
// This is the default Semtech key, which is used by the early prototype TTN // This is the default Semtech key, which is used by the early prototype TTN
// network. // network.
static const u1_t PROGMEM APPSKEY[16] = ${appskey}; static const u1_t PROGMEM APPSKEY[16] = { ${appskey} };
// LoRaWAN end-device address (DevAddr) // LoRaWAN end-device address (DevAddr)
static const u4_t DEVADDR = 0x${devaddr}; static const u4_t DEVADDR = 0x${devaddr};
@ -293,7 +318,7 @@ Blockly.Arduino.sensebox_lora_initialize_abp = function (block) {
.dio = {PIN_XB1_INT, PIN_XB1_INT, LMIC_UNUSED_PIN}, .dio = {PIN_XB1_INT, PIN_XB1_INT, LMIC_UNUSED_PIN},
};`; };`;
Blockly.Arduino.codeFunctions_['functions_initLora'] = ` Blockly.Arduino.codeFunctions_["functions_initLora"] = `
void initLora() { void initLora() {
delay(2000); delay(2000);
// LMIC init // LMIC init
@ -359,9 +384,9 @@ Blockly.Arduino.sensebox_lora_initialize_abp = function (block) {
// Start job // Start job
do_send(&sendjob); do_send(&sendjob);
}` }`;
Blockly.Arduino.codeFunctions_['functions_onEvent'] = ` Blockly.Arduino.codeFunctions_["functions_onEvent"] = `
void onEvent (ev_t ev) { void onEvent (ev_t ev) {
Serial.print(os_getTime()); Serial.print(os_getTime());
Serial.print(": "); Serial.print(": ");
@ -426,60 +451,77 @@ Blockly.Arduino.sensebox_lora_initialize_abp = function (block) {
break; break;
} }
}`; }`;
Blockly.Arduino.loraSetupCode_['initLora'] = 'initLora();\n'; Blockly.Arduino.loraSetupCode_["initLora"] = "initLora();\n";
Blockly.Arduino.setupCode_['serial.begin'] = 'Serial.begin(9600);\ndelay(1000);\n'; Blockly.Arduino.setupCode_["serial.begin"] =
return ''; "Serial.begin(9600);\ndelay(1000);\n";
} return "";
};
Blockly.Arduino.sensebox_lora_cayenne_temperature = function (block) { Blockly.Arduino.sensebox_lora_cayenne_temperature = function (block) {
var temperature = Blockly.Arduino.valueToCode(this, 'Value', Blockly.Arduino.ORDER_ATOMIC) || 0 var temperature =
var channel = this.getFieldValue('CHANNEL'); Blockly.Arduino.valueToCode(this, "Value", Blockly.Arduino.ORDER_ATOMIC) ||
var code = `lpp.addTemperature(${channel}, ${temperature});\n`; 0;
return code; var channel = this.getFieldValue("CHANNEL");
} var code = `lpp.addTemperature(${channel}, ${temperature});\n`;
return code;
};
Blockly.Arduino.sensebox_lora_cayenne_humidity = function (block) { Blockly.Arduino.sensebox_lora_cayenne_humidity = function (block) {
var humidity = Blockly.Arduino.valueToCode(this, 'Value', Blockly.Arduino.ORDER_ATOMIC) || 0 var humidity =
var channel = this.getFieldValue('CHANNEL'); Blockly.Arduino.valueToCode(this, "Value", Blockly.Arduino.ORDER_ATOMIC) ||
var code = `lpp.addRelativeHumidity(${channel}, ${humidity});\n`; 0;
return code; var channel = this.getFieldValue("CHANNEL");
} var code = `lpp.addRelativeHumidity(${channel}, ${humidity});\n`;
return code;
};
Blockly.Arduino.sensebox_lora_cayenne_pressure = function (block) { Blockly.Arduino.sensebox_lora_cayenne_pressure = function (block) {
var pressure = Blockly.Arduino.valueToCode(this, 'Value', Blockly.Arduino.ORDER_ATOMIC) || 0 var pressure =
var channel = this.getFieldValue('CHANNEL'); Blockly.Arduino.valueToCode(this, "Value", Blockly.Arduino.ORDER_ATOMIC) ||
var code = `lpp.addBarometricPressure(${channel}, ${pressure});\n`; 0;
return code; var channel = this.getFieldValue("CHANNEL");
} var code = `lpp.addBarometricPressure(${channel}, ${pressure});\n`;
return code;
};
Blockly.Arduino.sensebox_lora_cayenne_luminosity = function (block) { Blockly.Arduino.sensebox_lora_cayenne_luminosity = function (block) {
var luminosity = Blockly.Arduino.valueToCode(this, 'Value', Blockly.Arduino.ORDER_ATOMIC) || 0 var luminosity =
var channel = this.getFieldValue('CHANNEL'); Blockly.Arduino.valueToCode(this, "Value", Blockly.Arduino.ORDER_ATOMIC) ||
var code = `lpp.addLuminosity(${channel}, ${luminosity});\n`; 0;
return code; var channel = this.getFieldValue("CHANNEL");
} var code = `lpp.addLuminosity(${channel}, ${luminosity});\n`;
return code;
};
Blockly.Arduino.sensebox_lora_cayenne_sensor = function (block) { Blockly.Arduino.sensebox_lora_cayenne_sensor = function (block) {
var sensorValue = Blockly.Arduino.valueToCode(this, 'Value', Blockly.Arduino.ORDER_ATOMIC) || 0 var sensorValue =
var channel = this.getFieldValue('CHANNEL'); Blockly.Arduino.valueToCode(this, "Value", Blockly.Arduino.ORDER_ATOMIC) ||
var code = `lpp.addAnalogInput(${channel}, ${sensorValue});\n`; 0;
return code; var channel = this.getFieldValue("CHANNEL");
} var code = `lpp.addAnalogInput(${channel}, ${sensorValue});\n`;
return code;
};
Blockly.Arduino.sensebox_lora_cayenne_accelerometer = function (block) { Blockly.Arduino.sensebox_lora_cayenne_accelerometer = function (block) {
var x = Blockly.Arduino.valueToCode(this, 'X', Blockly.Arduino.ORDER_ATOMIC) || 0 var x =
var y = Blockly.Arduino.valueToCode(this, 'Y', Blockly.Arduino.ORDER_ATOMIC) || 0 Blockly.Arduino.valueToCode(this, "X", Blockly.Arduino.ORDER_ATOMIC) || 0;
var z = Blockly.Arduino.valueToCode(this, 'Z', Blockly.Arduino.ORDER_ATOMIC) || 0 var y =
var channel = this.getFieldValue('CHANNEL'); Blockly.Arduino.valueToCode(this, "Y", Blockly.Arduino.ORDER_ATOMIC) || 0;
var code = `lpp.addAccelerometer(${channel}, ${x}, ${y}, ${z});\n`; var z =
return code; Blockly.Arduino.valueToCode(this, "Z", Blockly.Arduino.ORDER_ATOMIC) || 0;
} var channel = this.getFieldValue("CHANNEL");
var code = `lpp.addAccelerometer(${channel}, ${x}, ${y}, ${z});\n`;
return code;
};
Blockly.Arduino.sensebox_lora_cayenne_gps = function (block) { Blockly.Arduino.sensebox_lora_cayenne_gps = function (block) {
var lat = Blockly.Arduino.valueToCode(this, 'LAT', Blockly.Arduino.ORDER_ATOMIC) || 0 var lat =
var lng = Blockly.Arduino.valueToCode(this, 'LNG', Blockly.Arduino.ORDER_ATOMIC) || 0 Blockly.Arduino.valueToCode(this, "LAT", Blockly.Arduino.ORDER_ATOMIC) || 0;
var alt = Blockly.Arduino.valueToCode(this, 'ALT', Blockly.Arduino.ORDER_ATOMIC) || 0 var lng =
var channel = this.getFieldValue('CHANNEL'); Blockly.Arduino.valueToCode(this, "LNG", Blockly.Arduino.ORDER_ATOMIC) || 0;
var code = `lpp.addGPS(${channel}, ${lat}, ${lng}, ${alt});\n` var alt =
return code; Blockly.Arduino.valueToCode(this, "ALT", Blockly.Arduino.ORDER_ATOMIC) || 0;
} var channel = this.getFieldValue("CHANNEL");
var code = `lpp.addGPS(${channel}, ${lat}, ${lng}, ${alt});\n`;
return code;
};