Files
mixio/ejs/dev.html
Eason010212 5d80728be9 mixio 1.10.0
2023-03-10 18:03:02 +08:00

910 lines
55 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<html>
<head>
<title>MixIO逻辑视图API</title>
<link rel="shortcut icon" href="img/shortcut.png"/>
</head>
<body style="display:flex;flex-direction:row;margin:0;padding:0">
<div style='min-width:300px;height:100vh;background-color:#4e73df;color:white;display:flex;flex-direction:column;align-items:center'>
<img src="img/logo.png" style="width:76px;height:80px;margin:30px" alt="">
<style>
a{
all:unset;
margin:5px!important;
width:200px;
height:30px;
cursor:pointer;
background-color:rgba(255,255,255,0.4);
font-size:1rem;
font-weight:bold;
margin:0;
display:flex;
align-items:center;
justify-content:center;
border-radius:20px
}
a:hover{
background-color:rgba(255,255,255,0.6);
}
</style>
<a href="#log">控制台输出</a>
<a href="#mqtt">MQTT消息控制</a>
<a href="#time">循环与延时</a>
<a href="#button">组件:按键/开关</a>
<a href="#slider">组件:滑杆</a>
<a href="#keyboard">组件:文本输入</a>
<a href="#joystick">组件:摇杆手柄</a>
<a href="#rgb">组件RGB色盘</a>
<a href="#bulb">组件:指示灯</a>
<a href="#text">组件:文本显示屏</a>
<a href="#line">组件:折线图表</a>
<a href="#bar">组件:柱状图表</a>
<a href="#table">组件:数据表格</a>
<a href="#dashboard">组件:仪表盘</a>
<a href="#datamap">组件:数据地图</a>
<a href="#weather">组件:实时气象仪</a>
<a href="#var">命名空间</a>
</div>
<div style='width:100%;height:100vh;overflow:scroll;font-family:monospace;word-break:break-all'>
<style>
div div p{
margin:0;
font-size:1rem;
padding-left:5px;
margin-bottom:5px;
}
div div{
margin:5px;
margin-bottom:20px;
margin-top:10px;
}
div div h2{
background-image: linear-gradient(to right, #4e73df, #b6c5f2);
margin:0;
padding-top:8px;
padding-bottom:8px;
margin-bottom:5px;
padding-left:5px;
color:white
}
div div div{
border:solid #1cc88a 1px;
font-size:0.8rem;
padding:5px;
color:black;
margin-bottom:10px
}
</style>
<h1 style='margin:15px;margin-left:10px'>MixIO Logic API (Release Preview)</h1>
<p style="margin:10px;margin-bottom:15px">Last Modified: 2021/11/28 00:56</p>
<div>
<h2>MixIO</h2>
<p>逻辑视图所处的安全命名变量。为方便拼写可使用全小写的“mixio”间接访问这一变量。</p>
</div>
<div id="log">
<h2>MixIO.log(<i>text</i>)</h2>
<p><i><b>text</b></i> - 待输出的文本</p>
<p>向逻辑视图的“输出”框中输出指定文本。</p>
<div>
<p><b>示例程序1</b></p>
<p>向“输出”框中输出"Hello world"</p>
<p>MixIO.log("Hello world")</p>
<img src="img/eg1.png"></img>
</div>
</div>
<div id="mqtt">
<h2>MixIO.onMessage(<i>triggerFunction</i>)</h2>
<p><i><b>triggerFunction</b></i> - 希望触发的函数</p>
<p>当收到MQTT消息时执行对应函数。</p>
<div>
<p><b>示例程序2</b></p>
<p>每当收到MQTT消息时输出其主题和消息体</p>
<p>MixIO.onMessage(function(topic,message){</p>
<p>&nbsp;&nbsp;MixIO.log(topic)</p>
<p>&nbsp;&nbsp;MixIO.log(message)</p>
<p>})</p>
<img src="img/eg2.png"></img>
</div>
</div>
<div>
<h2>MixIO.publish(<i>topic</i>,<i>message</i>)</h2>
<p><i><b>topic</b></i> - 发布消息的主题</p>
<p><i><b>message</b></i> - 发布消息的内容</p>
<p>在当前项目下发送一则自定义的MQTT消息。</p>
<div>
<p><b>示例程序3</b></p>
<p>发送一则主题为'greeting',内容为'hello'的消息:</p>
<p>MixIO.publish('greeting','hello')</p>
<img src="img/eg3.png"></img>
</div>
<div style='border:solid #e74a3b 1px'>
<p><b>警告</b></p>
<p>为防止异常递归发送的最大频率被限制为5次/500ms。超出频率限制的消息会被拦截。</p>
</div>
</div>
<div id="time">
<h2>MixIO.setInterval(<i>triggerFunction</i>,<i>time</i>)</h2>
<p><i><b>triggerFunction</b></i> - 希望触发的函数</p>
<p><i><b>time</b></i> - 触发的循环间隔单位ms</p>
<p>间隔指定时间,循环触发指定函数。</p>
<div>
<p><b>示例程序4</b></p>
<p>每隔1s输出当前时间</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.log(new Date())</p>
<p>},1000)</p>
<img src="img/eg4.png"></img>
</div>
<div style='border:solid #e74a3b 1px'>
<p><b>警告</b></p>
<p>请勿使用JavaScript原生的setInterval()方法。该方法设置的循环触发事件,在项目停止时无法被正确移除。</p>
</div>
</div>
<div>
<h2>MixIO.setTimeout(<i>triggerFunction</i>,<i>time</i>)</h2>
<p><i><b>triggerFunction</b></i> - 希望触发的函数</p>
<p><i><b>time</b></i> - 触发的延迟间隔单位ms</p>
<p>延迟指定时间,触发指定函数。</p>
<div>
<p><b>示例程序5</b></p>
<p>10s后输出'Good night'</p>
<p>MixIO.setTimeout(function(){</p>
<p>&nbsp;&nbsp;MixIO.log('Good night')</p>
<p>},10000)</p>
<img src="img/eg5.png"></img>
</div>
<div style='border:solid #e74a3b 1px'>
<p><b>警告</b></p>
<p>请勿使用JavaScript原生的setTimeout()方法。该方法设置的延时触发事件,在项目停止时无法被正确移除。</p>
</div>
</div>
<div>
<h2>MixIO.getInstance(<i>name</i>,<i>type</i>)</h2>
<p><i><b>name</b></i> - 希望获取的组件名称</p>
<p><i><b>type</b></i> - 希望获取的组件类别必须是MixIO.typeTags中定义的</p>
<p>获取指定的组件实例在下文中用MixIOUnit表示</p>
<div style='border:solid #36b9cc 1px'>
<p><b>可能出现的异常</b></p>
<p>当查询不到项目中存在<i>name</i>,<i>type</i>对应的组件时,<i>throw</i> MixIOLogicError</p>
<p><i>type</i>不属于MixIO.typeTags中定义的合法值时<i>throw</i> MixIOLogicError</p>
</div>
</div>
<div>
<h2>MixIOUnit</h2>
<p>组件类。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,<i>type</i>)创建其子类的实例。此类型实例均具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为组件添加事件监听器。</p>
<p>其中,<i>eventTag</i>必须为MixIO.eventTags中定义的合法事件类型且必须与<i>type</i>相对应。</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发组件事件。</p>
<p>其中,<i>actionTag</i>必须为MixIO.actionTags中定义的合法事件类型且必须与<i>type</i>相对应。</p>
<p><i>[actionParams]</i>为事件参数列表。</p>
</div>
<div id="button">
<h2>Button <i>extends</i> MixIOUnit</h2>
<p>按键/开关类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.BUTTON)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为按键/开关添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.BUTTON_LOOSED - 开关/按键被松开</p>
<p>MixIO.eventTags.BUTTON_PRESSED - 按键被按下</p>
<p>MixIO.eventTags.BUTTON_CHANGED - 开关收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序6</b></p>
<p>当名为“按钮1”的开关或按键被松开时输出“被松开”</p>
<p>MixIO.getInstance("按钮1",MixIO.typeTags.BUTTON).bind(MixIO.eventTags.BUTTON_LOOSED,function(){</p>
<p>&nbsp;&nbsp;MixIO.log('被松开')</p>
<p>})</p>
<img src="img/eg6.png"></img>
</div>
<div>
<p><b>示例程序7</b></p>
<p>当名为“按钮2”的按键被按下时输出“被按下”</p>
<p>MixIO.getInstance("按钮2",MixIO.typeTags.BUTTON).bind(MixIO.eventTags.BUTTON_PRESSED,function(){</p>
<p>&nbsp;&nbsp;MixIO.log('被按下')</p>
<p>})</p>
<img src="img/eg7.png"></img>
</div>
<div>
<p><b>示例程序8</b></p>
<p>当名为“开关1”的开关收到消息时输出收到的消息</p>
<p>MixIO.getInstance("开关1",MixIO.typeTags.BUTTON).bind(MixIO.eventTags.BUTTON_CHANGED,function(event,message){</p>
<p>&nbsp;&nbsp;MixIO.log(message)</p>
<p>})</p>
<img src="img/eg8.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发按键/开关的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.BUTTON_SWITCH - 切换开关状态</p>
<p><i>actionParams</i>仅包含1个值表示期望切换至的状态false-关true-开)。</p>
<div>
<p><b>示例程序9</b></p>
<p>每隔1s切换一次“开关”的状态</p>
<p>var status = true</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("开关",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,[status])</p>
<p>&nbsp;&nbsp;status = !status</p>
<p>},1000)</p>
<img src="img/eg9.png"></img>
</div>
<p><i><b>isOn()</b></i> - 获取开关的当前状态返回Boolean</p>
<div>
<p><b>示例程序10</b></p>
<p>30s后如果“开关1”没有关闭则打开“开关2”</p>
<p>MixIO.setTimeout(function(){</p>
<p>&nbsp;&nbsp;if(MixIO.getInstance("开关1",MixIO.typeTags.BUTTON).isOn())</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("开关2",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,[true])</p>
<p>},30000)</p>
<img src="img/eg10.png"></img>
</div>
</div>
<div id="slider">
<h2>Slider <i>extends</i> MixIOUnit</h2>
<p>滑杆类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.SLIDER)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为滑杆添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.SLIDER_SLIDED - 滑杆被拖动</p>
<p>MixIO.eventTags.SLIDER_CHANGED - 滑杆收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序11</b></p>
<p>当名为“蓄力”的滑杆被拖动时,打开名为“发射”的开关:</p>
<p>MixIO.getInstance("蓄力",MixIO.typeTags.SLIDER).bind(MixIO.eventTags.SLIDER_SLIDED,function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("发射",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,[true])</p>
<p>})</p>
<img src="img/eg11.png"></img>
</div>
<div>
<p><b>示例程序12</b></p>
<p>当名为“进度条”、最大值为10的滑杆收到消息时输出其当前值占最大值的百分比</p>
<p>MixIO.getInstance("进度条",MixIO.typeTags.SLIDER).bind(MixIO.eventTags.SLIDER_CHANGED,function(event,message){</p>
<p>&nbsp;&nbsp;MixIO.log(message*10+"%")</p>
<p>})</p>
<img src="img/eg12.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发按键/开关的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.SLIDER_SEND - 改变滑杆数值</p>
<p><i>actionParams</i>仅包含1个值表示期望改变至的数值。</p>
<div>
<p><b>示例程序13</b></p>
<p>每隔1s随机改变名为“进度条”的滑杆的值</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("进度条",MixIO.typeTags.SLIDER).trigger(MixIO.actionTags.SLIDER_SEND,[parseInt(Math.random()*10)])</p>
<p>},1000)</p>
<img src="img/eg13.png"></img>
</div>
<p><i><b>getValue()</b></i> - 获取滑杆的当前值</p>
<div>
<p><b>示例程序14</b></p>
<p>每隔1s输出名为“进度条”的滑杆的值</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.log(MixIO.getInstance("进度条",MixIO.typeTags.SLIDER).getValue())</p>
<p>},1000)</p>
<img src="img/eg14.png"></img>
</div>
</div>
<div id="keyboard">
<h2>Keyboard <i>extends</i> MixIOUnit</h2>
<p>文本输入类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.KEYBOARD)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为文本输入添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.KEYBOARD_SENT - 文本输入器点击发送消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序15</b></p>
<p>当名为“输入”的文本输入器点击发送消息时,向名为“计数”的滑杆发送消息字符串的长度:</p>
<p>MixIO.getInstance("输入",MixIO.typeTags.KEYBOARD).bind(MixIO.eventTags.KEYBOARD_SENT,function(event,message){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("计数",MixIO.typeTags.SLIDER).trigger(MixIO.actionTags.SLIDER_SEND,[message.length])</p>
<p>})</p>
<img src="img/eg15.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发文本输入的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.KEYBOARD_SEND - 发送文本消息</p>
<p><i>actionParams</i>仅包含1个值表示期望发送的消息。</p>
<div>
<p><b>示例程序16</b></p>
<p>当名为“消息”的文本输入器点击发送消息时,令名为“时钟”的文本输入器发送当前时间:</p>
<p>MixIO.getInstance("消息",MixIO.typeTags.KEYBOARD).bind(MixIO.eventTags.KEYBOARD_SENT,function(event,message){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("时钟",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[new Date().toString()])</p>
<p>})</p>
<img src="img/eg16.png"></img>
</div>
</div>
<div id="joystick">
<h2>Joystick <i>extends</i> MixIOUnit</h2>
<p>摇杆手柄类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.JOYSTICK)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为摇杆手柄添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.JOYSTICK_CHANGED - 摇杆手柄被拖动</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序17</b></p>
<p>当名为“摇杆”的摇杆手柄被拖动时,向文本输入器“方向”发送当前的手柄方向:</p>
<p>MixIO.getInstance("摇杆",MixIO.typeTags.JOYSTICK).bind(MixIO.eventTags.JOYSTICK_CHANGED,function(event,x,y){</p>
<p>&nbsp;&nbsp;var direction = (x>0?"右":"左")+(y>0?"上":"下")</p>
<p>&nbsp;&nbsp;MixIO.getInstance("方向",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[direction])</p>
<p>})</p>
<img src="img/eg17.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发摇杆手柄的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.JOYSTICK_SEND - 发送位置消息</p>
<p><i>actionParams</i>仅包含2个值表示期望发送的横坐标和纵坐标。</p>
<div>
<p><b>示例程序18</b></p>
<p>每隔1s通过名为“摇杆”的摇杆手柄随机发送1个位置消息</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;var randomX = parseInt(Math.random()*200-100)</p>
<p>&nbsp;&nbsp;var randomY = parseInt(Math.random()*200-100)</p>
<p>&nbsp;&nbsp;MixIO.getInstance("摇杆",MixIO.typeTags.JOYSTICK).trigger(MixIO.actionTags.JOYSTICK_SEND,[randomX,randomY])</p>
<p>},1000)</p>
<img src="img/eg18.png"></img>
</div>
<p><i><b>getX()</b></i> - 获取摇杆的当前横坐标</p>
<p><i><b>getY()</b></i> - 获取摇杆的当前纵坐标</p>
<div>
<p><b>示例程序19</b></p>
<p>每隔1s获取名为“摇杆”的摇杆手柄的当前横、纵坐标如果二者绝对值之和大于100则向主题"加速"发送消息'1',反之发送'0'</p>
<p>var joystickInstance = MixIO.getInstance("摇杆",MixIO.typeTags.JOYSTICK)</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;if(Math.abs(joystickInstance.getX())+Math.abs(joystickInstance.getY())>100)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.publish("加速",1)</p>
<p>&nbsp;&nbsp;else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.publish("加速",0)</p>
<p>},1000)</p>
<img src="img/eg19.png"></img>
</div>
</div>
<div id="rgb">
<h2>RGB_PICKER <i>extends</i> MixIOUnit</h2>
<p>RGB色盘类继承自组件类</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.RGB_PICKER)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为RGB色盘添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.RGB_PICKER_PICKED - 色盘被点击选色</p>
<p>MixIO.eventTags.RGB_PICKER_CHANGED - 色盘收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序20</b></p>
<p>当名为“色盘”的RGB色盘被选色时通过文本输入器“红”发送当前的R通道颜色值</p>
<p>MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).bind(MixIO.eventTags.RGB_PICKER_PICKED,function(event,r,g,b){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("红",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[r])</p>
<p>})</p>
<img src="img/eg20.png"></img>
</div>
<div>
<p><b>示例程序21</b></p>
<p>当名为“色盘”的RGB色盘收到消息时输出收到消息的通道及其值</p>
<p>MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).bind(MixIO.eventTags.RGB_PICKER_CHANGED,function(event,r,g,b){</p>
<p>&nbsp;&nbsp;var channel = r!="-1"?"R":(g!="-1"?"G":"B")</p>
<p>&nbsp;&nbsp;var value = r!="-1"?r:(g!="-1"?g:b)</p>
<p>&nbsp;&nbsp;MixIO.log(channel+" - "+value)</p>
<p>})</p>
<img src="img/eg21.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发RGB色盘的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.RGB_PICKER_SEND - 发送颜色消息</p>
<p><i>actionParams</i>包含3个值表示期望发送颜色的R通道、G通道、B通道值。</p>
<div>
<p><b>示例程序22</b></p>
<p>每隔1s通过名为“色盘”的RGB色盘随机发送1个颜色值</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;var randomR = parseInt(Math.random()*255)</p>
<p>&nbsp;&nbsp;var randomG = parseInt(Math.random()*255)</p>
<p>&nbsp;&nbsp;var randomB = parseInt(Math.random()*255)</p>
<p>&nbsp;&nbsp;MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).trigger(MixIO.actionTags.RGB_PICKER_SEND,[randomR,randomG,randomB])</p>
<p>},1000)</p>
<img src="img/eg22.png"></img>
</div>
<p><i><b>getColor()</b></i> - 获取色盘的当前颜色值(返回一个包含三个通道值的列表)</p>
<div>
<p><b>示例程序23</b></p>
<p>每隔1s获取名为“色盘”的RGB色盘的当前RGB颜色值将其转化为HEX字符串并通过名为“16进制颜色”的文本输入器发送</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;var rgbColor = MixIO.getInstance("色盘",MixIO.typeTags.RGB_PICKER).getColor()</p>
<p>&nbsp;&nbsp;var hexColor = RGB2Hex(rgbColor[0],rgbColor[1],rgbColor[2])</p>
<p>&nbsp;&nbsp;MixIO.getInstance("16进制颜色",MixIO.typeTags.KEYBOARD).trigger(MixIO.actionTags.KEYBOARD_SEND,[hexColor])</p>
<p>},1000)</p>
<img src="img/eg23.png"></img>
</div>
</div>
<div id="bulb">
<h2>BULB <i>extends</i> MixIOUnit</h2>
<p>指示灯类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.BULB)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为指示灯添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.BULB_CHANGED - 指示灯收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序24</b></p>
<p>当名为“日光灯”的指示灯被点亮时,打开名为“光敏开关”的开关,反之则关闭:</p>
<p>MixIO.getInstance("日光灯",MixIO.typeTags.BULB).bind(MixIO.eventTags.BULB_CHANGED,function(event,message){</p>
<p>&nbsp;&nbsp;if(message>0)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("光敏开关",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,true)</p>
<p>&nbsp;&nbsp;else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("光敏开关",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,false)</p>
<p>})</p>
<img src="img/eg24.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发指示灯的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.BULB_CHANGE - 改变指示灯状态</p>
<p><i>actionParams</i>仅包含1个值表示期望改变至的状态0-熄灭1-绿灯2-黄灯3-红灯)。</p>
<div>
<p><b>示例程序25</b></p>
<p>设计一个每隔3s切换一次状态的“交通信号灯”</p>
<p>var status = 0</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("交通信号灯",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[status%3+1])</p>
<p>&nbsp;&nbsp;status = status + 1</p>
<p>},3000)</p>
<img src="img/eg25.png"></img>
</div>
<p><i><b>getStatus()</b></i> - 获取指示灯的当前状态0-熄灭1-绿灯2-黄灯3-红灯)。</p>
<div>
<p><b>示例程序26</b></p>
<p>每隔1s获取名为“交通信号灯”的当前状态如果为“绿灯”则打开名为“油门”的开关否则关闭</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;var status = MixIO.getInstance("交通信号灯",MixIO.typeTags.BULB).getStatus()</p>
<p>&nbsp;&nbsp;MixIO.getInstance("油门",MixIO.typeTags.BUTTON).trigger(MixIO.actionTags.BUTTON_SWITCH,[status=="1"])</p>
<p>},1000)</p>
<img src="img/eg26.png"></img>
</div>
</div>
<div id="text">
<h2>TEXT_SCREEN <i>extends</i> MixIOUnit</h2>
<p>文本显示屏类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.BULB)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为文本显示屏添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.TEXT_SCREEN_CHANGED - 文本显示屏收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序27</b></p>
<p>当名为“LED”的文本显示屏收到消息时向名为“文本长度”的滑杆发送消息长度</p>
<p>MixIO.getInstance("LED",MixIO.typeTags.TEXT_SCREEN).bind(MixIO.eventTags.TEXT_SCREEN_CHANGED,function(event,message){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("文本长度",MixIO.typeTags.SLIDER).trigger(MixIO.actionTags.SLIDER_SEND,message.length)</p>
<p>})</p>
<img src="img/eg27.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发文本显示屏的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.TEXT_SCREEN_CHANGE - 显示文本消息</p>
<p><i>actionParams</i>仅包含1个值表示期望显示的文本。</p>
<div>
<p><b>示例程序28</b></p>
<p>令文本显示屏“LED”循环显示三段不同的文字</p>
<p>var texts = ['空山新雨后,天气晚来秋','小舟从此逝,江海寄余生','夜来南风起,小麦覆垄黄']</p>
<p>var index = 0</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("LED",MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,[texts[index%3]])</p>
<p>&nbsp;&nbsp;index = index + 1</p>
<p>},1000)</p>
<img src="img/eg28.png"></img>
</div>
<p><i><b>getText()</b></i> - 获取文本显示屏的显示文字。</p>
<div>
<p><b>示例程序29</b></p>
<p>每隔10s将文本显示屏“LED”的显示更新同步到逻辑视图输出中</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.log(MixIO.getInstance("LED",MixIO.typeTags.TEXT_SCREEN).getText())</p>
<p>},10000)</p>
<img src="img/eg29.png"></img>
</div>
</div>
<div id="line">
<h2>LINE_CHART <i>extends</i> MixIOUnit</h2>
<p>折线图表类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.LINE_CHART)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为折线图表添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.LINE_CHART_CHANGED - 折线图表收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序30</b></p>
<p>当名为“温度监测”的折线图表收到大于80的消息令“警报”指示灯亮红灯</p>
<p>MixIO.getInstance("温度监测",MixIO.typeTags.LINE_CHART).bind(MixIO.eventTags.LINE_CHART_CHANGED,function(event,time,value){</p>
<p>&nbsp;&nbsp;if(parseInt(value)>80)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("警报",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[3])</p>
<p>&nbsp;&nbsp;else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("警报",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[0])</p>
<p>})</p>
<img src="img/eg30.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发折线图表的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.LINE_CHART_CHANGE - 向折线图表发送消息</p>
<p><i>actionParams</i>仅包含1个值表示期望发送的消息。</p>
<div>
<p><b>示例程序31</b></p>
<p>每隔2秒将在“签到”主题下收到消息的累计个数发送到“签到统计”折线图表中</p>
<p>var count = 0</p>
<p>MixIO.onMessage(function(topic,message){</p>
<p>&nbsp;&nbsp;if(topic=='签到')</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;count = count+1</p>
<p>})</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance("签到统计",MixIO.typeTags.LINE_CHART).trigger(MixIO.actionTags.LINE_CHART_CHANGE,[count])</p>
<p>},2000)</p>
<img src="img/eg31.png"></img>
</div>
<p>MixIO.actionTags.LINE_CHART_CLEAR - 令折线图表清空</p>
<p><i>actionParams</i>不包含任何值,可以被省略。</p>
<div>
<p><b>示例程序32</b></p>
<p>当“签到”主题收到消息“finish”时清空“签到统计”折线图表</p>
<p>MixIO.onMessage(function(topic,message){</p>
<p>&nbsp;&nbsp;if(topic=='签到'&&message=='finish')</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("签到统计",MixIO.typeTags.LINE_CHART).trigger(MixIO.actionTags.LINE_CHART_CLEAR)</p>
<p>})</p>
<img src="img/eg32.png"></img>
</div>
<p><i><b>getAllMessages()</b></i> - 获取折线图表的全部历史消息。</p>
<p><i><b>getLatestMessages(count)</b></i> - 获取折线图表的至多前<i>count</i>条消息。</p>
<p><i><b>getLatestMessage</b></i> - 获取折线图表的最新一条消息。</p>
<div>
<p><b>示例程序33</b></p>
<p>每隔5s输出“签到统计”的至多前3条消息</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.log(JSON.stringify(MixIO.getInstance("签到统计",MixIO.typeTags.LINE_CHART).getLatestMessages(3)))</p>
<p>},5000)</p>
<img src="img/eg33.png"></img>
</div>
</div>
<div id="bar">
<h2>BAR_CHART <i>extends</i> MixIOUnit</h2>
<p>柱状图表类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.BAR_CHART)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为柱状图表添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.BAR_CHART_CHANGED - 柱状图表收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序34</b></p>
<p>当名为“选择题”的柱状图表累计收到等同于班级同学数目的消息数时,令“完成”指示灯亮绿灯:</p>
<p>var STUDENT_NUM = 30</p>
<p>var count = 0</p>
<p>MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).bind(MixIO.eventTags.BAR_CHART_CHANGED,function(event,message){</p>
<p>&nbsp;&nbsp;count = count+1</p>
<p>&nbsp;&nbsp;if(count>=STUDENT_NUM)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("完成",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[1])</p>
<p>})</p>
<img src="img/eg34.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发柱状图表的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.BAR_CHART_CHANGE - 向柱状图表发送消息</p>
<p><i>actionParams</i>仅包含1个值表示期望发送的消息。</p>
<div>
<p><b>示例程序35</b></p>
<p>随机作答选择题30次在30秒内将这些消息发送给“选择题”柱状图表</p>
<p>var count = 0</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;if(count<30){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var seed = Math.random()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var option = seed<0.25?"A":(seed<0.5?"B":(seed<0.75?"C":"D"))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).trigger(MixIO.actionTags.BAR_CHART_CHANGE,[option])</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;count = count+1</p>
<p>&nbsp;&nbsp;}</p>
<p>},1000)</p>
<img src="img/eg35.png"></img>
</div>
<p>MixIO.actionTags.BAR_CHART_CLEAR - 令柱状图表清空</p>
<p><i>actionParams</i>不包含任何值,可以被省略。</p>
<div>
<p><b>示例程序36</b></p>
<p>当“切换题目”主题收到消息“next”时清空“选择题”柱状图表</p>
<p>MixIO.onMessage(function(topic,message){</p>
<p>&nbsp;&nbsp;if(topic=='切换题目'&&message=='next')</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).trigger(MixIO.actionTags.BAR_CHART_CLEAR)</p>
<p>})</p>
<img src="img/eg36.png"></img>
</div>
<p><i><b>getData()</b></i> - 获取柱状图表的当前数据。</p>
<div>
<p><b>示例程序37</b></p>
<p>每隔5s输出“选择题”柱状图表的当前数据</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.log(JSON.stringify(MixIO.getInstance("选择题",MixIO.typeTags.BAR_CHART).getData()))</p>
<p>},5000)</p>
<img src="img/eg37.png"></img>
</div>
</div>
<div id="table">
<h2>DATA_TABLE <i>extends</i> MixIOUnit</h2>
<p>数据表格类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.DATA_TABLE)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为数据表格添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.DATA_TABLE_CHANGED - 数据表格收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序38</b></p>
<p>当名为“签到表”的数据表格累计收到等同于班级同学数目的消息数时,令“完成”指示灯亮绿灯:</p>
<p>var STUDENT_NUM = 30</p>
<p>var count = 0</p>
<p>MixIO.getInstance("签到表",MixIO.typeTags.DATA_TABLE).bind(MixIO.eventTags.DATA_TABLE_CHANGED,function(event,message){</p>
<p>&nbsp;&nbsp;count = count+1</p>
<p>&nbsp;&nbsp;if(count>=STUDENT_NUM)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("完成",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[1])</p>
<p>})</p>
<img src="img/eg38.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发数据表格的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.DATA_TABLE_CHANGE - 向数据表格发送消息</p>
<p><i>actionParams</i>仅包含1个值表示期望发送的消息。</p>
<div>
<p><b>示例程序39</b></p>
<p>每隔1秒随机生成一个签到信息发送给“签到表”</p>
<p>function listsGetRandomItem(list, remove) {</p>
<p>&nbsp;&nbsp;var x = Math.floor(Math.random() * list.length)</p>
<p>&nbsp;&nbsp;if (remove)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;return list.splice(x, 1)[0]</p>
<p>&nbsp;&nbsp;else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;return list[x]</p>
<p>}</p>
<p>function getRandomName() {</p>
<p>&nbsp;&nbsp;lastNames = '赵,钱,孙,李,周,吴,郑,王'.split(',')</p>
<p>&nbsp;&nbsp;firstNames = '明,刚,强,美,丽,光,威,红'.split(',')</p>
<p>&nbsp;&nbsp;return String(listsGetRandomItem(lastNames, false)) + String(listsGetRandomItem(firstNames, false))</p>
<p>}</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance('签到表',MixIO.typeTags.DATA_TABLE).trigger(MixIO.actionTags.DATA_TABLE_CHANGE,[(getRandomName())])</p>
<p>},1000)</p>
<img src="img/eg39.png"></img>
</div>
<p>MixIO.actionTags.DATA_TABLE_CLEAR - 令数据表格清空</p>
<p><i>actionParams</i>不包含任何值,可以被省略。</p>
<div>
<p><b>示例程序40</b></p>
<p>当“上课”主题收到消息时,清空“签到表”数据表格:</p>
<p>MixIO.onMessage(function(topic,message){</p>
<p>&nbsp;&nbsp;if(topic=='上课')</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("签到表",MixIO.typeTags.DATA_TABLE).trigger(MixIO.actionTags.DATA_TABLE_CLEAR)</p>
<p>})</p>
<img src="img/eg40.png"></img>
</div>
<p><i><b>getData()</b></i> - 获取数据表格的全部数据。</p>
<div>
<p><b>示例程序41</b></p>
<p>每隔5s输出“签到表”数据表格的全部数据</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.log(JSON.stringify(MixIO.getInstance("签到表",MixIO.typeTags.DATA_TABLE).getData()))</p>
<p>},5000)</p>
<img src="img/eg41.png"></img>
</div>
</div>
<div id="dashboard">
<h2>DASHBOARD <i>extends</i> MixIOUnit</h2>
<p>仪表盘类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.DASHBOARD)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为仪表盘添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.DASHBOARD_CHANGED - 仪表盘收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序42</b></p>
<p>当名为“CPU温度”的仪表盘收到大于80的消息时令“警报”指示灯亮红灯</p>
<p>MixIO.getInstance("CPU温度",MixIO.typeTags.DASHBOARD).bind(MixIO.eventTags.DASHBOARD_CHANGED,function(event,message){</p>
<p>&nbsp;&nbsp;if(message>80)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("警报",MixIO.typeTags.BULB).trigger(MixIO.actionTags.BULB_CHANGE,[3])</p>
<p>})</p>
<img src="img/eg42.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发仪表盘的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.DASHBOARD_CHANGE - 向仪表盘发送消息</p>
<p><i>actionParams</i>仅包含1个值表示期望发送的消息。</p>
<div>
<p><b>示例程序43</b></p>
<p>令“CPU温度”仪表盘归零</p>
<p>MixIO.getInstance("CPU温度",MixIO.typeTags.DASHBOARD).trigger(MixIO.actionTags.DASHBOARD_CHANGE,[0])</p>
<img src="img/eg43.png"></img>
</div>
</div>
<div id="datamap">
<h2>DATA_MAP <i>extends</i> MixIOUnit</h2>
<p>数据地图类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.DATA_MAP)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为数据地图添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.DATA_MAP_CHANGED - 数据地图收到消息</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序44</b></p>
<p>当名为“公交车路线”的数据地图收到名为“306路-A”的公交车发来的位置信息时计算与当前位置的距离输出在“距离”文本显示器中</p>
<p>var currentPos = [116.397128,39.916527]</p>
<p>MixIO.getInstance("公交车路线",MixIO.typeTags.DATA_MAP).bind(MixIO.eventTags.DATA_MAP_CHANGED,function(event,clientid,long,lat,message){</p>
<p>&nbsp;&nbsp;if(message[0]['value']>="306路-A"){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var busPos = [parseFloat(long),parseFloat(lat)]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var x = (busPos[0]-currentPos[0])/0.00001141</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var y = (busPos[1]-currentPos[1])/0.00000899</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var distance = Math.sqrt(x*x+y*y)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("距离",MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,["当前306路-A公交车与您的距离是"+Math.round(distance)+"米。"])</p>
<p>&nbsp;&nbsp;}</p>
<p>})</p>
<img src="img/eg44.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发数据地图的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.DATA_MAP_CHANGE - 向数据地图发送消息</p>
<p><i>actionParams</i>仅包含1个值表示期望发送的消息。</p>
<div>
<p><b>示例程序45</b></p>
<p>向“定位”数据地图报告自己的当前位置:</p>
<p>var currentPos = ["116.397128","39.916527"]</p>
<p>var myName = "张三"</p>
<p>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}]})</p>
<img src="img/eg45.png"></img>
</div>
<p>MixIO.actionTags.DATA_TABLE_CLEAR - 令数据表格清空</p>
<p><i>actionParams</i>不包含任何值,可以被省略。</p>
<div>
<p><b>示例程序46</b></p>
<p>当“下线”主题收到消息时,清空“定位”数据地图:</p>
<p>MixIO.onMessage(function(topic,message){</p>
<p>&nbsp;&nbsp;if(topic=='下线')</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;MixIO.getInstance("定位",MixIO.typeTags.DATA_MAP).trigger(MixIO.actionTags.DATA_MAP_CLEAR)</p>
<p>})</p>
<img src="img/eg46.png"></img>
</div>
</div>
<div id="weather">
<h2>WEATHER <i>extends</i> MixIOUnit</h2>
<p>实时气象仪类(继承自组件类)。</p>
<p>仅可通过MixIO.getInstance(<i>name</i>,MixIO.typeTags.WEATHER)创建此类型的实例。此类型实例具有的方法:</p>
<p><i><b>bind(eventTag,triggerFunction)</b></i> - 为实时气象仪添加事件监听器。</p>
<p>其中,<i>eventTag</i>可以为:</p>
<p>MixIO.eventTags.WEATHER_SYNCED - 气象仪气象信息更新</p>
<p>MixIO.eventTags.WEATHER_SENT - 气象仪气象信息下发</p>
<p><i>triggerFunction</i>为期望触发的监听方法。</p>
<div>
<p><b>示例程序47</b></p>
<p>当名为“气象站”的气象仪更新气象数据时,向文本显示屏“更新记录”中追加更新时间;当名为“气象站”的气象仪下发气象数据时,向文本显示屏“下发记录”中追加下发时间:</p>
<p>var updates = []</p>
<p>var sends = []</p>
<p>MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).bind(MixIO.eventTags.WEATHER_SYNCED, function(event,district,weather_type,temperature,humidity,wind_dir,wind_class){</p>
<p>&nbsp;&nbsp;updates.push(new Date());</p>
<p>&nbsp;&nbsp;MixIO.getInstance('更新记录',MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,(updates.join(',')))</p>
<p>})</p>
<p>MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).bind(MixIO.eventTags.WEATHER_SENT, function(event,district,weather_type,temperature,humidity,wind_dir,wind_class){</p>
<p>&nbsp;&nbsp;sends.push(new Date())</p>
<p>&nbsp;&nbsp;MixIO.getInstance('下发记录',MixIO.typeTags.TEXT_SCREEN).trigger(MixIO.actionTags.TEXT_SCREEN_CHANGE,(sends.join(',')))</p>
<p>})</p>
<img src="img/eg47.png"></img>
</div>
<p><i><b>trigger(actionTag,[actionParams])</b></i> - 触发实时气象仪的指定事件。</p>
<p>其中,<i>actionTag</i>可以为:</p>
<p>MixIO.actionTags.WEATHER_SYNC - 更新气象仪信息</p>
<p>MixIO.actionTags.WEATHER_SEND - 下发气象仪信息</p>
<p><i>actionParams</i>仅包含1个值表示期望发送的消息。</p>
<div>
<p><b>示例程序48</b></p>
<p>每隔1小时更新并下发“气象站”的信息</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).trigger(MixIO.actionTags.WEATHER_SYNC)</p>
<p>&nbsp;&nbsp;MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).trigger(MixIO.actionTags.WEATHER_SEND)</p>
<p>},3600000)</p>
<img src="img/eg48.png"></img>
</div>
<p><i><b>getData(datatype)</b></i> - 获取实时气象仪的某一类别数据。</p>
<p><i>datatype</i> - 期望获取的数据类别,可以为:</p>
<p>weather_type - 天气类别</p>
<p>temperature - 温度</p>
<p>humidity - 相对湿度</p>
<p>wind_dir - 风向</p>
<p>wind_class - 风级</p>
<p>district - 数据来源区域</p>
<div>
<p><b>示例程序49</b></p>
<p>每隔1小时获取“气象仪”的“温度”数据并发送至“温度”折线图表</p>
<p>MixIO.setInterval(function(){</p>
<p>&nbsp;&nbsp;MixIO.getInstance('温度',MixIO.typeTags.LINE_CHART).trigger(MixIO.actionTags.LINE_CHART_CHANGE,MixIO.getInstance('气象站',MixIO.typeTags.WEATHER).getData("temperature"))</p>
<p>},3600000)</p>
<img src="img/eg49.png"></img>
</div>
</div>
<div id="var">
<h2>MixIO.typeTags</h2>
<p>全部组件类别标签的集合变量。</p>
<p>按键/开关 - MixIO.typeTags.BUTTON</p>
<p>滑杆 - MixIO.typeTags.SLIDER</p>
<p>文本输入 - MixIO.typeTags.KEYBOARD</p>
<p>摇杆手柄 - MixIO.typeTags.JOYSTICK</p>
<p>RGB色盘 - MixIO.typeTags.RGB_PICKER</p>
<p>指示灯 - MixIO.typeTags.BULB</p>
<p>文本显示屏 - MixIO.typeTags.TEXT_SCREEN</p>
<p>折线图表 - MixIO.typeTags.LINE_CHART</p>
<p>柱状图表 - MixIO.typeTags.BAR_CHART</p>
<p>数据表格 - MixIO.typeTags.DATA_TABLE</p>
<p>仪表盘 - MixIO.typeTags.DASHBOARD</p>
<p>数据地图 - MixIO.typeTags.DATA_MAP</p>
<p>实时气象仪 - MixIO.typeTags.WEATHER</p>
</div>
<div>
<h2>MixIO.eventTags</h2>
<p>全部组件监听事件标签的集合变量。</p>
<p><b>开关</b></p>
<p>开关被点按后松开 - MixIO.eventTags.BUTTON_LOOSED</p>
<p>开关收到消息 - MixIO.eventTags.BUTTON_CHANGED</p>
<p><b>按键</b></p>
<p>按键被点按后松开 - MixIO.eventTags.BUTTON_PRESSED</p>
<p>按键被点按后松开 - MixIO.eventTags.BUTTON_LOOSED</p>
<p>按键收到消息 - MixIO.eventTags.BUTTON_CHANGED</p>
<p><b>滑杆</b></p>
<p>滑杆被拖动 - MixIO.eventTags.SLIDER_SLIDED</p>
<p>滑杆收到消息 - MixIO.eventTags.SLIDER_CHANGED</p>
<p><b>文本输入</b></p>
<p>文本输入器点击发送消息 - MixIO.eventTags.KEYBOARD_SENT</p>
<p><b>摇杆手柄</b></p>
<p>摇杆被拖动 - MixIO.eventTags.JOYSTICK_CHANGED</p>
<p><b>RGB色盘</b></p>
<p>色盘被选色 - MixIO.eventTags.RGB_PICKER_PICKED</p>
<p>色盘收到消息 - MixIO.eventTags.RGB_PICKER_CHANGED</p>
<p><b>指示灯</b></p>
<p>指示灯收到消息 - MixIO.eventTags.BULB_CHANGED</p>
<p><b>文本显示屏</b></p>
<p>文本显示屏收到消息 - MixIO.eventTags.TEXT_SCREEN_CHANGED</p>
<p><b>折线图表</b></p>
<p>折线图表收到消息 - MixIO.eventTags.LINE_CHART_CHANGED</p>
<p><b>柱状图表</b></p>
<p>柱状图表收到消息 - MixIO.eventTags.BAR_CHART_CHANGED</p>
<p><b>数据表格</b></p>
<p>数据表格收到消息 - MixIO.eventTags.DATA_TABLE_CHANGED</p>
<p><b>仪表盘</b></p>
<p>仪表盘收到消息 - MixIO.eventTags.DASHBOARD_CHANGED</p>
<p><b>数据地图</b></p>
<p>数据地图收到消息 - MixIO.eventTags.DATA_MAP_CHANGED</p>
<p><b>实时气象仪</b></p>
<p>气象仪更新数据 - MixIO.eventTags.WEATHER_SYNCED</p>
<p>气象仪发送数据 - MixIO.eventTags.WEATHER_SENT</p>
</div>
<div>
<h2>MixIO.actionTags</h2>
<p>全部组件触发事件标签的集合变量。</p>
<p><b>开关</b></p>
<p>切换开关状态 - MixIO.actionTags.BUTTON_SWITCH</p>
<p><b>按键</b></p>
<p><i></i></p>
<p><b>滑杆</b></p>
<p>改变滑杆数值 - MixIO.actionTags.SLIDER_SEND</p>
<p><b>文本输入</b></p>
<p>发送文本消息 - MixIO.actionTags.KEYBOARD_SEND</p>
<p><b>摇杆手柄</b></p>
<p>发送位置消息 - MixIO.actionTags.JOYSTICK_SEND</p>
<p><b>RGB色盘</b></p>
<p>发送颜色消息 - MixIO.actionTags.RGB_PICKER_SEND</p>
<p><b>指示灯</b></p>
<p>切换指示灯状态 - MixIO.actionTags.BULB_CHANGE</p>
<p><b>文本显示屏</b></p>
<p>显示文本消息 - MixIO.actionTags.TEXT_SCREEN_CHANGE</p>
<p><b>折线图表</b></p>
<p>发送消息 - MixIO.actionTags.LINE_CHART_CHANGE</p>
<p>清空消息 - MixIO.actionTags.LINE_CHART_CLEAR</p>
<p><b>柱状图表</b></p>
<p>发送消息 - MixIO.actionTags.BAR_CHART_CHANGE</p>
<p>清空消息 - MixIO.actionTags.BAR_CHART_CLEAR</p>
<p><b>数据表格</b></p>
<p>发送消息 - MixIO.actionTags.DATA_TABLE_CHANGE</p>
<p>清空消息 - MixIO.actionTags.DATA_TABLE_CLEAR</p>
<p><b>仪表盘</b></p>
<p>发送数值消息 - MixIO.eventTags.DASHBOARD_CHANGE</p>
<p><b>数据地图</b></p>
<p>发送消息 - MixIO.actionTags.DATA_MAP_CHANGE</p>
<p>清空消息 - MixIO.actionTags.DATA_MAP_CLEAR</p>
<p><b>实时气象仪</b></p>
<p>更新数据 - MixIO.eventTags.WEATHER_SYNC</p>
<p>发送数据 - MixIO.eventTags.WEATHER_SEND</p>
</div>
</div>
</body>
</html>