Last Modified: 2021/11/28 00:56
逻辑视图所处的安全命名变量。为方便拼写,可使用全小写的“mixio”间接访问这一变量。
text - 待输出的文本
向逻辑视图的“输出”框中输出指定文本。
示例程序1
向“输出”框中输出"Hello world":
MixIO.log("Hello world")
triggerFunction - 希望触发的函数
当收到MQTT消息时,执行对应函数。
示例程序2
每当收到MQTT消息时,输出其主题和消息体:
MixIO.onMessage(function(topic,message){
MixIO.log(topic)
MixIO.log(message)
})
topic - 发布消息的主题
message - 发布消息的内容
在当前项目下,发送一则自定义的MQTT消息。
示例程序3
发送一则主题为'greeting',内容为'hello'的消息:
MixIO.publish('greeting','hello')
警告
为防止异常递归,发送的最大频率被限制为5次/500ms。超出频率限制的消息会被拦截。
triggerFunction - 希望触发的函数
time - 触发的循环间隔(单位:ms)
间隔指定时间,循环触发指定函数。
示例程序4
每隔1s,输出当前时间:
MixIO.setInterval(function(){
MixIO.log(new Date())
},1000)
警告
请勿使用JavaScript原生的setInterval()方法。该方法设置的循环触发事件,在项目停止时无法被正确移除。
triggerFunction - 希望触发的函数
time - 触发的延迟间隔(单位:ms)
延迟指定时间,触发指定函数。
示例程序5
10s后,输出'Good night':
MixIO.setTimeout(function(){
MixIO.log('Good night')
},10000)
警告
请勿使用JavaScript原生的setTimeout()方法。该方法设置的延时触发事件,在项目停止时无法被正确移除。
name - 希望获取的组件名称
type - 希望获取的组件类别(必须是MixIO.typeTags中定义的)
获取指定的组件实例(在下文中用MixIOUnit表示)。
可能出现的异常
当查询不到项目中存在name,type对应的组件时,throw MixIOLogicError
当type不属于MixIO.typeTags中定义的合法值时,throw MixIOLogicError
组件类。
仅可通过MixIO.getInstance(name,type)创建其子类的实例。此类型实例均具有的方法:
bind(eventTag,triggerFunction) - 为组件添加事件监听器。
其中,eventTag必须为MixIO.eventTags中定义的合法事件类型,且必须与type相对应。
triggerFunction为期望触发的监听方法。
trigger(actionTag,[actionParams]) - 触发组件事件。
其中,actionTag必须为MixIO.actionTags中定义的合法事件类型,且必须与type相对应。
[actionParams]为事件参数列表。
滑杆类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.SLIDER)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为滑杆添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.SLIDER_SLIDED - 滑杆被拖动
MixIO.eventTags.SLIDER_CHANGED - 滑杆收到消息
triggerFunction为期望触发的监听方法。
示例程序11
当名为“蓄力”的滑杆被拖动时,打开名为“发射”的开关:
MixIO.getInstance("蓄力",MixIO.typeTags.SLIDER).bind(MixIO.eventTags.SLIDER_SLIDED,function(){
MixIO.getInstance("发射",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,[true])
})
示例程序12
当名为“进度条”、最大值为10的滑杆收到消息时,输出其当前值占最大值的百分比:
MixIO.getInstance("进度条",MixIO.typeTags.SLIDER).bind(MixIO.eventTags.SLIDER_CHANGED,function(event,message){
MixIO.log(message*10+"%")
})
trigger(actionTag,[actionParams]) - 触发按键/开关的指定事件。
其中,actionTag可以为:
MixIO.actionTags.SLIDER_SEND - 改变滑杆数值
actionParams仅包含1个值,表示期望改变至的数值。
示例程序13
每隔1s,随机改变名为“进度条”的滑杆的值:
MixIO.setInterval(function(){
MixIO.getInstance("进度条",MixIO.typeTags.SLIDER).trigger(MixIO.actionTags.SLIDER_SEND,[parseInt(Math.random()*10)])
},1000)
getValue() - 获取滑杆的当前值
示例程序14
每隔1s,输出名为“进度条”的滑杆的值:
MixIO.setInterval(function(){
MixIO.log(MixIO.getInstance("进度条",MixIO.typeTags.SLIDER).getValue())
},1000)
文本输入类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.KEYBOARD)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为文本输入添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.KEYBOARD_SENT - 文本输入器点击发送消息
triggerFunction为期望触发的监听方法。
示例程序15
当名为“输入”的文本输入器点击发送消息时,向名为“计数”的滑杆发送消息字符串的长度:
MixIO.getInstance("输入",MixIO.typeTags.KEYBOARD).bind(MixIO.eventTags.KEYBOARD_SENT,function(event,message){
MixIO.getInstance("计数",MixIO.typeTags.SLIDER).trigger(MixIO.actionTags.SLIDER_SEND,[message.length])
})
trigger(actionTag,[actionParams]) - 触发文本输入的指定事件。
其中,actionTag可以为:
MixIO.actionTags.KEYBOARD_SEND - 发送文本消息
actionParams仅包含1个值,表示期望发送的消息。
示例程序16
当名为“消息”的文本输入器点击发送消息时,令名为“时钟”的文本输入器发送当前时间:
MixIO.getInstance("消息",MixIO.typeTags.KEYBOARD).bind(MixIO.eventTags.KEYBOARD_SENT,function(event,message){
MixIO.getInstance("时钟",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[new Date().toString()])
})
摇杆手柄类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.JOYSTICK)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为摇杆手柄添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.JOYSTICK_CHANGED - 摇杆手柄被拖动
triggerFunction为期望触发的监听方法。
示例程序17
当名为“摇杆”的摇杆手柄被拖动时,向文本输入器“方向”发送当前的手柄方向:
MixIO.getInstance("摇杆",MixIO.typeTags.JOYSTICK).bind(MixIO.eventTags.JOYSTICK_CHANGED,function(event,x,y){
var direction = (x>0?"右":"左")+(y>0?"上":"下")
MixIO.getInstance("方向",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[direction])
})
trigger(actionTag,[actionParams]) - 触发摇杆手柄的指定事件。
其中,actionTag可以为:
MixIO.actionTags.JOYSTICK_SEND - 发送位置消息
actionParams仅包含2个值,表示期望发送的横坐标和纵坐标。
示例程序18
每隔1s,通过名为“摇杆”的摇杆手柄随机发送1个位置消息:
MixIO.setInterval(function(){
var randomX = parseInt(Math.random()*200-100)
var randomY = parseInt(Math.random()*200-100)
MixIO.getInstance("摇杆",MixIO.typeTags.JOYSTICK).trigger(MixIO.actionTags.JOYSTICK_SEND,[randomX,randomY])
},1000)
getX() - 获取摇杆的当前横坐标
getY() - 获取摇杆的当前纵坐标
示例程序19
每隔1s,获取名为“摇杆”的摇杆手柄的当前横、纵坐标,如果二者绝对值之和大于100,则向主题"加速"发送消息'1',反之发送'0':
var joystickInstance = MixIO.getInstance("摇杆",MixIO.typeTags.JOYSTICK)
MixIO.setInterval(function(){
if(Math.abs(joystickInstance.getX())+Math.abs(joystickInstance.getY())>100)
MixIO.publish("加速",1)
else
MixIO.publish("加速",0)
},1000)
RGB色盘类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.RGB_PICKER)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为RGB色盘添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.RGB_PICKER_PICKED - 色盘被点击选色
MixIO.eventTags.RGB_PICKER_CHANGED - 色盘收到消息
triggerFunction为期望触发的监听方法。
示例程序20
当名为“色盘”的RGB色盘被选色时,通过文本输入器“红”发送当前的R通道颜色值:
MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).bind(MixIO.eventTags.RGB_PICKER_PICKED,function(event,r,g,b){
MixIO.getInstance("红",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[r])
})
示例程序21
当名为“色盘”的RGB色盘收到消息时,输出收到消息的通道及其值:
MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).bind(MixIO.eventTags.RGB_PICKER_CHANGED,function(event,r,g,b){
var channel = r!="-1"?"R":(g!="-1"?"G":"B")
var value = r!="-1"?r:(g!="-1"?g:b)
MixIO.log(channel+" - "+value)
})
trigger(actionTag,[actionParams]) - 触发RGB色盘的指定事件。
其中,actionTag可以为:
MixIO.actionTags.RGB_PICKER_SEND - 发送颜色消息
actionParams包含3个值,表示期望发送颜色的R通道、G通道、B通道值。
示例程序22
每隔1s,通过名为“色盘”的RGB色盘随机发送1个颜色值:
MixIO.setInterval(function(){
var randomR = parseInt(Math.random()*255)
var randomG = parseInt(Math.random()*255)
var randomB = parseInt(Math.random()*255)
MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).trigger(MixIO.actionTags.RGB_PICKER_SEND,[randomR,randomG,randomB])
},1000)
getColor() - 获取色盘的当前颜色值(返回一个包含三个通道值的列表)
示例程序23
每隔1s,获取名为“色盘”的RGB色盘的当前RGB颜色值,将其转化为HEX字符串并通过名为“16进制颜色”的文本输入器发送:
MixIO.setInterval(function(){
var rgbColor = MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).getColor()
var hexColor = RGB2Hex(rgbColor[0],rgbColor[1],rgbColor[2])
MixIO.getInstance("16进制颜色",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[hexColor])
},1000)
指示灯类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.BULB)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为指示灯添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.BULB_CHANGED - 指示灯收到消息
triggerFunction为期望触发的监听方法。
示例程序24
当名为“日光灯”的指示灯被点亮时,打开名为“光敏开关”的开关,反之则关闭:
MixIO.getInstance("日光灯",MixIO.typeTags.BULB).bind(MixIO.eventTags.BULB_CHANGED,function(event,message){
if(message>0)
MixIO.getInstance("光敏开关",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,true)
else
MixIO.getInstance("光敏开关",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,false)
})
trigger(actionTag,[actionParams]) - 触发指示灯的指定事件。
其中,actionTag可以为:
MixIO.actionTags.BULB_CHANGE - 改变指示灯状态
actionParams仅包含1个值,表示期望改变至的状态(0-熄灭;1-绿灯;2-黄灯;3-红灯)。
示例程序25
设计一个每隔3s切换一次状态的“交通信号灯”:
var status = 0
MixIO.setInterval(function(){
MixIO.getInstance("交通信号灯",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[status%3+1])
status = status + 1
},3000)
getStatus() - 获取指示灯的当前状态(0-熄灭;1-绿灯;2-黄灯;3-红灯)。
示例程序26
每隔1s,获取名为“交通信号灯”的当前状态,如果为“绿灯”,则打开名为“油门”的开关,否则关闭:
MixIO.setInterval(function(){
var status = MixIO.getInstance("交通信号灯",MixIO.typeTags.BULB).getStatus()
MixIO.getInstance("油门",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,[status=="1"])
},1000)
文本显示屏类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.BULB)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为文本显示屏添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.TEXT_SCREEN_CHANGED - 文本显示屏收到消息
triggerFunction为期望触发的监听方法。
示例程序27
当名为“LED”的文本显示屏收到消息时,向名为“文本长度”的滑杆发送消息长度:
MixIO.getInstance("LED",MixIO.typeTags.TEXT_SCREEN).bind(MixIO.eventTags.TEXT_SCREEN_CHANGED,function(event,message){
MixIO.getInstance("文本长度",MixIO.typeTags.SLIDER).trigger(MixIO.actionTags.SLIDER_SEND,message.length)
})
trigger(actionTag,[actionParams]) - 触发文本显示屏的指定事件。
其中,actionTag可以为:
MixIO.actionTags.TEXT_SCREEN_CHANGE - 显示文本消息
actionParams仅包含1个值,表示期望显示的文本。
示例程序28
令文本显示屏“LED”循环显示三段不同的文字:
var texts = ['空山新雨后,天气晚来秋','小舟从此逝,江海寄余生','夜来南风起,小麦覆垄黄']
var index = 0
MixIO.setInterval(function(){
MixIO.getInstance("LED",MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,[texts[index%3]])
index = index + 1
},1000)
getText() - 获取文本显示屏的显示文字。
示例程序29
每隔10s,将文本显示屏“LED”的显示更新同步到逻辑视图输出中:
MixIO.setInterval(function(){
MixIO.log(MixIO.getInstance("LED",MixIO.typeTags.TEXT_SCREEN).getText())
},10000)
折线图表类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.LINE_CHART)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为折线图表添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.LINE_CHART_CHANGED - 折线图表收到消息
triggerFunction为期望触发的监听方法。
示例程序30
当名为“温度监测”的折线图表收到大于80的消息,令“警报”指示灯亮红灯:
MixIO.getInstance("温度监测",MixIO.typeTags.LINE_CHART).bind(MixIO.eventTags.LINE_CHART_CHANGED,function(event,time,value){
if(parseInt(value)>80)
MixIO.getInstance("警报",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[3])
else
MixIO.getInstance("警报",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[0])
})
trigger(actionTag,[actionParams]) - 触发折线图表的指定事件。
其中,actionTag可以为:
MixIO.actionTags.LINE_CHART_CHANGE - 向折线图表发送消息
actionParams仅包含1个值,表示期望发送的消息。
示例程序31
每隔2秒,将在“签到”主题下收到消息的累计个数发送到“签到统计”折线图表中:
var count = 0
MixIO.onMessage(function(topic,message){
if(topic=='签到')
count = count+1
})
MixIO.setInterval(function(){
MixIO.getInstance("签到统计",MixIO.typeTags.LINE_CHART).trigger(MixIO.actionTags.LINE_CHART_CHANGE,[count])
},2000)
MixIO.actionTags.LINE_CHART_CLEAR - 令折线图表清空
actionParams不包含任何值,可以被省略。
示例程序32
当“签到”主题收到消息“finish”时,清空“签到统计”折线图表:
MixIO.onMessage(function(topic,message){
if(topic=='签到'&&message=='finish')
MixIO.getInstance("签到统计",MixIO.typeTags.LINE_CHART).trigger(MixIO.actionTags.LINE_CHART_CLEAR)
})
getAllMessages() - 获取折线图表的全部历史消息。
getLatestMessages(count) - 获取折线图表的至多前count条消息。
getLatestMessage - 获取折线图表的最新一条消息。
示例程序33
每隔5s,输出“签到统计”的至多前3条消息:
MixIO.setInterval(function(){
MixIO.log(JSON.stringify(MixIO.getInstance("签到统计",MixIO.typeTags.LINE_CHART).getLatestMessages(3)))
},5000)
柱状图表类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.BAR_CHART)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为柱状图表添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.BAR_CHART_CHANGED - 柱状图表收到消息
triggerFunction为期望触发的监听方法。
示例程序34
当名为“选择题”的柱状图表累计收到等同于班级同学数目的消息数时,令“完成”指示灯亮绿灯:
var STUDENT_NUM = 30
var count = 0
MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).bind(MixIO.eventTags.BAR_CHART_CHANGED,function(event,message){
count = count+1
if(count>=STUDENT_NUM)
MixIO.getInstance("完成",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[1])
})
trigger(actionTag,[actionParams]) - 触发柱状图表的指定事件。
其中,actionTag可以为:
MixIO.actionTags.BAR_CHART_CHANGE - 向柱状图表发送消息
actionParams仅包含1个值,表示期望发送的消息。
示例程序35
随机作答选择题30次,在30秒内将这些消息发送给“选择题”柱状图表:
var count = 0
MixIO.setInterval(function(){
if(count<30){
var seed = Math.random()
var option = seed<0.25?"A":(seed<0.5?"B":(seed<0.75?"C":"D"))
MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).trigger(MixIO.actionTags.BAR_CHART_CHANGE,[option])
count = count+1
}
},1000)
MixIO.actionTags.BAR_CHART_CLEAR - 令柱状图表清空
actionParams不包含任何值,可以被省略。
示例程序36
当“切换题目”主题收到消息“next”时,清空“选择题”柱状图表:
MixIO.onMessage(function(topic,message){
if(topic=='切换题目'&&message=='next')
MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).trigger(MixIO.actionTags.BAR_CHART_CLEAR)
})
getData() - 获取柱状图表的当前数据。
示例程序37
每隔5s,输出“选择题”柱状图表的当前数据:
MixIO.setInterval(function(){
MixIO.log(JSON.stringify(MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).getData()))
},5000)
数据表格类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.DATA_TABLE)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为数据表格添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.DATA_TABLE_CHANGED - 数据表格收到消息
triggerFunction为期望触发的监听方法。
示例程序38
当名为“签到表”的数据表格累计收到等同于班级同学数目的消息数时,令“完成”指示灯亮绿灯:
var STUDENT_NUM = 30
var count = 0
MixIO.getInstance("签到表",MixIO.typeTags.DATA_TABLE).bind(MixIO.eventTags.DATA_TABLE_CHANGED,function(event,message){
count = count+1
if(count>=STUDENT_NUM)
MixIO.getInstance("完成",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[1])
})
trigger(actionTag,[actionParams]) - 触发数据表格的指定事件。
其中,actionTag可以为:
MixIO.actionTags.DATA_TABLE_CHANGE - 向数据表格发送消息
actionParams仅包含1个值,表示期望发送的消息。
示例程序39
每隔1秒,随机生成一个签到信息,发送给“签到表”:
function listsGetRandomItem(list, remove) {
var x = Math.floor(Math.random() * list.length)
if (remove)
return list.splice(x, 1)[0]
else
return list[x]
}
function getRandomName() {
lastNames = '赵,钱,孙,李,周,吴,郑,王'.split(',')
firstNames = '明,刚,强,美,丽,光,威,红'.split(',')
return String(listsGetRandomItem(lastNames, false)) + String(listsGetRandomItem(firstNames, false))
}
MixIO.setInterval(function(){
MixIO.getInstance('签到表',MixIO.typeTags.DATA_TABLE).trigger(MixIO.actionTags.DATA_TABLE_CHANGE,[(getRandomName())])
},1000)
MixIO.actionTags.DATA_TABLE_CLEAR - 令数据表格清空
actionParams不包含任何值,可以被省略。
示例程序40
当“上课”主题收到消息时,清空“签到表”数据表格:
MixIO.onMessage(function(topic,message){
if(topic=='上课')
MixIO.getInstance("签到表",MixIO.typeTags.DATA_TABLE).trigger(MixIO.actionTags.DATA_TABLE_CLEAR)
})
getData() - 获取数据表格的全部数据。
示例程序41
每隔5s,输出“签到表”数据表格的全部数据:
MixIO.setInterval(function(){
MixIO.log(JSON.stringify(MixIO.getInstance("签到表",MixIO.typeTags.DATA_TABLE).getData()))
},5000)
仪表盘类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.DASHBOARD)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为仪表盘添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.DASHBOARD_CHANGED - 仪表盘收到消息
triggerFunction为期望触发的监听方法。
示例程序42
当名为“CPU温度”的仪表盘收到大于80的消息时,令“警报”指示灯亮红灯:
MixIO.getInstance("CPU温度",MixIO.typeTags.DASHBOARD).bind(MixIO.eventTags.DASHBOARD_CHANGED,function(event,message){
if(message>80)
MixIO.getInstance("警报",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[3])
})
trigger(actionTag,[actionParams]) - 触发仪表盘的指定事件。
其中,actionTag可以为:
MixIO.actionTags.DASHBOARD_CHANGE - 向仪表盘发送消息
actionParams仅包含1个值,表示期望发送的消息。
示例程序43
令“CPU温度”仪表盘归零:
MixIO.getInstance("CPU温度",MixIO.typeTags.DASHBOARD).trigger(MixIO.actionTags.DASHBOARD_CHANGE,[0])
数据地图类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.DATA_MAP)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为数据地图添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.DATA_MAP_CHANGED - 数据地图收到消息
triggerFunction为期望触发的监听方法。
示例程序44
当名为“公交车路线”的数据地图收到名为“306路-A”的公交车发来的位置信息时,计算与当前位置的距离,输出在“距离”文本显示器中:
var currentPos = [116.397128,39.916527]
MixIO.getInstance("公交车路线",MixIO.typeTags.DATA_MAP).bind(MixIO.eventTags.DATA_MAP_CHANGED,function(event,clientid,long,lat,message){
if(message[0]['value']>="306路-A"){
var busPos = [parseFloat(long),parseFloat(lat)]
var x = (busPos[0]-currentPos[0])/0.00001141
var y = (busPos[1]-currentPos[1])/0.00000899
var distance = Math.sqrt(x*x+y*y)
MixIO.getInstance("距离",MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,["当前306路-A公交车与您的距离是"+Math.round(distance)+"米。"])
}
})
trigger(actionTag,[actionParams]) - 触发数据地图的指定事件。
其中,actionTag可以为:
MixIO.actionTags.DATA_MAP_CHANGE - 向数据地图发送消息
actionParams仅包含1个值,表示期望发送的消息。
示例程序45
向“定位”数据地图报告自己的当前位置:
var currentPos = ["116.397128","39.916527"]
var myName = "张三"
MixIO.getInstance("定位",MixIO.typeTags.DATA_MAP).trigger(MixIO.actionTags.DATA_MAP_CHANGE,{"long":currentPos[0],"lat":currentPos[1],"clientid":myName,"message":[{"label":"name","value":myName}]})
MixIO.actionTags.DATA_TABLE_CLEAR - 令数据表格清空
actionParams不包含任何值,可以被省略。
示例程序46
当“下线”主题收到消息时,清空“定位”数据地图:
MixIO.onMessage(function(topic,message){
if(topic=='下线')
MixIO.getInstance("定位",MixIO.typeTags.DATA_MAP).trigger(MixIO.actionTags.DATA_MAP_CLEAR)
})
实时气象仪类(继承自组件类)。
仅可通过MixIO.getInstance(name,MixIO.typeTags.WEATHER)创建此类型的实例。此类型实例具有的方法:
bind(eventTag,triggerFunction) - 为实时气象仪添加事件监听器。
其中,eventTag可以为:
MixIO.eventTags.WEATHER_SYNCED - 气象仪气象信息更新
MixIO.eventTags.WEATHER_SENT - 气象仪气象信息下发
triggerFunction为期望触发的监听方法。
示例程序47
当名为“气象站”的气象仪更新气象数据时,向文本显示屏“更新记录”中追加更新时间;当名为“气象站”的气象仪下发气象数据时,向文本显示屏“下发记录”中追加下发时间:
var updates = []
var sends = []
MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).bind(MixIO.eventTags.WEATHER_SYNCED, function(event,district,weather_type,temperature,humidity,wind_dir,wind_class){
updates.push(new Date());
MixIO.getInstance('更新记录',MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,(updates.join(',')))
})
MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).bind(MixIO.eventTags.WEATHER_SENT, function(event,district,weather_type,temperature,humidity,wind_dir,wind_class){
sends.push(new Date())
MixIO.getInstance('下发记录',MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,(sends.join(',')))
})
trigger(actionTag,[actionParams]) - 触发实时气象仪的指定事件。
其中,actionTag可以为:
MixIO.actionTags.WEATHER_SYNC - 更新气象仪信息
MixIO.actionTags.WEATHER_SEND - 下发气象仪信息
actionParams仅包含1个值,表示期望发送的消息。
示例程序48
每隔1小时,更新并下发“气象站”的信息:
MixIO.setInterval(function(){
MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).trigger(MixIO.actionTags.WEATHER_SYNC)
MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).trigger(MixIO.actionTags.WEATHER_SEND)
},3600000)
getData(datatype) - 获取实时气象仪的某一类别数据。
datatype - 期望获取的数据类别,可以为:
weather_type - 天气类别
temperature - 温度
humidity - 相对湿度
wind_dir - 风向
wind_class - 风级
district - 数据来源区域
示例程序49
每隔1小时,获取“气象仪”的“温度”数据,并发送至“温度”折线图表:
MixIO.setInterval(function(){
MixIO.getInstance('温度',MixIO.typeTags.LINE_CHART).trigger(MixIO.actionTags.LINE_CHART_CHANGE,MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).getData("temperature"))
},3600000)
全部组件类别标签的集合变量。
按键/开关 - MixIO.typeTags.BUTTON
滑杆 - MixIO.typeTags.SLIDER
文本输入 - MixIO.typeTags.KEYBOARD
摇杆手柄 - MixIO.typeTags.JOYSTICK
RGB色盘 - MixIO.typeTags.RGB_PICKER
指示灯 - MixIO.typeTags.BULB
文本显示屏 - MixIO.typeTags.TEXT_SCREEN
折线图表 - MixIO.typeTags.LINE_CHART
柱状图表 - MixIO.typeTags.BAR_CHART
数据表格 - MixIO.typeTags.DATA_TABLE
仪表盘 - MixIO.typeTags.DASHBOARD
数据地图 - MixIO.typeTags.DATA_MAP
实时气象仪 - MixIO.typeTags.WEATHER
全部组件监听事件标签的集合变量。
开关
开关被点按后松开 - MixIO.eventTags.BUTTON_LOOSED
开关收到消息 - MixIO.eventTags.BUTTON_CHANGED
按键
按键被点按后松开 - MixIO.eventTags.BUTTON_PRESSED
按键被点按后松开 - MixIO.eventTags.BUTTON_LOOSED
按键收到消息 - MixIO.eventTags.BUTTON_CHANGED
滑杆
滑杆被拖动 - MixIO.eventTags.SLIDER_SLIDED
滑杆收到消息 - MixIO.eventTags.SLIDER_CHANGED
文本输入
文本输入器点击发送消息 - MixIO.eventTags.KEYBOARD_SENT
摇杆手柄
摇杆被拖动 - MixIO.eventTags.JOYSTICK_CHANGED
RGB色盘
色盘被选色 - MixIO.eventTags.RGB_PICKER_PICKED
色盘收到消息 - MixIO.eventTags.RGB_PICKER_CHANGED
指示灯
指示灯收到消息 - MixIO.eventTags.BULB_CHANGED
文本显示屏
文本显示屏收到消息 - MixIO.eventTags.TEXT_SCREEN_CHANGED
折线图表
折线图表收到消息 - MixIO.eventTags.LINE_CHART_CHANGED
柱状图表
柱状图表收到消息 - MixIO.eventTags.BAR_CHART_CHANGED
数据表格
数据表格收到消息 - MixIO.eventTags.DATA_TABLE_CHANGED
仪表盘
仪表盘收到消息 - MixIO.eventTags.DASHBOARD_CHANGED
数据地图
数据地图收到消息 - MixIO.eventTags.DATA_MAP_CHANGED
实时气象仪
气象仪更新数据 - MixIO.eventTags.WEATHER_SYNCED
气象仪发送数据 - MixIO.eventTags.WEATHER_SENT
全部组件触发事件标签的集合变量。
开关
切换开关状态 - MixIO.actionTags.BUTTON_SWITCH
按键
无
滑杆
改变滑杆数值 - MixIO.actionTags.SLIDER_SEND
文本输入
发送文本消息 - MixIO.actionTags.KEYBOARD_SEND
摇杆手柄
发送位置消息 - MixIO.actionTags.JOYSTICK_SEND
RGB色盘
发送颜色消息 - MixIO.actionTags.RGB_PICKER_SEND
指示灯
切换指示灯状态 - MixIO.actionTags.BULB_CHANGE
文本显示屏
显示文本消息 - MixIO.actionTags.TEXT_SCREEN_CHANGE
折线图表
发送消息 - MixIO.actionTags.LINE_CHART_CHANGE
清空消息 - MixIO.actionTags.LINE_CHART_CLEAR
柱状图表
发送消息 - MixIO.actionTags.BAR_CHART_CHANGE
清空消息 - MixIO.actionTags.BAR_CHART_CLEAR
数据表格
发送消息 - MixIO.actionTags.DATA_TABLE_CHANGE
清空消息 - MixIO.actionTags.DATA_TABLE_CLEAR
仪表盘
发送数值消息 - MixIO.eventTags.DASHBOARD_CHANGE
数据地图
发送消息 - MixIO.actionTags.DATA_MAP_CHANGE
清空消息 - MixIO.actionTags.DATA_MAP_CLEAR
实时气象仪
更新数据 - MixIO.eventTags.WEATHER_SYNC
发送数据 - MixIO.eventTags.WEATHER_SEND