Spaces:
Sleeping
Sleeping
| [ | |
| { | |
| "id": "fa36f2aea8694548", | |
| "type": "tab", | |
| "label": "流程 1", | |
| "disabled": false, | |
| "locked": true, | |
| "info": "", | |
| "env": [] | |
| }, | |
| { | |
| "id": "7b954761b0d0c71d", | |
| "type": "group", | |
| "z": "fa36f2aea8694548", | |
| "name": "天气预警", | |
| "style": { | |
| "label": true | |
| }, | |
| "nodes": [ | |
| "f4826d0f354203d0", | |
| "b649fa1a86929334", | |
| "28ad21785d1d88ea", | |
| "40f4dade103f33fb", | |
| "d1a634b0775075f7" | |
| ], | |
| "x": 34, | |
| "y": 81.5, | |
| "w": 912, | |
| "h": 157 | |
| }, | |
| { | |
| "id": "249a6593b77d86f9", | |
| "type": "group", | |
| "z": "fa36f2aea8694548", | |
| "name": "停车计时", | |
| "style": { | |
| "label": true | |
| }, | |
| "nodes": [ | |
| "3669dccf88588c53", | |
| "1c6ca2674ef8a478", | |
| "21747cce1c8e8b69", | |
| "9a1af788832a1aea", | |
| "0bcf5485bc36326e" | |
| ], | |
| "x": 34, | |
| "y": 279, | |
| "w": 812, | |
| "h": 82 | |
| }, | |
| { | |
| "id": "d1a03a3787fecadc", | |
| "type": "group", | |
| "z": "fa36f2aea8694548", | |
| "name": "ACQ", | |
| "style": { | |
| "label": true | |
| }, | |
| "nodes": [ | |
| "9d78ce6e52ba16d5", | |
| "af54b1e122b3b1be", | |
| "74761521d6f20043", | |
| "24a1438ad0c242f3", | |
| "077de3e016c84c2b" | |
| ], | |
| "x": 34, | |
| "y": 439, | |
| "w": 852, | |
| "h": 82 | |
| }, | |
| { | |
| "id": "d30d422ba83d2888", | |
| "type": "mqtt-broker", | |
| "name": "", | |
| "broker": "https://dsm.727283671.xyz:18833", | |
| "port": "18833", | |
| "clientid": "", | |
| "autoConnect": true, | |
| "usetls": false, | |
| "protocolVersion": "4", | |
| "keepalive": 60, | |
| "cleansession": true, | |
| "autoUnsubscribe": true, | |
| "birthTopic": "", | |
| "birthQos": "0", | |
| "birthRetain": "false", | |
| "birthPayload": "", | |
| "birthMsg": {}, | |
| "closeTopic": "", | |
| "closeQos": "0", | |
| "closeRetain": "false", | |
| "closePayload": "", | |
| "closeMsg": {}, | |
| "willTopic": "", | |
| "willQos": "0", | |
| "willRetain": "false", | |
| "willPayload": "", | |
| "willMsg": {}, | |
| "userProps": "", | |
| "sessionExpiry": "" | |
| }, | |
| { | |
| "id": "2be99c2fa62e6f44", | |
| "type": "inject", | |
| "z": "fa36f2aea8694548", | |
| "name": "POST到", | |
| "props": [ | |
| { | |
| "p": "payload" | |
| }, | |
| { | |
| "p": "topic", | |
| "vt": "str" | |
| } | |
| ], | |
| "repeat": "", | |
| "crontab": "00 00 * * *", | |
| "once": false, | |
| "onceDelay": 0.1, | |
| "topic": "", | |
| "payload": "object", | |
| "payloadType": "date", | |
| "x": 140, | |
| "y": 40, | |
| "wires": [ | |
| [ | |
| "bfdbf3a6d111494f" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "bfdbf3a6d111494f", | |
| "type": "http request", | |
| "z": "fa36f2aea8694548", | |
| "name": "HuggingFace", | |
| "method": "POST", | |
| "ret": "txt", | |
| "paytoqs": "ignore", | |
| "url": "https://push.727283671.xyz:4443/HuggingFace", | |
| "tls": "", | |
| "persist": false, | |
| "proxy": "", | |
| "insecureHTTPParser": false, | |
| "authType": "", | |
| "senderr": false, | |
| "headers": [], | |
| "x": 330, | |
| "y": 40, | |
| "wires": [ | |
| [] | |
| ] | |
| }, | |
| { | |
| "id": "f4826d0f354203d0", | |
| "type": "weather", | |
| "z": "fa36f2aea8694548", | |
| "g": "7b954761b0d0c71d", | |
| "name": "银川", | |
| "longitude": "106.183878", | |
| "latitude": "38.499847", | |
| "x": 290, | |
| "y": 160, | |
| "wires": [ | |
| [ | |
| "40f4dade103f33fb" | |
| ], | |
| [], | |
| [], | |
| [], | |
| [], | |
| [], | |
| [] | |
| ] | |
| }, | |
| { | |
| "id": "b649fa1a86929334", | |
| "type": "inject", | |
| "z": "fa36f2aea8694548", | |
| "g": "7b954761b0d0c71d", | |
| "name": "", | |
| "props": [ | |
| { | |
| "p": "payload" | |
| }, | |
| { | |
| "p": "topic", | |
| "vt": "str" | |
| } | |
| ], | |
| "repeat": "60", | |
| "crontab": "", | |
| "once": false, | |
| "onceDelay": 0.1, | |
| "topic": "", | |
| "payload": "", | |
| "payloadType": "date", | |
| "x": 140, | |
| "y": 180, | |
| "wires": [ | |
| [ | |
| "f4826d0f354203d0" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "28ad21785d1d88ea", | |
| "type": "function", | |
| "z": "fa36f2aea8694548", | |
| "g": "7b954761b0d0c71d", | |
| "name": "预警信息筛选", | |
| "func": "\n\n// 检查预警数据有效性 \nif (!msg.payload.alerts || msg.payload.alerts.length === 0) {\n node.warn(\" 预警信息为空\");\n return null;\n}\n \ntry {\n // 解构赋值提取预警数据(含默认值)\n const { type = \"未知\", level = \"\", detail = \"暂无详细内容\" } = msg.payload.alerts[0] || {};\n \n // 重构 payload \n msg.payload = {\n title: `${type}${level}预警`,\n message: detail.replace(/\\n/g, \" \") // 去除换行符 \n };\n \n // 添加固定头部 \n msg.headers = {\n \"X-Title\": \"Weather_alerts\",\n \"X-Priority\": \"3\", // 根据目标服务调整优先级 \n \"tags\": \"house\"\n };\n \n return msg;\n} catch (error) {\n node.error(\" 预警数据处理失败:\", error);\n return null;\n}", | |
| "outputs": 1, | |
| "timeout": 0, | |
| "noerr": 0, | |
| "initialize": "", | |
| "finalize": "", | |
| "libs": [], | |
| "x": 580, | |
| "y": 140, | |
| "wires": [ | |
| [ | |
| "d1a634b0775075f7" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "3669dccf88588c53", | |
| "type": "http request", | |
| "z": "fa36f2aea8694548", | |
| "g": "249a6593b77d86f9", | |
| "name": "顺泊停车", | |
| "method": "GET", | |
| "ret": "txt", | |
| "paytoqs": "ignore", | |
| "url": "https://yinchuan.ttpark.cn/MobileServer/general/order/calFee?parkID=0&plate=%E5%AE%81A0B7K2&plateColor=1&autoCancel=1&appServletRequestType=openid&payAppID=106&sceneType=9&wxlite_token=f69f798ac2a7e29fed0aa77c19b5e365", | |
| "tls": "", | |
| "persist": false, | |
| "proxy": "", | |
| "insecureHTTPParser": false, | |
| "authType": "", | |
| "senderr": false, | |
| "headers": [], | |
| "x": 280, | |
| "y": 320, | |
| "wires": [ | |
| [ | |
| "21747cce1c8e8b69" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "1c6ca2674ef8a478", | |
| "type": "inject", | |
| "z": "fa36f2aea8694548", | |
| "g": "249a6593b77d86f9", | |
| "name": "", | |
| "props": [ | |
| { | |
| "p": "payload" | |
| }, | |
| { | |
| "p": "topic", | |
| "vt": "str" | |
| } | |
| ], | |
| "repeat": "150", | |
| "crontab": "", | |
| "once": false, | |
| "onceDelay": 0.1, | |
| "topic": "", | |
| "payload": "", | |
| "payloadType": "date", | |
| "x": 140, | |
| "y": 320, | |
| "wires": [ | |
| [ | |
| "3669dccf88588c53" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "21747cce1c8e8b69", | |
| "type": "json", | |
| "z": "fa36f2aea8694548", | |
| "g": "249a6593b77d86f9", | |
| "name": "", | |
| "property": "payload", | |
| "action": "", | |
| "pretty": false, | |
| "x": 410, | |
| "y": 320, | |
| "wires": [ | |
| [ | |
| "9a1af788832a1aea" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "9d78ce6e52ba16d5", | |
| "type": "http request", | |
| "z": "fa36f2aea8694548", | |
| "g": "d1a03a3787fecadc", | |
| "name": "", | |
| "method": "GET", | |
| "ret": "txt", | |
| "paytoqs": "ignore", | |
| "url": "https://api.zhileit.com/api/v1/web/bg/scpCarOwnerInfo/getShopBySwsKeyNew?cwsName=null&coordinate=106.18224662045463%2C38.49661166683154&pageSize=50&pageIndex=1", | |
| "tls": "", | |
| "persist": false, | |
| "proxy": "", | |
| "insecureHTTPParser": false, | |
| "authType": "", | |
| "senderr": false, | |
| "headers": [ | |
| { | |
| "keyType": "other", | |
| "keyValue": "CWS_BELONGING_KEY", | |
| "valueType": "other", | |
| "valueValue": "75C642B47E0276CDDDA9A0BCA1BE65EB" | |
| } | |
| ], | |
| "x": 280, | |
| "y": 480, | |
| "wires": [ | |
| [ | |
| "74761521d6f20043" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "af54b1e122b3b1be", | |
| "type": "inject", | |
| "z": "fa36f2aea8694548", | |
| "g": "d1a03a3787fecadc", | |
| "name": "", | |
| "props": [ | |
| { | |
| "p": "payload" | |
| }, | |
| { | |
| "p": "topic", | |
| "vt": "str" | |
| } | |
| ], | |
| "repeat": "300", | |
| "crontab": "", | |
| "once": false, | |
| "onceDelay": 0.1, | |
| "topic": "", | |
| "payload": "", | |
| "payloadType": "date", | |
| "x": 140, | |
| "y": 480, | |
| "wires": [ | |
| [ | |
| "9d78ce6e52ba16d5" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "74761521d6f20043", | |
| "type": "json", | |
| "z": "fa36f2aea8694548", | |
| "g": "d1a03a3787fecadc", | |
| "name": "", | |
| "property": "payload", | |
| "action": "", | |
| "pretty": true, | |
| "x": 410, | |
| "y": 480, | |
| "wires": [ | |
| [ | |
| "24a1438ad0c242f3" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "9a1af788832a1aea", | |
| "type": "function", | |
| "z": "fa36f2aea8694548", | |
| "g": "249a6593b77d86f9", | |
| "name": "提取信息", | |
| "func": "// 检查 msg.payload 和 msg.payload.data 是否存在\nif (!msg.payload || !msg.payload.data) {\n // 可以根据实际情况进行处理,这里舍弃信息\n return;\n}\n// 检查 orderList 是否存在且长度大于 0\nif (!msg.payload.data.orderList || msg.payload.data.orderList.length === 0) {\n // 可以根据实际情况进行处理,这里舍弃信息\n return;\n}\nvar plate = msg.payload.data.plate;\nvar images = msg.payload.data.orderList[0].imageURLs\nvar intime = msg.payload.data.orderList[0].inTime\nvar parkingTime = msg.payload.data.orderList[0].parkingTime\nvar amountPayable = msg.payload.data.orderList[0].amountPayable\n\n// 假设从 msg.payload 中获取分钟数 \nconst minutes = parkingTime; \n \n// 计算小时数 \nconst hours = Math.floor(minutes / 60); \n \n// 计算剩余分钟数 \nconst remainingMinutes = minutes % 60; \n \n// 格式化输出 \nconst formattedTime = `${hours} 小时 ${remainingMinutes} 分钟`; \n \n// 指定时长 (3小时25分钟)\nconst targetTime = \"205\"; \n \nlet tips; \nif (parkingTime >= 0 && parkingTime <= 5) { \n tips = \"A\"; \n} else if (parkingTime >= 25 && parkingTime <= 30) { \n tips = \"B\"; \n} else if (parkingTime >= 205 && parkingTime <= 210) { \n tips = \"C\"; \n} else if (parkingTime >= 325 && parkingTime <= 330) { \n tips = \"D\"; \n} else if (parkingTime >= 385 ) { \n tips = \"E\"; \n} else { \n // 不在上述范围的情况,可按需设置默认提示 \n tips = \"F\"; \n} \n\nmsg.payload = {\n plate: plate,\n imaUrl: images, // 入场照片\n intime: intime,\n parkingTime: formattedTime,\n tips: tips,\n amountPayable: amountPayable\n};\nreturn msg;\n", | |
| "outputs": 1, | |
| "timeout": 0, | |
| "noerr": 0, | |
| "initialize": "", | |
| "finalize": "", | |
| "libs": [], | |
| "x": 560, | |
| "y": 320, | |
| "wires": [ | |
| [ | |
| "0bcf5485bc36326e" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "24a1438ad0c242f3", | |
| "type": "function", | |
| "z": "fa36f2aea8694548", | |
| "g": "d1a03a3787fecadc", | |
| "name": "提取信息", | |
| "func": "// 从 context 中获取历史数据,如果不存在则初始化为空数组 \nvar historyData = context.get('historyData') || []; \nvar data = msg.payload.data.list; \nvar extractedData = []; \nvar changedData = []; \n \n// 提取所需数据 \nfor (var i = 0; i < data.length; i++) { \n var item = data[i]; \n var newItem = { \n name: item.cws_name, \n address: item.cws_address, \n sum_count: item.swi_sum_count, \n using_count: item.swi_using_count\n }; \n\n // 有数据时添加 cwoiInTime 相关项\n if (item.swi_using_info && item.swi_using_info.length > 0) {\n newItem.cwoiInTime1 = item.swi_using_info[0].cwoiInTime;\n }\n if (item.swi_using_info && item.swi_using_info.length > 1) {\n newItem.cwoiInTime2 = item.swi_using_info[1].cwoiInTime;\n }\n if (item.swi_using_info && item.swi_using_info.length > 2) {\n newItem.cwoiInTime3 = item.swi_using_info[2].cwoiInTime;\n }\n\n extractedData.push(newItem); \n} \n \n// 对比新数据和历史数据,找出发生变化的数据 \nfor (var j = 0; j < extractedData.length; j++) { \n var isChanged = true; \n for (var k = 0; k < historyData.length; k++) { \n if (extractedData[j].name === historyData[k].name) { \n // 假设 name 是唯一标识,对比其他属性 \n if ( \n extractedData[j].address === historyData[k].address && \n extractedData[j].sum_count === historyData[k].sum_count && \n extractedData[j].using_count === historyData[k].using_count && \n extractedData[j].cwoiInTime1 === historyData[k].cwoiInTime1 && \n extractedData[j].cwoiInTime2 === historyData[k].cwoiInTime2 && \n extractedData[j].cwoiInTime3 === historyData[k].cwoiInTime3 \n ) { \n isChanged = false; \n break; \n } \n } \n } \n if (isChanged) { \n changedData.push(extractedData[j]); \n } \n} \n \n// 更新历史数据 \ncontext.set('historyData', extractedData); \n \n// 将发生变化的数据赋值给 msg.payload \nmsg.payload = changedData; \nreturn msg; ", | |
| "outputs": 1, | |
| "timeout": 0, | |
| "noerr": 0, | |
| "initialize": "", | |
| "finalize": "", | |
| "libs": [], | |
| "x": 560, | |
| "y": 480, | |
| "wires": [ | |
| [ | |
| "077de3e016c84c2b" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "40f4dade103f33fb", | |
| "type": "rbe", | |
| "z": "fa36f2aea8694548", | |
| "g": "7b954761b0d0c71d", | |
| "name": "", | |
| "func": "rbe", | |
| "gap": "", | |
| "start": "", | |
| "inout": "out", | |
| "septopics": true, | |
| "property": "payload.alerts[0].pubTime", | |
| "topi": "topic", | |
| "x": 430, | |
| "y": 140, | |
| "wires": [ | |
| [ | |
| "28ad21785d1d88ea" | |
| ] | |
| ] | |
| }, | |
| { | |
| "id": "077de3e016c84c2b", | |
| "type": "mqtt out", | |
| "z": "fa36f2aea8694548", | |
| "g": "d1a03a3787fecadc", | |
| "name": "", | |
| "topic": "MQTT/ACQdata", | |
| "qos": "2", | |
| "retain": "false", | |
| "respTopic": "", | |
| "contentType": "", | |
| "userProps": "", | |
| "correl": "", | |
| "expiry": "", | |
| "broker": "d30d422ba83d2888", | |
| "x": 780, | |
| "y": 480, | |
| "wires": [] | |
| }, | |
| { | |
| "id": "0bcf5485bc36326e", | |
| "type": "mqtt out", | |
| "z": "fa36f2aea8694548", | |
| "g": "249a6593b77d86f9", | |
| "name": "", | |
| "topic": "MQTT/Parking", | |
| "qos": "2", | |
| "retain": "false", | |
| "respTopic": "", | |
| "contentType": "", | |
| "userProps": "", | |
| "correl": "", | |
| "expiry": "", | |
| "broker": "d30d422ba83d2888", | |
| "x": 740, | |
| "y": 320, | |
| "wires": [] | |
| }, | |
| { | |
| "id": "d1a634b0775075f7", | |
| "type": "mqtt out", | |
| "z": "fa36f2aea8694548", | |
| "g": "7b954761b0d0c71d", | |
| "name": "", | |
| "topic": "MQTT/Weather_alerts", | |
| "qos": "2", | |
| "retain": "false", | |
| "respTopic": "", | |
| "contentType": "", | |
| "userProps": "", | |
| "correl": "", | |
| "expiry": "", | |
| "broker": "d30d422ba83d2888", | |
| "x": 820, | |
| "y": 140, | |
| "wires": [] | |
| } | |
| ] |