| | |
| | | const net = require('net'); |
| | | const logger = require('./logger'); |
| | | const { sendDataToAliyun } = require('./aliyun-iot'); |
| | | const { loadConfig } = require('./config'); |
| | | |
| | | // 加载配置(端口、主机) |
| | | const CONFIG = loadConfig(); |
| | | |
| | | |
| | | function getDateString() { |
| | |
| | | |
| | | // 构造 payload |
| | | const payload = { |
| | | deviceName:'', |
| | | deviceName:'威力生', |
| | | deviceType:deviceType, //设备类型 0是血透1 是血滤 |
| | | n: deviceIdHex, //设备序列号 也就是id |
| | | RunningState: modeAndValue, // 运行模式&权值 |
| | |
| | | payload.o=dataValue |
| | | break; |
| | | case 15: |
| | | payload.ssy=dataValue |
| | | payload.N=dataValue |
| | | break; |
| | | case 16: |
| | | payload.szy=dataValue |
| | | payload.O=dataValue |
| | | break; |
| | | case 17: |
| | | payload.mb=dataValue |
| | | payload.P=dataValue |
| | | break; |
| | | default: |
| | | logger.warn('未知的数据标识', { dataFlag }); |
| | |
| | | payload.o=dataValue |
| | | break; |
| | | case 15: |
| | | payload.ssy=dataValue |
| | | payload.N=dataValue |
| | | break; |
| | | case 16: |
| | | payload.szy=dataValue |
| | | payload.O=dataValue |
| | | break; |
| | | case 17: |
| | | payload.mb=dataValue |
| | | payload.P=dataValue |
| | | break; |
| | | default: |
| | | logger.warn('未知的数据标识', { dataFlag }); |
| | |
| | | |
| | | }); |
| | | |
| | | const PORT = process.env.PORT || 60961; |
| | | const { port: PORT, host: HOST } = CONFIG.server; |
| | | |
| | | server.listen(PORT, '0.0.0.0', () => { |
| | | logger.info(`✅ 血透机TCP服务器已启动,监听端口 ${PORT}`); |
| | | server.listen(PORT, HOST, () => { |
| | | logger.info(`✅ 血透机TCP服务器已启动,监听 ${HOST}:${PORT}`); |
| | | }); |
| | | |
| | | server.on('error', (err) => { |
| | | logger.error('服务器监听错误', { |
| | | 错误: err.message, |
| | | 堆栈: err.stack, |
| | | 端口: PORT |
| | | 端口: PORT, |
| | | 主机: HOST |
| | | }); |
| | | |
| | | // 如果是端口占用,尝试重启或退出 |