ruby_home 0.2.1 → 0.2.2
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 +4 -4
- data/.travis.yml +2 -3
- data/README.md +36 -75
- data/examples/air_purifier.rb +67 -0
- data/examples/air_quality_sensor.rb +120 -0
- data/examples/battery_service.rb +59 -0
- data/examples/carbon_dioxide_sensor.rb +79 -0
- data/examples/carbon_monoxide_sensor.rb +79 -0
- data/examples/contact_sensor.rb +67 -0
- data/examples/door.rb +49 -0
- data/examples/fan.rb +31 -0
- data/examples/fan_v2.rb +69 -0
- data/examples/garage_door_opener.rb +72 -0
- data/examples/heater_cooler.rb +93 -0
- data/examples/humidifier_dehumidifier.rb +89 -0
- data/examples/humidity_sensor.rb +63 -0
- data/examples/leak_sensor.rb +67 -0
- data/examples/light_sensor.rb +65 -0
- data/examples/lightbulb.rb +32 -0
- data/examples/lock_mechanism.rb +35 -0
- data/examples/motion_sensor.rb +67 -0
- data/examples/occupancy_sensor.rb +67 -0
- data/examples/outlet.rb +30 -0
- data/examples/security_system.rb +54 -0
- data/examples/smoke_sensor.rb +67 -0
- data/examples/switch.rb +17 -0
- data/examples/temperature_sensor.rb +63 -0
- data/examples/thermostat.rb +114 -0
- data/examples/window.rb +49 -0
- data/examples/window_covering.rb +73 -0
- data/lib/ruby_home/config/characteristics.yml +16 -0
- data/lib/ruby_home/config/services.yml +1 -0
- data/lib/ruby_home/version.rb +1 -1
- data/rubyhome.gemspec +3 -3
- data/sbin/characteristic_generator.rb +23 -1
- data/sbin/service_generator.rb +12 -2
- metadata +37 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 295a2fbbf4c858d6a72b0fded4bd051d2820a9892d1bd66145a2184fd2464720
|
4
|
+
data.tar.gz: cc9fd121510cefaebd8b01112017ae353edd0e12adb5160b7523257eb80881c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55cd692b8e8d0ea893a43e8e9b98084a34f0fa4fe16b884b949f9d16ad9a67b92375f282a0e325f7a8a1c1a78ddea665b34df822ac859d11eae81fa3a0beabda
|
7
|
+
data.tar.gz: e0280695c0bdb55b71663550a9bc85c0e9566a1724812e7c3ca563e0ad18cf7df2e20e0d8e7e4dcc0f6e1f9dd52744b29e05a3185c276284d844e09aae0ee038
|
data/.travis.yml
CHANGED
@@ -6,6 +6,8 @@ before_install:
|
|
6
6
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php; fi
|
7
7
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get update; fi
|
8
8
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y libsodium-dev; fi
|
9
|
+
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi
|
10
|
+
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install libsodium; fi
|
9
11
|
install:
|
10
12
|
- 'gem update --system'
|
11
13
|
- 'gem --version'
|
@@ -24,8 +26,5 @@ addons:
|
|
24
26
|
apt:
|
25
27
|
packages:
|
26
28
|
- libavahi-compat-libdnssd-dev
|
27
|
-
homebrew:
|
28
|
-
packages:
|
29
|
-
- libsodium
|
30
29
|
notifications:
|
31
30
|
email: false
|
data/README.md
CHANGED
@@ -58,6 +58,42 @@ end
|
|
58
58
|
RubyHome.run
|
59
59
|
```
|
60
60
|
|
61
|
+
## Examples
|
62
|
+
|
63
|
+
The following example services are available:
|
64
|
+
|
65
|
+
### Sensors
|
66
|
+
- [Air quality sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/air_quality_sensor.rb)
|
67
|
+
- [Carbon dioxide sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/carbon_dioxide_sensor.rb)
|
68
|
+
- [Carbon monoxide sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/carbon_monoxide_sensor.rb)
|
69
|
+
- [Contact sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/contact_sensor.rb)
|
70
|
+
- [Humidity sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/humidity_sensor.rb)
|
71
|
+
- [Leak sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/leak_sensor.rb)
|
72
|
+
- [Light sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/light_sensor.rb)
|
73
|
+
- [Motion sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/motion_sensor.rb)
|
74
|
+
- [Occupancy sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/occupancy_sensor.rb)
|
75
|
+
- [Smoke sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/smoke_sensor.rb)
|
76
|
+
- [Temperature sensor](https://github.com/karlentwistle/ruby_home/blob/master/examples/temperature_sensor.rb)
|
77
|
+
|
78
|
+
### Controlables
|
79
|
+
- [Air purifier](https://github.com/karlentwistle/ruby_home/blob/master/examples/air_purifier.rb)
|
80
|
+
- [Battery service](https://github.com/karlentwistle/ruby_home/blob/master/examples/battery_service.rb)
|
81
|
+
- [Door](https://github.com/karlentwistle/ruby_home/blob/master/examples/door.rb)
|
82
|
+
- [Fan](https://github.com/karlentwistle/ruby_home/blob/master/examples/fan.rb)
|
83
|
+
- [Fan V2](https://github.com/karlentwistle/ruby_home/blob/master/examples/fan_v2.rb)
|
84
|
+
- [Garage door opener](https://github.com/karlentwistle/ruby_home/blob/master/examples/garage_door_opener.rb)
|
85
|
+
- [Heater cooler](https://github.com/karlentwistle/ruby_home/blob/master/examples/heater_cooler.rb)
|
86
|
+
- [Humidifier dehumidifier](https://github.com/karlentwistle/ruby_home/blob/master/examples/humidifier_dehumidifier.rb)
|
87
|
+
- [Lightbulb](https://github.com/karlentwistle/ruby_home/blob/master/examples/lightbulb.rb)
|
88
|
+
- [Lock mechanism](https://github.com/karlentwistle/ruby_home/blob/master/examples/lock_mechanism.rb)
|
89
|
+
- [Outlet](https://github.com/karlentwistle/ruby_home/blob/master/examples/outlet.rb)
|
90
|
+
- [Security system](https://github.com/karlentwistle/ruby_home/blob/master/examples/security_system.rb)
|
91
|
+
- [Switch](https://github.com/karlentwistle/ruby_home/blob/master/examples/switch.rb)
|
92
|
+
- [Thermostat](https://github.com/karlentwistle/ruby_home/blob/master/examples/thermostat.rb)
|
93
|
+
- [Window](https://github.com/karlentwistle/ruby_home/blob/master/examples/window.rb)
|
94
|
+
- [Window covering](https://github.com/karlentwistle/ruby_home/blob/master/examples/window_covering.rb)
|
95
|
+
|
96
|
+
|
61
97
|
## Configuration
|
62
98
|
|
63
99
|
The configuration options can be set by using the `configure` helper:
|
@@ -148,81 +184,6 @@ end
|
|
148
184
|
RubyHome.run
|
149
185
|
```
|
150
186
|
|
151
|
-
## More examples
|
152
|
-
|
153
|
-
### Create a garage door opener
|
154
|
-
|
155
|
-
```ruby
|
156
|
-
require 'ruby_home'
|
157
|
-
|
158
|
-
accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
|
159
|
-
door = RubyHome::ServiceFactory.create(:garage_door_opener)
|
160
|
-
|
161
|
-
door.target_door_state.after_update do |updated_value|
|
162
|
-
if updated_value == 0 # open
|
163
|
-
sleep 1
|
164
|
-
door.current_door_state = 0
|
165
|
-
elsif updated_value == 1 #closed
|
166
|
-
sleep 1
|
167
|
-
door.current_door_state = 1
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
RubyHome.run
|
172
|
-
```
|
173
|
-
|
174
|
-
### Create a thermostat
|
175
|
-
|
176
|
-
```ruby
|
177
|
-
require 'ruby_home'
|
178
|
-
|
179
|
-
accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
|
180
|
-
thermostat = RubyHome::ServiceFactory.create(:thermostat,
|
181
|
-
current_heating_cooling_state: 0, # off
|
182
|
-
target_heating_cooling_state: 0, # off
|
183
|
-
current_temperature: 18,
|
184
|
-
target_temperature: 18,
|
185
|
-
temperature_display_units: 0
|
186
|
-
)
|
187
|
-
|
188
|
-
thermostat.target_temperature.after_update do |updated_value|
|
189
|
-
if thermostat.current_temperature < updated_value
|
190
|
-
thermostat.target_heating_cooling_state = 1 # heat
|
191
|
-
elsif thermostat.current_temperature > updated_value
|
192
|
-
thermostat.target_heating_cooling_state = 2 # cool
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
thermostat.target_heating_cooling_state.after_update do |updated_value|
|
197
|
-
if updated_value == 1
|
198
|
-
thermostat.current_heating_cooling_state = 1 # heat
|
199
|
-
elsif updated_value == 2
|
200
|
-
thermostat.current_heating_cooling_state = 2 # cool
|
201
|
-
else
|
202
|
-
thermostat.current_heating_cooling_state = 0 # off
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
Thread.new do
|
207
|
-
loop do
|
208
|
-
sleep 5 # seconds
|
209
|
-
|
210
|
-
puts "current_temperature: #{thermostat.current_temperature.value.to_i}"
|
211
|
-
puts "target_temperature: #{thermostat.target_temperature.value.to_i}"
|
212
|
-
|
213
|
-
if thermostat.target_temperature.to_i > thermostat.current_temperature.to_i
|
214
|
-
thermostat.current_temperature += 1
|
215
|
-
elsif thermostat.target_temperature.to_i < thermostat.current_temperature.to_i
|
216
|
-
thermostat.current_temperature -= 1
|
217
|
-
else
|
218
|
-
thermostat.target_heating_cooling_state = 3 # auto
|
219
|
-
end
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
RubyHome.run
|
224
|
-
```
|
225
|
-
|
226
187
|
## Development
|
227
188
|
|
228
189
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'ruby_home'
|
2
|
+
|
3
|
+
accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
|
4
|
+
air_purifier = RubyHome::ServiceFactory.create(:air_purifier,
|
5
|
+
target_air_purifier_state: 0, # required
|
6
|
+
current_air_purifier_state: 0, # required
|
7
|
+
active: 0, # required
|
8
|
+
name: "air purifier", # optional
|
9
|
+
rotation_speed: 0, # optional
|
10
|
+
swing_mode: 1, # optional
|
11
|
+
lock_physical_controls: 0, # optional
|
12
|
+
)
|
13
|
+
|
14
|
+
target_air_purifier_state_values = {
|
15
|
+
0 => 'Manual',
|
16
|
+
1 => 'Auto',
|
17
|
+
}
|
18
|
+
air_purifier.target_air_purifier_state.after_update do |target_air_purifier_state|
|
19
|
+
state = target_air_purifier_state_values[target_air_purifier_state]
|
20
|
+
puts "air purifier target air purifier state #{state}"
|
21
|
+
end
|
22
|
+
|
23
|
+
current_air_purifier_state_values = {
|
24
|
+
0 => 'Inactive',
|
25
|
+
1 => 'Idle',
|
26
|
+
2 => 'Purifying Air',
|
27
|
+
}
|
28
|
+
air_purifier.current_air_purifier_state.after_update do |current_air_purifier_state|
|
29
|
+
state = current_air_purifier_state_values[current_air_purifier_state]
|
30
|
+
puts "air purifier current air purifier state is #{state}"
|
31
|
+
end
|
32
|
+
|
33
|
+
air_purifier.active.after_update do |active|
|
34
|
+
if active == 0
|
35
|
+
puts "air purifier is inactive"
|
36
|
+
air_purifier.target_air_purifier_state = 0
|
37
|
+
sleep 1
|
38
|
+
air_purifier.current_air_purifier_state = 0
|
39
|
+
elsif active == 1
|
40
|
+
puts "air purifier is active"
|
41
|
+
air_purifier.target_air_purifier_state = 1
|
42
|
+
sleep 1
|
43
|
+
air_purifier.current_air_purifier_state = 2
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
air_purifier.swing_mode.after_update do |swing_mode|
|
48
|
+
if swing_mode == 0
|
49
|
+
puts "air purifier swing is disabled"
|
50
|
+
elsif swing_mode == 1
|
51
|
+
puts "air purifier swing is enabled"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
air_purifier.rotation_speed.after_update do |rotation_speed|
|
56
|
+
puts "air_purifier is spinning at #{rotation_speed} speed"
|
57
|
+
end
|
58
|
+
|
59
|
+
air_purifier.lock_physical_controls.after_update do |lock_physical_controls|
|
60
|
+
if lock_physical_controls == 0
|
61
|
+
puts "air purifier control lock disabled"
|
62
|
+
elsif lock_physical_controls == 1
|
63
|
+
puts "air purifier control lock enabled"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
RubyHome.run
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'ruby_home'
|
2
|
+
|
3
|
+
accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
|
4
|
+
air_quality_sensor = RubyHome::ServiceFactory.create(:air_quality_sensor,
|
5
|
+
air_quality: 0, # required
|
6
|
+
name: "air quality sensor", # optional
|
7
|
+
carbon_dioxide_level: 0, # optional
|
8
|
+
carbon_monoxide_level: 0, # optional
|
9
|
+
voc_density: 0, # optional
|
10
|
+
pm10_density: 0, # optional
|
11
|
+
pm2_5_density: 0, # optional
|
12
|
+
sulphur_dioxide_density: 0, # optional
|
13
|
+
nitrogen_dioxide_density: 0, # optional
|
14
|
+
ozone_density: 0, # optional
|
15
|
+
status_low_battery: 0, # optional
|
16
|
+
status_tampered: 0, # optional
|
17
|
+
status_fault: 0, # optional
|
18
|
+
status_active: true # optional
|
19
|
+
)
|
20
|
+
|
21
|
+
air_quality_values = {
|
22
|
+
0 => 'Unknown',
|
23
|
+
1 => 'Excellent',
|
24
|
+
2 => 'Good',
|
25
|
+
3 => 'Fair',
|
26
|
+
4 => 'Inferior',
|
27
|
+
5 => 'Poor'
|
28
|
+
}
|
29
|
+
air_quality_sensor.air_quality.after_update do |air_quality|
|
30
|
+
state = air_quality_values[air_quality]
|
31
|
+
puts "air quality sensor air quality is #{state}"
|
32
|
+
end
|
33
|
+
|
34
|
+
air_quality_sensor.carbon_dioxide_level.after_update do |carbon_dioxide_level|
|
35
|
+
puts "air quality sensor carbon_dioxide_level #{carbon_dioxide_level}"
|
36
|
+
end
|
37
|
+
|
38
|
+
air_quality_sensor.carbon_monoxide_level.after_update do |carbon_monoxide_level|
|
39
|
+
puts "air quality sensor carbon_monoxide_level #{carbon_monoxide_level}"
|
40
|
+
end
|
41
|
+
|
42
|
+
air_quality_sensor.voc_density.after_update do |voc_density|
|
43
|
+
puts "air quality sensor voc_density #{voc_density}"
|
44
|
+
end
|
45
|
+
|
46
|
+
air_quality_sensor.pm10_density.after_update do |pm10_density|
|
47
|
+
puts "air quality sensor pm10_density #{pm10_density}"
|
48
|
+
end
|
49
|
+
|
50
|
+
air_quality_sensor.pm2_5_density.after_update do |pm2_5_density|
|
51
|
+
puts "air quality sensor pm2_5_density #{pm2_5_density}"
|
52
|
+
end
|
53
|
+
|
54
|
+
air_quality_sensor.sulphur_dioxide_density.after_update do |sulphur_dioxide_density|
|
55
|
+
puts "air quality sensor sulphur_dioxide_density #{sulphur_dioxide_density}"
|
56
|
+
end
|
57
|
+
|
58
|
+
air_quality_sensor.nitrogen_dioxide_density.after_update do |nitrogen_dioxide_density|
|
59
|
+
puts "air quality sensor nitrogen_dioxide_density #{nitrogen_dioxide_density}"
|
60
|
+
end
|
61
|
+
|
62
|
+
air_quality_sensor.ozone_density.after_update do |ozone_density|
|
63
|
+
puts "air quality sensor ozone_density #{ozone_density}"
|
64
|
+
end
|
65
|
+
|
66
|
+
air_quality_sensor.status_low_battery.after_update do |status_low_battery|
|
67
|
+
if status_low_battery == 0
|
68
|
+
puts "air quality sensor battery level normal"
|
69
|
+
elsif status_low_battery == 1
|
70
|
+
puts "air quality sensor battery level lormal"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
air_quality_sensor.status_tampered.after_update do |status_tampered|
|
75
|
+
if status_tampered == 0
|
76
|
+
puts "air quality sensor status_tampered not tampered"
|
77
|
+
elsif status_tampered == 1
|
78
|
+
puts "air quality sensor status_tampered tampered"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
air_quality_sensor.status_fault.after_update do |status_fault|
|
83
|
+
if status_fault == 0
|
84
|
+
puts "air quality sensor status_fault no fault"
|
85
|
+
elsif status_fault == 1
|
86
|
+
puts "air quality sensor status_fault general fault"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
air_quality_sensor.status_active.after_update do |active|
|
91
|
+
if active
|
92
|
+
puts "air quality sensor is active"
|
93
|
+
else
|
94
|
+
puts "air quality sensor is inactive"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
Thread.new do
|
99
|
+
sleep 30
|
100
|
+
|
101
|
+
loop do
|
102
|
+
air_quality_sensor.air_quality = air_quality_values.keys.sample
|
103
|
+
air_quality_sensor.carbon_dioxide_level = (0..100000).to_a.sample
|
104
|
+
air_quality_sensor.carbon_monoxide_level = (0..100).to_a.sample
|
105
|
+
air_quality_sensor.voc_density = (0..1000).to_a.sample
|
106
|
+
air_quality_sensor.pm10_density = (0..1000).to_a.sample
|
107
|
+
air_quality_sensor.pm2_5_density = (0..1000).to_a.sample
|
108
|
+
air_quality_sensor.sulphur_dioxide_density = (0..1000).to_a.sample
|
109
|
+
air_quality_sensor.nitrogen_dioxide_density = (0..1000).to_a.sample
|
110
|
+
air_quality_sensor.ozone_density = (0..1000).to_a.sample
|
111
|
+
air_quality_sensor.status_low_battery = (0..1).to_a.sample
|
112
|
+
air_quality_sensor.status_tampered = (0..1).to_a.sample
|
113
|
+
air_quality_sensor.status_fault = (0..1).to_a.sample
|
114
|
+
air_quality_sensor.status_active = [true, false].to_a.sample
|
115
|
+
|
116
|
+
sleep 10
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
RubyHome.run
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'ruby_home'
|
2
|
+
|
3
|
+
accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
|
4
|
+
battery_service = RubyHome::ServiceFactory.create(:battery_service,
|
5
|
+
status_low_battery: 0, # required
|
6
|
+
charging_state: 0, # required
|
7
|
+
battery_level: 20, # required
|
8
|
+
name: "battery service", # optional
|
9
|
+
)
|
10
|
+
|
11
|
+
battery_service.status_low_battery.after_update do |status_low_battery|
|
12
|
+
if status_low_battery == 0
|
13
|
+
puts "battery service status low battery is battery level normal"
|
14
|
+
elsif status_low_battery == 1
|
15
|
+
puts "battery service status low battery is battery level low"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
battery_service.charging_state.after_update do |charging_state|
|
20
|
+
if charging_state == 0
|
21
|
+
puts "battery service charging state is not charging"
|
22
|
+
elsif charging_state == 1
|
23
|
+
puts "battery service charging state is charging"
|
24
|
+
elsif charging_state == 2
|
25
|
+
puts "battery service charging state is not chargeable"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
battery_service.battery_level.after_update do |battery_level|
|
30
|
+
puts "battery service battery level #{battery_level}"
|
31
|
+
|
32
|
+
if battery_level < 10 && battery_service.status_low_battery != 1
|
33
|
+
battery_service.status_low_battery = 1
|
34
|
+
end
|
35
|
+
|
36
|
+
if battery_level > 11 && battery_service.status_low_battery != 0
|
37
|
+
battery_service.status_low_battery = 0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Thread.new do
|
42
|
+
sleep 30
|
43
|
+
|
44
|
+
loop do
|
45
|
+
battery_service.charging_state = 0
|
46
|
+
while battery_service.battery_level > 0
|
47
|
+
battery_service.battery_level -= 1
|
48
|
+
sleep 1
|
49
|
+
end
|
50
|
+
|
51
|
+
battery_service.charging_state = 1
|
52
|
+
while battery_service.battery_level < 101
|
53
|
+
battery_service.battery_level += 1
|
54
|
+
sleep 1
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
RubyHome.run
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'ruby_home'
|
2
|
+
|
3
|
+
accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
|
4
|
+
carbon_dioxide_sensor = RubyHome::ServiceFactory.create(:carbon_dioxide_sensor,
|
5
|
+
carbon_dioxide_detected: 0, # required
|
6
|
+
name: "carbon dioxide sensor", # optional
|
7
|
+
carbon_dioxide_peak_level: 0, # optional
|
8
|
+
carbon_dioxide_level: 0, # optional
|
9
|
+
status_tampered: 0, # optional
|
10
|
+
status_low_battery: 0, # optional
|
11
|
+
status_fault: 0, # optional
|
12
|
+
status_active: true # optional
|
13
|
+
)
|
14
|
+
|
15
|
+
carbon_dioxide_sensor.carbon_dioxide_detected.after_update do |carbon_dioxide_detected|
|
16
|
+
if carbon_dioxide_detected == 0
|
17
|
+
puts "carbon dioxide sensor carbon dioxide detected CO2 levels normal"
|
18
|
+
elsif carbon_dioxide_detected == 1
|
19
|
+
puts "carbon dioxide sensor carbon dioxide detected CO2 levels abnormal"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
carbon_dioxide_sensor.carbon_dioxide_peak_level.after_update do |carbon_dioxide_peak_level|
|
24
|
+
puts "carbon dioxide sensor carbon_dioxide_peak_level #{carbon_dioxide_peak_level}"
|
25
|
+
end
|
26
|
+
|
27
|
+
carbon_dioxide_sensor.carbon_dioxide_level.after_update do |carbon_dioxide_level|
|
28
|
+
puts "carbon dioxide sensor carbon_dioxide_level #{carbon_dioxide_level}"
|
29
|
+
end
|
30
|
+
|
31
|
+
carbon_dioxide_sensor.status_tampered.after_update do |status_tampered|
|
32
|
+
if status_tampered == 0
|
33
|
+
puts "carbon dioxide sensor status_tampered not tampered"
|
34
|
+
elsif status_tampered == 1
|
35
|
+
puts "carbon dioxide sensor status_tampered tampered"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
carbon_dioxide_sensor.status_low_battery.after_update do |status_low_battery|
|
40
|
+
if status_low_battery == 0
|
41
|
+
puts "carbon dioxide sensor low battery is battery level normal"
|
42
|
+
elsif status_low_battery == 1
|
43
|
+
puts "carbon dioxide sensor low battery is battery level low"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
carbon_dioxide_sensor.status_fault.after_update do |status_fault|
|
48
|
+
if status_fault == 0
|
49
|
+
puts "carbon dioxide sensor status_fault no fault"
|
50
|
+
elsif status_fault == 1
|
51
|
+
puts "carbon dioxide sensor status_fault general fault"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
carbon_dioxide_sensor.status_active.after_update do |active|
|
56
|
+
if active
|
57
|
+
puts "carbon dioxide sensor is active"
|
58
|
+
else
|
59
|
+
puts "carbon dioxide sensor is inactive"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Thread.new do
|
64
|
+
sleep 30
|
65
|
+
|
66
|
+
loop do
|
67
|
+
carbon_dioxide_sensor.carbon_dioxide_detected = (0..1).to_a.sample
|
68
|
+
carbon_dioxide_sensor.carbon_dioxide_peak_level = (0..100000).to_a.sample
|
69
|
+
carbon_dioxide_sensor.carbon_dioxide_level = (0..100000).to_a.sample
|
70
|
+
carbon_dioxide_sensor.status_tampered = (0..1).to_a.sample
|
71
|
+
carbon_dioxide_sensor.status_low_battery = (0..1).to_a.sample
|
72
|
+
carbon_dioxide_sensor.status_fault = (0..1).to_a.sample
|
73
|
+
carbon_dioxide_sensor.status_active = [true, false].to_a.sample
|
74
|
+
|
75
|
+
sleep 10
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
RubyHome.run
|