『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 403|回复: 2

[技术探讨] dnake(狄耐克)门禁的API和接入HA对讲

[复制链接]

1

主题

6

帖子

66

积分

注册会员

Rank: 2

积分
66
金钱
60
HASS币
0
发表于 4 天前 | 显示全部楼层 |阅读模式
本帖最后由 flofire 于 2025-2-6 17:15 编辑

供参考,方便日后接入ha
部分新设备有完整的网页控制功能,在浏览器就能看到参数,可惜我是旧设备,以下信息对没有新设备的用户应该非常有用。

【门禁内网API控制家居篇】

/*
******************以下全文的192.168.1.8请替换为你自己的门禁ip******************
// 网关信息-浏览器打开
http://192.168.1.8/smart/iot.info
// 设备列表-浏览器打开 (devNo是nm,devCh是ch)
http://192.168.1.8/smart/speDev.info
// 场景列表-浏览器打开
http://192.168.1.8/smart/speScene.info
// 场景详情-浏览器打开(nm由场景列表获取)
http://192.168.1.8/smart/scene/{nm}.json

我只有灯具和窗帘设备,
如有其他设备不知道要传什么参数,可以先将其加入场景,然后查看场景详情里的参数来猜测。
更多cmd取值看https://github.com/dnakeyun/DNKSmartHomeSDK/blob/main/DNKSmartHomeSDK/DNKSmartHomeSDK.framework/Headers/SDKInterface.h
*/

const GATEWAY = {
  ip: '192.168.1.8', // 改成你的门禁ip
  iotDeviceName: '', // (获取方法:网关信息-iotDeviceName)
  gwIotName: '', // (获取方法:网关信息-gwIotName)
  authUsername: 'admin', // 一般是固定的
  authPassword: '123456', // 一般是固定的
};

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
        function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

function getUuid(len = 32, radix = 10) {
    var n, r, i = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), o = [];
    if (radix = radix || i.length,
    len)
        for (n = 0; n < len; n++)
            o[n] = i[0 | Math.random() * radix];
    else
        for (o[8] = o[13] = o[18] = o[23] = "-",
        o[14] = "4",
        n = 0; n < 36; n++)
            o[n] || (r = 0 | 16 * Math.random(),
            o[n] = i[19 == n ? 3 & r | 8 : r]);
    return o.join("")
}

function request(data) {
    return fetch('http://'+GATEWAY.ip+'/route.cgi?api=request', {
        method: 'POST',
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
          'authorization': 'Basic ' + b64EncodeUnicode(GATEWAY.authUsername + ':' + GATEWAY.authPassword)
        },
        body: JSON.stringify({
           "fromDev": GATEWAY.iotDeviceName,
            "toDev": GATEWAY.gwIotName,
            "data": data
        })}
    );
}

// 获取设备状态(state=0为关,state=1为开,state=3貌似是待机.电动窗帘有level值,猜测:0-254。0全关,254全开。)
request({"action":"readAllDevState","uuid":getUuid()}).then(()=>{})

// 开灯 (devNo是设备列表的nm,devCh是设备列表的ch)
request({"cmd": "on", "action": "ctrlDev", "devNo":26,"devCh":1, "uuid": getUuid()}).then(()=>{})

// 关灯 (devNo是设备列表的nm,devCh是设备列表的ch)
request({"cmd": "off", "action": "ctrlDev", "devNo":26,"devCh":1, "uuid": getUuid()}).then(()=>{})

// 开窗帘 (devNo是设备列表的nm,devCh是设备列表的ch)
request({"cmd":"on","action": "ctrlDev", "devNo":38,"devCh":1, "uuid": getUuid()}).then(()=>{})

// 关窗帘 (devNo是设备列表的nm,devCh是设备列表的ch)
request({"cmd":"off","action": "ctrlDev", "devNo":38,"devCh":1, "uuid": getUuid()}).then(()=>{})

// 开一半窗帘(猜测:level:0-254。0全关,254全开)
request({"cmd":"level","action": "ctrlDev", "level":128, "devNo":38,"devCh":1, "uuid": getUuid()}).then(()=>{})

// 获取设备列表(不包含名称,好像没什么用)
request({"action":"readAllDevList","discover":0,"gwid":0,"uuid":getUuid()}).then(()=>{})
本人编写,欢迎讨论。

【接入HA控制门禁开关、查看rtsp流、控制电梯

HA集成接入狄耐克(Dnake)门禁系统

hadiy大佬编写,请到原文查看

【i尚家研究-已放弃】
// 使用alibabacloud-iot-device-sdk可以连接
// 安装i尚家,登录并抓包以下网址获取iot信息 smart.ishanghome.com/smartHome/v1/account/login

// 抓包以下网址获取设备列表
smart.ishanghome.com/smartHome/v1/syn/device/gateway/list?mac=xxxx


评分

参与人数 1金钱 +12 收起 理由
隔壁的王叔叔 + 12 我只有这么多了,太牛了。

查看全部评分

回复

使用道具 举报

1

主题

6

帖子

66

积分

注册会员

Rank: 2

积分
66
金钱
60
HASS币
0
 楼主| 发表于 4 天前 | 显示全部楼层
本帖最后由 flofire 于 2025-2-6 17:49 编辑

接入ha控制灯具等,赞时没空,期待各位分享。我以后实现了也会在此分享。
回复

使用道具 举报

0

主题

2

帖子

28

积分

新手上路

Rank: 1

积分
28
金钱
26
HASS币
0
发表于 4 天前 | 显示全部楼层
太川的门禁有研究吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-2-8 14:56 , Processed in 0.066911 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表