hodmin 0.1.4 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8bb33acdfd9c0f5535e53bf8c5d26fc81fdf6fbf
4
- data.tar.gz: 1eee8590abe1d7fb11b958a2f1f8adf46d713d9e
3
+ metadata.gz: 633ba0e1284ac259815ac6780c0fe8e903f01abe
4
+ data.tar.gz: 72d81747ae99df84f8beb6b2d2299b9e547e6eee
5
5
  SHA512:
6
- metadata.gz: 8216ba7554941c66bdedb0188c4ec4d966b81e938dd562621a54f46fae00e4c364e66e3eccd74eb1b831ddcecaf620cdeff469fb3b59d62f84e158da12cecf6c
7
- data.tar.gz: 7b20bae529e42caf8da7c307bc7986ad49988e872cf802a0ce5c1bc6591a16fce2e8750cf526b56fd03e0a3eaf77e59f18b01fd0ebcc7bc93d3d382ac3fbeda7
6
+ metadata.gz: 3c7a4b16c02349d8c2b8cee0f5298aca28aed5bf034aa674d89f788bfc044dcfc21b5d8de8b9585291297cc349404198d6da6c15e9db3e95bd6ebd1dd177e379
7
+ data.tar.gz: 4ea0c6a415352f4e0d4edacdd8baac9a014d417a27c6a6100860c4e81a6d07d66970a8eceffc1d954d07157fa9364a7a8a6d546b1fde8c5d57f351926234e3d6
@@ -106,10 +106,7 @@ class HomieDevice
106
106
  + ' check hodmin for updates'
107
107
  end
108
108
  mhash.tap { |hs| hs.delete('$homie') }
109
- # Some topics-names from homie do not fit our needs due to special chars like '/'.
110
- # ['$fw/name','$fw/version','$fw/checksum']
111
- # Replace '/' by '_':
112
- mhash.each { |k, v| create_attr(k.to_s.delete('$').gsub(/\//, '_').tr('-', '_'), v) }
109
+ mhash.each { |k, v| create_attr(k.to_s, v) }
113
110
 
114
111
  # mac only downcase and without separating ':'
115
112
  @mac = mac.delete(':').downcase
@@ -127,17 +124,15 @@ class HomieDevice
127
124
  self.class.send(:define_method, name, &block)
128
125
  end
129
126
 
130
- # Helper to remove some special chars from string to avoid problems in instance_variable_set:
131
- def remove_special_chars(str)
132
- to_be_replaced = ['%', '!', '(', ')', '&', '?', ',', '.', '^', ' ']
133
- to_be_replaced.each{|char| str.gsub!(char,'')}
134
- str
135
- end
136
-
137
127
  # Helper to create instance variables on the fly:
138
128
  def create_attr(name, value)
139
- # replace chars
140
- name = remove_special_chars(name)
129
+ # Some topics-names of homie do not fit our needs due to special chars like '/'.
130
+ # ['$fw/name','$fw/version','$fw/checksum']
131
+ # to fix this, replace / delete some chars:
132
+ name = cleanup_instance_var_name(name)
133
+ # do we already have a instance variable with this name?
134
+ name = ensure_individual_instance_name(name, instance_variables)
135
+ # now name should be clean, we create an instancevariable using this name:
141
136
  create_method(name.to_sym) { instance_variable_get('@' + name) }
142
137
  instance_variable_set('@' + name, value)
143
138
  end
@@ -218,7 +213,7 @@ end
218
213
 
219
214
  # Reads all Homie-Devices from given broker.
220
215
  # To be called with connected MQTT-client. Topic has to be set in calling program.
221
- # Variable timeout_seconds defines, after what time out client.get will be cancelled. Choose
216
+ # Variable timeout_seconds defines, after what time our client.get will be cancelled. Choose
222
217
  # a value high enough for your data, but fast enough for quick response. default is 0.7 sec,
223
218
  # which should be enough for a lot of Homies controlled by a broker running on a Raspberry-PI.
224
219
  def get_homies(client, *fw_list)
@@ -430,3 +425,38 @@ def default_config_initialize
430
425
  config['ota'] = Hash['enabled' => true]
431
426
  config
432
427
  end
428
+
429
+ # Helper to remove some special chars from string to avoid problems in instance_variable_set:
430
+ def cleanup_instance_var_name(inputstring)
431
+ # translate some signs into char-representation:
432
+ str = inputstring
433
+ to_be_replaced = [['%','PCT'],[':','CLN'],['?','QMARK'],['&','AMPS'],['!','EXCLM'],['.','DOT']]
434
+ to_be_replaced.each{|org,rpl| str = str.gsub(org,'_' + rpl + '_')}
435
+ # translate some signs into '_':
436
+ str.tr!('/-','__')
437
+ # remove '$':
438
+ str.delete!('$')
439
+ # remove all other nonnumerical chars:
440
+ str.gsub!(/[^0-9a-zA-Z_]/i, '')
441
+ # sometimes remaining string may be empty:
442
+ str = 'GENERIC_TOPIC' if str.empty?
443
+ # return string as new instance variable name:
444
+ str
445
+ end
446
+
447
+ def ensure_individual_instance_name(name,list)
448
+ instance_variable_names = list.map do |i|
449
+ i = i.to_s
450
+ i[0] = '' if i[0] == '@'
451
+ i
452
+ end
453
+ n = 1
454
+ org_name = name
455
+ while instance_variable_names.include?(name)
456
+ # name already used, so change it a little bit:
457
+ name = org_name + '_' + n.to_s.rjust(3, "0")
458
+ n += 1
459
+ raise "ERR: Too many topics with special chars: #{instance_variable_names.join(', ')}" if n > 999
460
+ end
461
+ name
462
+ end
@@ -1,3 +1,3 @@
1
1
  module Hodmin
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hodmin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Romeyke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-07 00:00:00.000000000 Z
11
+ date: 2017-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: configatron