From 8ec9aaeb623398e474ce64c245ceac307de2751c Mon Sep 17 00:00:00 2001 From: maochaoying <925670706@qq.com> Date: Mon, 17 Apr 2023 17:37:45 +0800 Subject: [PATCH] 123 --- src/mock/index.js | 4 +-- src/model/environment.model.js | 10 ++++++++ src/service/environment.service.js | 52 ++++++++++++++++++++++++++++++++++++++ src/utils/message.js | 14 ++++++++-- src/websocket/client.js | 3 ++- 5 files changed, 78 insertions(+), 5 deletions(-) diff --git a/src/mock/index.js b/src/mock/index.js index 6393184..c3a0958 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -1,8 +1,8 @@ const sensor_data = { command: "envDataReport", messageId: "xxxxx-xxxxx-xxxxx-xxxxx", - timestamp: 231245, //unix时间戳ms - positionM: 0.0, //横向距离 + timestamp: "2023-04-19 16:22:11", //unix时间戳ms + positionM: 50, //横向距离 env: [ { mac: "00:28:f8:6f:a3:92", diff --git a/src/model/environment.model.js b/src/model/environment.model.js index 34da469..be4395c 100644 --- a/src/model/environment.model.js +++ b/src/model/environment.model.js @@ -49,6 +49,16 @@ const Environment = seq.define("chicken_environment", { allowNull: true, comment: "h2s", }, + position_index: { + type: DataTypes.STRING, + allowNull: false, + comment: "舍中的层数标识", + }, + positionM: { + type: DataTypes.STRING, + allowNull: false, + comment: "鸡笼位置x偏移值", + }, log_time: { type: DataTypes.DATE, allowNull: false, diff --git a/src/service/environment.service.js b/src/service/environment.service.js index b4640d8..4b80cf4 100644 --- a/src/service/environment.service.js +++ b/src/service/environment.service.js @@ -232,6 +232,58 @@ class EnvironmentService { } return null; } + + // 因为目前设备并没有鸡场、鸡舍相关概念 默认为0,没有的数据默认为0 + async reportEnvironmentData(env, positionM, log_time) { + // position_index, positionM, log_time; + if (!env) { + return; + } + const p = env.map(async (item) => { + // 首先查询 position_index positionM 有没有数据 有则更新 无则创建 + const envInfo = await Environment.findOne({ + where: { + position_index: item.position_index, + positionM, + }, + }); + if (envInfo) { + const res = await Environment.update( + { + temperature: item.temperature, + humidity: item.humidity, + co2: item.co2, + log_time, + }, + { + where: { + position_index: item.position_index, + positionM, + }, + } + ); + return res; + } else { + const res = await Environment.create({ + house_id: 0, + coop_id: 0, + temperature: item.temperature, + humidity: item.humidity, + co2: item.co2, + nh3: 0, + illumination: 0, + wind_speed: 0, + h2s: 0, + position_index: item.position_index, + positionM, + log_time, + }); + return res; + } + }); + const real = await Promise.all(p); + return real; + } } module.exports = new EnvironmentService(); diff --git a/src/utils/message.js b/src/utils/message.js index a8ce04c..9b31207 100644 --- a/src/utils/message.js +++ b/src/utils/message.js @@ -2,10 +2,20 @@ const { isJsonString } = require("./common"); const { FEEDING_EVENT } = require("../constant/message"); const moment = require("moment"); const { addFeeding } = require("../service/feeding.service"); +const { reportEnvironmentData } = require("../service/environment.service"); -const handleSensorMessage = (message) => {}; +const handleSensorMessage = (message) => { + // 上报的传感器信息并没有鸡场信息 + const positionM = message?.positionM; + // 目前默认每一层有10个笼位置 目前500m + // 每到一个笼位记录一次 + if (positionM % 50 == 0) { + const env = message?.env || []; + const log_time = moment(message?.timestamp).format("YYYY-MM-DD HH:mm:ss"); + reportEnvironmentData(env, positionM, log_time); + } +}; const handleFeedMessage = async (message) => { - console.log(message); const eventType = message?.eventType; const timestamp = message?.timestamp; // 目前只关注多会开始喂食 将时间记录到数据库中 diff --git a/src/websocket/client.js b/src/websocket/client.js index 0ab666c..aa853f6 100644 --- a/src/websocket/client.js +++ b/src/websocket/client.js @@ -10,7 +10,8 @@ let ws = new WebSocket(`ws://${WEB_SOCKET_SERVER_HOST}:${WEB_SOCKET_PORT}`); // 打开WebSocket连接后立刻发送一条消息: ws.on("open", function () { - ws.send(JSON.stringify(feed_data)); + // ws.send(JSON.stringify(feed_data)); + ws.send(JSON.stringify(sensor_data)); }); // 响应收到的消息: