Advertisement
Skeem

CellarTracker sensor.py

Mar 4th, 2021
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.44 KB | None | 0 0
  1. #Update to sensor.py from https://github.com/ahoernecke/ha_cellar_tracker/tree/master/custom_components/cellar_tracker
  2. #as the version on github did not update. This ones does - every hour.
  3.  
  4. """Platform for sensor integration."""
  5. from homeassistant.helpers.entity import Entity
  6. from homeassistant.util import Throttle
  7. from datetime import timedelta
  8. import time
  9. import pandas as pd
  10. import re
  11. from . import DOMAIN
  12.  
  13. MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=30)
  14.  
  15. def setup_platform(hass, config, add_entities, discovery_info=None):
  16.     """Set up the sensor platform."""
  17.     # We only want this platform to be set up via discovery.
  18.     if discovery_info is None:
  19.         return
  20.  
  21.     devs = []
  22.    
  23.     master_data = hass.data[DOMAIN].get_readings()
  24.  
  25.    
  26.  
  27.     for sensor_type in master_data.keys():
  28.  
  29.         data = master_data[sensor_type]
  30.         if(type(data) == dict):
  31.             for key in data.keys():
  32.  
  33.                 value = data[key]
  34.                 sensor_data = data.copy()
  35.                 sensor_data[sensor_type] = key
  36.                
  37.  
  38.                 devs.append(WineCellarSensor(sensor_type, key, sensor_data))    
  39.         else:
  40.             devs.append(WineCellarSensor(sensor_type, None, data))
  41.        
  42.  
  43.     add_entities(devs, True)
  44.    
  45.  
  46. class WineCellarSensor(Entity):
  47.     """Representation of a sensor."""
  48.  
  49.     def __init__(self, sensor_type, sub_type, data):
  50.         """Initialize the sensor."""
  51.  
  52.         self._sensor_type = sensor_type
  53.         self._sub_type = sub_type
  54.         self._data = data
  55.         if(self._sub_type):
  56.             self._slug = self._sub_type.lower()
  57.             self._slug = re.sub(r'[^a-z0-9]+', '-', self._slug).strip('-')
  58.             self._slug = re.sub(r'[_]+', '-', self._slug)
  59.         else:
  60.             self._slug = None
  61.         # self.update()
  62.  
  63.     @property
  64.     def name(self):
  65.         """Return the name of the sensor."""
  66.         if(self._sub_type):
  67.             return "cellar_tracker." + self._sensor_type.lower() + "." + self._slug.lower()
  68.         else:
  69.             return "cellar_tracker." + self._sensor_type.lower()
  70.  
  71.  
  72.     @property
  73.     def device_state_attributes(self):
  74.         if(self._sub_type):
  75.             return self._data
  76.  
  77.         return {}
  78.  
  79.     @property
  80.     def icon(self):
  81.         if(re.match(".+_value",self._sensor_type)):
  82.             return "mdi:currency-usd"
  83.  
  84.         return "mdi:bottle-wine"
  85.    
  86.  
  87.     @property
  88.     def state(self):
  89.         """Return the state of the sensor."""
  90.         if(self._state == None):
  91.             return 0
  92.  
  93.         if(re.match(".+_value",self._sensor_type)):
  94.             return f"${round(self._state,2)}"
  95.  
  96.         return self._state
  97.  
  98.     @property
  99.     def unique_id(self):
  100.         return "cellar_tracker." + self.name
  101.    
  102.  
  103.     @property
  104.     def unit_of_measurement(self):
  105.         """Return the unit of measurement."""
  106.         if(re.match(".+_value",self._sensor_type)):
  107.             return None
  108.  
  109.         return "bottles"
  110.  
  111.  
  112.     def update(self):
  113.         """Fetch new state data for the sensor.
  114.        This is the only method that should fetch new data for Home Assistant.
  115.        """
  116.  
  117.         self.hass.data[DOMAIN].update()
  118.         self._data = self.hass.data[DOMAIN].get_reading(self._sensor_type)
  119.        
  120.         if(self._sub_type):
  121.             self._data = self._data[self._sub_type]
  122.             self._state = self._data["count"]
  123.         else:
  124.             self._state = self._data
  125.  
  126.        
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement