tilt_hydrometer 0.1.0 → 0.2.0.pre4

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 tilt_hydrometer might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7787ee96428a2985cce2db098e27ef62e488f36c7bb261df9553985686bba5ae
4
- data.tar.gz: e9b0fa8ed0434d3948635b24567ea1f47442b0ce6b687fbd265104d35da5c196
3
+ metadata.gz: d480d07da7125838e72233f8da54f30fbfd4dbc444cacaef2b677823d67c483e
4
+ data.tar.gz: a37e4eb5cd4a069b4eff654b1a12dc379e0e7766b1bc73b8c0169650fb3fc1fd
5
5
  SHA512:
6
- metadata.gz: 6c2a109b1eaf8763e297e748dec7dabae01c5bfa9d1cbf10769691758e35e9e591beedf6b13bf48bc3d2be7b6eb4eb9250cac6275559c191876ced3a55b45166
7
- data.tar.gz: 98acc5748a92c113f7b1f9001b2d8787f6ff0aea55a036fa184a1b98d9953cb2c4e1dfead82d5eef4e6b9ce0c1508595cdd2f5bd088d0beba2ff78bb72b2e92d
6
+ metadata.gz: ea7a7faf773b28514f0172dab26f8f84038c5490b152a7340fe7864a78c39a48fe37b8a76acffe7fb23ca1be1366321b50a2b248c2bd9f45c19097be0386894a
7
+ data.tar.gz: 69271f8ec92fb394675832f425b198e342276418725f779e0a230caede0d80b404828590a71435b715f20f3480b3a5969f717202e1268d30e4c31d90b275c336
@@ -2,15 +2,15 @@
2
2
 
3
3
  require 'logger'
4
4
  require 'json'
5
+ require 'open3'
5
6
 
6
- require 'scan_beacon'
7
7
  require 'faraday'
8
8
  require 'mqtt'
9
9
 
10
10
  require 'tilt_hydrometer/version'
11
11
  require 'tilt_hydrometer/logger'
12
12
  require 'tilt_hydrometer/devices'
13
- require 'tilt_hydrometer/beacon_decorator'
13
+ require 'tilt_hydrometer/beacon'
14
14
  require 'tilt_hydrometer/throttled_execution'
15
15
  require 'tilt_hydrometer/brewfather'
16
16
  require 'tilt_hydrometer/mqtt'
@@ -1,17 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TiltHydrometer
4
- module BeaconDecorator
4
+ class Beacon
5
+ def initialize(uuid, temp, gravity)
6
+ @uuid = uuid
7
+ @temp = temp
8
+ @gravity = gravity
9
+ end
10
+
5
11
  def color
6
12
  TiltHydrometer::DEVICES[uuid]
7
13
  end
8
14
 
9
15
  def temp
10
- data[0].to_i
16
+ @temp.to_i
11
17
  end
12
18
 
13
19
  def gravity
14
- gravity_string = data[1].to_s
20
+ gravity_string = @gravity.to_s
15
21
 
16
22
  "#{gravity_string[-4] || 0}.#{gravity_string[-3..-1]}".to_f
17
23
  end
@@ -37,8 +43,9 @@ module TiltHydrometer
37
43
 
38
44
  def log
39
45
  LOGGER.debug("Beacon: #{inspect}")
40
- LOGGER.debug("Data: #{data.inspect}")
41
- LOGGER.debug("UUID: #{uuid.inspect}")
46
+ LOGGER.debug("Temp: #{temp.inspect}")
47
+ LOGGER.debug("Gravity: #{gravity.inspect}")
48
+ LOGGER.debug("UUID: #{@uuid.inspect}")
42
49
  end
43
50
  end
44
51
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'open3'
4
+
3
5
  module TiltHydrometer
4
6
  class Core
5
7
  def initialize(options = {})
@@ -7,32 +9,39 @@ module TiltHydrometer
7
9
  end
8
10
 
9
11
  def run
10
- scanner.scan do |beacons|
11
- beacons.each do |beacon|
12
- beacon.extend(TiltHydrometer::BeaconDecorator)
13
- beacon.log
12
+ scanner_pid = spawn('hcitool lescan --passive --duplicates', out: File::NULL)
13
+ Process.detach(scanner_pid)
14
+
15
+ Open3.popen3 'hcidump -R' do |_stdin, stdout, _stderr, _thread|
16
+ buffer = []
17
+ while line = stdout.gets
18
+ if line.start_with?('>') || line.start_with?('<')
19
+ process_advertisement(buffer.join.gsub(/\s+/, ''))
14
20
 
15
- if beacon.values_out_of_range?
16
- LOGGER.debug('values out of range') && next
21
+ buffer = []
17
22
  end
18
23
 
19
- brewfather&.post(beacon)
20
- mqtt&.publish(beacon)
24
+ buffer << line[2..-2]
21
25
  end
22
26
  end
23
27
  end
24
28
 
25
29
  private
26
30
 
27
- def scanner
28
- @scanner ||=
29
- ScanBeacon::DefaultScanner.new.tap do |s|
30
- s.add_parser(
31
- ScanBeacon::BeaconParser.new(
32
- :tilt, 'm:0-5=4c000215a495,i:4-19,d:20-21,d:22-23,p:24-25'
33
- )
34
- )
31
+ def process_advertisement(data)
32
+ if match = data.match(/\h{40}(A495BB[1-8]0C5B14B44B5121370F02D74DE)(\h{4})(\h{4})(\h{2})(\h{2})/i)
33
+ uuid, temp, gravity, _power, _rssi = match.captures
34
+
35
+ beacon = Beacon.new(uuid, temp, gravity)
36
+ beacon.log
37
+
38
+ if beacon.values_out_of_range?
39
+ LOGGER.debug('values out of range')
40
+ else
41
+ brewfather&.post(beacon)
42
+ mqtt&.publish(beacon)
35
43
  end
44
+ end
36
45
  end
37
46
 
38
47
  def brewfather
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TiltHydrometer
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0.pre4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tilt_hydrometer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0.pre4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steffen Schröder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-19 00:00:00.000000000 Z
11
+ date: 2021-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.5.0
55
- - !ruby/object:Gem::Dependency
56
- name: scan_beacon
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 0.7.11
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 0.7.11
69
55
  description: Read Tilt Hydrometer beacons and post to Brewfather
70
56
  email: steffen@schroeder-blog.de
71
57
  executables:
@@ -75,7 +61,7 @@ extra_rdoc_files: []
75
61
  files:
76
62
  - bin/tilt_hydrometer
77
63
  - lib/tilt_hydrometer.rb
78
- - lib/tilt_hydrometer/beacon_decorator.rb
64
+ - lib/tilt_hydrometer/beacon.rb
79
65
  - lib/tilt_hydrometer/brewfather.rb
80
66
  - lib/tilt_hydrometer/core.rb
81
67
  - lib/tilt_hydrometer/devices.rb
@@ -98,9 +84,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
84
  version: 2.5.5
99
85
  required_rubygems_version: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ">="
87
+ - - ">"
102
88
  - !ruby/object:Gem::Version
103
- version: '0'
89
+ version: 1.3.1
104
90
  requirements: []
105
91
  rubyforge_project:
106
92
  rubygems_version: 2.7.6.2