olivebot/agent/tools/CheckSensor.py
xszyou e48b8d8a2d 第4次更新
1、优化prompt;
2、解决日程删除错误;
3、iotm demo tool整体更新。
2023-12-18 16:52:53 +08:00

80 lines
3.5 KiB
Python

import os
from typing import Any
import requests
from langchain.tools import BaseTool
import time
import agent.tools.IotmService as IotmService
from datetime import datetime
class CheckSensor(BaseTool):
name = "CheckSensor"
description = "此工具用于查询农业箱在线状态、传感器数据、设备开关状态"
def __init__(self):
super().__init__()
async def _arun(self, *args: Any, **kwargs: Any) -> Any:
# 用例中没有用到 arun 不予具体实现
pass
def _run(self, para: str) -> str:
#箱子信息
building_infos = IotmService.get_building_unit()
is_online = building_infos.get('isonline', 0)
#传感器数据
sensor_all_infos = IotmService.get_latest_list()
sensor_infos = sensor_all_infos['data']
desc_list = {
'temperature': '温度',
'humidity': '湿度',
'co2': '二氧化碳',
'light': '箱内的光照强度的值,当箱内光照强度太低时,生长灯会被打开,传感器位置是可以检测到生长灯的亮度的',
'air': '污染气体',
'nh3': '氨气'
}
infos = []
for sensor_type, sensor_data in sensor_infos.items():
for data_point in sensor_data:
if sensor_type == 'temperature':
if data_point['port'] == 'MP14':
description = '箱外温度'
else:
description = '箱内温度'
elif sensor_type == 'humidity':
if data_point['port'] == 'MP14':
description = '箱外湿度'
elif data_point['port'] == 'S34':
description = '箱内土壤的湿度,检测的数所有延迟,水在土壤里有个渗透的过程'
else:
description = '箱内湿度'
else:
description = desc_list.get(sensor_type, 'Unknown') # Get description from desc_list, default to 'Unknown'
timestamp = data_point['ts']
value = data_point['val']
infos.append({'ts': timestamp, 'val': value, 'desc':description })
#开关数据
switch_all_infos = IotmService.get_switch_info()
switch_infos = {}
switch_dict = switch_all_infos[0]
#设备配置
switch_infos['小风扇'] = 'on' if switch_dict.get('onoff1', '') == '1' else 'off'
switch_infos['电热风扇'] = 'on' if switch_dict.get('onoff2', '') == '1' else 'off'
switch_infos['制冷风扇'] = 'on' if switch_dict.get('onoff3', '') == '1' else 'off'
switch_infos['水开关'] = 'on' if switch_dict.get('onoff4', '') == '1' else 'off'
switch_infos['肥料开关'] = 'on' if switch_dict.get('onoff5', '') == '1' else 'off'
switch_infos['植物生长灯'] = 'on' if switch_dict.get('onoff6', '') == '1' else 'off'
switch_infos['二氧化碳'] = 'on' if switch_dict.get('onoff7', '') == '1' else 'off'
current_time = datetime.now()
current_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S")
result = {'sensor_infos': infos, 'switch_infos': switch_infos, 'is_online': is_online, 'ts' : current_time_str}
return result
if __name__ == "__main__":
tool = CheckSensor()
info = tool.run("")
print(info)