1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package modbus
- import (
- "encoding/json"
- "net"
- "os"
- "server/dao"
- "server/logger"
- "server/model"
- "server/utils"
- "time"
- )
- // GetSunPowerInfo 获取太阳能信息
- func GetSunPowerInfo() error {
- model.ConnectionMap1.Range(func(key, value interface{}) bool {
- addr := key.(string) // 假设键是 string 类型
- conn := value.(net.Conn) // 假设值是 net.Conn 类型
- _, dev, _ := utils.GetDataByDeviceIP(addr)
- if dev.IsSun && dev.State == 1 { //打开 并且在线
- err := utils.WriteDevice(SolarEnergyData(), conn)
- if err != nil {
- logger.Get().Errorf("获取太阳能信息 写命令错误: %s -- conn: %v", err, conn.RemoteAddr().String())
- }
- }
- // 返回 true 继续遍历,返回 false 提前终止遍历
- return true
- })
- return nil
- }
- // GetDeviceInfo 获取设备信息
- func GetDeviceInfo() {
- model.ConnectionMap1.Range(func(key, value interface{}) bool {
- addr := key.(string) // 假设键是 string 类型
- conn := value.(net.Conn) // 假设值是 net.Conn 类型
- _, dev, _ := utils.GetDataByDeviceIP(addr)
- err := utils.WriteDevice(ReadDeviceInfo(dev.LoopNumber), conn)
- if err != nil {
- logger.Get().Errorf("获取设备信息 写命令错误: %s -- conn: %v", err, conn.RemoteAddr().String())
- }
- time.Sleep(1 * time.Second)
- // 返回 true 继续遍历,返回 false 提前终止遍历
- return true
- })
- }
- // DealWithOffline 处理离线
- func DealWithOffline() {
- regions, err := utils.LoadData()
- if err != nil {
- logger.Get().Errorln("离线" + err.Error())
- return
- }
- datafb, err := os.ReadFile("static/data-fb.json")
- var regionsfb []dao.Region
- if err := json.Unmarshal(datafb, ®ionsfb); err != nil {
- // 提供更多的上下文信息来帮助调试
- logger.Get().Errorf("解析 JSON 失败: %v, 原始数据: %s", err, regions)
- }
- // 检查文件是否为空
- if len(regions) == 0 {
- regions = regionsfb // 如果文件为空,返回空数组
- }
- // 确保 regions 不为 nil
- if regions == nil {
- regions = regionsfb
- }
- now := time.Now()
- for i, region := range regions {
- // 确保 region.Devices 不为 nil
- if region.Devices == nil {
- continue
- }
- for i2, device := range region.Devices {
- if now.After(device.OnlineTime.Add(5*time.Minute)) && device.State != 0 {
- regions[i].Devices[i2].State = 0
- }
- }
- }
- if len(regions) == 0 {
- return
- }
- utils.SaveRegions(regions)
- //err = utils.SaveData("static/data.json", regions)
- if err != nil {
- logger.Get().Errorf("离线保存失败: %v", err)
- }
- }
|