add proton flux 10 mev, make scales ints so they show a graph
This commit is contained in:
parent
d4fa375e0b
commit
765f04978f
|
@ -38,7 +38,10 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
||||||
SpaceWeatherPredictionSensor(session, 'S', 'Prob', '3', '2day'),
|
SpaceWeatherPredictionSensor(session, 'S', 'Prob', '3', '2day'),
|
||||||
SpaceWeatherPredictionSensor(session, 'G', 'Scale', '3', '2day'),
|
SpaceWeatherPredictionSensor(session, 'G', 'Scale', '3', '2day'),
|
||||||
|
|
||||||
PlanetaryKIndexSensor(session)
|
PlanetaryKIndexSensor(session),
|
||||||
|
|
||||||
|
ProtonFlux10MEV(session),
|
||||||
|
ProtonFlux10MEVWarningThreshold(session),
|
||||||
], True)
|
], True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,15 +72,15 @@ class SpaceWeatherScaleSensor(Entity):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self):
|
||||||
return f'{self._scale_key}{self._data[self._scale_key]["Scale"]}'
|
return int(self._data[self._scale_key]["Scale"])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extra_state_attributes(self):
|
def extra_state_attributes(self):
|
||||||
if self._data:
|
if self._data:
|
||||||
return {
|
return {
|
||||||
'scale_int': int(self._data[self._scale_key]['Scale']),
|
|
||||||
'text': self._data[self._scale_key]['Text'],
|
'text': self._data[self._scale_key]['Text'],
|
||||||
'timestamp': datetime.fromisoformat(self._data["DateStamp"] + 'T' + self._data["TimeStamp"] + '+00:00').isoformat()
|
'timestamp': datetime.fromisoformat(self._data["DateStamp"] + 'T' + self._data["TimeStamp"] + '+00:00').isoformat(),
|
||||||
|
'state_class': 'measurement'
|
||||||
}
|
}
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -115,9 +118,10 @@ class SpaceWeatherPredictionSensor(Entity):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self):
|
||||||
|
if self._state:
|
||||||
if self._pred_key == 'Scale':
|
if self._pred_key == 'Scale':
|
||||||
return self._state
|
return int(self._state)
|
||||||
elif self._state is not None:
|
else:
|
||||||
try:
|
try:
|
||||||
return float(self._state)
|
return float(self._state)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
@ -134,7 +138,8 @@ class SpaceWeatherPredictionSensor(Entity):
|
||||||
def extra_state_attributes(self):
|
def extra_state_attributes(self):
|
||||||
if self._data:
|
if self._data:
|
||||||
return {
|
return {
|
||||||
'timestamp': datetime.fromisoformat(self._data["DateStamp"] + 'T' + self._data["TimeStamp"] + '+00:00').isoformat()
|
'timestamp': datetime.fromisoformat(self._data["DateStamp"] + 'T' + self._data["TimeStamp"] + '+00:00').isoformat(),
|
||||||
|
'state_class': 'measurement'
|
||||||
}
|
}
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -199,6 +204,81 @@ class PlanetaryKIndexSensor(Entity):
|
||||||
data = await response.json()
|
data = await response.json()
|
||||||
self._data = data[-1]
|
self._data = data[-1]
|
||||||
else:
|
else:
|
||||||
_LOGGER.error(f'Error fetching data from {SCALES_URL}')
|
_LOGGER.error(f'Error fetching data from planetary_k_index_1m.json')
|
||||||
except aiohttp.ClientError as err:
|
except aiohttp.ClientError as err:
|
||||||
_LOGGER.error(f'Error fetching data from {SCALES_URL}: {err}')
|
_LOGGER.error(f'Error fetching data from planetary_k_index_1m.json: {err}')
|
||||||
|
|
||||||
|
|
||||||
|
class ProtonFlux10MEV(Entity):
|
||||||
|
"""
|
||||||
|
https://www.swpc.noaa.gov/products/goes-proton-flux
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, session):
|
||||||
|
self._session = session
|
||||||
|
self._name = 'Space Weather Proton Flux 10 MeV'
|
||||||
|
self._data = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
return 'space_weather_proton_flux_10_mev'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
if self._data:
|
||||||
|
return round(float(self._data['flux']), 2)
|
||||||
|
return None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def extra_state_attributes(self):
|
||||||
|
if self._data:
|
||||||
|
return {
|
||||||
|
'satellite': self._data['satellite'],
|
||||||
|
'timestamp': datetime.fromisoformat(self._data['time_tag']).isoformat(),
|
||||||
|
'state_class': 'measurement'
|
||||||
|
}
|
||||||
|
return None
|
||||||
|
|
||||||
|
@Throttle(SCAN_INTERVAL)
|
||||||
|
async def async_update(self):
|
||||||
|
try:
|
||||||
|
async with self._session.get('https://services.swpc.noaa.gov/json/goes/primary/integral-protons-1-day.json') as response:
|
||||||
|
if response.status == 200:
|
||||||
|
data = await response.json()
|
||||||
|
self._data = {}
|
||||||
|
for x in list(reversed(data)):
|
||||||
|
if x['energy'] == '>=10 MeV':
|
||||||
|
self._data = x
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
_LOGGER.error(f'Error fetching data from integral-protons-1-day.json')
|
||||||
|
except aiohttp.ClientError as err:
|
||||||
|
_LOGGER.error(f'Error fetching data from integral-protons-1-day.json: {err}')
|
||||||
|
|
||||||
|
|
||||||
|
class ProtonFlux10MEVWarningThreshold(Entity):
|
||||||
|
def __init__(self, session):
|
||||||
|
self._session = session
|
||||||
|
self._name = 'Space Weather Proton Flux 10 MeV Warning Threshold'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
return 'space_weather_proton_flux_10_mev_warning_threshold'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
return 10
|
||||||
|
|
||||||
|
@property
|
||||||
|
def extra_state_attributes(self):
|
||||||
|
return {
|
||||||
|
'state_class': 'measurement'
|
||||||
|
}
|
||||||
|
|
|
@ -89,24 +89,24 @@ class SpaceWeather24hrMaxCard extends HTMLElement {
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<div class="scale-container">
|
<div class="scale-container">
|
||||||
<div class="scale-item" data-entity-id="sensor.space_weather_scale_r_24hr_max">
|
<div class="scale-item" data-entity-id="sensor.space_weather_scale_r_24hr_max">
|
||||||
<div class="scale-value noaa_scale_bg_${this._getNumericState('sensor.space_weather_scale_r_24hr_max')}">
|
<div class="scale-value noaa_scale_bg_${this._getStateValue('sensor.space_weather_scale_r_24hr_max')}">
|
||||||
${this._getStateValue('sensor.space_weather_scale_r_24hr_max')}
|
R${this._getStateValue('sensor.space_weather_scale_r_24hr_max')}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="scale-text">
|
<!-- <div class="scale-text">
|
||||||
${this._getStateAttribute('sensor.space_weather_scale_r_24hr_max', 'text')}
|
${this._getStateAttribute('sensor.space_weather_scale_r_24hr_max', 'text')}
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="scale-item" data-entity-id="sensor.space_weather_scale_s_24hr_max">
|
<div class="scale-item" data-entity-id="sensor.space_weather_scale_s_24hr_max">
|
||||||
<div class="scale-value noaa_scale_bg_${this._getNumericState('sensor.space_weather_scale_s_24hr_max')}">
|
<div class="scale-value noaa_scale_bg_${this._getStateValue('sensor.space_weather_scale_s_24hr_max')}">
|
||||||
${this._getStateValue('sensor.space_weather_scale_s_24hr_max')}
|
S${this._getStateValue('sensor.space_weather_scale_s_24hr_max')}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="scale-text">
|
<!-- <div class="scale-text">
|
||||||
${this._getStateAttribute('sensor.space_weather_scale_s_24hr_max', 'text')}
|
${this._getStateAttribute('sensor.space_weather_scale_s_24hr_max', 'text')}
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="scale-item" data-entity-id="sensor.space_weather_scale_g_24hr_max">
|
<div class="scale-item" data-entity-id="sensor.space_weather_scale_g_24hr_max">
|
||||||
<div class="scale-value noaa_scale_bg_${this._getNumericState('sensor.space_weather_scale_g_24hr_max')}">
|
<div class="scale-value noaa_scale_bg_${this._getStateValue('sensor.space_weather_scale_g_24hr_max')}">
|
||||||
${this._getStateValue('sensor.space_weather_scale_g_24hr_max')}
|
G${this._getStateValue('sensor.space_weather_scale_g_24hr_max')}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="scale-text">
|
<!-- <div class="scale-text">
|
||||||
${this._getStateAttribute('sensor.space_weather_scale_g_24hr_max', 'text')}
|
${this._getStateAttribute('sensor.space_weather_scale_g_24hr_max', 'text')}
|
||||||
|
|
|
@ -88,24 +88,24 @@ class SpaceWeatherCard extends HTMLElement {
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<div class="scale-container">
|
<div class="scale-container">
|
||||||
<div class="scale-item" data-entity-id="sensor.space_weather_scale_r">
|
<div class="scale-item" data-entity-id="sensor.space_weather_scale_r">
|
||||||
<div class="scale-value noaa_scale_bg_${this._getNumericState('sensor.space_weather_scale_r')}">
|
<div class="scale-value noaa_scale_bg_${this._getStateValue('sensor.space_weather_scale_r')}">
|
||||||
${this._getStateValue('sensor.space_weather_scale_r')}
|
R${this._getStateValue('sensor.space_weather_scale_r')}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="scale-text">
|
<!-- <div class="scale-text">
|
||||||
${this._getStateAttribute('sensor.space_weather_scale_r', 'text')}
|
${this._getStateAttribute('sensor.space_weather_scale_r', 'text')}
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="scale-item" data-entity-id="sensor.space_weather_scale_s">
|
<div class="scale-item" data-entity-id="sensor.space_weather_scale_s">
|
||||||
<div class="scale-value noaa_scale_bg_${this._getNumericState('sensor.space_weather_scale_s')}">
|
<div class="scale-value noaa_scale_bg_${this._getStateValue('sensor.space_weather_scale_s')}">
|
||||||
${this._getStateValue('sensor.space_weather_scale_s')}
|
S${this._getStateValue('sensor.space_weather_scale_s')}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="scale-text">
|
<!-- <div class="scale-text">
|
||||||
${this._getStateAttribute('sensor.space_weather_scale_s', 'text')}
|
${this._getStateAttribute('sensor.space_weather_scale_s', 'text')}
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="scale-item" data-entity-id="sensor.space_weather_scale_g">
|
<div class="scale-item" data-entity-id="sensor.space_weather_scale_g">
|
||||||
<div class="scale-value noaa_scale_bg_${this._getNumericState('sensor.space_weather_scale_g')}">
|
<div class="scale-value noaa_scale_bg_${this._getStateValue('sensor.space_weather_scale_g')}">
|
||||||
${this._getStateValue('sensor.space_weather_scale_g')}
|
G${this._getStateValue('sensor.space_weather_scale_g')}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="scale-text">
|
<!-- <div class="scale-text">
|
||||||
${this._getStateAttribute('sensor.space_weather_scale_g', 'text')}
|
${this._getStateAttribute('sensor.space_weather_scale_g', 'text')}
|
||||||
|
|
Loading…
Reference in New Issue