1313 senec_password
1414 senec_token
1515 senec_system_id
16+ senec_ignore
1617 influx_schema
1718 influx_host
1819 influx_port
2627 senec_adapter : :local ,
2728 senec_schema : :https ,
2829 senec_language : :de ,
30+ senec_ignore : [ ] ,
2931 influx_schema : :http ,
3032 influx_port : 8086 ,
3133 influx_measurement : 'SENEC' ,
3638 def initialize ( *options )
3739 super
3840
39- set_defaults_and_types
40- validate!
41- end
42-
43- def set_defaults_and_types
44- convert_types
41+ set_types
4542 set_defaults
46- limit_interval
43+ limit_senec_interval
44+ validate!
4745 end
4846
49- def convert_types
50- # Strip blanks
47+ def set_types
5148 KEYS . each do |key |
5249 self [ key ] = self [ key ] . presence
53- end
54-
55- # Symbols
56- %i[ senec_adapter senec_schema senec_language influx_schema ] . each do | key |
57- self [ key ] = self [ key ] & .to_sym
58- end
59-
60- # Integer
61- %i[ senec_interval influx_port ] . each do | key |
62- self [ key ] = self [ key ] &. to_i
50+ next unless self [ key ]
51+
52+ case key
53+ when : senec_adapter, : senec_schema, : senec_language, : influx_schema
54+ self [ key ] = self [ key ] . to_sym
55+ when :senec_interval , :influx_port
56+ self [ key ] = self [ key ] . to_i
57+ when :senec_ignore
58+ self [ key ] = self [ key ] . split ( ',' ) . map ( & :to_sym )
59+ end
6360 end
6461 end
6562
@@ -71,7 +68,7 @@ def set_defaults
7168 self [ :senec_interval ] ||= senec_adapter == :local ? 5 : 60
7269 end
7370
74- def limit_interval
71+ def limit_senec_interval
7572 minimum = case senec_adapter
7673 when :local
7774 # Be careful with your local SENEC device, do not flood it with queries.
@@ -97,7 +94,8 @@ def validate!
9794 end
9895
9996 validate_influx_settings!
100- validate_interval! ( senec_interval )
97+ validate_senec_interval!
98+ validate_senec_ignore!
10199 end
102100
103101 def influx_url
@@ -118,6 +116,10 @@ def adapter
118116 end
119117 end
120118
119+ def excludes? ( key )
120+ senec_ignore . include? ( key )
121+ end
122+
121123 attr_writer :logger
122124
123125 def logger
@@ -130,8 +132,8 @@ def validate_senec_adapter!
130132 %i[ local cloud ] . include? ( senec_adapter ) || throw ( "SENEC_ADAPTER is invalid: #{ senec_adapter } " )
131133 end
132134
133- def validate_interval! ( interval )
134- ( interval . is_a? ( Integer ) && interval . positive? ) || throw ( "SENEC_INTERVAL is invalid: #{ interval } " )
135+ def validate_senec_interval!
136+ ( senec_interval . is_a? ( Integer ) && senec_interval . positive? ) || throw ( "SENEC_INTERVAL is invalid: #{ senec_interval } " )
135137 end
136138
137139 def validate_senec_credentials!
@@ -142,6 +144,12 @@ def validate_senec_credentials!
142144 senec_username . include? ( '@' ) || throw ( 'SENEC_USERNAME is invalid' )
143145 end
144146
147+ def validate_senec_ignore!
148+ senec_ignore . all? do |key |
149+ SolectrusRecord ::KEYS . include? ( key ) || throw ( "SENEC_IGNORE contains unknown field: #{ key } " )
150+ end
151+ end
152+
145153 def validate_influx_settings!
146154 %i[
147155 influx_schema
@@ -166,24 +174,9 @@ def validate_url!(url)
166174
167175 def self . from_env ( options = { } )
168176 new (
169- {
170- senec_adapter : ENV . fetch ( 'SENEC_ADAPTER' , nil ) ,
171- senec_host : ENV . fetch ( 'SENEC_HOST' , nil ) ,
172- senec_schema : ENV . fetch ( 'SENEC_SCHEMA' , nil ) ,
173- senec_interval : ENV . fetch ( 'SENEC_INTERVAL' , nil ) ,
174- senec_language : ENV . fetch ( 'SENEC_LANGUAGE' , nil ) ,
175- senec_username : ENV . fetch ( 'SENEC_USERNAME' , nil ) ,
176- senec_password : ENV . fetch ( 'SENEC_PASSWORD' , nil ) ,
177- senec_token : ENV . fetch ( 'SENEC_TOKEN' , nil ) ,
178- senec_system_id : ENV . fetch ( 'SENEC_SYSTEM_ID' , nil ) ,
179- influx_host : ENV . fetch ( 'INFLUX_HOST' ) ,
180- influx_schema : ENV . fetch ( 'INFLUX_SCHEMA' , nil ) ,
181- influx_port : ENV . fetch ( 'INFLUX_PORT' , nil ) ,
182- influx_token : ENV . fetch ( 'INFLUX_TOKEN' ) ,
183- influx_org : ENV . fetch ( 'INFLUX_ORG' ) ,
184- influx_bucket : ENV . fetch ( 'INFLUX_BUCKET' , nil ) ,
185- influx_measurement : ENV . fetch ( 'INFLUX_MEASUREMENT' , nil ) ,
186- } . merge ( options ) ,
177+ KEYS . to_h do |key |
178+ [ key , ENV . fetch ( key . to_s . upcase , nil ) ]
179+ end . merge ( options ) ,
187180 )
188181 end
189182 end
0 commit comments