-
-
Save kennedyshead/180aaffc17a76b195451f364e38e4f07 to your computer and use it in GitHub Desktop.
import logging | |
from homeassistant.helpers.entity import Entity | |
class nooa: | |
URL = "https://services.swpc.noaa.gov/products/noaa-scales.json" | |
@staticmethod | |
async def fetch(session, url): | |
import json | |
async with session.get(url) as response: | |
return json.loads(await response.text()) | |
@staticmethod | |
async def get_data(): | |
import aiohttp | |
async with aiohttp.ClientSession() as session: | |
html = await nooa.fetch(session, nooa.URL) | |
return html | |
_LOGGER = logging.getLogger(__name__) | |
STATIC_DATA = { | |
"S": ("Solar Radiation Storms",), | |
"R": ("Radio Blackouts",), | |
"G": ("Geomagnetic Storms",), | |
} | |
async def async_setup_platform( | |
hass, config, async_add_entities, discovery_info=None): | |
"""Set up the sensors.""" | |
data = await nooa.get_data() | |
entities = [ | |
NooaSensor(data, "R"), | |
NooaSensor(data, "S"), | |
NooaSensor(data, "G"), | |
] | |
async_add_entities(entities) | |
class NooaSensor(Entity): | |
"""Representation of sensor.""" | |
def __init__(self, data, sensor_type): | |
"""Init the sensor.""" | |
self._unit = sensor_type | |
self._attributes = {} | |
self._state = data["0"][sensor_type]["Scale"] | |
self.filter_attributes(data) | |
self._name = STATIC_DATA[sensor_type][0] | |
@property | |
def unit_of_measurement(self): | |
"""Return the unit of measurement.""" | |
return self._unit | |
@property | |
def state(self): | |
"""Property for the state attributes.""" | |
return self._state | |
@property | |
def name(self): | |
"""Name property for sensor.""" | |
return self._name | |
@property | |
def state_attributes(self): | |
"""Property for the state attributes.""" | |
return self._attributes | |
def filter_attributes(self, data): | |
"""Filter out data for this Sensor.""" | |
self._attributes = { | |
"Yesterday": data["-1"][self._unit]["Scale"], | |
"Tomorrow": data["1"][self._unit]["Scale"], | |
"Day after tomorrow": data["2"][self._unit]["Scale"], | |
"In three days": data["3"][self._unit]["Scale"] | |
} | |
async def async_update(self): | |
"""Fetch new state data for the sensor.""" | |
data = await nooa.get_data() | |
self._state = data["0"][self._unit]["Scale"] | |
self.filter_attributes(data) |
Seems to be working for me, what problems do you have?
It is not possible to use Python imports with basic python script integration. And I do not really like or understand appdaemon. Thanks for confirmation. Maybe I will try to run this from os as a script
I'm have some trouble getting this working and was wondering if there are any further instructions?
(I used https://techcode7821332.wordpress.com/2018/12/19/custom-nooa-space-weather-component-for-homeassistant/)
I'm using the latest version of HASS IO on a Pi.
I created a folder under /custom_components called sensors (/custom_components/sensors) and copied the py file to that folder (/config/custom_components/sensors/nooa_space_weather.py)
I'm assuming I add the
sensors:
– platform: nooa_space_weather
to my configuration.yaml?
I did this, which results in:
Setup failed for sensors: Integration not found.
22:42:49 – (ERROR) setup.py
Any thoughts on how to proceed?
Hi! it should look like this: /custom_components/nooa_space_weather/sensors.py
There are also some more stuff needed nowadays to make the component work, I could upload a zip to put in custom_components if you want?
Unzip this in custom_components: https://cloud.mknutas.se/s/geN5iztFrMn8D92 and then add config to yaml and reload hass.
Thank you! That was very helpful. It seems to be working.
I just need to wait for some solar activity as everything is clear at the moment.
Appreciate your help and making this available!
Hi!
May I ask to upload that zip again? The old url dosn't working and it make me happy to use this tool.
Thank you
Any chance you have new version working in 2022 in hass?