agentworkshop 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/LICENSE +91 -0
  2. package/README-zh.md +431 -424
  3. package/README.md +10 -3
  4. package/app/components/AppSidebar.vue +1 -0
  5. package/app/pages/plugins/index.vue +258 -0
  6. package/app/plugins/aw-plugins.client.ts +81 -48
  7. package/cli/commands/plugin.mjs +57 -7
  8. package/docs/plugins.md +133 -63
  9. package/docs/sdk.md +265 -0
  10. package/i18n/locales/en.ts +17 -0
  11. package/i18n/locales/zh-CN.ts +17 -0
  12. package/package.json +19 -2
  13. package/scripts/_dbg-docs-site-shot.mjs +33 -0
  14. package/scripts/dev-guard.mjs +13 -0
  15. package/scripts/home-bootstrap.mjs +26 -1
  16. package/sdk/api.mjs +101 -0
  17. package/sdk/client.mjs +56 -8
  18. package/sdk/context.mjs +56 -15
  19. package/sdk/examples/line-sentinel/client.mjs +31 -0
  20. package/sdk/examples/line-sentinel/index.mjs +102 -0
  21. package/sdk/examples/ops-notifier/client.mjs +23 -0
  22. package/sdk/examples/ops-notifier/index.mjs +34 -0
  23. package/sdk/index.d.mts +135 -0
  24. package/sdk/index.mjs +5 -18
  25. package/sdk/lifecycle.mjs +25 -0
  26. package/server/api/plugins/[name]/[...path].ts +5 -2
  27. package/server/api/workshop/plugins/[name]/disable.post.ts +19 -0
  28. package/server/api/workshop/plugins/[name]/enable.post.ts +19 -0
  29. package/server/api/workshop/plugins/[name]/index.get.ts +14 -0
  30. package/server/api/workshop/plugins/index.get.ts +17 -0
  31. package/server/data/daqs.json +260 -62
  32. package/server/data/dcw-lines.json +63 -0
  33. package/server/data/dcw-products.json +49 -0
  34. package/server/data/dcw-recipes.json +140 -0
  35. package/server/data/dcw-rollback.json +1 -1
  36. package/server/data/dcw-runs.json +175 -126
  37. package/server/data/dcws.json +147 -0
  38. package/server/data/line-runs.json +85 -15
  39. package/server/plugins/aw-plugins.ts +7 -1
  40. package/server/services/workshop/plugins/host.mjs +212 -18
@@ -1746,5 +1746,145 @@
1746
1746
  "lastGoodRunId": null,
1747
1747
  "createdAt": "2026-09-02T03:42:11.715Z",
1748
1748
  "updatedAt": "2026-09-02T03:42:11.715Z"
1749
+ },
1750
+ {
1751
+ "id": "rc-8a60518e",
1752
+ "productId": "pd-4b71be77",
1753
+ "lineId": "ln-0eccf6ba",
1754
+ "name": "哨兵配方-mtjku36w",
1755
+ "description": "",
1756
+ "params": [
1757
+ {
1758
+ "nodeId": "dw-3c7b50c0",
1759
+ "templateRef": "temp-sp",
1760
+ "value": 120
1761
+ }
1762
+ ],
1763
+ "daqWindows": [],
1764
+ "version": 1,
1765
+ "paramsHistory": [],
1766
+ "lastGoodRunId": null,
1767
+ "createdAt": "2026-09-02T04:09:11.420Z",
1768
+ "updatedAt": "2026-09-02T04:09:11.420Z"
1769
+ },
1770
+ {
1771
+ "id": "rc-70f39a03",
1772
+ "productId": "pd-bb1e0bed",
1773
+ "lineId": "ln-e984246e",
1774
+ "name": "配方C-mtjkwyhu",
1775
+ "description": "",
1776
+ "params": [
1777
+ {
1778
+ "nodeId": "dw-ce326742",
1779
+ "templateRef": "temp-sp",
1780
+ "value": 120
1781
+ }
1782
+ ],
1783
+ "daqWindows": [],
1784
+ "version": 1,
1785
+ "paramsHistory": [],
1786
+ "lastGoodRunId": null,
1787
+ "createdAt": "2026-09-02T04:11:25.339Z",
1788
+ "updatedAt": "2026-09-02T04:11:25.339Z"
1789
+ },
1790
+ {
1791
+ "id": "rc-25081a45",
1792
+ "productId": "pd-9f2d9507",
1793
+ "lineId": "ln-1fe0b5bc",
1794
+ "name": "配方D-mtjkzcfr",
1795
+ "description": "",
1796
+ "params": [
1797
+ {
1798
+ "nodeId": "dw-9b40d8d6",
1799
+ "templateRef": "temp-sp",
1800
+ "value": 120
1801
+ }
1802
+ ],
1803
+ "daqWindows": [],
1804
+ "version": 1,
1805
+ "paramsHistory": [],
1806
+ "lastGoodRunId": null,
1807
+ "createdAt": "2026-09-02T04:13:16.707Z",
1808
+ "updatedAt": "2026-09-02T04:13:16.707Z"
1809
+ },
1810
+ {
1811
+ "id": "rc-3ebd1a97",
1812
+ "productId": "pd-d230255e",
1813
+ "lineId": "ln-d826473e",
1814
+ "name": "配方E-mtjl43pv",
1815
+ "description": "",
1816
+ "params": [
1817
+ {
1818
+ "nodeId": "dw-1596b290",
1819
+ "templateRef": "temp-sp",
1820
+ "value": 120
1821
+ }
1822
+ ],
1823
+ "daqWindows": [],
1824
+ "version": 1,
1825
+ "paramsHistory": [],
1826
+ "lastGoodRunId": null,
1827
+ "createdAt": "2026-09-02T04:16:58.698Z",
1828
+ "updatedAt": "2026-09-02T04:16:58.698Z"
1829
+ },
1830
+ {
1831
+ "id": "rc-fce9474f",
1832
+ "productId": "pd-6065b4ba",
1833
+ "lineId": "ln-156abb71",
1834
+ "name": "配方F-mtjl60qf",
1835
+ "description": "",
1836
+ "params": [
1837
+ {
1838
+ "nodeId": "dw-9e3a958a",
1839
+ "templateRef": "temp-sp",
1840
+ "value": 120
1841
+ }
1842
+ ],
1843
+ "daqWindows": [],
1844
+ "version": 1,
1845
+ "paramsHistory": [],
1846
+ "lastGoodRunId": null,
1847
+ "createdAt": "2026-09-02T04:18:28.128Z",
1848
+ "updatedAt": "2026-09-02T04:18:28.128Z"
1849
+ },
1850
+ {
1851
+ "id": "rc-e27a0673",
1852
+ "productId": "pd-52f54e33",
1853
+ "lineId": "ln-bac43927",
1854
+ "name": "配方G-mtjl98nl",
1855
+ "description": "",
1856
+ "params": [
1857
+ {
1858
+ "nodeId": "dw-a2e1ca20",
1859
+ "templateRef": "temp-sp",
1860
+ "value": 120
1861
+ }
1862
+ ],
1863
+ "daqWindows": [],
1864
+ "version": 1,
1865
+ "paramsHistory": [],
1866
+ "lastGoodRunId": null,
1867
+ "createdAt": "2026-09-02T04:20:58.370Z",
1868
+ "updatedAt": "2026-09-02T04:20:58.370Z"
1869
+ },
1870
+ {
1871
+ "id": "rc-21479838",
1872
+ "productId": "pd-d919d4bf",
1873
+ "lineId": "ln-f223008a",
1874
+ "name": "配方-mtjo000v",
1875
+ "description": "",
1876
+ "params": [
1877
+ {
1878
+ "nodeId": "dw-6ab87477",
1879
+ "templateRef": "temp-sp",
1880
+ "value": 120
1881
+ }
1882
+ ],
1883
+ "daqWindows": [],
1884
+ "version": 1,
1885
+ "paramsHistory": [],
1886
+ "lastGoodRunId": null,
1887
+ "createdAt": "2026-09-02T05:37:46.125Z",
1888
+ "updatedAt": "2026-09-02T05:37:46.125Z"
1749
1889
  }
1750
1890
  ]
@@ -3281,7 +3281,7 @@
3281
3281
  "channels": [],
3282
3282
  "degraded": true
3283
3283
  },
3284
- "evaluatedAt": "2026-09-02T03:43:13.483Z",
3284
+ "evaluatedAt": "2026-09-02T05:50:22.431Z",
3285
3285
  "windowAgg": {
3286
3286
  "at": "2026-08-31T16:25:17.398Z",
3287
3287
  "fromMs": 1788193396897,
@@ -1,130 +1,4 @@
1
1
  [
2
- {
3
- "id": "rr-aa12ae5e",
4
- "recipeId": "rc-246373dd",
5
- "recipeName": "场景配方A",
6
- "productId": "pd-e633ba38",
7
- "lineId": "ln-0ba52df1",
8
- "startedAt": "2026-08-29T15:02:33.640Z",
9
- "endedAt": "2026-08-29T15:02:39.216Z",
10
- "results": [
11
- {
12
- "templateRef": "dcw-temp-sp",
13
- "nodeId": "dw-f4a529b4",
14
- "ok": true,
15
- "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
16
- "value": 180
17
- }
18
- ]
19
- },
20
- {
21
- "id": "rr-786703d9",
22
- "recipeId": "rc-4a67b742",
23
- "recipeName": "场景配方B",
24
- "productId": "pd-69813458",
25
- "lineId": "ln-83ff8f7f",
26
- "startedAt": "2026-08-29T15:02:39.238Z",
27
- "endedAt": "2026-08-29T15:03:12.440Z",
28
- "results": [
29
- {
30
- "templateRef": "dcw-temp-sp",
31
- "nodeId": "dw-6501c76b",
32
- "ok": true,
33
- "message": "Mock PLC 写入成功:165 → raw 165,回读一致(标定后物理值 165)",
34
- "value": 165
35
- }
36
- ]
37
- },
38
- {
39
- "id": "rr-16b92045",
40
- "recipeId": "rc-d7722fe2",
41
- "recipeName": "终审配方A",
42
- "productId": "pd-1f95918f",
43
- "lineId": "ln-8b9ad64f",
44
- "startedAt": "2026-08-29T15:03:12.949Z",
45
- "endedAt": "2026-08-29T15:03:30.421Z",
46
- "results": [
47
- {
48
- "templateRef": "dcw-temp-sp",
49
- "nodeId": "dw-26fcdd21",
50
- "ok": true,
51
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
52
- "value": 182
53
- }
54
- ]
55
- },
56
- {
57
- "id": "rr-0c07ae7e",
58
- "recipeId": "rc-c27cc031",
59
- "recipeName": "作业流审计配方",
60
- "productId": "pd-36cd3a1f",
61
- "lineId": "ln-1cb2b50e",
62
- "startedAt": "2026-08-29T15:03:30.794Z",
63
- "endedAt": "2026-08-29T15:03:36.261Z",
64
- "results": [
65
- {
66
- "templateRef": "dcw-temp-sp",
67
- "nodeId": "dw-eba5d3d2",
68
- "ok": true,
69
- "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
70
- "value": 180
71
- }
72
- ]
73
- },
74
- {
75
- "id": "rr-448a5bc3",
76
- "recipeId": "rc-37951baf",
77
- "recipeName": "终审配方A",
78
- "productId": "pd-68638695",
79
- "lineId": "ln-9c2a9e77",
80
- "startedAt": "2026-08-29T15:04:06.371Z",
81
- "endedAt": "2026-08-29T15:04:22.886Z",
82
- "results": [
83
- {
84
- "templateRef": "dcw-temp-sp",
85
- "nodeId": "dw-1a399fea",
86
- "ok": true,
87
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
88
- "value": 182
89
- }
90
- ]
91
- },
92
- {
93
- "id": "rr-092df05b",
94
- "recipeId": "rc-0a65f360",
95
- "recipeName": "终审配方A",
96
- "productId": "pd-e0b6b509",
97
- "lineId": "ln-327bc579",
98
- "startedAt": "2026-08-29T15:05:28.249Z",
99
- "endedAt": "2026-08-29T15:05:45.829Z",
100
- "results": [
101
- {
102
- "templateRef": "dcw-temp-sp",
103
- "nodeId": "dw-1194826a",
104
- "ok": true,
105
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
106
- "value": 182
107
- }
108
- ]
109
- },
110
- {
111
- "id": "rr-127c6247",
112
- "recipeId": "rc-28c5aeb8",
113
- "recipeName": "终审配方A",
114
- "productId": "pd-54f429af",
115
- "lineId": "ln-c5145881",
116
- "startedAt": "2026-08-29T15:05:46.202Z",
117
- "endedAt": "2026-08-29T15:05:58.337Z",
118
- "results": [
119
- {
120
- "templateRef": "dcw-temp-sp",
121
- "nodeId": "dw-c5912d51",
122
- "ok": true,
123
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
124
- "value": 182
125
- }
126
- ]
127
- },
128
2
  {
129
3
  "id": "rr-a5f58b1a",
130
4
  "recipeId": "rc-7511c1bb",
@@ -4664,5 +4538,180 @@
4664
4538
  "value": 120
4665
4539
  }
4666
4540
  ]
4541
+ },
4542
+ {
4543
+ "id": "rr-4e0a115f",
4544
+ "recipeId": "rc-8a60518e",
4545
+ "recipeName": "哨兵配方-mtjku36w",
4546
+ "productId": "pd-4b71be77",
4547
+ "lineId": "ln-0eccf6ba",
4548
+ "startedAt": "2026-09-02T04:09:11.482Z",
4549
+ "endedAt": null,
4550
+ "results": [
4551
+ {
4552
+ "templateRef": "temp-sp",
4553
+ "nodeId": "dw-3c7b50c0",
4554
+ "ok": false,
4555
+ "message": "设定值 120℃ 越出工艺安全量程 [150, 200] ℃",
4556
+ "value": 120
4557
+ }
4558
+ ],
4559
+ "paramsSnapshot": [
4560
+ {
4561
+ "nodeId": "dw-3c7b50c0",
4562
+ "templateRef": "temp-sp",
4563
+ "value": 120
4564
+ }
4565
+ ]
4566
+ },
4567
+ {
4568
+ "id": "rr-39b3edda",
4569
+ "recipeId": "rc-70f39a03",
4570
+ "recipeName": "配方C-mtjkwyhu",
4571
+ "productId": "pd-bb1e0bed",
4572
+ "lineId": "ln-e984246e",
4573
+ "startedAt": "2026-09-02T04:11:26.583Z",
4574
+ "endedAt": null,
4575
+ "results": [
4576
+ {
4577
+ "templateRef": "temp-sp",
4578
+ "nodeId": "dw-ce326742",
4579
+ "ok": false,
4580
+ "message": "设定值 120℃ 越出工艺安全量程 [150, 200] ℃",
4581
+ "value": 120
4582
+ }
4583
+ ],
4584
+ "paramsSnapshot": [
4585
+ {
4586
+ "nodeId": "dw-ce326742",
4587
+ "templateRef": "temp-sp",
4588
+ "value": 120
4589
+ }
4590
+ ]
4591
+ },
4592
+ {
4593
+ "id": "rr-2baf5f34",
4594
+ "recipeId": "rc-25081a45",
4595
+ "recipeName": "配方D-mtjkzcfr",
4596
+ "productId": "pd-9f2d9507",
4597
+ "lineId": "ln-1fe0b5bc",
4598
+ "startedAt": "2026-09-02T04:13:17.902Z",
4599
+ "endedAt": null,
4600
+ "results": [
4601
+ {
4602
+ "templateRef": "temp-sp",
4603
+ "nodeId": "dw-9b40d8d6",
4604
+ "ok": false,
4605
+ "message": "设定值 120℃ 越出工艺安全量程 [150, 200] ℃",
4606
+ "value": 120
4607
+ }
4608
+ ],
4609
+ "paramsSnapshot": [
4610
+ {
4611
+ "nodeId": "dw-9b40d8d6",
4612
+ "templateRef": "temp-sp",
4613
+ "value": 120
4614
+ }
4615
+ ]
4616
+ },
4617
+ {
4618
+ "id": "rr-7585cef0",
4619
+ "recipeId": "rc-3ebd1a97",
4620
+ "recipeName": "配方E-mtjl43pv",
4621
+ "productId": "pd-d230255e",
4622
+ "lineId": "ln-d826473e",
4623
+ "startedAt": "2026-09-02T04:16:59.891Z",
4624
+ "endedAt": null,
4625
+ "results": [
4626
+ {
4627
+ "templateRef": "temp-sp",
4628
+ "nodeId": "dw-1596b290",
4629
+ "ok": false,
4630
+ "message": "设定值 120℃ 越出工艺安全量程 [150, 200] ℃",
4631
+ "value": 120
4632
+ }
4633
+ ],
4634
+ "paramsSnapshot": [
4635
+ {
4636
+ "nodeId": "dw-1596b290",
4637
+ "templateRef": "temp-sp",
4638
+ "value": 120
4639
+ }
4640
+ ]
4641
+ },
4642
+ {
4643
+ "id": "rr-d8002452",
4644
+ "recipeId": "rc-fce9474f",
4645
+ "recipeName": "配方F-mtjl60qf",
4646
+ "productId": "pd-6065b4ba",
4647
+ "lineId": "ln-156abb71",
4648
+ "startedAt": "2026-09-02T04:18:29.340Z",
4649
+ "endedAt": null,
4650
+ "results": [
4651
+ {
4652
+ "templateRef": "temp-sp",
4653
+ "nodeId": "dw-9e3a958a",
4654
+ "ok": false,
4655
+ "message": "设定值 120℃ 越出工艺安全量程 [150, 200] ℃",
4656
+ "value": 120
4657
+ }
4658
+ ],
4659
+ "paramsSnapshot": [
4660
+ {
4661
+ "nodeId": "dw-9e3a958a",
4662
+ "templateRef": "temp-sp",
4663
+ "value": 120
4664
+ }
4665
+ ]
4666
+ },
4667
+ {
4668
+ "id": "rr-7f4a6ac0",
4669
+ "recipeId": "rc-e27a0673",
4670
+ "recipeName": "配方G-mtjl98nl",
4671
+ "productId": "pd-52f54e33",
4672
+ "lineId": "ln-bac43927",
4673
+ "startedAt": "2026-09-02T04:20:59.682Z",
4674
+ "endedAt": null,
4675
+ "results": [
4676
+ {
4677
+ "templateRef": "temp-sp",
4678
+ "nodeId": "dw-a2e1ca20",
4679
+ "ok": false,
4680
+ "message": "设定值 120℃ 越出工艺安全量程 [150, 200] ℃",
4681
+ "value": 120
4682
+ }
4683
+ ],
4684
+ "paramsSnapshot": [
4685
+ {
4686
+ "nodeId": "dw-a2e1ca20",
4687
+ "templateRef": "temp-sp",
4688
+ "value": 120
4689
+ }
4690
+ ]
4691
+ },
4692
+ {
4693
+ "id": "rr-06caf6f4",
4694
+ "recipeId": "rc-21479838",
4695
+ "recipeName": "配方-mtjo000v",
4696
+ "productId": "pd-d919d4bf",
4697
+ "lineId": "ln-f223008a",
4698
+ "startedAt": "2026-09-02T05:37:50.743Z",
4699
+ "endedAt": null,
4700
+ "results": [
4701
+ {
4702
+ "templateRef": "temp-sp",
4703
+ "nodeId": "dw-6ab87477",
4704
+ "ok": false,
4705
+ "message": "设定值 120℃ 越出工艺安全量程 [150, 200] ℃",
4706
+ "value": 120
4707
+ }
4708
+ ],
4709
+ "paramsSnapshot": [
4710
+ {
4711
+ "nodeId": "dw-6ab87477",
4712
+ "templateRef": "temp-sp",
4713
+ "value": 120
4714
+ }
4715
+ ]
4667
4716
  }
4668
4717
  ]
@@ -1837,5 +1837,152 @@
1837
1837
  "state": "idle",
1838
1838
  "lastError": null,
1839
1839
  "createdAt": "2026-09-02T03:42:11.685Z"
1840
+ },
1841
+ {
1842
+ "id": "dw-3c7b50c0",
1843
+ "templateRef": "temp-sp",
1844
+ "name": "温控",
1845
+ "driver": "mock",
1846
+ "enabled": true,
1847
+ "holdIntervalMs": null,
1848
+ "unit": "℃",
1849
+ "decimals": 1,
1850
+ "min": 150,
1851
+ "max": 200,
1852
+ "deviceBindingId": null,
1853
+ "driverConfig": {},
1854
+ "lineId": "ln-0eccf6ba",
1855
+ "value": null,
1856
+ "lastAckAt": null,
1857
+ "lastWriteAt": null,
1858
+ "state": "idle",
1859
+ "lastError": null,
1860
+ "createdAt": "2026-09-02T04:09:11.392Z"
1861
+ },
1862
+ {
1863
+ "id": "dw-ce326742",
1864
+ "templateRef": "temp-sp",
1865
+ "name": "温控",
1866
+ "driver": "mock",
1867
+ "enabled": true,
1868
+ "holdIntervalMs": null,
1869
+ "unit": "℃",
1870
+ "decimals": 1,
1871
+ "min": 150,
1872
+ "max": 200,
1873
+ "deviceBindingId": null,
1874
+ "driverConfig": {},
1875
+ "lineId": "ln-e984246e",
1876
+ "value": null,
1877
+ "lastAckAt": null,
1878
+ "lastWriteAt": null,
1879
+ "state": "idle",
1880
+ "lastError": null,
1881
+ "createdAt": "2026-09-02T04:11:25.307Z"
1882
+ },
1883
+ {
1884
+ "id": "dw-9b40d8d6",
1885
+ "templateRef": "temp-sp",
1886
+ "name": "温控",
1887
+ "driver": "mock",
1888
+ "enabled": true,
1889
+ "holdIntervalMs": null,
1890
+ "unit": "℃",
1891
+ "decimals": 1,
1892
+ "min": 150,
1893
+ "max": 200,
1894
+ "deviceBindingId": null,
1895
+ "driverConfig": {},
1896
+ "lineId": "ln-1fe0b5bc",
1897
+ "value": null,
1898
+ "lastAckAt": null,
1899
+ "lastWriteAt": null,
1900
+ "state": "idle",
1901
+ "lastError": null,
1902
+ "createdAt": "2026-09-02T04:13:16.679Z"
1903
+ },
1904
+ {
1905
+ "id": "dw-1596b290",
1906
+ "templateRef": "temp-sp",
1907
+ "name": "温控",
1908
+ "driver": "mock",
1909
+ "enabled": true,
1910
+ "holdIntervalMs": null,
1911
+ "unit": "℃",
1912
+ "decimals": 1,
1913
+ "min": 150,
1914
+ "max": 200,
1915
+ "deviceBindingId": null,
1916
+ "driverConfig": {},
1917
+ "lineId": "ln-d826473e",
1918
+ "value": null,
1919
+ "lastAckAt": null,
1920
+ "lastWriteAt": null,
1921
+ "state": "idle",
1922
+ "lastError": null,
1923
+ "createdAt": "2026-09-02T04:16:58.668Z"
1924
+ },
1925
+ {
1926
+ "id": "dw-9e3a958a",
1927
+ "templateRef": "temp-sp",
1928
+ "name": "温控",
1929
+ "driver": "mock",
1930
+ "enabled": true,
1931
+ "holdIntervalMs": null,
1932
+ "unit": "℃",
1933
+ "decimals": 1,
1934
+ "min": 150,
1935
+ "max": 200,
1936
+ "deviceBindingId": null,
1937
+ "driverConfig": {},
1938
+ "lineId": "ln-156abb71",
1939
+ "value": null,
1940
+ "lastAckAt": null,
1941
+ "lastWriteAt": null,
1942
+ "state": "idle",
1943
+ "lastError": null,
1944
+ "createdAt": "2026-09-02T04:18:28.100Z"
1945
+ },
1946
+ {
1947
+ "id": "dw-a2e1ca20",
1948
+ "templateRef": "temp-sp",
1949
+ "name": "温控",
1950
+ "driver": "mock",
1951
+ "enabled": true,
1952
+ "holdIntervalMs": null,
1953
+ "unit": "℃",
1954
+ "decimals": 1,
1955
+ "min": 150,
1956
+ "max": 200,
1957
+ "deviceBindingId": null,
1958
+ "driverConfig": {},
1959
+ "lineId": "ln-bac43927",
1960
+ "value": null,
1961
+ "lastAckAt": null,
1962
+ "lastWriteAt": null,
1963
+ "state": "idle",
1964
+ "lastError": null,
1965
+ "createdAt": "2026-09-02T04:20:58.320Z"
1966
+ },
1967
+ {
1968
+ "id": "dw-6ab87477",
1969
+ "templateRef": "temp-sp",
1970
+ "name": "温控",
1971
+ "driver": "mock",
1972
+ "enabled": true,
1973
+ "holdIntervalMs": null,
1974
+ "unit": "℃",
1975
+ "decimals": 1,
1976
+ "min": 150,
1977
+ "max": 200,
1978
+ "deviceBindingId": null,
1979
+ "driverConfig": {},
1980
+ "lineId": "ln-f223008a",
1981
+ "value": null,
1982
+ "lastAckAt": null,
1983
+ "lastWriteAt": null,
1984
+ "state": "idle",
1985
+ "lastError": null,
1986
+ "createdAt": "2026-09-02T05:37:46.098Z"
1840
1987
  }
1841
1988
  ]