直接上源码
直接上源码
你也可以使用我的服务器,连接上传数据,然后通过http浏览历史数据,我目前免费提供数据库服务器。亲们不要做坏事就行了。
源码中有我的服务器直接使用就可以了。
上我的网页可以查看历史数据,历史数据用开源的echarts绘图。
init.lua文件

wifi.setmode(wifi.STATIONAP)

 station_cfg={}
station_cfg.ssid="自己的ap"
station_cfg.pwd="自己的密码"
wifi.sta.config(station_cfg)
tmr.alarm(1, 2000, tmr.ALARM_AUTO, function()
    if wifi.sta.getip() == nil then
        print('Waiting for IP ...')

    else
        print('IP is ' .. wifi.sta.getip())
        espmac=wifi.sta.getmac()
        espchipid=node.chipid()
        net.dns.resolve("www.5iot.top", function(sk, ip)
         if (ip == nil) then print("DNS fail!") else 
            serverip=ip
             print(ip) end
         end)
        print(espmac)
        print(espchipid)
        tmr.stop(1)
        dofile("senddata.lua")
    end
end)

senddata.lua文件源码
其实这最基础的,但是路已经通了,各位可以实现其他的数据上传,比如:PM2.5的数据上传,甲醛数据的上传,家里电压的数据,家里用电功率的数据,只需要稍加修改即可。


local ow_pin = 3  --ds18接到D3
ds18b20.setup(ow_pin) --设置DS18
local testjson={}

udpSocket = net.createUDPSocket()
tmr.alarm(0, 5000, tmr.ALARM_AUTO, function() --每5秒发送一次数据
    ds18b20.read(
    function(ind,rom,res,temp,tdec,par)
       tempre=string.format("%0.2f",temp)--获取浮点两位温度
--print(tempre)
    end,{});
    if tempre~=nil then
    testjson={name="wendu",value=tempre,mac=espmac,chipid=espchipid} --数组定义:温度,value,本机mac,chipid

local ok, json = pcall(sjson.encode,testjson) --json编码
if ok then
print(json)
else
  print("failed to encode!")
end
udpSocket:send(10000,serverip,json) --发送到服务器
print("The data already send to: "..serverip)
--print(json)
end
end
)
udpSocket:listen(10000)
udpSocket:on("receive", function(s, data, serverport, serverip)
print(data)
print(string.format("The server is: %s:%d",serverip, serverport)) --接收到服务器返回数据并打印
end)

使用typecho上传附件时,插入远程图片是没问题的,但本地图片会报上传失败。

网上找了许多方法,最后得到了解决。

解决办法
我的博客是搭建在腾讯服务器上的,Typecho会对服务器进行监测,如果不在BAE、SAE、ACE下,则不允许文件上传。事实上,可以去掉这一段监测代码。

打开/var/Typecho/Common.php q

把这一段代码


- 阅读剩余部分 -

几年前买的欧瑞博S20插座,拿出来折腾一天,终于出成果了。在本地利用抓包wireshark和packet sender发包程序。借鉴了国外大神的思路和资料外国大神的软件控制S20

还有一个分析协议的网站好像是被屏蔽了。但可以在百度搜索http://pastebin.com/LfUhsbcS 然后点击百度快照查看内容。这里面把协议分析很仔细。我自己英文不太好。简单读懂一些意思。

想要通过UDP协议控制S20,首先自己通过wiwo客户端配置好S20,且在同一个局域网内。

通过电脑用UDP协议控制S20,目前只需要两个命令

第一步、握手命令。下面是大神的分析我翻译下

- 阅读剩余部分 -

截获了16进制的数据包,如何通过UDP协议发给制定设备呢,LUA中对16进制支持还是不太友好。试过几个函数不理想。没有准确的将数据发送出去。下面写了一段测试代码

str="1"
str1="\x01\x00\x43\xac"   
--lua 16进制可以用这样的方法表示
a=string.char("0x01")..string.char("0x00")..string.char("0x43")..string.char("0xac") 
 --这里用string.char这个函数获得16进制整数对应的数据。不是ascii吗。 要获得ascii要用到 string.byte这个函数。
if str1==a then ---比较两个赋值语句的结果
    print("same")
    else print("no same")
    end
    print("str1 is:"..str1) --这里print函数无法打印出来特殊的16进制数据,除非是16进制数据正好等于ascii码的值。
    print("a is:"..a) --同上
--print(string.format("%#x",str))
print(string.char(66))  -ascii转字符
print(string.char("0x01")..string.char("0x01")..string.char("0xac"))
print(string.byte("0x01"))
print(string.char("0x00"))
print(string.char("1"))
print("this is 1 ascii:"..string.byte(1))
print("This is hex 0xac :"..string.char("0xac"))
print("This is hex 0xa :"..string.char("0xa"))
if string.char("0xa")==string.char("0x0a")  ---这里默认给单位数据前加了一个0
    then print("OK")

else print("NO")
    end