operate.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package modbus
  2. import (
  3. "encoding/json"
  4. "os"
  5. "server/dao"
  6. "server/logger"
  7. "server/model"
  8. "server/utils"
  9. "time"
  10. )
  11. // GetSunPowerInfo 获取太阳能信息
  12. func GetSunPowerInfo() error {
  13. for id, conn := range model.ConnectionMap {
  14. _, dev, err := utils.GetDataByDeviceId(id)
  15. if dev.IsSun && dev.State == 1 { //打开 并且在线
  16. err = utils.WriteDevice(dev.Sn, SolarEnergyData(), conn)
  17. if err != nil {
  18. return err
  19. }
  20. }
  21. }
  22. return nil
  23. }
  24. // GetDeviceInfo 获取设备信息
  25. func GetDeviceInfo() {
  26. for id, conn := range model.ConnectionMap {
  27. _, dev, _ := utils.GetDataByDeviceId(id)
  28. utils.WriteDevice(dev.Sn, ReadDeviceInfo(dev.LoopNumber), conn)
  29. }
  30. }
  31. // DealWithOffline 处理离线
  32. func DealWithOffline() {
  33. regions, err := utils.LoadData()
  34. if err != nil {
  35. logger.Get().Errorln("离线" + err.Error())
  36. return
  37. }
  38. datafb, err := os.ReadFile("static/data-fb.json")
  39. var regionsfb []dao.Region
  40. if err := json.Unmarshal(datafb, &regionsfb); err != nil {
  41. // 提供更多的上下文信息来帮助调试
  42. logger.Get().Errorf("解析 JSON 失败: %v, 原始数据: %s", err, regions)
  43. }
  44. // 检查文件是否为空
  45. if len(regions) == 0 {
  46. regions = regionsfb // 如果文件为空,返回空数组
  47. }
  48. // 确保 regions 不为 nil
  49. if regions == nil {
  50. regions = regionsfb
  51. }
  52. now := time.Now()
  53. for i, region := range regions {
  54. // 确保 region.Devices 不为 nil
  55. if region.Devices == nil {
  56. continue
  57. }
  58. for i2, device := range region.Devices {
  59. if now.After(device.OnlineTime.Add(13*time.Minute)) && device.State != 0 {
  60. regions[i].Devices[i2].State = 0
  61. }
  62. }
  63. }
  64. if len(regions) == 0 {
  65. return
  66. }
  67. err = utils.SaveData("static/data.json", regions)
  68. if err != nil {
  69. logger.Get().Errorf("离线保存失败: %v", err)
  70. }
  71. }