maochaoying 2 years ago
parent
commit
8ec9aaeb62
  1. 4
      src/mock/index.js
  2. 10
      src/model/environment.model.js
  3. 52
      src/service/environment.service.js
  4. 14
      src/utils/message.js
  5. 3
      src/websocket/client.js

4
src/mock/index.js

@ -1,8 +1,8 @@
const sensor_data = { const sensor_data = {
command: "envDataReport", command: "envDataReport",
messageId: "xxxxx-xxxxx-xxxxx-xxxxx", messageId: "xxxxx-xxxxx-xxxxx-xxxxx",
timestamp: 231245, //unix时间戳ms
positionM: 0.0, //横向距离
timestamp: "2023-04-19 16:22:11", //unix时间戳ms
positionM: 50, //横向距离
env: [ env: [
{ {
mac: "00:28:f8:6f:a3:92", mac: "00:28:f8:6f:a3:92",

10
src/model/environment.model.js

@ -49,6 +49,16 @@ const Environment = seq.define("chicken_environment", {
allowNull: true, allowNull: true,
comment: "h2s", comment: "h2s",
}, },
position_index: {
type: DataTypes.STRING,
allowNull: false,
comment: "舍中的层数标识",
},
positionM: {
type: DataTypes.STRING,
allowNull: false,
comment: "鸡笼位置x偏移值",
},
log_time: { log_time: {
type: DataTypes.DATE, type: DataTypes.DATE,
allowNull: false, allowNull: false,

52
src/service/environment.service.js

@ -232,6 +232,58 @@ class EnvironmentService {
} }
return null; 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(); module.exports = new EnvironmentService();

14
src/utils/message.js

@ -2,10 +2,20 @@ const { isJsonString } = require("./common");
const { FEEDING_EVENT } = require("../constant/message"); const { FEEDING_EVENT } = require("../constant/message");
const moment = require("moment"); const moment = require("moment");
const { addFeeding } = require("../service/feeding.service"); 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) => { const handleFeedMessage = async (message) => {
console.log(message);
const eventType = message?.eventType; const eventType = message?.eventType;
const timestamp = message?.timestamp; const timestamp = message?.timestamp;
// 目前只关注多会开始喂食 将时间记录到数据库中 // 目前只关注多会开始喂食 将时间记录到数据库中

3
src/websocket/client.js

@ -10,7 +10,8 @@ let ws = new WebSocket(`ws://${WEB_SOCKET_SERVER_HOST}:${WEB_SOCKET_PORT}`);
// 打开WebSocket连接后立刻发送一条消息: // 打开WebSocket连接后立刻发送一条消息:
ws.on("open", function () { ws.on("open", function () {
ws.send(JSON.stringify(feed_data));
// ws.send(JSON.stringify(feed_data));
ws.send(JSON.stringify(sensor_data));
}); });
// 响应收到的消息: // 响应收到的消息:

Loading…
Cancel
Save