111 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*********************************************************************************
 | |
|  *  MIT License
 | |
|  *  
 | |
|  *  Copyright (c) 2022 Gregg E. Berman
 | |
|  *  
 | |
|  *  https://github.com/HomeSpan/HomeSpan
 | |
|  *  
 | |
|  *  Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
|  *  of this software and associated documentation files (the "Software"), to deal
 | |
|  *  in the Software without restriction, including without limitation the rights
 | |
|  *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
|  *  copies of the Software, and to permit persons to whom the Software is
 | |
|  *  furnished to do so, subject to the following conditions:
 | |
|  *  
 | |
|  *  The above copyright notice and this permission notice shall be included in all
 | |
|  *  copies or substantial portions of the Software.
 | |
|  *  
 | |
|  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
|  *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
|  *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
|  *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
|  *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | |
|  *  SOFTWARE.
 | |
|  *  
 | |
|  ********************************************************************************/
 | |
|  
 | |
| #include "HomeSpan.h" 
 | |
| 
 | |
| // Apple's HomeKit does not provide any native services or characteristics for measuring atmospheric pressure.
 | |
| // However, Eve for HomeKit does support pressure measurements.
 | |
| 
 | |
| // This brief sketch demonstrates how you can use HomeSpan's Custom Service and Custom Characteristic features
 | |
| // to create a Pressure Sensor Accessory that will be recognized by the Eve for HomeKit App. Note that the
 | |
| // Apple Home App will show this as a "Not Supported" Accessory Tile indicating it cannot be used in the Home App.
 | |
| // However, this does not create any problems or errors in the Home App.
 | |
| 
 | |
| // Step 1:
 | |
| 
 | |
| //    Use the CUSTOM_SERV macro to create a new service named AtmosphericPressureSensor with
 | |
| //    a UUID=E863F00A-079E-48FF-8F27-9C2605A29F52. This new service will be added to HomeSpan's Service namespace
 | |
| //    and can be accessed using the fully-qualified name Service::AtmosphericPressureSensor.  The UUID specified
 | |
| //    will not be recognized by Apple's Home App, but will be recognized by the Eve for HomeKit App. Note you
 | |
| //    do NOT enclose either of the parameters in quotes!
 | |
| 
 | |
|   CUSTOM_SERV(AtmosphericPressureSensor, E863F00A-079E-48FF-8F27-9C2605A29F52);
 | |
| 
 | |
| // Step 2:
 | |
| 
 | |
| //    Use the CUSTOM_CHAR macro to create a new characteristic named AtmosphericPressure with
 | |
| //    a UUID=E863F10F-079E-48FF-8F27-9C2605A29F52. This new characteristic will be added to HomeSpan's Characteristic namespace
 | |
| //    and can be accessed using the fully-qualified name Characteristic::AtmosphericPressure.  The UUID specified will not be
 | |
| //    recognized by Apple's Home App, but will be recognized by the Eve for HomeKit App. Note you do NOT enclose any of the
 | |
| //    parameters in quotes!
 | |
| //
 | |
| //    The meaning of the parmameters are as follows:
 | |
| //
 | |
| //      PR+EV:    sets permission for "read" and "notify"
 | |
| //      FLOAT:    sets the format to floating-point decimal number
 | |
| //      1013:     sets the default starting value to 1013, which is 1 atm in millibars
 | |
| //      700:      sets the default lower range of allowed values to 700 millibars
 | |
| //      1200:     sets the default upper range of allowed values to 1200 millibars
 | |
| //      false:    sets the "static range" flag to false, indicating that users CAN override the default range setRange() if desired
 | |
| 
 | |
|   CUSTOM_CHAR(AtmosphericPressure, E863F10F-079E-48FF-8F27-9C2605A29F52, PR+EV, FLOAT, 1013, 700, 1200, false);
 | |
| 
 | |
| // Now that AtmosphericPressureSensor and AtmosphericPressure have been created, they can be used just as any other native HomeSpan
 | |
| // Service and Characteristic.
 | |
| 
 | |
| //////////////////////////////////////
 | |
| 
 | |
| struct PressureSensor : Service::AtmosphericPressureSensor {         // A standalone Air Pressure Sensor
 | |
| 
 | |
|   Characteristic::AtmosphericPressure pressure;                      // Eve Air Pressure with range 700-1200 hPa (millibars), where 1 atm=1013 hPa
 | |
|   
 | |
|   PressureSensor() : Service::AtmosphericPressureSensor{} {
 | |
|         
 | |
|     Serial.print("Configuring Air Pressure Sensor");                 // initialization message
 | |
|     Serial.print("\n");
 | |
| 
 | |
|   } // end constructor
 | |
| 
 | |
|   void loop(){
 | |
| 
 | |
|     if(pressure.timeVal()>5000)                        // here we simulate an actual sensor by generating a random pressure reading every 5 seconds
 | |
|       pressure.setVal((double)random(900,1100));
 | |
|        
 | |
|   } // end loop
 | |
| 
 | |
| }; // end PressureSensor
 | |
| 
 | |
| //////////////////////////////////////
 | |
| 
 | |
| void setup() {
 | |
|  
 | |
|   Serial.begin(115200);
 | |
| 
 | |
|   homeSpan.begin(Category::Sensors,"Eve Air Pressure");
 | |
| 
 | |
|   SPAN_ACCESSORY();  
 | |
|     new PressureSensor();      
 | |
| 
 | |
| }
 | |
| 
 | |
| //////////////////////////////////////
 | |
| 
 | |
| void loop(){ 
 | |
| 
 | |
|   homeSpan.poll();  
 | |
| }
 |