feat(boards): 物联网 分类下添加 TinyWebDB 分类
This commit is contained in:
@@ -779,3 +779,122 @@ export const ollama_empty_history = {
|
|||||||
this.setNextStatement(true);
|
this.setNextStatement(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const TINY_WEB_DB = 0;
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_init = {
|
||||||
|
init: function () {
|
||||||
|
this.setColour(TINY_WEB_DB);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField(`${Blockly.Msg.MIXLY_SETUP} TinyWebDB`);
|
||||||
|
this.appendValueInput('ADDR')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.MIXLY_EMQX_SERVER);
|
||||||
|
this.appendValueInput('USERNAME')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.MIXLY_EMQX_USERNAME);
|
||||||
|
this.appendValueInput('PASSWORD')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.MIXLY_EMQX_PASSWORD);
|
||||||
|
this.setInputsInline(false);
|
||||||
|
this.setPreviousStatement(true);
|
||||||
|
this.setNextStatement(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_init_with_mqtt = {
|
||||||
|
init: function () {
|
||||||
|
this.setColour(TINY_WEB_DB);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField(`${Blockly.Msg.MIXLY_SETUP} TinyWebDB`);
|
||||||
|
this.appendValueInput('MQTT')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(`MixIO ${Blockly.Msg.MIXLY_Client}`);
|
||||||
|
this.setInputsInline(true);
|
||||||
|
this.setPreviousStatement(true);
|
||||||
|
this.setNextStatement(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_update = {
|
||||||
|
init: function () {
|
||||||
|
this.setColour(TINY_WEB_DB);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField('TinyWebDB');
|
||||||
|
this.appendValueInput('TAG')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_UPDATE_VARIABLE);
|
||||||
|
this.appendValueInput('VALUE')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.DICTS_ADD_VALUE);
|
||||||
|
this.setInputsInline(true);
|
||||||
|
this.setPreviousStatement(true);
|
||||||
|
this.setNextStatement(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_get = {
|
||||||
|
init: function () {
|
||||||
|
this.setColour(TINY_WEB_DB);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField('TinyWebDB');
|
||||||
|
this.appendValueInput('TAG')
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_GET_VARIABLE);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField(Blockly.Msg.DICTS_ADD_VALUE);
|
||||||
|
this.setInputsInline(true);
|
||||||
|
this.setOutput(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_count = {
|
||||||
|
init: function () {
|
||||||
|
this.setColour(TINY_WEB_DB);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField('TinyWebDB');
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_GET_VARIABLES_NUM);
|
||||||
|
this.setInputsInline(true);
|
||||||
|
this.setOutput(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_search = {
|
||||||
|
init: function () {
|
||||||
|
this.setColour(TINY_WEB_DB);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField('TinyWebDB')
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_SEARCH_VARIABLES);
|
||||||
|
this.appendValueInput('NO')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_START_NUMBER);
|
||||||
|
this.appendValueInput('COUNT')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_VARIABLE_NUMBER);
|
||||||
|
this.appendValueInput('TAG')
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_SEARCH_VARS);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||||
|
.appendField(new Blockly.FieldDropdown([
|
||||||
|
[Blockly.Msg.MIXLY_TINY_WEB_DB_GET_VARIABLES_ALL, 'both'],
|
||||||
|
[Blockly.Msg.MIXLY_TINY_WEB_DB_GET_VARIABLES_TAG, 'tag'],
|
||||||
|
[Blockly.Msg.MIXLY_TINY_WEB_DB_GET_VARIABLES_VALUE, 'value']
|
||||||
|
]), 'DTYPE');
|
||||||
|
this.setInputsInline(false);
|
||||||
|
this.setOutput(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_delete = {
|
||||||
|
init: function () {
|
||||||
|
this.setColour(TINY_WEB_DB);
|
||||||
|
this.appendDummyInput()
|
||||||
|
.appendField('TinyWebDB');
|
||||||
|
this.appendValueInput('TAG')
|
||||||
|
.appendField(Blockly.Msg.MIXLY_TINY_WEB_DB_DELETE_VARIABLE);
|
||||||
|
this.setInputsInline(true);
|
||||||
|
this.setPreviousStatement(true);
|
||||||
|
this.setNextStatement(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -311,3 +311,51 @@ export const ollama_empty_history = function () {
|
|||||||
var code = 'llm.empty_history()\n';
|
var code = 'llm.empty_history()\n';
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_init = function (_,generator) {
|
||||||
|
generator.definitions_['import_tiny_webdb'] = "import tiny_webdb";
|
||||||
|
const addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
|
||||||
|
const username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
|
||||||
|
const password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
|
||||||
|
const code = `webdb = tiny_webdb.TinyWebDB(${addr}, ${username}, ${password})\n`;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_init_with_mqtt = function (_,generator) {
|
||||||
|
const mqtt = generator.valueToCode(this, 'MQTT', generator.ORDER_ATOMIC);
|
||||||
|
const code = `webdb = tiny_webdb.TinyWebDB(${mqtt})\n`;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_update = function (_,generator) {
|
||||||
|
const tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC);
|
||||||
|
const value = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);
|
||||||
|
const code = `webdb.update(${tag}, ${value})\n`;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_get = function (_,generator) {
|
||||||
|
const tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC);
|
||||||
|
const code = `webdb.get(${tag})`;
|
||||||
|
return [code, generator.ORDER_ATOMIC];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_count = function (_,generator) {
|
||||||
|
const code = 'webdb.count()';
|
||||||
|
return [code, generator.ORDER_ATOMIC];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_search = function (_,generator) {
|
||||||
|
const no = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC);
|
||||||
|
const count = generator.valueToCode(this, 'COUNT', generator.ORDER_ATOMIC);
|
||||||
|
const tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC);
|
||||||
|
const dtype = this.getFieldValue('DTYPE');
|
||||||
|
const code = `webdb.search(${no}, ${count}, ${tag}, '${dtype}')`;
|
||||||
|
return [code, generator.ORDER_ATOMIC];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const iot_tiny_web_db_delete = function (_,generator) {
|
||||||
|
const tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC);
|
||||||
|
const code = `webdb.delete(${tag})\n`;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import time
|
import time
|
||||||
import usocket as socket
|
import usocket as socket
|
||||||
import urequests as requests
|
|
||||||
import ustruct as struct
|
import ustruct as struct
|
||||||
from machine import unique_id
|
from machine import unique_id
|
||||||
from ubinascii import hexlify
|
from ubinascii import hexlify
|
||||||
@@ -41,8 +40,9 @@ def image_base64(path="mixly.jpg"):
|
|||||||
return b'data:image/jpg;base64,' + b64encode(path)
|
return b'data:image/jpg;base64,' + b64encode(path)
|
||||||
|
|
||||||
def ntp(url='mixio.mixly.cn'):
|
def ntp(url='mixio.mixly.cn'):
|
||||||
|
import urequests
|
||||||
try:
|
try:
|
||||||
results=eval(requests.get('http://{}/time.php'.format(url)).text)
|
results=eval(urequests.get('http://{}/time.php'.format(url)).text)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise RuntimeError("API request failed or WiFi is not connected",e)
|
raise RuntimeError("API request failed or WiFi is not connected",e)
|
||||||
return results
|
return results
|
||||||
@@ -72,6 +72,7 @@ class MQTTClient:
|
|||||||
port = 8883 if ssl else 1883
|
port = 8883 if ssl else 1883
|
||||||
self.client_id = client_id
|
self.client_id = client_id
|
||||||
self.sock = None
|
self.sock = None
|
||||||
|
self.server = server
|
||||||
self.addr = socket.getaddrinfo(server, port)[0][-1]
|
self.addr = socket.getaddrinfo(server, port)[0][-1]
|
||||||
self.ssl = ssl
|
self.ssl = ssl
|
||||||
self.ssl_params = ssl_params
|
self.ssl_params = ssl_params
|
||||||
@@ -86,7 +87,6 @@ class MQTTClient:
|
|||||||
self.lw_retain = False
|
self.lw_retain = False
|
||||||
self._on_message_filtered = MQTTMatcher()
|
self._on_message_filtered = MQTTMatcher()
|
||||||
self._star_time = time.ticks_ms()
|
self._star_time = time.ticks_ms()
|
||||||
self._tiny_web_db = TinyWebDB("", username, password)
|
|
||||||
|
|
||||||
def _send_str(self, s):
|
def _send_str(self, s):
|
||||||
self.sock.write(struct.pack("!H", str_len(s)))
|
self.sock.write(struct.pack("!H", str_len(s)))
|
||||||
@@ -343,85 +343,5 @@ class MQTTClient:
|
|||||||
self.ping()
|
self.ping()
|
||||||
return self.wait_msg()
|
return self.wait_msg()
|
||||||
|
|
||||||
def tiny_web_db_update(self, url, key, value):
|
def get_server_info(self):
|
||||||
self._tiny_web_db.set_url(url)
|
return (self.server, self.username, self.password)
|
||||||
return self._tiny_web_db.update(key, value)
|
|
||||||
|
|
||||||
def tiny_web_db_get(self, url, key):
|
|
||||||
self._tiny_web_db.set_url(url)
|
|
||||||
return self._tiny_web_db.get(key)
|
|
||||||
|
|
||||||
def tiny_web_db_count(self, url):
|
|
||||||
self._tiny_web_db.set_url(url)
|
|
||||||
return self._tiny_web_db.count()
|
|
||||||
|
|
||||||
def tiny_web_db_search(self, url, no=1, count=1, tag='', dtype='both'):
|
|
||||||
self._tiny_web_db.set_url(url)
|
|
||||||
return self._tiny_web_db.search(no, count, tag, dtype)
|
|
||||||
|
|
||||||
def tiny_web_db_delete(self, url, key):
|
|
||||||
self._tiny_web_db.set_url(url)
|
|
||||||
return self._tiny_web_db.delete(key)
|
|
||||||
|
|
||||||
class TinyWebDB:
|
|
||||||
def __init__(self, url, username, password):
|
|
||||||
self._api_url = ""
|
|
||||||
self._username = username
|
|
||||||
self._password = password
|
|
||||||
self.set_url(url)
|
|
||||||
|
|
||||||
def update(self, key, value):
|
|
||||||
key = str(key)
|
|
||||||
value = str(value)
|
|
||||||
result = self._request("update", "tag={}&value={}".format(key, value))
|
|
||||||
if result["status"] == "error":
|
|
||||||
raise RuntimeError(result["message"])
|
|
||||||
|
|
||||||
def get(self, key):
|
|
||||||
key = str(key)
|
|
||||||
result = self._request("get", "tag={}".format(key))
|
|
||||||
if result["status"] == "error":
|
|
||||||
raise RuntimeError(result["message"])
|
|
||||||
return result["value"]
|
|
||||||
|
|
||||||
def count(self):
|
|
||||||
result = self._request("count")
|
|
||||||
if result["status"] == "error":
|
|
||||||
raise RuntimeError(result["message"])
|
|
||||||
return int(result["count"])
|
|
||||||
|
|
||||||
def search(self, no=1, count=1, tag='', dtype='both'):
|
|
||||||
no = str(no)
|
|
||||||
count = str(count)
|
|
||||||
result = self._request("search", "no={}&count={}&tag={}&type={}".format(no, count, tag, dtype))
|
|
||||||
if result["status"] == "error":
|
|
||||||
raise RuntimeError(result["message"])
|
|
||||||
return result["data"]
|
|
||||||
|
|
||||||
def delete(self, key):
|
|
||||||
key = str(key)
|
|
||||||
result = self._request("delete", "tag={}".format(key))
|
|
||||||
if result["status"] == "error":
|
|
||||||
raise RuntimeError(result["message"])
|
|
||||||
|
|
||||||
def set_url(self, url):
|
|
||||||
if url[-1] != '/':
|
|
||||||
url += '/'
|
|
||||||
self._api_url = url
|
|
||||||
|
|
||||||
def _request(self, op, param=""):
|
|
||||||
data = "user={}&secret={}&action={}".format(self._username, self._password, op)
|
|
||||||
if param:
|
|
||||||
data += '&' + param
|
|
||||||
try:
|
|
||||||
headers = {
|
|
||||||
"Content-Type": "application/x-www-form-urlencoded"
|
|
||||||
}
|
|
||||||
response = requests.post(self._api_url, data=data, headers=headers)
|
|
||||||
result = {}
|
|
||||||
if response.status_code == 200:
|
|
||||||
result = response.json()
|
|
||||||
response.close()
|
|
||||||
return result
|
|
||||||
except Exception as e:
|
|
||||||
raise RuntimeError("API request failed or WiFi is not connected", e)
|
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
import urequests as requests
|
||||||
|
|
||||||
|
|
||||||
|
class TinyWebDB:
|
||||||
|
def __init__(self, url, username, password):
|
||||||
|
self._api_url = ""
|
||||||
|
self._username = username
|
||||||
|
self._password = password
|
||||||
|
self.set_url(url)
|
||||||
|
|
||||||
|
def __init__(self, mqtt_client):
|
||||||
|
self._api_url = ""
|
||||||
|
url, username, password = mqtt_client.get_server_info()
|
||||||
|
self.set_url('https://{}:443'.format(url))
|
||||||
|
self._username = username
|
||||||
|
self._password = password
|
||||||
|
|
||||||
|
def update(self, key, value):
|
||||||
|
key = str(key)
|
||||||
|
value = str(value)
|
||||||
|
result = self._request("update", "tag={}&value={}".format(key, value))
|
||||||
|
if result["status"] == "error":
|
||||||
|
raise RuntimeError(result["message"])
|
||||||
|
|
||||||
|
def get(self, key):
|
||||||
|
key = str(key)
|
||||||
|
result = self._request("get", "tag={}".format(key))
|
||||||
|
if result["status"] == "error":
|
||||||
|
raise RuntimeError(result["message"])
|
||||||
|
return result["value"]
|
||||||
|
|
||||||
|
def count(self):
|
||||||
|
result = self._request("count")
|
||||||
|
if result["status"] == "error":
|
||||||
|
raise RuntimeError(result["message"])
|
||||||
|
return int(result["count"])
|
||||||
|
|
||||||
|
def search(self, no=1, count=1, tag='', dtype='both'):
|
||||||
|
no = str(no)
|
||||||
|
count = str(count)
|
||||||
|
result = self._request("search", "no={}&count={}&tag={}&type={}".format(no, count, tag, dtype))
|
||||||
|
if result["status"] == "error":
|
||||||
|
raise RuntimeError(result["message"])
|
||||||
|
return result["data"]
|
||||||
|
|
||||||
|
def delete(self, key):
|
||||||
|
key = str(key)
|
||||||
|
result = self._request("delete", "tag={}".format(key))
|
||||||
|
if result["status"] == "error":
|
||||||
|
raise RuntimeError(result["message"])
|
||||||
|
|
||||||
|
def set_url(self, url):
|
||||||
|
if url[-1] != '/':
|
||||||
|
url += '/'
|
||||||
|
self._api_url = url
|
||||||
|
|
||||||
|
def _request(self, op, param=""):
|
||||||
|
data = "user={}&secret={}&action={}".format(self._username, self._password, op)
|
||||||
|
if param:
|
||||||
|
data += '&' + param
|
||||||
|
try:
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded"
|
||||||
|
}
|
||||||
|
response = requests.post(self._api_url, data=data, headers=headers)
|
||||||
|
result = {}
|
||||||
|
if response.status_code == 200:
|
||||||
|
result = response.json()
|
||||||
|
response.close()
|
||||||
|
return result
|
||||||
|
except Exception as e:
|
||||||
|
raise RuntimeError("API request failed or WiFi is not connected", e)
|
||||||
@@ -409,6 +409,16 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
|
|||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database2.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
#catFactory.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
#catFactory.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
background: url('../../../../common/media/mark/factory3.png') no-repeat;
|
background: url('../../../../common/media/mark/factory3.png') no-repeat;
|
||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
|
|||||||
@@ -2841,6 +2841,77 @@
|
|||||||
</value>
|
</value>
|
||||||
</block>
|
</block>
|
||||||
</category>
|
</category>
|
||||||
|
<category id="catTinyWebDB" colour="0">
|
||||||
|
<block type="iot_tiny_web_db_init">
|
||||||
|
<value name="ADDR">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">https://mixio.mixly.cn</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="USERNAME">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">username</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="PASSWORD">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">password</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_init_with_mqtt">
|
||||||
|
<value name="MQTT">
|
||||||
|
<shadow type="variables_get">
|
||||||
|
<field name="VAR">mqtt_client</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_update">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="VALUE">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">hello</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_get">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_count">
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_search">
|
||||||
|
<value name="NO">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="COUNT">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_delete">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
</category>
|
||||||
</category>
|
</category>
|
||||||
<category id="catGroup" colour="140">
|
<category id="catGroup" colour="140">
|
||||||
<category id="catBLE" colour="140">
|
<category id="catBLE" colour="140">
|
||||||
|
|||||||
@@ -427,6 +427,16 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
|
|||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database2.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
|
|||||||
@@ -2739,6 +2739,77 @@
|
|||||||
</value>
|
</value>
|
||||||
</block>
|
</block>
|
||||||
</category>
|
</category>
|
||||||
|
<category id="catTinyWebDB" colour="0">
|
||||||
|
<block type="iot_tiny_web_db_init">
|
||||||
|
<value name="ADDR">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">https://mixio.mixly.cn</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="USERNAME">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">username</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="PASSWORD">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">password</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_init_with_mqtt">
|
||||||
|
<value name="MQTT">
|
||||||
|
<shadow type="variables_get">
|
||||||
|
<field name="VAR">mqtt_client</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_update">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="VALUE">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">hello</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_get">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_count">
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_search">
|
||||||
|
<value name="NO">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="COUNT">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_delete">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
</category>
|
||||||
</category>
|
</category>
|
||||||
<category id="catGroup" colour="140">
|
<category id="catGroup" colour="140">
|
||||||
<category id="catBLE" colour="140">
|
<category id="catBLE" colour="140">
|
||||||
|
|||||||
@@ -408,6 +408,16 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
|
|||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database2.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
|
|||||||
@@ -2623,6 +2623,77 @@
|
|||||||
</value>
|
</value>
|
||||||
</block>
|
</block>
|
||||||
</category>
|
</category>
|
||||||
|
<category id="catTinyWebDB" colour="0">
|
||||||
|
<block type="iot_tiny_web_db_init">
|
||||||
|
<value name="ADDR">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">https://mixio.mixly.cn</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="USERNAME">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">username</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="PASSWORD">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">password</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_init_with_mqtt">
|
||||||
|
<value name="MQTT">
|
||||||
|
<shadow type="variables_get">
|
||||||
|
<field name="VAR">mqtt_client</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_update">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="VALUE">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">hello</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_get">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_count">
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_search">
|
||||||
|
<value name="NO">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="COUNT">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_delete">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
</category>
|
||||||
</category>
|
</category>
|
||||||
<category id="catGroup" colour="140">
|
<category id="catGroup" colour="140">
|
||||||
<category id="catBLE" colour="140">
|
<category id="catBLE" colour="140">
|
||||||
|
|||||||
@@ -408,6 +408,16 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
|
|||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database2.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
|
|||||||
@@ -2661,6 +2661,77 @@
|
|||||||
</value>
|
</value>
|
||||||
</block>
|
</block>
|
||||||
</category>
|
</category>
|
||||||
|
<category id="catTinyWebDB" colour="0">
|
||||||
|
<block type="iot_tiny_web_db_init">
|
||||||
|
<value name="ADDR">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">https://mixio.mixly.cn</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="USERNAME">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">username</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="PASSWORD">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">password</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_init_with_mqtt">
|
||||||
|
<value name="MQTT">
|
||||||
|
<shadow type="variables_get">
|
||||||
|
<field name="VAR">mqtt_client</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_update">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="VALUE">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">hello</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_get">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_count">
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_search">
|
||||||
|
<value name="NO">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="COUNT">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_delete">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
</category>
|
||||||
</category>
|
</category>
|
||||||
<category id="catGroup" colour="140">
|
<category id="catGroup" colour="140">
|
||||||
|
|
||||||
|
|||||||
@@ -388,6 +388,16 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
|
|||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database2.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
|
|||||||
@@ -3153,6 +3153,77 @@
|
|||||||
</value>
|
</value>
|
||||||
</block>
|
</block>
|
||||||
</category>
|
</category>
|
||||||
|
<category id="catTinyWebDB" colour="0">
|
||||||
|
<block type="iot_tiny_web_db_init">
|
||||||
|
<value name="ADDR">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">https://mixio.mixly.cn</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="USERNAME">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">username</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="PASSWORD">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">password</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_init_with_mqtt">
|
||||||
|
<value name="MQTT">
|
||||||
|
<shadow type="variables_get">
|
||||||
|
<field name="VAR">mqtt_client</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_update">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="VALUE">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">hello</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_get">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_count">
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_search">
|
||||||
|
<value name="NO">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="COUNT">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_delete">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
</category>
|
||||||
</category>
|
</category>
|
||||||
<category id="catGroup" colour="140">
|
<category id="catGroup" colour="140">
|
||||||
<category id="catBLE" colour="140">
|
<category id="catBLE" colour="140">
|
||||||
|
|||||||
@@ -409,6 +409,16 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
|
|||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#catTinyWebDB.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
|
background: url('../../../../common/media/mark/database2.png') no-repeat;
|
||||||
|
background-size: 100% auto;
|
||||||
|
}
|
||||||
|
|
||||||
#catFactory.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
#catFactory.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||||
background: url('../../../../common/media/mark/factory3.png') no-repeat;
|
background: url('../../../../common/media/mark/factory3.png') no-repeat;
|
||||||
background-size: 100% auto;
|
background-size: 100% auto;
|
||||||
|
|||||||
@@ -2423,6 +2423,77 @@
|
|||||||
</value>
|
</value>
|
||||||
</block>
|
</block>
|
||||||
</category>
|
</category>
|
||||||
|
<category id="catTinyWebDB" colour="0">
|
||||||
|
<block type="iot_tiny_web_db_init">
|
||||||
|
<value name="ADDR">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">https://mixio.mixly.cn</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="USERNAME">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">username</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="PASSWORD">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">password</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_init_with_mqtt">
|
||||||
|
<value name="MQTT">
|
||||||
|
<shadow type="variables_get">
|
||||||
|
<field name="VAR">mqtt_client</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_update">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="VALUE">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">hello</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_get">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_count">
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_search">
|
||||||
|
<value name="NO">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="COUNT">
|
||||||
|
<shadow type="math_number">
|
||||||
|
<field name="NUM">1</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
<block type="iot_tiny_web_db_delete">
|
||||||
|
<value name="TAG">
|
||||||
|
<shadow type="text">
|
||||||
|
<field name="TEXT">mixly</field>
|
||||||
|
</shadow>
|
||||||
|
</value>
|
||||||
|
</block>
|
||||||
|
</category>
|
||||||
</category>
|
</category>
|
||||||
<category id="catGroup" colour="140">
|
<category id="catGroup" colour="140">
|
||||||
<category id="catBLE" colour="140">
|
<category id="catBLE" colour="140">
|
||||||
|
|||||||
BIN
common/media/mark/database.png
Normal file
BIN
common/media/mark/database.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 868 B |
BIN
common/media/mark/database2.png
Normal file
BIN
common/media/mark/database2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 902 B |
@@ -175,7 +175,8 @@ En.MSG = {
|
|||||||
disablePythonToBlockly: "Blocks↔Code",
|
disablePythonToBlockly: "Blocks↔Code",
|
||||||
enablePythonToBlockly: "Blocks↔Code",
|
enablePythonToBlockly: "Blocks↔Code",
|
||||||
catSearch: "Search",
|
catSearch: "Search",
|
||||||
wiki: "Wiki"
|
wiki: "Wiki",
|
||||||
|
catTinyWebDB: "TinyWebDB"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 多重选择 */
|
/* 多重选择 */
|
||||||
@@ -3995,4 +3996,16 @@ En.MIXLY_DISPLAY_SCROLL_WAY = 'direction of scrolling';
|
|||||||
En.MIXLY_LIGHT_SENSOR2 = 'light sensor';
|
En.MIXLY_LIGHT_SENSOR2 = 'light sensor';
|
||||||
En.MIXLY_ROTARY_ENCODER = 'rotary encoder';
|
En.MIXLY_ROTARY_ENCODER = 'rotary encoder';
|
||||||
En.MIXLY_REVOLVE = 'revolue';
|
En.MIXLY_REVOLVE = 'revolue';
|
||||||
|
En.MIXLY_TINY_WEB_DB_UPDATE_VARIABLE = 'Set variable';
|
||||||
|
En.MIXLY_TINY_WEB_DB_GET_VARIABLE = 'Get variable';
|
||||||
|
En.MIXLY_TINY_WEB_DB_SEARCH_VARIABLES = 'Search variables';
|
||||||
|
En.MIXLY_TINY_WEB_DB_DELETE_VARIABLE = 'Delete variable';
|
||||||
|
En.MIXLY_TINY_WEB_DB_GET_VARIABLES_NUM = 'Get the number of variables';
|
||||||
|
En.MIXLY_TINY_WEB_DB_GET_VARIABLES_ALL = 'Return all data';
|
||||||
|
En.MIXLY_TINY_WEB_DB_GET_VARIABLES_TAG = 'Return variable name';
|
||||||
|
En.MIXLY_TINY_WEB_DB_GET_VARIABLES_VALUE = 'Return variable value';
|
||||||
|
En.MIXLY_TINY_WEB_DB_START_NUMBER = 'Start number';
|
||||||
|
En.MIXLY_TINY_WEB_DB_VARIABLE_NUMBER = 'Number of variables';
|
||||||
|
En.MIXLY_TINY_WEB_DB_SEARCH_VARS = 'Characters in variable names';
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -186,7 +186,8 @@ ZhHans.MSG = {
|
|||||||
disablePythonToBlockly: "图文互换",
|
disablePythonToBlockly: "图文互换",
|
||||||
enablePythonToBlockly: "图文互换",
|
enablePythonToBlockly: "图文互换",
|
||||||
catSearch: "查找",
|
catSearch: "查找",
|
||||||
wiki: "Wiki"
|
wiki: "Wiki",
|
||||||
|
catTinyWebDB: "TinyWebDB"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 多重选择 */
|
/* 多重选择 */
|
||||||
@@ -4154,4 +4155,16 @@ ZhHans.MIXLY_DISPLAY_SCROLL_WAY = '滚动显示方向';
|
|||||||
ZhHans.MIXLY_LIGHT_SENSOR2 = '光照传感器';
|
ZhHans.MIXLY_LIGHT_SENSOR2 = '光照传感器';
|
||||||
ZhHans.MIXLY_ROTARY_ENCODER = '旋转解码器';
|
ZhHans.MIXLY_ROTARY_ENCODER = '旋转解码器';
|
||||||
ZhHans.MIXLY_REVOLVE = '旋';
|
ZhHans.MIXLY_REVOLVE = '旋';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_UPDATE_VARIABLE = '设置变量';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_GET_VARIABLE = '获取变量';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_SEARCH_VARIABLES = '查询变量';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_DELETE_VARIABLE = '删除变量';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_GET_VARIABLES_NUM = '获取变量个数';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_GET_VARIABLES_ALL = '返回全部数据';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_GET_VARIABLES_TAG = '返回变量名';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_GET_VARIABLES_VALUE = '返回变量值';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_START_NUMBER = '起始编号';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_VARIABLE_NUMBER = '变量个数';
|
||||||
|
ZhHans.MIXLY_TINY_WEB_DB_SEARCH_VARS = '变量名包含的字符';
|
||||||
|
|
||||||
})();
|
})();
|
||||||
@@ -186,7 +186,8 @@ ZhHant.MSG = {
|
|||||||
disablePythonToBlockly: "圖文互換",
|
disablePythonToBlockly: "圖文互換",
|
||||||
enablePythonToBlockly: "圖文互換",
|
enablePythonToBlockly: "圖文互換",
|
||||||
catSearch: "查找",
|
catSearch: "查找",
|
||||||
wiki: "Wiki"
|
wiki: "Wiki",
|
||||||
|
catTinyWebDB: "TinyWebDB"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 多重選擇 */
|
/* 多重選擇 */
|
||||||
@@ -4149,4 +4150,16 @@ ZhHant.MIXLY_DISPLAY_SCROLL_WAY = '滾動顯示方向';
|
|||||||
ZhHant.MIXLY_LIGHT_SENSOR2 = '光照傳感器';
|
ZhHant.MIXLY_LIGHT_SENSOR2 = '光照傳感器';
|
||||||
ZhHant.MIXLY_ROTARY_ENCODER = '旋轉解碼器';
|
ZhHant.MIXLY_ROTARY_ENCODER = '旋轉解碼器';
|
||||||
ZhHant.MIXLY_REVOLVE = '旋';
|
ZhHant.MIXLY_REVOLVE = '旋';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_UPDATE_VARIABLE = '設定變數';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_GET_VARIABLE = '取得變數';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_SEARCH_VARIABLES = '查詢變數';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_DELETE_VARIABLE = '刪除變數';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_GET_VARIABLES_NUM = '取得變數個數';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_GET_VARIABLES_ALL = '傳回全部資料';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_GET_VARIABLES_TAG = '傳回變數名稱';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_GET_VARIABLES_VALUE = '傳回變數值';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_START_NUMBER = '起始編號';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_VARIABLE_NUMBER = '變數個數';
|
||||||
|
ZhHant.MIXLY_TINY_WEB_DB_SEARCH_VARS = '變數名稱包含的字元';
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user