pymscada 0.0.6__py3-none-any.whl → 0.0.15__py3-none-any.whl

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.

Potentially problematic release.


This version of pymscada might be problematic. Click here for more details.

Files changed (39) hide show
  1. pymscada/__init__.py +7 -3
  2. pymscada/demo/logixclient.yaml +50 -0
  3. pymscada/demo/modbus_plc.py +46 -29
  4. pymscada/demo/modbusclient.yaml +10 -1
  5. pymscada/demo/modbusserver.yaml +12 -3
  6. pymscada/demo/pymscada-bus.service +1 -1
  7. pymscada/demo/pymscada-files.service +1 -1
  8. pymscada/demo/pymscada-history.service +1 -1
  9. pymscada/demo/pymscada-io-logixclient.service +15 -0
  10. pymscada/demo/{pymscada-modbusclient.service → pymscada-io-modbusclient.service} +1 -1
  11. pymscada/demo/{pymscada-modbusserver.service → pymscada-io-modbusserver.service} +1 -1
  12. pymscada/demo/pymscada-io-snmpclient.service +15 -0
  13. pymscada/demo/pymscada-wwwserver.service +1 -1
  14. pymscada/demo/snmpclient.yaml +73 -0
  15. pymscada/demo/tags.yaml +110 -5
  16. pymscada/demo/wwwserver.yaml +16 -10
  17. pymscada/history.py +46 -97
  18. pymscada/iodrivers/__init__.py +0 -0
  19. pymscada/iodrivers/logix_client.py +80 -0
  20. pymscada/iodrivers/logix_map.py +147 -0
  21. pymscada/{modbus_client.py → iodrivers/modbus_client.py} +3 -3
  22. pymscada/{modbus_server.py → iodrivers/modbus_server.py} +1 -1
  23. pymscada/iodrivers/snmp_client.py +75 -0
  24. pymscada/iodrivers/snmp_client2.py +53 -0
  25. pymscada/iodrivers/snmp_map.py +71 -0
  26. pymscada/main.py +24 -4
  27. pymscada/periodic.py +1 -1
  28. pymscada/samplers.py +93 -0
  29. pymscada/tag.py +0 -27
  30. pymscada/tools/walk.py +55 -0
  31. pymscada/validate.py +356 -0
  32. pymscada-0.0.15.dist-info/METADATA +270 -0
  33. pymscada-0.0.15.dist-info/RECORD +58 -0
  34. {pymscada-0.0.6.dist-info → pymscada-0.0.15.dist-info}/WHEEL +1 -1
  35. pymscada-0.0.6.dist-info/METADATA +0 -58
  36. pymscada-0.0.6.dist-info/RECORD +0 -45
  37. /pymscada/{modbus_map.py → iodrivers/modbus_map.py} +0 -0
  38. {pymscada-0.0.6.dist-info → pymscada-0.0.15.dist-info}/entry_points.txt +0 -0
  39. {pymscada-0.0.6.dist-info → pymscada-0.0.15.dist-info}/licenses/LICENSE +0 -0
pymscada/__init__.py CHANGED
@@ -2,19 +2,23 @@
2
2
  from pymscada.bus_client import BusClient
3
3
  from pymscada.bus_server import BusServer
4
4
  from pymscada.config import Config
5
+ from pymscada.iodrivers.logix_client import LogixClient
6
+ from pymscada.iodrivers.modbus_client import ModbusClient
7
+ from pymscada.iodrivers.modbus_server import ModbusServer
5
8
  from pymscada.misc import find_nodes, ramp
6
- from pymscada.modbus_client import ModbusClient
7
- from pymscada.modbus_server import ModbusServer
8
9
  from pymscada.periodic import Periodic
9
10
  from pymscada.tag import Tag
11
+ from pymscada.validate import validate
10
12
 
11
13
  __all__ = [
12
14
  'BusClient',
13
15
  'BusServer',
14
16
  'Config',
15
- 'find_nodes', 'ramp',
17
+ 'LogixClient',
16
18
  'ModbusClient',
17
19
  'ModbusServer',
20
+ 'find_nodes', 'ramp',
18
21
  'Periodic',
19
22
  'Tag',
23
+ 'validate',
20
24
  ]
@@ -0,0 +1,50 @@
1
+ bus_ip: 127.0.0.1
2
+ bus_port: 1324
3
+ rtus:
4
+ - name: Ani
5
+ ip: 172.26.7.196
6
+ rate: 0.2
7
+ read:
8
+ - {addr: Fout, type: 'REAL[]', start: 0, end: 99}
9
+ - {addr: Iout, type: 'DINT[]', start: 0, end: 99}
10
+ - {addr: OutVar, type: REAL}
11
+ writeok:
12
+ - {addr: Fin, type: 'REAL[]', start: 0, end: 99}
13
+ - {addr: Iin, type: 'REAL[]', start: 0, end: 99}
14
+ - {addr: InVar, type: REAL}
15
+ tags:
16
+ Ani_Fin_20:
17
+ type: float32
18
+ read: 'Ani:Fout[20]'
19
+ write: 'Ani:Fin[20]'
20
+ Ani_Fout_20:
21
+ type: float32
22
+ addr: 'Ani:Fout[20]'
23
+ Ani_Iin_20:
24
+ type: int32
25
+ read: 'Ani:Iout[20]'
26
+ write: 'Ani:Iin[20]'
27
+ Ani_Iout_20:
28
+ type: int32
29
+ addr: 'Ani:Iout[20]'
30
+ Ani_Iin_21_0:
31
+ type: bool
32
+ read: 'Ani:Iout[21].0'
33
+ write: 'Ani:Iin[21].0'
34
+ Ani_Iout_21_0:
35
+ type: bool
36
+ addr: 'Ani:Iout[21].0'
37
+ Ani_Iin_21_1:
38
+ type: bool
39
+ read: 'Ani:Iout[21].1'
40
+ write: 'Ani:Iin[21].1'
41
+ Ani_Iout_21_1:
42
+ type: bool
43
+ addr: 'Ani:Iout[21].1'
44
+ InVar:
45
+ type: float32
46
+ read: Ani:OutVar
47
+ write: Ani:InVar
48
+ OutVar:
49
+ type: float32
50
+ addr: Ani:OutVar
@@ -1,36 +1,52 @@
1
1
  """Demo PLC simulation."""
2
2
  import asyncio
3
+ import pymscada.samplers as ps
3
4
  from pymscada import Config, ramp, ModbusServer, Periodic, Tag
4
5
 
5
6
 
6
- sim_IntSet = Tag('sim_IntSet', int)
7
- sim_IntSet.value = 0
8
- sim_IntVal = Tag('sim_IntVal', int)
9
- sim_FloatSet = Tag('sim_FloatSet', float)
10
- sim_FloatSet.value = 0
11
- sim_FloatVal = Tag('sim_FloatVal', float)
12
- sim_MultiSet = Tag('sim_MultiSet', int)
13
- sim_MultiSet.value = 0
14
- sim_MultiVal = Tag('sim_MultiVal', int)
15
- sim_TimeSet = Tag('sim_TimeSet', int)
16
- sim_TimeSet.value = 0
17
- sim_TimeVal = Tag('sim_TimeVal', int)
18
- sim_DateSet = Tag('sim_DateSet', int)
19
- sim_DateSet.value = 0
20
- sim_DateVal = Tag('sim_DateVal', int)
21
- sim_DateTimeSet = Tag('sim_DateTimeSet', int)
22
- sim_DateTimeSet.value = 0
23
- sim_DateTimeVal = Tag('sim_DateTimeVal', int)
24
-
25
-
26
- async def main_periodic():
27
- """Emulate some PLC logic."""
28
- sim_IntVal.value = ramp(sim_IntVal.value, sim_IntSet.value, 1)
29
- sim_FloatVal.value = ramp(sim_FloatVal.value, sim_FloatSet.value, 0.5)
30
- sim_MultiVal.value = sim_MultiSet.value
31
- sim_TimeVal.value = sim_TimeSet.value
32
- sim_DateVal.value = sim_DateSet.value
33
- sim_DateTimeVal.value = sim_DateTimeSet.value
7
+ class PLC_Logic():
8
+ """PLC Logic."""
9
+
10
+ def __init__(self):
11
+ """Create tags."""
12
+ self.i = 0
13
+ self.sim_IntSet = Tag('sim_IntSet', int)
14
+ self.sim_IntSet.value = 0
15
+ self.sim_IntVal = Tag('sim_IntVal', int)
16
+ self.sim_FloatSet = Tag('sim_FloatSet', float)
17
+ self.sim_FloatSet.value = 0
18
+ self.sim_FloatVal = Tag('sim_FloatVal', float)
19
+ self.sim_MultiSet = Tag('sim_MultiSet', int)
20
+ self.sim_MultiSet.value = 0
21
+ self.sim_MultiVal = Tag('sim_MultiVal', int)
22
+ self.sim_TimeSet = Tag('sim_TimeSet', int)
23
+ self.sim_TimeSet.value = 0
24
+ self.sim_TimeVal = Tag('sim_TimeVal', int)
25
+ self.sim_DateSet = Tag('sim_DateSet', int)
26
+ self.sim_DateSet.value = 0
27
+ self.sim_DateVal = Tag('sim_DateVal', int)
28
+ self.sim_DateTimeSet = Tag('sim_DateTimeSet', int)
29
+ self.sim_DateTimeSet.value = 0
30
+ self.sim_DateTimeVal = Tag('sim_DateTimeVal', int)
31
+ self.avg_temp = ps.Average(Tag('cpu_temp', float))
32
+ self.cpu_load = Tag('cpu_load', float)
33
+ self.disk_use = Tag('disk_use', float)
34
+
35
+ async def periodic(self):
36
+ """Emulate some PLC logic."""
37
+ self.sim_IntVal.value = ramp(self.sim_IntVal.value,
38
+ self.sim_IntSet.value, 1)
39
+ self.sim_FloatVal.value = ramp(self.sim_FloatVal.value,
40
+ self.sim_FloatSet.value, 0.5)
41
+ self.sim_MultiVal.value = self.sim_MultiSet.value
42
+ self.sim_TimeVal.value = self.sim_TimeSet.value
43
+ self.sim_DateVal.value = self.sim_DateSet.value
44
+ self.sim_DateTimeVal.value = self.sim_DateTimeSet.value
45
+ self.avg_temp.step(ps.get_cpu_temp())
46
+ self.i += 1
47
+ if self.i % 60 == 0:
48
+ self.cpu_load.value = ps.get_cpu_load()
49
+ self.disk_use.value = ps.get_disk_use()
34
50
 
35
51
 
36
52
  async def main():
@@ -38,7 +54,8 @@ async def main():
38
54
  config = Config('modbusserver.yaml')
39
55
  mbserver = ModbusServer(**config)
40
56
  await mbserver.start()
41
- periodic = Periodic(main_periodic, 1.0)
57
+ plc = PLC_Logic()
58
+ periodic = Periodic(plc.periodic, 1.0)
42
59
  await periodic.start()
43
60
  await asyncio.get_event_loop().create_future()
44
61
 
@@ -47,4 +47,13 @@ tags:
47
47
  addr: RTU:1:4x:25
48
48
  DateTimeVal:
49
49
  type: uint64
50
- addr: RTU:1:4x:29
50
+ addr: RTU:1:4x:29
51
+ cpu_temp:
52
+ type: float32
53
+ addr: RTU:1:4x:33
54
+ cpu_load:
55
+ type: float32
56
+ addr: RTU:1:4x:35
57
+ disk_use:
58
+ type: float32
59
+ addr: RTU:1:4x:37
@@ -1,5 +1,5 @@
1
- bus_ip:
2
- bus_port:
1
+ bus_ip: 192.168.1.100 # for the demo PLC make empty (None)
2
+ bus_port: 2345 # for the demo PLC make empty (None)
3
3
  rtus:
4
4
  - name: RTU
5
5
  ip: 0.0.0.0
@@ -43,4 +43,13 @@ tags:
43
43
  addr: RTU:1:4x:25
44
44
  sim_DateTimeVal:
45
45
  type: uint64
46
- addr: RTU:1:4x:29
46
+ addr: RTU:1:4x:29
47
+ cpu_temp:
48
+ type: float32
49
+ addr: RTU:1:4x:33
50
+ cpu_load:
51
+ type: float32
52
+ addr: RTU:1:4x:35
53
+ disk_use:
54
+ type: float32
55
+ addr: RTU:1:4x:37
@@ -3,7 +3,7 @@
3
3
 
4
4
  [Service]
5
5
  WorkingDirectory=__DIR__
6
- ExecStart=__PYMSCADA__ bus __DIR__/config/bus.yaml
6
+ ExecStart=__PYMSCADA__ bus --config __DIR__/config/bus.yaml
7
7
  Restart=always
8
8
  RestartSec=5
9
9
  User=mscada
@@ -5,7 +5,7 @@
5
5
 
6
6
  [Service]
7
7
  WorkingDirectory=__DIR__
8
- ExecStart=__PYMSCADA__ files __DIR__/config/files.yaml
8
+ ExecStart=__PYMSCADA__ files --config __DIR__/config/files.yaml
9
9
  Restart=always
10
10
  RestartSec=5
11
11
  User=mscada
@@ -5,7 +5,7 @@
5
5
 
6
6
  [Service]
7
7
  WorkingDirectory=__DIR__
8
- ExecStart=__PYMSCADA__ history __DIR__/config/bus.yaml
8
+ ExecStart=__PYMSCADA__ history --config __DIR__/config/history.yaml --tags __DIR__/config/tags.yaml
9
9
  Restart=always
10
10
  RestartSec=5
11
11
  User=mscada
@@ -0,0 +1,15 @@
1
+ [Unit]
2
+ Description=pymscada - pycomm3 client
3
+ BindsTo=pymscada-bus.service
4
+ After=pymscada-bus.service
5
+
6
+ [Service]
7
+ WorkingDirectory=__DIR__
8
+ ExecStart=__PYMSCADA__ logixclient --config __DIR__/config/logixclient.yaml
9
+ Restart=always
10
+ RestartSec=5
11
+ User=mscada
12
+ Group=mscada
13
+
14
+ [Install]
15
+ WantedBy=multi-user.target
@@ -5,7 +5,7 @@
5
5
 
6
6
  [Service]
7
7
  WorkingDirectory=__DIR__
8
- ExecStart=__PYMSCADA__ modbusclient __DIR__/config/modbusclient.yaml
8
+ ExecStart=__PYMSCADA__ modbusclient --config __DIR__/config/modbusclient.yaml
9
9
  Restart=always
10
10
  RestartSec=5
11
11
  User=mscada
@@ -5,7 +5,7 @@
5
5
 
6
6
  [Service]
7
7
  WorkingDirectory=__DIR__
8
- ExecStart=__PYMSCADA__ modbusserver __DIR__/config/modbusserver.yaml
8
+ ExecStart=__PYMSCADA__ modbusserver --config __DIR__/config/modbusserver.yaml
9
9
  Restart=always
10
10
  RestartSec=5
11
11
  User=mscada
@@ -0,0 +1,15 @@
1
+ [Unit]
2
+ Description=pymscada - SNMP client
3
+ BindsTo=pymscada-bus.service
4
+ After=pymscada-bus.service
5
+
6
+ [Service]
7
+ WorkingDirectory=__DIR__
8
+ ExecStart=__PYMSCADA__ snmpclient --config __DIR__/config/snmpclient.yaml
9
+ Restart=always
10
+ RestartSec=5
11
+ User=mscada
12
+ Group=mscada
13
+
14
+ [Install]
15
+ WantedBy=multi-user.target
@@ -5,7 +5,7 @@
5
5
 
6
6
  [Service]
7
7
  WorkingDirectory=__DIR__
8
- ExecStart=__PYMSCADA__ wwwserver __DIR__/config/wwwserver.yaml
8
+ ExecStart=__PYMSCADA__ wwwserver --config __DIR__/config/wwwserver.yaml --tags __DIR__/config/tags.yaml
9
9
  Restart=always
10
10
  RestartSec=5
11
11
  User=mscada
@@ -0,0 +1,73 @@
1
+ bus_ip: 127.0.0.1
2
+ bus_port: 1324
3
+ rtus:
4
+ - name: router
5
+ ip: 172.26.3.254
6
+ community: public
7
+ rate: 10
8
+ read:
9
+ - '1.3.6.1.2.1.31.1.1.1.6.1'
10
+ - '1.3.6.1.2.1.31.1.1.1.6.2'
11
+ - '1.3.6.1.2.1.31.1.1.1.6.3'
12
+ - '1.3.6.1.2.1.31.1.1.1.6.4'
13
+ - '1.3.6.1.2.1.31.1.1.1.6.5'
14
+ - '1.3.6.1.2.1.31.1.1.1.6.6'
15
+ - '1.3.6.1.2.1.31.1.1.1.6.7'
16
+ - '1.3.6.1.2.1.31.1.1.1.6.8'
17
+ - '1.3.6.1.2.1.31.1.1.1.10.1'
18
+ - '1.3.6.1.2.1.31.1.1.1.10.2'
19
+ - '1.3.6.1.2.1.31.1.1.1.10.3'
20
+ - '1.3.6.1.2.1.31.1.1.1.10.4'
21
+ - '1.3.6.1.2.1.31.1.1.1.10.5'
22
+ - '1.3.6.1.2.1.31.1.1.1.10.6'
23
+ - '1.3.6.1.2.1.31.1.1.1.10.7'
24
+ - '1.3.6.1.2.1.31.1.1.1.10.8'
25
+ tags:
26
+ Router_eth1_bytes_in:
27
+ type: int_roc
28
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.1'
29
+ Router_eth1_bytes_out:
30
+ type: int_roc
31
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.1'
32
+ Router_eth2_bytes_in:
33
+ type: int_roc
34
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.2'
35
+ Router_eth2_bytes_out:
36
+ type: int_roc
37
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.2'
38
+ Router_eth3_bytes_in:
39
+ type: int_roc
40
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.3'
41
+ Router_eth3_bytes_out:
42
+ type: int_roc
43
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.3'
44
+ Router_eth4_bytes_in:
45
+ type: int_roc
46
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.4'
47
+ Router_eth4_bytes_out:
48
+ type: int_roc
49
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.4'
50
+ Router_eth5_bytes_in:
51
+ type: int_roc
52
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.5'
53
+ Router_eth5_bytes_out:
54
+ type: int_roc
55
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.5'
56
+ Router_eth6_bytes_in:
57
+ type: int_roc
58
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.6'
59
+ Router_eth6_bytes_out:
60
+ type: int_roc
61
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.6'
62
+ Router_eth7_bytes_in:
63
+ type: int_roc
64
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.7'
65
+ Router_eth7_bytes_out:
66
+ type: int_roc
67
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.7'
68
+ Router_eth8_bytes_in:
69
+ type: int_roc
70
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.6.8'
71
+ Router_eth8_bytes_out:
72
+ type: int_roc
73
+ addr: 'router:1.3.6.1.2.1.31.1.1.1.10.8'
pymscada/demo/tags.yaml CHANGED
@@ -28,16 +28,16 @@ IntVal:
28
28
  FloatSet:
29
29
  desc: Float Setpoint
30
30
  type: float
31
- min: -1e100
32
- max: 1e100
31
+ min: -1.e+100
32
+ max: 1.e+100
33
33
  units: 'm'
34
34
  dp: 1
35
35
  init: 2
36
36
  FloatVal:
37
37
  desc: Float Value
38
38
  type: float
39
- min: -1e100
40
- max: 1e100
39
+ min: -1.e+100
40
+ max: 1.e+100
41
41
  units: 'm'
42
42
  dp: 1
43
43
  init: 2
@@ -108,4 +108,109 @@ FloatSelect:
108
108
  init:
109
109
  labels: [Floats, For, This, Tag]
110
110
  values: [0.1, 0.1, 0.2, 0.3]
111
- locks: [0, 1, 0, 0]
111
+ locks: [0, 1, 0, 0]
112
+ cpu_temp:
113
+ desc: CPU Load
114
+ type: float
115
+ min: 0
116
+ max: 100
117
+ units: '°C'
118
+ dp: 1
119
+ cpu_load:
120
+ desc: Float Value
121
+ type: float
122
+ min: 0
123
+ max: 100
124
+ units: '%'
125
+ dp: 1
126
+ disk_use:
127
+ desc: Float Value
128
+ type: float
129
+ min: 0
130
+ max: 100
131
+ units: '%'
132
+ dp: 1
133
+ sim_IntSet: # for the demo PLC sim_ tags not required
134
+ desc: Simulation tag
135
+ type: int
136
+ sim_IntVal:
137
+ desc: Simulation tag
138
+ type: int
139
+ sim_FloatSet:
140
+ desc: Simulation tag
141
+ type: float
142
+ sim_FloatVal:
143
+ desc: Simulation tag
144
+ type: float
145
+ sim_MultiSet:
146
+ desc: Simulation tag
147
+ type: int
148
+ sim_MultiVal:
149
+ desc: Simulation tag
150
+ type: int
151
+ sim_TimeSet:
152
+ desc: Simulation tag
153
+ type: int
154
+ sim_TimeVal:
155
+ desc: Simulation tag
156
+ type: int
157
+ sim_DateSet:
158
+ desc: Simulation tag
159
+ type: int
160
+ sim_DateVal:
161
+ desc: Simulation tag
162
+ type: int
163
+ sim_DateTimeSet:
164
+ desc: Simulation tag
165
+ type: int
166
+ sim_DateTimeVal:
167
+ desc: Simulation tag
168
+ type: int
169
+ Router_eth1_bytes_in:
170
+ desc: eth1 bytes in
171
+ type: int
172
+ Router_eth1_bytes_out:
173
+ desc: eth1 bytes out
174
+ type: int
175
+ Router_eth2_bytes_in:
176
+ desc: eth2 bytes in
177
+ type: int
178
+ Router_eth2_bytes_out:
179
+ desc: eth2 bytes out
180
+ type: int
181
+ Router_eth3_bytes_in:
182
+ desc: eth3 bytes in
183
+ type: int
184
+ Router_eth3_bytes_out:
185
+ desc: eth3 bytes out
186
+ type: int
187
+ Router_eth4_bytes_in:
188
+ desc: eth4 bytes in
189
+ type: int
190
+ Router_eth4_bytes_out:
191
+ desc: eth4 bytes out
192
+ type: int
193
+ Router_eth5_bytes_in:
194
+ desc: eth5 bytes in
195
+ type: int
196
+ Router_eth5_bytes_out:
197
+ desc: eth5 bytes out
198
+ type: int
199
+ Router_eth6_bytes_in:
200
+ desc: eth6 bytes in
201
+ type: int
202
+ Router_eth6_bytes_out:
203
+ desc: eth6 bytes out
204
+ type: int
205
+ Router_eth7_bytes_in:
206
+ desc: eth7 bytes in
207
+ type: int
208
+ Router_eth7_bytes_out:
209
+ desc: eth7 bytes out
210
+ type: int
211
+ Router_eth8_bytes_in:
212
+ desc: eth8 bytes in
213
+ type: int
214
+ Router_eth8_bytes_out:
215
+ desc: eth8 bytes out
216
+ type: int
@@ -51,30 +51,36 @@ pages:
51
51
  axes:
52
52
  - scale: x
53
53
  range: [-86400, 0] # 86400 172800 1209600
54
- - scale: integers
54
+ - scale: '°C'
55
55
  range: [0.0, 100.0]
56
56
  dp: 1
57
- - scale: floats
57
+ - scale: '%'
58
58
  range: [0.0, 100.0]
59
59
  dp: 1
60
- side: 1
60
+ # side: 1
61
61
  # bands: # TODO
62
62
  # - series: [I_Transpower_Limit_Hi, I_Transpower_Limit_Lo]
63
63
  # fill: [red, 0.2]
64
64
  # dir: -1
65
65
  series:
66
- - tagname: IntVal
67
- label: Int
68
- scale: integers
69
- color: red
66
+ - tagname: cpu_load
67
+ label: CPU Load
68
+ scale: '%'
69
+ color: black
70
70
  width: 1.5
71
71
  dp: 1
72
- - tagname: FloatVal
73
- label: Float
74
- scale: floats
72
+ - tagname: disk_use
73
+ label: Disk Use
74
+ scale: '%'
75
75
  color: blue
76
76
  width: 1
77
77
  dp: 1
78
+ - tagname: cpu_temp
79
+ label: CPU Temp
80
+ scale: '°C'
81
+ color: red
82
+ width: 1
83
+ dp: 1
78
84
  - name: Files
79
85
  parent: Dropdown
80
86
  items: