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

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

[流程系列] 【node-red】利用乐橙云实现推送报警或门铃触发图片到邮箱。

[复制链接]

2

主题

19

帖子

416

积分

中级会员

Rank: 3Rank: 3

积分
416
金钱
397
HASS币
0
发表于 2023-10-6 12:18:57 | 显示全部楼层 |阅读模式
这个是自己编辑的一套流程,我用时间触发使用了几个月很稳定,可恨的是乐橙直播连接视频要收费了,拍照没有影响但是有次数限制,应该自用也够了。这个也可以用其他条件触发。所有要填的信息都可以通过乐橙云找到,不懂的网上多查一下。
[
    {
        "id": "971cc31c1202573a",
        "type": "tab",
        "label": "乐橙监控拍照邮件推送",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "2985e10b471de67c",
        "type": "inject",
        "z": "971cc31c1202573a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 70,
        "y": 120,
        "wires": [
            [
                "379e2c6c4376c7b0"
            ]
        ]
    },
    {
        "id": "2727c7c40c568e4a",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "function 2",
        "func": "\nvar ver = msg.payload[0].ver\nvar appId = msg.payload[0].appId\nvar sign = msg.payload[1]\nvar time = msg.payload[0].timestamp\nvar nonce = msg.payload[0].nonce\nvar id = msg.payload[0].id\nmsg.payload =\n{\n    "system": {\n        "ver": ver,\n        "appId": appId,\n        "sign": sign,\n        "time": time,\n        "nonce": nonce,\n    },\n    "id": id,\n    "params": {\n\n    }\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 680,
        "y": 140,
        "wires": [
            [
                "e9c4e8b255ef3a90"
            ]
        ]
    },
    {
        "id": "379e2c6c4376c7b0",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "function 3",
        "func": "function getTime() {\n    var timestamp = Math.round(new Date().getTime() / 1000);\n    return timestamp;\n}\n\nvar ver = "1.0";\nvar appId = ""; //填入自己的appid\nvar appSecret = ""; //填入自己的appSecret\nvar timestamp = getTime();\nvar nonce = Math.random().toString(36).substr(2);\nvar id = Math.floor(Math.random() * (50 - 1 + 1) + 1);\nvar sign = "time:" + timestamp + ",nonce:" + nonce + ",appSecret:" + appSecret;\n\nvar data = {\n    "ver": ver,\n    "appId": appId,\n    "appSecret" : appSecret,\n    "timestamp": timestamp,\n    "nonce": nonce,\n    "sign": sign,\n    "id": id\n}\nmsg.payload = data;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 200,
        "y": 120,
        "wires": [
            [
                "9c859158d2eb588b",
                "3468b523ea59fd0e"
            ]
        ]
    },
    {
        "id": "e9c4e8b255ef3a90",
        "type": "http request",
        "z": "971cc31c1202573a",
        "name": "",
        "method": "POST",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://openapi.lechange.cn/openapi/accessToken",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 840,
        "y": 100,
        "wires": [
            [
                "f198403f17c5a9c5",
                "6c03e2d7156c3183"
            ]
        ]
    },
    {
        "id": "f198403f17c5a9c5",
        "type": "debug",
        "z": "971cc31c1202573a",
        "name": "debug 53",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 860,
        "y": 140,
        "wires": []
    },
    {
        "id": "3468b523ea59fd0e",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "function 4",
        "func": "\nmsg.parts = {};\nmsg.parts.id = "old";\nmsg.parts.index = 1;\nmsg.parts.count = 2;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 360,
        "y": 140,
        "wires": [
            [
                "8a96dc091762942b"
            ]
        ]
    },
    {
        "id": "eca5ec53e6d11922",
        "type": "digest",
        "z": "971cc31c1202573a",
        "name": "",
        "algorithm": "MD5",
        "x": 510,
        "y": 100,
        "wires": [
            [
                "109337a9eb645c4a"
            ]
        ]
    },
    {
        "id": "109337a9eb645c4a",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "function 6",
        "func": "\nmsg.parts = {};\nmsg.parts.id = "newsign";\nmsg.parts.index = 0;\nmsg.parts.count = 2;\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 660,
        "y": 100,
        "wires": [
            [
                "8a96dc091762942b"
            ]
        ]
    },
    {
        "id": "9c859158d2eb588b",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "function 9",
        "func": "msg.payload = (msg.payload.sign)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 360,
        "y": 100,
        "wires": [
            [
                "eca5ec53e6d11922"
            ]
        ]
    },
    {
        "id": "8a96dc091762942b",
        "type": "join",
        "z": "971cc31c1202573a",
        "name": "",
        "mode": "custom",
        "build": "array",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "num",
        "reduceFixup": "",
        "x": 510,
        "y": 140,
        "wires": [
            [
                "2727c7c40c568e4a"
            ]
        ]
    },
    {
        "id": "0c3b9e9fa55324fa",
        "type": "file",
        "z": "971cc31c1202573a",
        "name": "存储token",
        "filename": "C:\\node-red\\imoutoken.txt",
        "filenameType": "str",
        "appendNewline": false,
        "createDir": false,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 1180,
        "y": 100,
        "wires": [
            [
                "e91ec5104c1e58d2"
            ]
        ]
    },
    {
        "id": "d0546fbf169b4471",
        "type": "file in",
        "z": "971cc31c1202573a",
        "name": "读取token",
        "filename": "C:\\node-red\\imoutoken.txt",
        "filenameType": "str",
        "format": "utf8",
        "chunk": false,
        "sendError": false,
        "encoding": "utf8",
        "allProps": false,
        "x": 140,
        "y": 260,
        "wires": [
            [
                "335854bc75adbd16"
            ]
        ]
    },
    {
        "id": "e91ec5104c1e58d2",
        "type": "debug",
        "z": "971cc31c1202573a",
        "name": "debug 105",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 1150,
        "y": 140,
        "wires": []
    },
    {
        "id": "9ed174d20f415461",
        "type": "inject",
        "z": "971cc31c1202573a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 110,
        "y": 360,
        "wires": [
            [
                "d0546fbf169b4471",
                "bd15dcec7d97e568"
            ]
        ]
    },
    {
        "id": "6c03e2d7156c3183",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "取accessToken值",
        "func": "msg.payload = msg.payload.result.data.accessToken\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1010,
        "y": 100,
        "wires": [
            [
                "0c3b9e9fa55324fa"
            ]
        ]
    },
    {
        "id": "bd15dcec7d97e568",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "设置主参数",
        "func": "function getTime() {\n    var timestamp = Math.round(new Date().getTime() / 1000);\n    return timestamp;\n}\n\nvar ver = "1.0";\nvar appId = ""; //填入自己的appid\nvar appSecret = ""; //填入自己的appSecret\nvar deviceId = "" //填入自己摄像头ID\nvar channelId = "0" //填入自己摄像头通道号\nvar timestamp = getTime();\nvar nonce = Math.random().toString(36).substr(2);\nvar id = Math.floor(Math.random() * (50 - 1 + 1) + 1);\nvar sign = "time:" + timestamp + ",nonce:" + nonce + ",appSecret:" + appSecret;\n\nvar data = {\n    "ver": ver,\n    "appId": appId,\n    "appSecret" : appSecret,\n    "deviceId": deviceId,\n    "channelId": channelId,\n    "timestamp": timestamp,\n    "nonce": nonce,\n    "sign": sign,\n    "id": id\n}\nmsg.payload = data;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 130,
        "y": 300,
        "wires": [
            [
                "719d5f9e38e2566c",
                "f48e79c601b8ba15"
            ]
        ]
    },
    {
        "id": "be4caf6939db5455",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "格式化",
        "func": "\nvar ver = msg.payload[0].ver\nvar appId = msg.payload[0].appId\nvar token = msg.payload[2]\nvar sign = msg.payload[1]\nvar time = msg.payload[0].timestamp\nvar nonce = msg.payload[0].nonce\nvar id = msg.payload[0].id\nvar deviceId = msg.payload[0].deviceId\nvar channelId = msg.payload[0].channelId\nmsg.payload =\n{\n    "system": {\n        "ver": ver,\n        "appId": appId,\n        "sign": sign,\n        "time": time,\n        "nonce": nonce\n    },\n    "id": id,\n    "params": {\n        "deviceId": deviceId,\n        "channelId": channelId,\n        "token": token,\n    }\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 630,
        "y": 280,
        "wires": [
            [
                "2ea562e4021c5e83"
            ]
        ]
    },
    {
        "id": "6cb81053a3cf8927",
        "type": "join",
        "z": "971cc31c1202573a",
        "name": "合并",
        "mode": "custom",
        "build": "array",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "num",
        "reduceFixup": "",
        "x": 510,
        "y": 280,
        "wires": [
            [
                "be4caf6939db5455"
            ]
        ]
    },
    {
        "id": "335854bc75adbd16",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "提取token值",
        "func": "\nmsg.parts = {};\nmsg.parts.id = "token";\nmsg.parts.index = 2;\nmsg.parts.count = 3;\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 310,
        "y": 260,
        "wires": [
            [
                "6cb81053a3cf8927"
            ]
        ]
    },
    {
        "id": "3d38b6158e9e8e60",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "合并前赋值",
        "func": "\nmsg.parts = {};\nmsg.parts.id = "newsign";\nmsg.parts.index = 0;\nmsg.parts.count = 3;\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 610,
        "y": 340,
        "wires": [
            [
                "6cb81053a3cf8927"
            ]
        ]
    },
    {
        "id": "fb1b80d5eaae5ee7",
        "type": "digest",
        "z": "971cc31c1202573a",
        "name": "MD5",
        "algorithm": "MD5",
        "x": 470,
        "y": 340,
        "wires": [
            [
                "3d38b6158e9e8e60"
            ]
        ]
    },
    {
        "id": "719d5f9e38e2566c",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "提取sign值",
        "func": "msg.payload = (msg.payload.sign)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 310,
        "y": 340,
        "wires": [
            [
                "fb1b80d5eaae5ee7"
            ]
        ]
    },
    {
        "id": "f48e79c601b8ba15",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "其他值继续",
        "func": "\nmsg.parts = {};\nmsg.parts.id = "old";\nmsg.parts.index = 1;\nmsg.parts.count = 3;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 310,
        "y": 300,
        "wires": [
            [
                "6cb81053a3cf8927"
            ]
        ]
    },
    {
        "id": "2ea562e4021c5e83",
        "type": "http request",
        "z": "971cc31c1202573a",
        "name": "",
        "method": "POST",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "https://openapi.lechange.cn/openapi/setDeviceSnap",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 760,
        "y": 280,
        "wires": [
            [
                "8d8f7cf1c0c3c042"
            ]
        ]
    },
    {
        "id": "e49d29a0a075082d",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "取url值",
        "func": "msg.payload = (msg.payload.result.data.url)\nreturn msg;\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 820,
        "y": 340,
        "wires": [
            [
                "70c1818e3578286b"
            ]
        ]
    },
    {
        "id": "8d8f7cf1c0c3c042",
        "type": "json",
        "z": "971cc31c1202573a",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 890,
        "y": 280,
        "wires": [
            [
                "b3a739995ecc9515"
            ]
        ]
    },
    {
        "id": "b3a739995ecc9515",
        "type": "switch",
        "z": "971cc31c1202573a",
        "name": "token值判断",
        "property": "payload.result.msg",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "token已过期或不存在,请重新获取token。",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "操作成功。",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1030,
        "y": 280,
        "wires": [
            [
                "379e2c6c4376c7b0",
                "e00281e05c61b6f5"
            ],
            [
                "e49d29a0a075082d"
            ]
        ]
    },
    {
        "id": "e00281e05c61b6f5",
        "type": "delay",
        "z": "971cc31c1202573a",
        "name": "",
        "pauseType": "delay",
        "timeout": "2",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 80,
        "y": 180,
        "wires": [
            [
                "bd15dcec7d97e568",
                "d0546fbf169b4471"
            ]
        ]
    },
    {
        "id": "f44e0459ce3bd957",
        "type": "jsontohtml",
        "z": "971cc31c1202573a",
        "transform": "{"<>":"head","html":[{"<>":"title","html":"显示图片"},{"<>":"img","src":"${url}","style":"${imag}"},{"<>":"a","href":"${live}","style":"${font}","text":"直播"}]}",
        "name": "",
        "x": 1130,
        "y": 340,
        "wires": [
            [
                "1b5dbdc8eb9c4a64"
            ]
        ]
    },
    {
        "id": "70c1818e3578286b",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "html赋值",
        "func": "var url = msg.payload;\nvar live = "填入自己的摄像头直播地址"\n//修改直播链接地址\nvar font = "font-size: 80px"//修改直播文字链接字体大小\nvar imag = "width: 900px; height: 500px;" //修改推送图片显示分辨率\nvar roomMap = "门口"\nvar topic = "报警信息"\n\nmsg.payload =\n[\n    {\n        "url": url,\n        "live": live,\n        "font": font,\n        "imag": imag,\n        "roomMap": roomMap,\n        "topic": topic,\n    }\n]\n//msg.payload = [(url), (roomMap), (topic)]\n//msg.url = url;\n//msg.roomMap = roomMap;\n//msg.topic = topic;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 960,
        "y": 340,
        "wires": [
            [
                "f44e0459ce3bd957"
            ]
        ]
    },
    {
        "id": "588c24524f67c296",
        "type": "comment",
        "z": "971cc31c1202573a",
        "name": "乐橙token获取流程",
        "info": "",
        "x": 110,
        "y": 80,
        "wires": []
    },
    {
        "id": "7368319d929e71a4",
        "type": "comment",
        "z": "971cc31c1202573a",
        "name": "乐橙设备抓图发邮件流程",
        "info": "",
        "x": 150,
        "y": 400,
        "wires": []
    },
    {
        "id": "1b5dbdc8eb9c4a64",
        "type": "function",
        "z": "971cc31c1202573a",
        "name": "格式化邮件",
        "func": "\nvar topic = "报警信息"\nvar theme = msg.payload\n//msg.to = "@qq.com";\n//msg.cc = "@163.com";//抄送邮件\n//msg.bcc = "@qq.com";\nmsg.payload = theme;\nmsg.topic = topic;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1290,
        "y": 340,
        "wires": [
            [
                "89a5152219038d8f",
                "6a0ce86fc09d3219"
            ]
        ]
    },
    {
        "id": "89a5152219038d8f",
        "type": "e-mail",
        "z": "971cc31c1202573a",
        "server": "smtp.qq.com",
        "port": "465",
        "authtype": "BASIC",
        "saslformat": true,
        "token": "oauth2Response.access_token",
        "secure": true,
        "tls": true,
        "name": "自己的QQ邮箱@qq.com",
        "dname": "",
        "credentials": {},
        "x": 1290,
        "y": 280,
        "wires": []
    },
    {
        "id": "6a0ce86fc09d3219",
        "type": "e-mail",
        "z": "971cc31c1202573a",
        "server": "smtp.qq.com",
        "port": "465",
        "authtype": "BASIC",
        "saslformat": true,
        "token": "oauth2Response.access_token",
        "secure": true,
        "tls": true,
        "name": "备用邮箱@163.com",
        "dname": "",
        "x": 1280,
        "y": 240,
        "wires": []
    }
]


flows.zip

3.5 KB, 下载次数: 11

回复

使用道具 举报

0

主题

20

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
金钱
415
HASS币
0
发表于 2023-10-6 14:09:12 | 显示全部楼层
谢谢大佬,刚好用乐橙云
回复

使用道具 举报

13

主题

281

帖子

1621

积分

金牌会员

Rank: 6Rank: 6

积分
1621
金钱
1330
HASS币
50
发表于 2023-10-9 09:58:16 | 显示全部楼层
大佬,你的flows文件是不是没导出全呀
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-6 23:23 , Processed in 0.282620 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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