mirror of
https://github.com/JamesonHuang/OpenWrt_Luci_Lua.git
synced 2024-11-27 15:30:11 +00:00
210 lines
7.0 KiB
Lua
210 lines
7.0 KiB
Lua
|
module ("xiaoqiang.XQEquipment", package.seeall)
|
||
|
|
||
|
local XQFunction = require("xiaoqiang.common.XQFunction")
|
||
|
local XQConfigs = require("xiaoqiang.common.XQConfigs")
|
||
|
local LuciUtil = require("luci.util")
|
||
|
|
||
|
--[[
|
||
|
1,1 Broadlink Smart Control
|
||
|
1,2 Broadlink Smart Switch
|
||
|
2,1 Antscam
|
||
|
3,4 MiTV
|
||
|
3,5 MiBox
|
||
|
3,7 Infrared
|
||
|
3,8 MiWiFi-R1D
|
||
|
3,9 MiWiFi-R1CM
|
||
|
3,10 MiWiFi-R1CQ
|
||
|
3,11 MiWiFi-Tiny
|
||
|
]]--
|
||
|
local RULES = {
|
||
|
["B4430D"] = {
|
||
|
{
|
||
|
["from"] = "300000",
|
||
|
["to"] = "3FFFFF",
|
||
|
["company"] = "Broadlink Pty Ltd",
|
||
|
["icon"] = "device_list_intelligent.png",
|
||
|
["type"] = { ["c"] = 1, ["p"] = 1, ["n"] = "智能红外" },
|
||
|
["priority"] = 2
|
||
|
},
|
||
|
{
|
||
|
["from"] = "100000",
|
||
|
["to"] = "1FFFFF",
|
||
|
["company"] = "Broadlink Pty Ltd",
|
||
|
["icon"] = "device_list_intelligent_plugin.png",
|
||
|
["type"] = { ["c"] = 1, ["p"] = 2, ["n"] = "智能插座" },
|
||
|
["priority"] = 2
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
local NAME_RULES = {
|
||
|
{
|
||
|
["rule"] = "^mitv",
|
||
|
["company"] = "Xiaomi",
|
||
|
["icon"] = "device_mitv.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 4, ["n"] = "小米电视" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^mibox",
|
||
|
["company"] = "Xiaomi",
|
||
|
["icon"] = "device_mibox.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 5, ["n"] = "小米盒子" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^miwifi%-r1d",
|
||
|
["company"] = "Xiaomi",
|
||
|
["icon"] = "device_miwifi_r1d.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 8, ["n"] = "小米路由器" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^miwifi%-r1cm",
|
||
|
["company"] = "Xiaomi",
|
||
|
["icon"] = "device_miwifi_r1c.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 9, ["n"] = "小米路由器mini" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^miwifi%-r1cq",
|
||
|
["company"] = "Xiaomi",
|
||
|
["icon"] = "device_miwifi_r1c.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 10, ["n"] = "小米路由器mini2" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^miwifi%-tiny",
|
||
|
["company"] = "Xiaomi",
|
||
|
["icon"] = "device_mirouter_wifi.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 11, ["n"] = "小米随身WiFi" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^broadlink_sp2",
|
||
|
["company"] = "Broadlink Pty Ltd",
|
||
|
["icon"] = "device_list_intelligent_plugin.png",
|
||
|
["type"] = { ["c"] = 1, ["p"] = 2, ["n"] = "智能插座" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^broadlink_rm2",
|
||
|
["company"] = "Broadlink Pty Ltd",
|
||
|
["icon"] = "device_list_intelligent.png",
|
||
|
["type"] = { ["c"] = 1, ["p"] = 1, ["n"] = "智能红外" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^antscam",
|
||
|
["company"] = "云蚁",
|
||
|
["icon"] = "device_list_intelligent_camera.png",
|
||
|
["type"] = { ["c"] = 2, ["p"] = 6, ["n"] = "小蚁智能摄像机" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "^xiaomi%.ir",
|
||
|
["company"] = "Xiaomi",
|
||
|
["icon"] = "device_list_lq.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 7, ["n"] = "智能红外" },
|
||
|
["priority"] = 1
|
||
|
},
|
||
|
{
|
||
|
["rule"] = "chuangmi%-plug",
|
||
|
["company"] = "Chuangmi",
|
||
|
["icon"] = "device_list_intelligent_plugin.png",
|
||
|
["type"] = { ["c"] = 3, ["p"] = 2, ["n"] = "智能插座" },
|
||
|
["priority"] = 1
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function identifyDevice(mac, dhcpname)
|
||
|
local maciden
|
||
|
local dhcpiden
|
||
|
if not XQFunction.isStrNil(mac) then
|
||
|
mac = XQFunction.macFormat(mac)
|
||
|
local key = string.upper(string.sub(string.gsub(mac,":",""),1,6))
|
||
|
local tmac = mac:gsub(":","")
|
||
|
local rules = RULES[key]
|
||
|
if rules and type(rules) == "table" then
|
||
|
tmac = LuciUtil.split(tmac,key)[2]
|
||
|
if tmac then
|
||
|
tmac = tonumber(tmac,16)
|
||
|
for _, rule in ipairs(rules) do
|
||
|
local from = tonumber(rule.from,16)
|
||
|
local to = tonumber(rule.to,16)
|
||
|
if tmac >= from and tmac <= to then
|
||
|
maciden = {}
|
||
|
local dtype = {["c"] = 0, ["p"] = 0, ["n"] = ""}
|
||
|
local priority = 2
|
||
|
if rule["type"] then
|
||
|
dtype = rule["type"]
|
||
|
end
|
||
|
if rule.priority then
|
||
|
priority = tonumber(rule.priority)
|
||
|
end
|
||
|
maciden["name"] = rule.company
|
||
|
maciden["icon"] = rule.icon
|
||
|
maciden["type"] = dtype
|
||
|
maciden["priority"] = priority
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
local NixioFs = require("nixio.fs")
|
||
|
if not NixioFs.access(XQConfigs.OUI_FILEPATH) then
|
||
|
LuciUtil.exec("unzip -d /tmp".." "..XQConfigs.OUI_ZIP_FILEPATH)
|
||
|
end
|
||
|
if NixioFs.access(XQConfigs.OUI_FILEPATH) then
|
||
|
key = string.upper(string.sub(string.gsub(mac,":","-"),1,8))
|
||
|
local line = LuciUtil.trim(LuciUtil.exec("sed -n '/"..key.."/p' "..XQConfigs.OUI_FILEPATH))
|
||
|
if not XQFunction.isStrNil(line) then
|
||
|
local company = LuciUtil.trim(LuciUtil.split(line,key)[2])
|
||
|
local icon = company:match("ICON:(%S+)")
|
||
|
maciden = {}
|
||
|
if icon then
|
||
|
maciden["name"] = company:match("(.+)ICON:%S+") or ""
|
||
|
maciden["icon"] = icon
|
||
|
else
|
||
|
maciden["name"] = company
|
||
|
maciden["icon"] = ""
|
||
|
end
|
||
|
maciden["type"] = {["c"] = 0, ["p"] = 0, ["n"] = ""}
|
||
|
maciden["priority"] = 2
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if not XQFunction.isStrNil(dhcpname) then
|
||
|
dhcpname = string.lower(dhcpname)
|
||
|
for _, rule in ipairs(NAME_RULES) do
|
||
|
if dhcpname:match(rule.rule) then
|
||
|
local dtype = {["c"] = 0, ["p"] = 0, ["n"] = ""}
|
||
|
local priority = 2
|
||
|
dhcpiden = {}
|
||
|
if rule["type"] then
|
||
|
dtype = rule["type"]
|
||
|
end
|
||
|
if rule.priority then
|
||
|
priority = tonumber(rule.priority)
|
||
|
end
|
||
|
dhcpiden["name"] = rule.company
|
||
|
dhcpiden["icon"] = rule.icon
|
||
|
dhcpiden["type"] = dtype
|
||
|
dhcpiden["priority"] = priority
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if maciden and dhcpiden then
|
||
|
if maciden.priority < dhcpiden.priority then
|
||
|
return maciden
|
||
|
else
|
||
|
return dhcpiden
|
||
|
end
|
||
|
elseif not maciden and not dhcpiden then
|
||
|
return {["name"] = "", ["icon"] = "", ["type"] = {["c"] = 0, ["p"] = 0, ["n"] = ""}, ["priority"] = 2}
|
||
|
else
|
||
|
return maciden or dhcpiden
|
||
|
end
|
||
|
end
|