本人鸿蒙社区专帖文章:https://ost.51cto.com/posts/29349


介绍


智能宠物管理系统是基于HarmonyOS NEXT开发的一款鸿蒙原生应用和元服务,旨在帮助宠物主人更好地管理和照顾他们的宠物。通过该系统,用户可以实现宠物日常活动记录、健康监测、喂食提醒等功能。


应用使用场景


宠物活动记录:自动记录宠物的活动量、步数等。

健康监测:监测宠物的体重、饮水量、食物摄入量等。

喂食提醒:根据设定的时间和频率提醒主人喂食。

医疗提醒:提醒主人按时给宠物打疫苗或进行体检。

智能设备联动:与智能项圈、宠物喂食器等设备联动,实现一体化管理。


原理解释


智能宠物管理系统利用HarmonyOS的分布式能力,通过与智能设备协同工作,实现对宠物的实时监控和管理。系统主要包括前端应用、后台服务器以及与智能设备交互的中间件部分。


算法原理流程图


A[数据采集] --> B[数据上传]
    B --> C{数据处理}
    C -->|喂食提醒| D[发送通知]
    C -->|健康监测| E[生成报告]
    C -->|活动记录| F[更新日志]


算法原理解释

数据采集:通过智能项圈等设备实时采集宠物的数据,如活动量、体重等。

数据上传:将采集到的数据上传到后台服务器。

数据处理:后台服务器根据预先设置的算法对数据进行分析处理。

发送通知:根据处理结果,向用户发送喂食提醒、健康报告等通知。

生成报告:定期生成宠物健康报告,并提供可视化展示。

更新日志:将宠物的活动状况记录在日志中,方便查询和追溯。


应用场景代码示例实现


// 示例代码:喂食提醒功能
import { notifyUser } from '@harmonyos/notification';

function scheduleFeedingReminder(time) {
    const reminderTime = new Date(time);
    setTimeout(() => {
        notifyUser('喂食提醒', '该给您的宠物喂食了!');
    }, reminderTime.getTime() - Date.now());
}

// 调用示例
scheduleFeedingReminder('2023-10-01T18:00:00');


下面我们将详细地实现智能宠物管理系统的各个环节,包括数据采集、数据上传、数据处理、发送通知、生成报告以及更新日志。


数据采集


假设我们有一个智能项圈设备,它包含加速度传感器和重量传感器,用来实时采集宠物的活动量和体重。这部分代码可以使用HarmonyOS的设备API实现。



import { SensorManager, WeightSensor } from '@harmonyos/sensors';

// 初始化传感器管理器
const sensorManager = new SensorManager();
const accelerometer = sensorManager.getDefaultSensor(SensorManager.SensorType.ACCELEROMETER);
const weightSensor = new WeightSensor();

// 监听加速度传感器数据
accelerometer.setSensorInfoListener((data) => {
    console.log("Pet activity data: ", data);
    uploadData({ type: 'activity', value: data });
});

// 监听重量传感器数据
weightSensor.setWeightChangeListener((data) => {
    console.log("Pet weight data: ", data);
    uploadData({ type: 'weight', value: data });
});


数据上传


使用HTTP请求将采集到的数据上传到后台服务器。这里采用fetch API进行实现。



const serverUrl = 'https://example.com/uploadData';

function uploadData(data) {
    fetch(serverUrl, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
    .then(response => response.json())
    .then(result => {
        console.log('Data uploaded successfully:', result);
    })
    .catch(error => {
        console.error('Error uploading data:', error);
    });
}


数据处理


在服务器端,我们通过一个简单的Node.js服务来处理上传的数据,并存储在数据库中(假设使用MongoDB)。



const express = require('express');
const mongoose = require('mongoose');

const app = express();
app.use(express.json());

mongoose.connect('mongodb://localhost/pet_management', { useNewUrlParser: true, useUnifiedTopology: true });

const DataSchema = new mongoose.Schema({
    type: String,
    value: Object,
    timestamp: { type: Date, default: Date.now }
});

const DataModel = mongoose.model('Data', DataSchema);

app.post('/uploadData', (req, res) => {
    const data = new DataModel(req.body);
    data.save()
        .then(() => res.status(200).send('Data saved'))
        .catch(err => res.status(500).send('Error saving data:', err));
});

app.listen(3000, () => {
    console.log('Server listening on port 3000');
});


发送通知


当特定条件满足时(例如,需要喂食),服务器会发送通知给用户。这里使用node-notifier库模拟通知功能。



const notifier = require('node-notifier');

function checkAndNotify(data) {
    if (data.type === 'activity' && data.value < THRESHOLD_ACTIVITY) {
        notifier.notify({
            title: '喂食提醒',
            message: '该给您的宠物喂食了!'
        });
    }

    // 检查其他条件并发送相应通知
}

app.post('/uploadData', (req, res) => {
    const data = new DataModel(req.body);
    data.save()
        .then(() => {
            res.status(200).send('Data saved');
            checkAndNotify(req.body);
        })
        .catch(err => res.status(500).send('Error saving data:', err));
});


生成报告


服务器定期生成宠物健康报告,并提供可视化展示。可以使用node-cron库定时任务,结合Chart.js生成图表。


const cron = require('node-cron');
const ChartJsNodeCanvas = require('chartjs-node-canvas');

cron.schedule('0 0 * * *', () => {
    DataModel.find({ type: 'activity' }).then(activityData => {
        const chartCanvas = new ChartJsNodeCanvas({ width: 800, height: 600 });
        const configuration = {
            type: 'line',
            data: {
                labels: activityData.map(d => d.timestamp),
                datasets: [{
                    label: 'Activity',
                    data: activityData.map(d => d.value)
                }]
            }
        };
        return chartCanvas.renderToBuffer(configuration);
    }).then(buffer => {
        // 保存图表或发送给用户
        fs.writeFileSync('report.png', buffer);
    }).catch(err => console.error('Error generating report:', err));
});


更新日志


将宠物的活动状况记录在日志中,方便查询和追溯。



const fs = require('fs');

function updateLog(data) {
    const logEntry = `${new Date().toISOString()} - ${data.type}: ${JSON.stringify(data.value)}\n`;
    fs.appendFile('pet_activity.log', logEntry, (err) => {
        if (err) {
            console.error('Error updating log:', err);
        } else {
            console.log('Log updated successfully');
        }
    });
}

app.post('/uploadData', (req, res) => {
    const data = new DataModel(req.body);
    data.save()
        .then(() => {
            res.status(200).send('Data saved');
            checkAndNotify(req.body);
            updateLog(req.body);
        })
        .catch(err => res.status(500).send('Error saving data:', err));
});


部署测试场景


环境准备:

确保开发环境已安装HarmonyOS DevEco Studio。


应用部署:

将项目代码导入DevEco Studio。

配置设备连接,确保智能设备与开发环境处于同一网络。

编译并运行项目,将应用部署到目标设备上。


功能测试:

测试活动记录功能,查看是否准确记录宠物的步数。

测试健康监测功能,查看是否正确生成健康报告。

测试喂食提醒功能,验证通知是否按时发送。


下面将列出每个环节的具体运行实例和结果展示


数据采集与上传


在宠物佩戴智能项圈的情况下,设备会实时采集数据并上传至服务器。假设我们有如下的数据采集日志:


Pet activity data: { x: 0.5, y: 1.2, z: 0.3 }
Pet weight data: { weight: 10.5 }


这些数据通过uploadData函数上传到服务器。


后台服务器处理与存储


当数据上传到服务器时,服务器会保存这些数据到MongoDB数据库,并进行相应的处理。以下是服务器端控制台输出示例:



Server listening on port 3000
Data saved successfully
Check and Notify: Activity level below threshold, sending feed reminder.
Sending notification: '该给您的宠物喂食了!'
Updating log: 2024-07-08T12:00:00Z - activity: {"x":0.5,"y":1.2,"z":0.3}


数据库中的数据结构可能如下:


{
    "_id": "60f6c8e7b197f9ad0e56a9a4",
    "type": "activity",
    "value": { "x": 0.5, "y": 1.2, "z": 0.3 },
    "timestamp": "2024-07-08T12:00:00Z"
}
{
    "_id": "60f6c8e7b197f9ad0e56a9a5",
    "type": "weight",
    "value": { "weight": 10.5 },
    "timestamp": "2024-07-08T12:00:00Z"
}


发送通知


检查到宠物活动量过低时,系统会发送喂食提醒通知。模拟通知发送的输出如下:



Sending notification: '该给您的宠物喂食了!'


实际应用中,可以使用更强大的通知机制,如推送通知服务,使通知更加及时、可靠。


生成报告


定期生成的健康报告包含宠物的活动和体重等信息。以下是一个简单的生成报告任务的日志示例:



Generating daily report...
Report saved as report.png



更新日志


每次新的数据上传后,系统都会更新宠物活动日志,以便后续查询:



Updating log: 2024-07-08T12:00:00Z - weight: {"weight":10.5}


日志文件内容示例:



2024-07-08T12:00:00Z - activity: {"x":0.5,"y":1.2,"z":0.3}
2024-07-08T12:00:00Z - weight: {"weight":10.5}



材料


HarmonyOS官方文档

DevEco Studio下载


总结


智能宠物管理系统充分利用了HarmonyOS的分布式架构和强大的数据处理能力,为宠物主人提供了一套完整的管理解决方案。通过与智能设备的联动,用户可以随时掌握宠物的健康状况,提高照顾宠物的效率和质量。


未来展望


未来,我们计划进一步优化算法,提升数据处理的准确性和实时性。同时,将引入人工智能技术,实现更加个性化和智能化的宠物管理服务。我们还将扩展系统功能,包括宠物社交、位置追踪等,打造一个全方位的宠物管理生态系统。