Skip to content

Commit

Permalink
AWSensor support for Measurement<Unit>
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeManzo committed May 31, 2020
1 parent 38cde1c commit e920e31
Show file tree
Hide file tree
Showing 12 changed files with 343 additions and 294 deletions.
20 changes: 12 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,14 +204,18 @@ where SWKSensor is defined as:
```swift
/// Supported Service Types
public enum SWKSensorType {
case WindDirection
case Temperature
case AirQuality
case WindSpeed
case Radiation
case RainRate
case Humidity
case RainDate
case Pressure
case Battery
case Humidity
case General
case Rain
case Wind
}

///
Expand All @@ -224,12 +228,12 @@ public enum SWKSensorType {
/// - _value: Current measurement for the sensor
///
open class SWKSensor {
private let _type: SWKSensorType
private let _description: String
private let _sensorID: String
private let _unit: String
private let _name: String
private var _value: Any
internal var _type: SWKSensorType
internal var _description: String
internal var _sensorID: String
internal var _unit: String
internal var _name: String
internal var _value: Any

.
.
Expand Down
47 changes: 47 additions & 0 deletions Sources/SwiftyWeatherKit/AmbientWeather/AWSensor.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//
// AWSensor.swift
//
//
// Created by Mike Manzo on 5/30/20.
//

import Foundation

open class AWSensor: SWKSensor {
///
/// Provides a simple way to "see" what ths device is reporting
///
override var prettyString: String {
return String("\(_name): \(_value)")
}

///
/// A compact way to progamatically represent an AmbientWeather Sensor as defined in the API docs
/// - Parameters:
/// - _value: We are taking advantage of the fact that some of the AW sensors can have units that are convertible. Those that are fixed - are fixed.
///
required public init (type: SWKSensorType, name: String, sensorID: String, measurement: Any, unit: String, desc: String) {
super.init(type: type, name: name, sensorID: sensorID, measurement: measurement, unit: unit, desc: desc)

switch type {
case .Pressure:
_value = Measurement(value: Double(measurement as! Float), unit: UnitPressure.inchesOfMercury)
case .Temperature:
_value = Measurement(value: Double(measurement as! Float), unit: UnitTemperature.fahrenheit)
case .AirQuality:
_value = Measurement(value: Double(measurement as! Float), unit: Unit(symbol: "µg/m^3"))
case .WindSpeed:
_value = Measurement(value: Double(measurement as! Float), unit: UnitSpeed.milesPerHour)
case .RainRate:
_value = Measurement(value: Double(measurement as! Float) , unit: Unit(symbol: "in/hr"))
case .Rain:
_value = Measurement(value: Double(measurement as! Float) , unit: UnitLength.inches)
case .Humidity:
_value = Measurement(value: Double(measurement as! Int), unit: Unit(symbol: "%"))
case .WindDirection:
_value = Measurement(value: Double(measurement as! Int), unit: UnitAngle.degrees)
case .Radiation, .Battery, .RainDate, .General: // Unit-less
break
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,64 +8,64 @@
import Foundation

extension AWStationData {
var AirQualitySensors: [SWKSensor] {
var AirQualitySensors: [AWSensor] {

let sensors: [SWKSensor?] = [AirQualityOutdoor, AirQualityOutdoor24Avg, AirQualityIndoor,
let sensors: [AWSensor?] = [AirQualityOutdoor, AirQualityOutdoor24Avg, AirQualityIndoor,
AirQualityIndoor24Avg, UVIndex, SolarRadiation, CarbonDioxide]
return sensors.compactMap{ $0 }
}

var AirQualityOutdoor: SWKSensor? {
var AirQualityOutdoor: AWSensor? {
if airQualityOut != nil {
return SWKSensor(type: .AirQuality, name: "Outdoor Air Quality", sensorID: "pm25", measurement: airQualityOut!, unit: "µg/m^3", desc: "PM2.5 Outdoor Air Quality")
return AWSensor(type: .AirQuality, name: "Outdoor Air Quality", sensorID: "pm25", measurement: airQualityOut!, unit: "µg/m^3", desc: "PM2.5 Outdoor Air Quality")
} else {
return nil
}
}

var AirQualityOutdoor24Avg: SWKSensor? {
var AirQualityOutdoor24Avg: AWSensor? {
if airQualityOut24 != nil {
return SWKSensor(type: .AirQuality, name: "24 Average Outdoor Air Quality", sensorID: "pm25_24h", measurement: airQualityOut24!, unit: "µg/m^3", desc: "PM2.5 Outdoor Air Quality Outdoor - 24 Hour Average")
return AWSensor(type: .AirQuality, name: "24 Average Outdoor Air Quality", sensorID: "pm25_24h", measurement: airQualityOut24!, unit: "µg/m^3", desc: "PM2.5 Outdoor Air Quality Outdoor - 24 Hour Average")
} else {
return nil
}
}

var AirQualityIndoor: SWKSensor? {
var AirQualityIndoor: AWSensor? {
if airQualityIn != nil {
return SWKSensor(type: .AirQuality, name: "Indoor Air Quality", sensorID: "pm25_in", measurement: airQualityIn!, unit: "µg/m^3", desc: "PM2.5 Indoor Air Quality")
return AWSensor(type: .AirQuality, name: "Indoor Air Quality", sensorID: "pm25_in", measurement: airQualityIn!, unit: "µg/m^3", desc: "PM2.5 Indoor Air Quality")
} else {
return nil
}
}

var AirQualityIndoor24Avg: SWKSensor? {
var AirQualityIndoor24Avg: AWSensor? {
if airQualityIn24 != nil {
return SWKSensor(type: .AirQuality, name: "24 Average Indoor Air Quality", sensorID: "pm25_in_24h", measurement: airQualityIn24!, unit: "µg/m^3", desc: "PM2.5 Indoor Air Quality - 24 Hour Average")
return AWSensor(type: .AirQuality, name: "24 Average Indoor Air Quality", sensorID: "pm25_in_24h", measurement: airQualityIn24!, unit: "µg/m^3", desc: "PM2.5 Indoor Air Quality - 24 Hour Average")
} else {
return nil
}
}

var UVIndex: SWKSensor? {
var UVIndex: AWSensor? {
if uvIndex != nil {
return SWKSensor(type: .AirQuality, name: "UV Index", sensorID: "uv", measurement: uvIndex!, unit: "None", desc: "Ultra-Violet Radiation Index")
return AWSensor(type: .Radiation, name: "UV Index", sensorID: "uv", measurement: uvIndex!, unit: "None", desc: "Ultra-Violet Radiation Index")
} else {
return nil
}
}

var SolarRadiation: SWKSensor? {
var SolarRadiation: AWSensor? {
if solarRadiation != nil {
return SWKSensor(type: .AirQuality, name: "Solar Radiation", sensorID: "solarradiation", measurement: solarRadiation!, unit: "W/m^2", desc: "Solar Radiation")
return AWSensor(type: .AirQuality, name: "Solar Radiation", sensorID: "solarradiation", measurement: solarRadiation!, unit: "W/m^2", desc: "Solar Radiation")
} else {
return nil
}
}

var CarbonDioxide: SWKSensor? {
var CarbonDioxide: AWSensor? {
if carbonDioxide != nil {
return SWKSensor(type: .AirQuality, name: "CO2 Level", sensorID: "co2", measurement: carbonDioxide!, unit: "ppm", desc: "Carbon Dioxide Level")
return AWSensor(type: .AirQuality, name: "CO2 Level", sensorID: "co2", measurement: carbonDioxide!, unit: "ppm", desc: "Carbon Dioxide Level")
} else {
return nil
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,97 +8,105 @@
import Foundation

extension AWStationData {
var BatterySensors: [SWKSensor] {
let sensors: [SWKSensor?] = [BatterySensor, BatterySensor1, BatterySensor2, BatterySensor3,
var BatterySensors: [AWSensor] {
let sensors: [AWSensor?] = [BatterySensor, BatterySensor1, BatterySensor2, BatterySensor3,
BatterySensor4, BatterySensor5, BatterySensor6, BatterySensor7,
BatterySensor8, BatterySensor9, BatterySensor10]
return sensors.compactMap{ $0 }
}

var BatterySensor: SWKSensor? {
var BatteryAirQuality: AWSensor? {
if batteryAQS != nil {
return AWSensor(type: .Battery, name: "Air Quality Battery Status", sensorID: "batt_25", measurement: batteryAQS!, unit: "None", desc: "PM2.5 Air Quality Sensor Battery Status")
} else {
return nil
}
}

var BatterySensor: AWSensor? {
if batteryOut != nil {
return SWKSensor(type: .Battery, name: "Outdoor Battery Status", sensorID: "battout", measurement: batteryOut!, unit: "None", desc: "Outdoor Battery Status")
return AWSensor(type: .Battery, name: "Outdoor Battery Status", sensorID: "battout", measurement: batteryOut!, unit: "None", desc: "Outdoor Battery Status")
} else {
return nil
}
}

var BatterySensor1: SWKSensor? {
var BatterySensor1: AWSensor? {
if batteryOut1 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 1", sensorID: "batt1", measurement: batteryOut1!, unit: "None", desc: "Outdoor Battery Status - Sensor #1")
return AWSensor(type: .Battery, name: "Battery Status: 1", sensorID: "batt1", measurement: batteryOut1!, unit: "None", desc: "Outdoor Battery Status - Sensor #1")
} else {
return nil
}
}

var BatterySensor2: SWKSensor? {
var BatterySensor2: AWSensor? {
if batteryOut2 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 2", sensorID: "batt2", measurement: batteryOut2!, unit: "None", desc: "Outdoor Battery Status - Sensor #2")
return AWSensor(type: .Battery, name: "Battery Status: 2", sensorID: "batt2", measurement: batteryOut2!, unit: "None", desc: "Outdoor Battery Status - Sensor #2")
} else {
return nil
}
}

var BatterySensor3: SWKSensor? {
var BatterySensor3: AWSensor? {
if batteryOut3 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 3", sensorID: "batt3", measurement: batteryOut3!, unit: "None", desc: "Outdoor Battery Status - Sensor #3")
return AWSensor(type: .Battery, name: "Battery Status: 3", sensorID: "batt3", measurement: batteryOut3!, unit: "None", desc: "Outdoor Battery Status - Sensor #3")
} else {
return nil
}
}

var BatterySensor4: SWKSensor? {
var BatterySensor4: AWSensor? {
if batteryOut4 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 4", sensorID: "batt4", measurement: batteryOut4!, unit: "None", desc: "Outdoor Battery Status - Sensor #4")
return AWSensor(type: .Battery, name: "Battery Status: 4", sensorID: "batt4", measurement: batteryOut4!, unit: "None", desc: "Outdoor Battery Status - Sensor #4")
} else {
return nil
}
}

var BatterySensor5: SWKSensor? {
var BatterySensor5: AWSensor? {
if batteryOut5 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 5", sensorID: "batt5", measurement: batteryOut5!, unit: "None", desc: "Outdoor Battery Status - Sensor #5")
return AWSensor(type: .Battery, name: "Battery Status: 5", sensorID: "batt5", measurement: batteryOut5!, unit: "None", desc: "Outdoor Battery Status - Sensor #5")
} else {
return nil
}
}

var BatterySensor6: SWKSensor? {
var BatterySensor6: AWSensor? {
if batteryOut6 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 6", sensorID: "batt6", measurement: batteryOut6!, unit: "None", desc: "Outdoor Battery Status - Sensor #6")
return AWSensor(type: .Battery, name: "Battery Status: 6", sensorID: "batt6", measurement: batteryOut6!, unit: "None", desc: "Outdoor Battery Status - Sensor #6")
} else {
return nil
}
}

var BatterySensor7: SWKSensor? {
var BatterySensor7: AWSensor? {
if batteryOut7 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 7", sensorID: "batt7", measurement: batteryOut7!, unit: "None", desc: "Outdoor Battery Status - Sensor #7")
return AWSensor(type: .Battery, name: "Battery Status: 7", sensorID: "batt7", measurement: batteryOut7!, unit: "None", desc: "Outdoor Battery Status - Sensor #7")
} else {
return nil
}
}

var BatterySensor8: SWKSensor? {
var BatterySensor8: AWSensor? {
if batteryOut8 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 8", sensorID: "batt8", measurement: batteryOut8!, unit: "None", desc: "Outdoor Battery Status - Sensor #8")
return AWSensor(type: .Battery, name: "Battery Status: 8", sensorID: "batt8", measurement: batteryOut8!, unit: "None", desc: "Outdoor Battery Status - Sensor #8")
} else {
return nil
}
}


var BatterySensor9: SWKSensor? {
var BatterySensor9: AWSensor? {
if batteryOut9 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 9", sensorID: "batt9", measurement: batteryOut9!, unit: "None", desc: "Outdoor Battery Status - Sensor #9")
return AWSensor(type: .Battery, name: "Battery Status: 9", sensorID: "batt9", measurement: batteryOut9!, unit: "None", desc: "Outdoor Battery Status - Sensor #9")
} else {
return nil
}
}

var BatterySensor10: SWKSensor? {
var BatterySensor10: AWSensor? {
if batteryOut10 != nil {
return SWKSensor(type: .Battery, name: "Battery Status: 10", sensorID: "batt10", measurement: batteryOut10!, unit: "None", desc: "Outdoor Battery Status - Sensor #10")
return AWSensor(type: .Battery, name: "Battery Status: 10", sensorID: "batt10", measurement: batteryOut10!, unit: "None", desc: "Outdoor Battery Status - Sensor #10")
} else {
return nil
}
Expand Down
Loading

0 comments on commit e920e31

Please sign in to comment.