add relative time option to simulated sensors (#14038)
By default simulated sensors are relative to when they're activated, instead we make this togglable with this new option 'relative_to_epoch', and instead they become relative to 1970-01-01 00:00:00.pull/14969/head
parent
b2440a6d95
commit
c8e0de19b6
|
@ -7,6 +7,7 @@ https://home-assistant.io/components/sensor.simulated/
|
|||
import logging
|
||||
import math
|
||||
from random import Random
|
||||
from datetime import datetime
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
|
@ -25,6 +26,7 @@ CONF_PERIOD = 'period'
|
|||
CONF_PHASE = 'phase'
|
||||
CONF_SEED = 'seed'
|
||||
CONF_UNIT = 'unit'
|
||||
CONF_RELATIVE_TO_EPOCH = 'relative_to_epoch'
|
||||
|
||||
DEFAULT_AMP = 1
|
||||
DEFAULT_FWHM = 0
|
||||
|
@ -34,6 +36,7 @@ DEFAULT_PERIOD = 60
|
|||
DEFAULT_PHASE = 0
|
||||
DEFAULT_SEED = 999
|
||||
DEFAULT_UNIT = 'value'
|
||||
DEFAULT_RELATIVE_TO_EPOCH = True
|
||||
|
||||
ICON = 'mdi:chart-line'
|
||||
|
||||
|
@ -46,6 +49,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|||
vol.Optional(CONF_PHASE, default=DEFAULT_PHASE): vol.Coerce(float),
|
||||
vol.Optional(CONF_SEED, default=DEFAULT_SEED): cv.positive_int,
|
||||
vol.Optional(CONF_UNIT, default=DEFAULT_UNIT): cv.string,
|
||||
vol.Optional(CONF_RELATIVE_TO_EPOCH, default=DEFAULT_RELATIVE_TO_EPOCH):
|
||||
cv.boolean,
|
||||
})
|
||||
|
||||
|
||||
|
@ -59,15 +64,18 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||
phase = config.get(CONF_PHASE)
|
||||
fwhm = config.get(CONF_FWHM)
|
||||
seed = config.get(CONF_SEED)
|
||||
relative_to_epoch = config.get(CONF_RELATIVE_TO_EPOCH)
|
||||
|
||||
sensor = SimulatedSensor(name, unit, amp, mean, period, phase, fwhm, seed)
|
||||
sensor = SimulatedSensor(name, unit, amp, mean, period, phase, fwhm, seed,
|
||||
relative_to_epoch)
|
||||
add_devices([sensor], True)
|
||||
|
||||
|
||||
class SimulatedSensor(Entity):
|
||||
"""Class for simulated sensor."""
|
||||
|
||||
def __init__(self, name, unit, amp, mean, period, phase, fwhm, seed):
|
||||
def __init__(self, name, unit, amp, mean, period, phase, fwhm, seed,
|
||||
relative_to_epoch):
|
||||
"""Init the class."""
|
||||
self._name = name
|
||||
self._unit = unit
|
||||
|
@ -78,7 +86,11 @@ class SimulatedSensor(Entity):
|
|||
self._fwhm = fwhm
|
||||
self._seed = seed
|
||||
self._random = Random(seed) # A local seeded Random
|
||||
self._start_time = dt_util.utcnow()
|
||||
self._start_time = (
|
||||
datetime(1970, 1, 1, tzinfo=dt_util.UTC) if relative_to_epoch
|
||||
else dt_util.utcnow()
|
||||
)
|
||||
self._relative_to_epoch = relative_to_epoch
|
||||
self._state = None
|
||||
|
||||
def time_delta(self):
|
||||
|
@ -136,5 +148,6 @@ class SimulatedSensor(Entity):
|
|||
'phase': self._phase,
|
||||
'spread': self._fwhm,
|
||||
'seed': self._seed,
|
||||
'relative_to_epoch': self._relative_to_epoch,
|
||||
}
|
||||
return attr
|
||||
|
|
|
@ -5,8 +5,8 @@ from tests.common import get_test_home_assistant
|
|||
|
||||
from homeassistant.components.sensor.simulated import (
|
||||
CONF_AMP, CONF_FWHM, CONF_MEAN, CONF_PERIOD, CONF_PHASE, CONF_SEED,
|
||||
CONF_UNIT, DEFAULT_AMP, DEFAULT_FWHM, DEFAULT_MEAN, DEFAULT_NAME,
|
||||
DEFAULT_PHASE, DEFAULT_SEED)
|
||||
CONF_UNIT, CONF_RELATIVE_TO_EPOCH, DEFAULT_AMP, DEFAULT_FWHM, DEFAULT_MEAN,
|
||||
DEFAULT_NAME, DEFAULT_PHASE, DEFAULT_SEED, DEFAULT_RELATIVE_TO_EPOCH)
|
||||
from homeassistant.const import CONF_FRIENDLY_NAME
|
||||
from homeassistant.setup import setup_component
|
||||
|
||||
|
@ -42,3 +42,5 @@ class TestSimulatedSensor(unittest.TestCase):
|
|||
assert state.attributes.get(CONF_PHASE) == DEFAULT_PHASE
|
||||
assert state.attributes.get(CONF_FWHM) == DEFAULT_FWHM
|
||||
assert state.attributes.get(CONF_SEED) == DEFAULT_SEED
|
||||
assert state.attributes.get(
|
||||
CONF_RELATIVE_TO_EPOCH) == DEFAULT_RELATIVE_TO_EPOCH
|
||||
|
|
Loading…
Reference in New Issue