import * as Blockly from "blockly/core"; /** * MQTT Blocks */ let service; Blockly.Arduino.sensebox_mqtt_setup = function () { var server = this.getFieldValue("server"); var port = this.getFieldValue("port"); var username = this.getFieldValue("username"); var pass = this.getFieldValue("password"); service = this.getFieldValue("service"); Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; Blockly.Arduino.libraries_["library_adafruitmqtt"] = '#include //http://librarymanager/All#Adafruit_MQTT_Library"'; Blockly.Arduino.libraries_["library_adafruitmqttclient"] = '#include '; Blockly.Arduino.definitions_["mqtt_server"] = '#define SERVER "' + server + '"'; Blockly.Arduino.definitions_["mqtt_port"] = "#define SERVERPORT " + port + ""; Blockly.Arduino.definitions_["mqtt_username"] = '#define USERNAME "' + username + '"'; Blockly.Arduino.definitions_["mqtt_pass"] = '#define PASS "' + pass + '"'; Blockly.Arduino.definitions_["wifi_client"] = "WiFiClient client;"; Blockly.Arduino.definitions_["mqtt_client"] = "Adafruit_MQTT_Client mqtt(&client, SERVER, SERVERPORT, USERNAME, PASS);"; var code = ""; return code; }; Blockly.Arduino.sensebox_mqtt_publish = function (block) { var feedname = this.getFieldValue("publishfeed"); var res = feedname.split("/"); var feed_client = res[res.length - 1]; var value = Blockly.Arduino.valueToCode(this, "value", Blockly.Arduino.ORDER_ATOMIC) || '"No Block connected"'; switch (service) { case "adafruitio": Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] = "Adafruit_MQTT_Publish " + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, USERNAME "/feeds/' + feedname + '");'; break; case "dioty": Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] = "Adafruit_MQTT_Publish " + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, "/"USERNAME"/' + feedname + '");'; break; case "custom": Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] = "Adafruit_MQTT_Publish " + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, "' + feedname + '");'; break; default: break; } //Blockly.Arduino.definitions_['mqtt_' + feed_client + ''] = 'Adafruit_MQTT_Publish ' + feed_client + ' = Adafruit_MQTT_Publish(&mqtt, USERNAME "/feeds/' + feedname + '");' Blockly.Arduino.codeFunctions_[ "mqtt_connect_function" ] = `// Function to connect and reconnect as necessary to the MQTT server. // Should be called in the loop function and it will take care if connecting. void MQTT_connect() { int8_t ret; // Stop if already connected. if (mqtt.connected()) { return; } while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected mqtt.disconnect(); delay(5000); // wait 5 seconds } }`; Blockly.Arduino.loopCodeOnce_["mqtt_connect"] = "MQTT_connect();"; var code = "" + feed_client + ".publish(" + value + ");"; return code; }; Blockly.Arduino.sensebox_mqtt_subscribe = function (block) { var feedname = this.getFieldValue("subscribefeed"); var x = 5, feed_client; feed_client = feedname.substr(feedname.length - x, x); Blockly.Arduino.definitions_["mqtt_" + feed_client + ""] = "Adafruit_MQTT_Subscribe " + feed_client + "= Adafruit_MQTT_Subscribe(&mqtt," + feedname + ");"; Blockly.Arduino.codeFunctions_["mqtt_" + feed_client + "callbackFunction"] = `void ` + feed_client + `Callback (double x){ Serial.println(x); }`; Blockly.Arduino.setupCode_["mqtt_" + feed_client + "_callback"] = "" + feed_client + ".setCallback(" + feed_client + "Callback);"; Blockly.Arduino.setupCode_["mqtt_" + feed_client + "_subscribe"] = "mqtt.subscribe(&" + feed_client + ");"; Blockly.Arduino.loopCodeOnce_["mqtt_processPackages"] = "mqtt.processPackets(10);"; var code = ""; return code; };