rtkv - 远程KV数据库#

已适配 Air780E Air780EP

备注

本页文档由这个文件自动生成。如有错误,请提交issue或帮忙修改后pr,谢谢!

示例

-- 是否还在为上报几个数据值而烦恼?
-- 是否还在为数据存入数据库而头痛不已?
-- 没有外网服务器, 内网穿透又很麻烦?
-- 不懂mqtt, 也没有下发需求, 只是想上报一些值?

-- 那本API就很适合您
-- 它可以:
--   将数据存到服务器,例如温湿度,GPS坐标,GPIO状态
--   读取服务器的数据,例如OTA信息
--   服务器会保存历史记录,也支持绘制成图表
-- 它不可以:
--   实时下发数据给设备
--   上传巨量数据

-- 网站首页, 输入设备识别号就能看数据 https://rtkv.air32.cn
-- 示例设备 http://rtkv.air32.cn/d/6055F9779010

-- 场景举例1, 上报温湿度数据到服务器, 然后网站查看地址是 XXX
rtkv.setup()
sys.taskInit(function()
    sys.waitUntil("IP_READY")
    while 1 do
        local val,result = sensor.ds18b20(17, true) 
        if result then
            rtkv.set("ds18b20_temp", val)
        end
        sys.wait(60*1000) -- 一分钟上报一次
    end
end)

-- 场景举例2, 简易版OTA
rtkv.setup()
sys.taskInit(function()
    sys.waitUntil("IP_READY")
    sys.wait(1000)
    while 1 do
        local ota_version = rtkv.get("ota_version")
        if ota_version and ota_version ~= _G.VERSION then
            local ota_url = rtkv.get("ota_url")
            if ota_url then
                -- 执行OTA, 以esp32c3为例
                local code = http.request("GET", ota_url, nil, nil, {dst="/update.bin"}).wait()
                if code and code == 200 then
                    log.info("ota", "ota包下载完成, 5秒后重启")
                    sys.wait(5000)
                    rtos.reboot()
                end
            end
        end
        sys.wait(4*3600*1000) -- 4小时检查一次
    end
end)

-- 场景举例3, 非实时下发控制
rtkv.setup()
sys.taskInit(function()
    local LED = gpio.setup(27, 0, nil, gpio.PULLUP)
    local INPUT = gpio.setup(22, nil)
    sys.waitUntil("IP_READY")
    sys.wait(1000)
    while 1 do
        local gpio27 = rtkv.get("gpio27")
        if gpio27 then
            LED(gpio27 == "1" and 1 or 0)
        end
        rtkv.set("gpio22", INPUT()) -- 上报GPIO22的状态
        sys.wait(15*1000) -- 15秒查询一次
    end
end)

rtkv.setup(conf)#

rtkv初始化

参数

传入值类型

解释

table

配置信息,详细说明看下面的示例

返回值

返回值类型

解释

nil

没有返回值

例子

-- 本函数只需要调用一次, 通常在main.lua里

-- 默认初始化, 开启了调试日志
rtkv.setup()
-- 初始化,并关闭调试日志
rtkv.setup({nodebug=true})
-- 详细初始化, 可以只填需要配置的项
rtkv.setup({
    apiurl = "http://rtkv.air32.cn", -- 服务器地址,可以自行部署 https://gitee.com/openLuat/luatos-service-rtkv
    device = "abc", -- 设备识别号,只能是英文字符+数值,区别大小写
    token = "123456", -- 设备密钥, 默认是设备的唯一id, 即mcu.unique_id()
    nodebug = false,  -- 关闭调试日志,默认false
    timeout = 3000, -- 请求超时, 单位毫秒, 默认3000毫秒
})

-- 关于device值的默认值
-- 若支持4G, 会取IMEI
-- 若支持wifi, 会取MAC
-- 其余情况取 mcu.unique_id() 即设备的唯一id

rtkv.set(key, value)#

设置指定键对应的值

参数

传入值类型

解释

string

键, 不能为nil,建议只使用英文字母/数字

string

值, 不能为nil,一般建议不超过512字节

返回值

返回值类型

解释

bool

成功返回true, 否则返回nil

例子

-- 如果关心执行结果, 则需要在task里执行
-- 非task上下文, 会返回nil, 然后后台执行
rtkv.set("age", "18")
rtkv.set("version", _G.VERSION)
rtkv.set("project", _G.PROJECT)

-- 关于值的类型的说明
-- 支持传入字符串,布尔值,整数,浮点数, 最终还是会转为字符串上传
-- 通过 rtkv.get 获取值的时候, 返回的值的类型也会是字符串

rtkv.sets(datas)#

批量设置键值

参数

传入值类型

解释

table

需要设置的键值对

返回值

返回值类型

解释

bool

成功返回true, 否则返回nil

例子

-- 如果关心执行结果, 则需要在task里执行
-- 非task上下文, 会返回nil, 然后后台执行
rtkv.sets({
    age = "18",
    vbat = 4193,
    temp = 23423
})

rtkv.get(key)#

获取指定键对应的值

参数

传入值类型

解释

string

键, 不能为nil,长度需要2字节以上

返回值

返回值类型

解释

string

成功返回字符,其他情况返回nil

例子

-- 注意, 必须在task里执行,否则必返回nil
local age = rtkv.get("age")