mirror of
				https://github.com/beestat/app.git
				synced 2025-10-31 01:57:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Sensor for any thermostat type.
 | |
|  *
 | |
|  * @author Jon Ziebell
 | |
|  */
 | |
| class sensor extends cora\crud {
 | |
| 
 | |
|   public static $exposed = [
 | |
|     'private' => [
 | |
|       'read_id',
 | |
|       'sync'
 | |
|     ],
 | |
|     'public' => []
 | |
|   ];
 | |
| 
 | |
|   public static $cache = [
 | |
|     'sync' => 180 // 3 Minutes
 | |
|   ];
 | |
| 
 | |
|   /**
 | |
|    * Normal read_id, but filter out unsupported sensor types.
 | |
|    *
 | |
|    * @param array $attributes
 | |
|    * @param array $columns
 | |
|    *
 | |
|    * @return array
 | |
|    */
 | |
|   public function read_id($attributes = [], $columns = []) {
 | |
|     $sensors = parent::read_id($attributes, $columns);
 | |
| 
 | |
|     $return = [];
 | |
|     foreach($sensors as $sensor) {
 | |
|       if (
 | |
|         in_array(
 | |
|           $sensor['type'],
 | |
|           ['ecobee3_remote_sensor', 'thermostat']
 | |
|         ) === true
 | |
|       ) {
 | |
|         $return[$sensor['sensor_id']] = $sensor;
 | |
|       } else if (
 | |
|         in_array(
 | |
|           $sensor['type'],
 | |
|           ['monitor_sensor', 'control_sensor']
 | |
|         ) === true
 | |
|       ) {
 | |
|         /**
 | |
|          * Support for these sensor types is rudimentary. It's enough to get
 | |
|          * temperature but some of these legacy sensors split a single sensor
 | |
|          * up into multiple sensors. For example, thermostat temperature,
 | |
|          * humidity, and motion are three different sensors. Newer sensors
 | |
|          * show up as a single sensor with more than one capability. To make
 | |
|          * sense of this I would have to do a good deal of merging etc in the
 | |
|          * GUI.
 | |
|          *
 | |
|          * I don't really think it's worth the clutter or the time investment.
 | |
|          */
 | |
|         foreach($sensor['capability'] as $capability) {
 | |
|           if($capability['type'] === 'temperature') {
 | |
|             $return[$sensor['sensor_id']] = $sensor;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return $return;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Sync all sensors for the current user. If we fail to get a lock, fail
 | |
|    * silently (catch the exception) and just return false.
 | |
|    *
 | |
|    * @return boolean true if the sync ran, false if not.
 | |
|    */
 | |
|   public function sync() {
 | |
|     // Skip this for the demo
 | |
|     if($this->setting->is_demo() === true) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     try {
 | |
|       $lock_name = 'sensor->sync(' . $this->session->get_user_id() . ')';
 | |
|       $this->database->get_lock($lock_name);
 | |
| 
 | |
|       $this->api('ecobee_sensor', 'sync');
 | |
| 
 | |
|       $this->api(
 | |
|         'user',
 | |
|         'update_sync_status',
 | |
|         [
 | |
|           'key' => 'sensor'
 | |
|         ]
 | |
|       );
 | |
| 
 | |
|       $this->database->release_lock($lock_name);
 | |
|     } catch(cora\exception $e) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
| }
 |