awair 0.0.1 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/exe/awair_mqtt_bridge +66 -26
  3. metadata +23 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 788ff24e23ac2945b69b285a3a1b449f87927072d4f4e80367146304d85ff1cd
4
- data.tar.gz: 69b050275c5b63911f9cf32e35cdd692ab09d52452f726ce0e965a16ba22688d
3
+ metadata.gz: a089d2d6c1df949920d32fa5bf6d04517fd3ad261c368e0bf870c524f309eb67
4
+ data.tar.gz: 46b2aa268d56222020511e9573845731054c613866b28e58b4ca60383ea99812
5
5
  SHA512:
6
- metadata.gz: f78ab06856013674cbfd8702a4e15926860124dd04aafa8161b0374f1940bb00b746eb674143f9e6d328b4891d9f9e5dc0ab4b448aee785267380268c4ce506a
7
- data.tar.gz: 9d25f750205b8a66e3a037c86c437bf5e9c961c7e8bb6de11d6e48aa409fd5e2549b1711c41b64c93f9db165fe6262b8191a3b1acb87d33d98996bdc1df07965
6
+ metadata.gz: 2da6d1edd85c6b7d6d8d9ae20c7c4be8aae6b43b8243fdb52dc90401c8813deb9ea302381e42815ad71e24e8e4efa68ee46b42b2e334d605917638ebbd540a01
7
+ data.tar.gz: 2dbfd1b9e4e9fdbf3f0df12dc96be67b820069b5fb8ee1d8543bef1ace8963ebe9777bab71c3e4c0bd772936438b7968d2d8c6b74627f77d4a8090211a38e247
@@ -2,17 +2,15 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "faraday_middleware"
5
- require "homie-mqtt"
5
+ require "mqtt-homeassistant"
6
6
  require "optparse"
7
7
 
8
8
  refresh = 30.0
9
- fahrenheit = false
10
9
 
11
10
  options = OptionParser.new do |opts|
12
11
  opts.banner = "Usage: awair_mqtt_bridge SENSOR_IP MQTT_URI [options]"
13
12
 
14
13
  opts.on("--refresh-interval=INTERVAL", "Refresh interval (default 30s)") { |v| refresh = v.to_f }
15
- opts.on("-f", "--fahrenheit", "Convert to fahrenheit before publishing") { fahrenheit = true }
16
14
  opts.on("-h", "--help", "Prints this help") do
17
15
  puts opts
18
16
  exit
@@ -36,34 +34,76 @@ end
36
34
  config = awair.get("/settings/config/data").body
37
35
  data = awair.get.body
38
36
 
39
- unit = fahrenheit ? "°F" : "°C"
40
- def convert_unit(number, use_fahrenheit)
41
- return number unless use_fahrenheit
42
-
43
- number * 9 / 5 + 32
44
- end
45
-
46
- homie = MQTT::Homie::Device.new(MQTT::Homie.escape_id(config["device_uuid"]), "Awair Sensor", mqtt: ARGV[1])
47
- device = homie.node("device", "Device", "Device")
48
- device.property("score", "Air Quality Score", :integer, data["score"], format: 0..100, unit: "%")
49
- device.property("dewpoint", "Dew Point", :float, convert_unit(data["dew_point"], fahrenheit), unit: unit)
50
- device.property("temperature", "Current Temperature", :float, convert_unit(data["temp"], fahrenheit), unit: unit)
51
- device.property("relative-humidity", "Current Relative Humidity", :float, data["humid"], format: 0..100, unit: "%")
52
- device.property("co2", "CO₂ Concentration", :integer, data["co2"], unit: "ppm")
53
- device.property("tvocs", "TVOCs Concentration", :integer, data["voc"], unit: "ppb")
54
- device.property("pm2-5", "Fine particle concentration", :integer, data["pm25"], unit: "µg/m³")
37
+ homie = MQTT::Homie::Device.new(MQTT::Homie.escape_id(config["device_uuid"]), "Awair Air Quality Sensor", mqtt: ARGV[1])
38
+ homie.home_assistant_device = {
39
+ manufacturer: "Awair Inc.",
40
+ sw_version: config["fw_version"]
41
+ }
42
+ device = homie.node("device", "Awair Air Quality Sensor", "Device")
43
+ device.property("score",
44
+ "Air Quality Score",
45
+ :integer,
46
+ data["score"],
47
+ format: 0..100,
48
+ unit: "%",
49
+ hass: { sensor: { icon: "mdi:counter",
50
+ state_class: :measurement } })
51
+ device.property("dewpoint",
52
+ "Dew Point",
53
+ :float,
54
+ data["dew_point"],
55
+ unit: "°C",
56
+ hass: { sensor: { device_class: :temperature,
57
+ icon: "mdi:water-opacity",
58
+ state_class: :measurement } })
59
+ device.property("temperature",
60
+ "Current Temperature",
61
+ :float,
62
+ data["temp"],
63
+ unit: "°C",
64
+ hass: { sensor: { device_class: :temperature,
65
+ state_class: :measurement } })
66
+ device.property("relative-humidity",
67
+ "Current Relative Humidity",
68
+ :float, data["humid"],
69
+ format: 0..100,
70
+ unit: "%",
71
+ hass: { sensor: { device_class: :humidity,
72
+ state_class: :measurement } })
73
+ device.property("co2",
74
+ "CO₂ Concentration",
75
+ :integer, data["co2"],
76
+ unit: "ppm",
77
+ hass: { sensor: { device_class: :carbon_dioxide,
78
+ state_class: :measurement } })
79
+ device.property("tvocs",
80
+ "TVOCs Concentration",
81
+ :integer,
82
+ data["voc"],
83
+ unit: "ppb",
84
+ hass: { sensor: { device_class: :volatile_organic_compounds,
85
+ state_class: :measurement } })
86
+ device.property("pm2-5",
87
+ "Fine particle concentration",
88
+ :integer,
89
+ data["pm25"],
90
+ unit: "µg/m³",
91
+ hass: { sensor: { device_class: :pm25,
92
+ state_class: :measurement } })
55
93
 
56
94
  homie.publish
57
95
 
58
96
  loop do
59
97
  data = awair.get.body
60
- device["score"].value = data["score"]
61
- device["dewpoint"].value = convert_unit(data["dew_point"], fahrenheit)
62
- device["temperature"].value = convert_unit(data["temp"], fahrenheit)
63
- device["relative-humidity"].value = data["humid"]
64
- device["co2"].value = data["co2"]
65
- device["tvocs"].value = data["voc"]
66
- device["pm2-5"].value = data["pm25"]
98
+ homie.mqtt.batch_publish do
99
+ device["score"].value = data["score"]
100
+ device["dewpoint"].value = data["dew_point"]
101
+ device["temperature"].value = data["temp"]
102
+ device["relative-humidity"].value = data["humid"]
103
+ device["co2"].value = data["co2"]
104
+ device["tvocs"].value = data["voc"]
105
+ device["pm2-5"].value = data["pm25"]
106
+ end
67
107
 
68
108
  sleep refresh
69
109
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awair
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-20 00:00:00.000000000 Z
11
+ date: 2022-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday_middleware
@@ -25,19 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: homie-mqtt
28
+ name: mqtt-homeassistant
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.4'
33
+ version: '0.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.4'
40
+ version: '0.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: net-http-persistent
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.19'
89
+ version: '1.23'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.19'
96
+ version: '1.23'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-performance
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.12'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.12'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop-rake
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -119,7 +133,8 @@ files:
119
133
  homepage: https://github.com/ccutrer/ruby-awair
120
134
  licenses:
121
135
  - MIT
122
- metadata: {}
136
+ metadata:
137
+ rubygems_mfa_required: 'true'
123
138
  post_install_message:
124
139
  rdoc_options: []
125
140
  require_paths: