7
7
8
8
from .transport_base import transport_base
9
9
from ..protocol_settings import Data_Type , Registry_Type , registry_map_entry , protocol_settings
10
+ from defs .common import strtobool
10
11
11
12
from typing import TYPE_CHECKING
12
13
if TYPE_CHECKING :
@@ -20,13 +21,28 @@ class modbus_base(transport_base):
20
21
analyze_protocol_save_load : bool = False
21
22
first_connect : bool = True
22
23
24
+ send_holding_register : bool = True
25
+ send_input_register : bool = True
26
+
23
27
def __init__ (self , settings : 'SectionProxy' , protocolSettings : 'protocol_settings' = None ):
24
28
super ().__init__ (settings , protocolSettings = protocolSettings )
25
29
26
- self .analyze_protocol_enabled = settings .getboolean ('analyze_protocol' , fallback = self .analyze_protocol )
30
+ self .analyze_protocol_enabled = settings .getboolean ('analyze_protocol' , fallback = self .analyze_protocol_enabled )
27
31
self .analyze_protocol_save_load = settings .getboolean ('analyze_protocol_save_load' , fallback = self .analyze_protocol_save_load )
28
32
29
33
34
+ #get defaults from protocol settings
35
+ if 'send_input_register' in self .protocolSettings .settings :
36
+ self .send_input_register = strtobool (self .protocolSettings .settings ['send_input_register' ])
37
+
38
+ if 'send_holding_register' in self .protocolSettings .settings :
39
+ self .send_holding_register = strtobool (self .protocolSettings .settings ['send_holding_register' ])
40
+
41
+ #allow enable/disable of which registers to send
42
+ self .send_holding_register = settings .getboolean ('send_holding_register' , fallback = self .send_holding_register )
43
+ self .send_input_register = settings .getboolean ('send_input_register' , fallback = self .send_input_register )
44
+
45
+
30
46
if self .analyze_protocol_enabled :
31
47
self .connect ()
32
48
self .analyze_protocol ()
@@ -71,7 +87,7 @@ def read_serial_number(self) -> str:
71
87
sn2 = sn2 + str (data_bytes .decode ('utf-8' ))
72
88
sn3 = str (data_bytes .decode ('utf-8' )) + sn3
73
89
74
- time .sleep (self .modbus_delay ) #sleep inbetween requests so modbus can rest
90
+ time .sleep (self .modbus_delay * 2 ) #sleep inbetween requests so modbus can rest
75
91
76
92
print (sn2 )
77
93
print (sn3 )
@@ -105,7 +121,16 @@ def write_data(self, data : dict[str, str]) -> None:
105
121
106
122
def read_data (self ) -> dict [str , str ]:
107
123
info = {}
108
- for registry_type in Registry_Type :
124
+ #modbus - only read input/holding registries
125
+ for registry_type in (Registry_Type .INPUT , Registry_Type .HOLDING ):
126
+
127
+ #enable / disable input/holding register
128
+ if registry_type == Registry_Type .INPUT and not self .send_input_register :
129
+ continue
130
+
131
+ if registry_type == Registry_Type .HOLDING and not self .send_holding_register :
132
+ continue
133
+
109
134
registry = self .read_modbus_registers (ranges = self .protocolSettings .get_registry_ranges (registry_type = registry_type ), registry_type = registry_type )
110
135
new_info = self .protocolSettings .process_registery (registry , self .protocolSettings .get_registry_map (registry_type ))
111
136
0 commit comments