exe/mywx_pusher in mywx_pusher-0.1.4 vs exe/mywx_pusher in mywx_pusher-0.1.5
- old
+ new
@@ -17,10 +17,11 @@
initialize_options
end
def initialize_options
@options = OpenStruct.new(
+ debug: false,
mywx_base_uri: 'https://www.mywx.live/',
mywx_station_slug: nil,
mywx_secret_key: nil,
interval: 10
)
@@ -35,14 +36,15 @@
opts.on('-h', '--help', 'Show this help.') do
puts opts
exit 0
end
- opts.on('-d', '--debug', 'Enable debug mode') { logger.level = Logger::DEBUG }
+ opts.on('-d', '--debug', 'Enable debug mode') { options.debug = true; logger.level = Logger::DEBUG }
opts.on('-w', '--weatherlink-host=HOST', '') { |o| options.weatherlink_host = o }
- opts.on('-a', '--airlink-host=HOST', '') { |o| options.airlink_host = o }
+ opts.on('-a', '--outdoor-airlink-host=HOST', '') { |o| options.outdoor_airlink_host = o }
+ opts.on('-A', '--indoor-airlink-host=HOST', '') { |o| options.indoor_airlink_host = o }
opts.on('-b', '--mywx-base-uri=URI', '') { |o| options.mywx_base_uri = o }
opts.on('-s', '--mywx-station-slug=SLUG', '') { |o| options.mywx_station_slug = o }
opts.on('-k', '--mywx-secret-key=KEY', '') { |o| options.mywx_secret_key = o }
@@ -78,43 +80,95 @@
weatherlink_current_conditions = weatherlink_client.current_conditions
rescue StandardError => e
raise CollectError, e
end
- begin
- logger.debug("Collecting data from #{options.airlink_host}...")
- airlink_current_conditions = airlink_client&.current_conditions
- rescue StandardError => e
- raise CollectError, e
- end
-
iss_record = weatherlink_current_conditions.find { |sd| sd.record_type.id == 1 }
lss_pressure_record = weatherlink_current_conditions.find { |sd| sd.record_type.id == 3 }
- airlink_record = airlink_current_conditions&.find { |sd| sd.record_type.id == 6 }
+ outdoor_airlink_current_conditions = nil
+ if options.outdoor_airlink_host
+ begin
+ logger.debug("Collecting data from #{options.outdoor_airlink_host}...")
+ outdoor_airlink_current_conditions = airlink_client(options.outdoor_airlink_host)&.current_conditions
+ rescue StandardError => e
+ raise CollectError, e
+ end
+ end
+
+ outdoor_airlink_record = outdoor_airlink_current_conditions&.find { |sd| sd.record_type.id == 6 }
+
+ indoor_airlink_current_conditions = nil
+ if options.outdoor_airlink_host
+ begin
+ logger.debug("Collecting data from #{options.indoor_airlink_host}...")
+ indoor_airlink_current_conditions = airlink_client(options.indoor_airlink_host)&.current_conditions
+ rescue StandardError => e
+ raise CollectError, e
+ end
+ end
+
+ indoor_airlink_record = indoor_airlink_current_conditions&.find { |sd| sd.record_type.id == 6 }
+
+ if options.debug
+ pp({
+ iss_record: iss_record,
+ lss_pressure_record: lss_pressure_record,
+ outdoor_airlink_record: outdoor_airlink_record,
+ indoor_airlink_record: indoor_airlink_record,
+ })
+ end
+
data = {
ts: ts,
temperature: iss_record.temp.scalar.to_f.round(2),
dew_point: iss_record.dew_point.scalar.to_f.round(2),
humidity: iss_record.hum.scalar.to_f.round(2),
pressure: lss_pressure_record.bar_sea_level.scalar.to_f.round(2),
+ pressure_absolute: lss_pressure_record.bar_absolute.scalar.to_f.round(2),
+ pressure_trend: lss_pressure_record.bar_trend.scalar.to_f.round(2),
wind_speed: iss_record.wind_speed_avg_last_1_min.scalar.to_f.round(2),
wind_direction: iss_record.wind_dir_scalar_avg_last_1_min.scalar.to_i,
+ wind_speed_10_minutes_max: iss_record.wind_speed_hi_last_10_min.scalar.to_f.round(2),
+ wind_direction_10_minutes_max: iss_record.wind_dir_at_hi_speed_last_10_min.scalar.to_i,
rain_rate: iss_record.rain_rate_last.scalar.to_f.round(2),
solar_radiation: iss_record.solar_rad.scalar.to_f.round(2),
+ uv_index: iss_record.uv_index.round(2),
}
- if airlink_record
- air_quality_data = {
- air_quality: {
- pm_1: airlink_record.pm_1,
- pm_2p5: airlink_record.pm_2p5,
- pm_10: airlink_record.pm_10,
+ if outdoor_airlink_record
+ data.merge!(
+ {
+ air_quality: {
+ pm_1: outdoor_airlink_record.pm_1,
+ pm_2p5: outdoor_airlink_record.pm_2p5,
+ pm_2p5_last_1_hour: outdoor_airlink_record.pm_2p5_last_1_hour,
+ pm_2p5_last_24_hours: outdoor_airlink_record.pm_2p5_last_24_hours,
+ pm_10: outdoor_airlink_record.pm_10,
+ pm_10_last_1_hour: outdoor_airlink_record.pm_10_last_1_hour,
+ pm_10_last_24_hours: outdoor_airlink_record.pm_10_last_24_hours,
+ }
}
- }
+ )
+ end
- data.merge!(air_quality_data)
+ if indoor_airlink_record
+ data.merge!(
+ {
+ indoor_temperature: indoor_airlink_record.temp.scalar.to_f.round(2),
+ indoor_humidity: indoor_airlink_record.hum.scalar.to_f.round(2),
+ indoor_air_quality: {
+ pm_1: indoor_airlink_record.pm_1,
+ pm_2p5: indoor_airlink_record.pm_2p5,
+ pm_2p5_last_1_hour: indoor_airlink_record.pm_2p5_last_1_hour,
+ pm_2p5_last_24_hours: indoor_airlink_record.pm_2p5_last_24_hours,
+ pm_10: indoor_airlink_record.pm_10,
+ pm_10_last_1_hour: indoor_airlink_record.pm_10_last_1_hour,
+ pm_10_last_24_hours: indoor_airlink_record.pm_10_last_24_hours,
+ }
+ }
+ )
end
logger.debug("Collected data (#{data.size} variables): #{data}")
data
@@ -137,24 +191,26 @@
host: options.weatherlink_host,
desired_units: WeatherLink::METRIC_WEATHER_UNITS
)
end
- def airlink_client
- return unless options.airlink_host
+ def airlink_client(airlink_host)
+ return unless airlink_host
- @airlink_client ||= WeatherLink::LocalClient.new(
- host: options.airlink_host,
+ @airlink_client ||= {}
+ @airlink_client[airlink_host] ||= WeatherLink::LocalClient.new(
+ host: airlink_host,
desired_units: WeatherLink::METRIC_WEATHER_UNITS
)
end
def run
logger.info(
format(
- 'Collecting weather data from %s%s, pushing to %s every %i seconds...',
+ 'Collecting weather data from %s%s%s, pushing to %s every %i seconds...',
options.weatherlink_host,
- options.airlink_host ? " and air quality data from #{options.airlink_host}" : '',
+ options.outdoor_airlink_host ? ", outdoor air quality data from #{options.outdoor_airlink_host}" : '',
+ options.outdoor_airlink_host ? ", indoor air quality data from #{options.indoor_airlink_host}" : '',
mywx_push_data_uri,
options.interval
)
)