diff --git a/blockly/iot/IOT_Blocks.js b/blockly/iot/IOT_Blocks.js
index c38bcb4..48956c1 100644
--- a/blockly/iot/IOT_Blocks.js
+++ b/blockly/iot/IOT_Blocks.js
@@ -603,6 +603,35 @@ Blockly.Blocks['get_trigger_times'] = {
}
};
+Blockly.Blocks['trigger_triggered'] = {
+ init: function() {
+ this.setColour(lineChart_HUE);
+ this.appendDummyInput().appendField(Blockly.MIXLY_MICROBIT_JS_CURRENT);
+ this.appendValueInput("name").setCheck("String");
+ this.appendDummyInput().appendField(Blockly.TRIGGER_TRIGGERED);
+ this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS+"value");
+ this.setInputsInline(true);
+ this.appendStatementInput('DO0').appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip("");
+ },
+ getVars:function(){
+ return ["time","value"];
+ }
+};
+
+Blockly.Blocks['get_trigger_triggers'] = {
+ init: function() {
+ this.setColour(lineChart_HUE);
+ this.appendDummyInput().appendField(Blockly.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput("name").setCheck("String");
+ this.appendDummyInput().appendField(Blockly.GET_TRIGGER_TRIGGERS);
+ this.setOutput(true, null);
+ this.setTooltip("");
+}
+};
+
Blockly.Blocks['lineChart_send'] = {
init: function() {
this.appendDummyInput().appendField(Blockly.TO);
@@ -2128,6 +2157,19 @@ Blockly.JavaScript.get_trigger_times=function(block) {
return [code, Blockly.JavaScript.ORDER_ATOMIC];
};
+Blockly.JavaScript.trigger_triggered=function(block) {
+ var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC);
+ var code="MixIO.getInstance("+name+",MixIO.typeTags.TRIGGER)\n"+".bind(MixIO.eventTags.TRIGGER_TRIGGERED, function(event,value){\n"
+ +Blockly.JavaScript.statementToCode(block, "DO0" )+"\n"+"})\n"
+ return code;
+};
+
+Blockly.JavaScript.get_trigger_triggers=function(block) {
+ var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC);
+ var code="MixIO.getInstance("+name+",MixIO.typeTags.TRIGGER).getTriggerTimes()"
+ return [code, Blockly.JavaScript.ORDER_ATOMIC];
+};
+
Blockly.JavaScript.lineChart_send=function(block) {
var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC);
var message = Blockly.JavaScript.valueToCode(this, 'message', Blockly.JavaScript.ORDER_ATOMIC);
@@ -3112,6 +3154,9 @@ Blockly.LINECHART_LATEST_MESSAGE="折线图表的最新一条消息";
Blockly.TIMER_TRIGGERED="定时触发器触发时";
Blockly.GET_TRIGGER_TIMES="定时触发器的触发次数"
+Blockly.TRIGGER_TRIGGERED="条件触发器触发时";
+Blockly.GET_TRIGGER_TRIGGERS="条件触发器的触发次数"
+
Blockly.BARCHART_RECIEVED="柱状图收到消息时";
Blockly.BARCHART_SEND_MESSAGE="柱状图发送消息";
Blockly.CLEAR_BARCHART="柱状图表清空";
diff --git a/ejs/projects.ejs b/ejs/projects.ejs
index 0cb5be5..de0aeec 100644
--- a/ejs/projects.ejs
+++ b/ejs/projects.ejs
@@ -675,7 +675,25 @@
-
+
+
+
+ name
+
+
+
+
+ message
+
+
+
+
+
+
+ name
+
+
+
diff --git a/js/MixIO.js b/js/MixIO.js
index 06b0292..1673137 100644
--- a/js/MixIO.js
+++ b/js/MixIO.js
@@ -80,13 +80,14 @@ var MixIO = {
DASHBOARD: 11,
DATA_MAP: 12,
WEATHER: 13,
- TIMER: 14
+ TIMER: 14,
+ TRIGGER: 15
},
oldTags: ["input_button", "input_slider", "input_keyboard", "input_controller", "input_rgb", "output_bulb", "output_text",
- "output_chart", "output_bar", "table", "output_dashboard", "output_map", "input_weather", "timer"
+ "output_chart", "output_bar", "table", "output_dashboard", "output_map", "input_weather", "timer", "trigger"
],
- zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器"],
+ zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器", "条件触发器"],
/*合法的MixIO事件种类*/
eventTags: {
@@ -124,7 +125,9 @@ var MixIO = {
WEATHER_SYNCED: "1311", //气象仪更新数据
WEATHER_SENT: "1312", //气象仪发送数据
- TIMER_TRIGGERED: "1411"
+ TIMER_TRIGGERED: "1411",
+
+ TRIGGER_TRIGGERED: "1511"
},
@@ -332,7 +335,7 @@ var MixIO = {
instance.getData = function(type) {
return sepMsgs[type]
}
- } else if (type === MixIO.typeTags.TIMER){
+ } else if (type === MixIO.typeTags.TIMER || type === MixIO.typeTags.TRIGGER){
instance.getTriggerTimes = function(){
try{
return parseInt(instance.attr('user-times'))
diff --git a/js/projects.js b/js/projects.js
index 4dd4fab..3ed6c19 100644
--- a/js/projects.js
+++ b/js/projects.js
@@ -800,7 +800,7 @@ function view_project(projectName, projectType) {
}
var modald = showmodaltext("
" + JSLang[lang].downloading + "
")
- $.post('getProject', { 'projectName': projectName }, function(res) {
+ $.post('getProject', { 'projectName': projectName }, async function(res) {
console.log(JSON.parse(res))
modald.close().remove()
if (res == 0) {
@@ -1162,7 +1162,7 @@ function view_project(projectName, projectType) {
'input_mic': add_mic,
'tinydb': add_tinydb,
}
- toolkits[un.attr('user-type')](un.attr('user-title'), un.attr('user-topic'), un.attr('user-content'), un.attr('style'), titleHidden)
+ await toolkits[un.attr('user-type')](un.attr('user-title'), un.attr('user-topic'), un.attr('user-content'), un.attr('style'), titleHidden)
}
var topicOuterDiv = $("")
var topicDiv = $("")
diff --git a/js/widgets.js b/js/widgets.js
index 2c99f31..23cbc98 100644
--- a/js/widgets.js
+++ b/js/widgets.js
@@ -2675,6 +2675,9 @@ async function add_trigger(user_title, user_topic, user_content, user_style, tit
return true
}
MixIO.triggers[title.text()] = function() {
+ // Aug 2025
+ var localTime = 0
+ title.parent().parent().attr('user-times', localTime)
MixIO.onMessage(function(topic1, message) {
var message = String(message)
if (topic1 == topic.text()) {
@@ -2685,6 +2688,9 @@ async function add_trigger(user_title, user_topic, user_content, user_style, tit
itemdiv.removeClass("triggered")
}, 150)
MixIO.publish(dstTopic, dstMessage)
+ localTime = localTime + 1
+ title.parent().parent().attr('user-times', localTime)
+ itemdiv.trigger(MixIO.eventTags.TRIGGER_TRIGGERED, dstMessage)
} else {
itemdiv.addClass("imtriggered")
setTimeout(function() {
@@ -2698,6 +2704,9 @@ async function add_trigger(user_title, user_topic, user_content, user_style, tit
itemdiv.removeClass("triggered")
}, 150)
MixIO.publish(dstTopic, dstMessage)
+ localTime = localTime + 1
+ title.parent().parent().attr('user-times', localTime)
+ itemdiv.trigger(MixIO.eventTags.TRIGGER_TRIGGERED, dstMessage)
} else {
itemdiv.addClass("imtriggered")
setTimeout(function() {
@@ -2711,6 +2720,9 @@ async function add_trigger(user_title, user_topic, user_content, user_style, tit
itemdiv.removeClass("triggered")
}, 150)
MixIO.publish(dstTopic, dstMessage)
+ localTime = localTime + 1
+ title.parent().parent().attr('user-times', localTime)
+ itemdiv.trigger(MixIO.eventTags.TRIGGER_TRIGGERED, dstMessage)
} else {
itemdiv.addClass("imtriggered")
setTimeout(function() {