1 """The kraken integration."""
3 from __future__
import annotations
6 from datetime
import timedelta
19 CONF_TRACKED_ASSET_PAIRS,
20 DEFAULT_SCAN_INTERVAL,
21 DEFAULT_TRACKED_ASSET_PAIR,
22 DISPATCH_CONFIG_UPDATED,
26 from .utils
import get_tradable_asset_pairs
28 CALL_RATE_LIMIT_SLEEP = 1
30 PLATFORMS = [Platform.SENSOR]
32 _LOGGER = logging.getLogger(__name__)
36 """Set up kraken from a config entry."""
38 await kraken_data.async_setup()
39 hass.data[DOMAIN] = kraken_data
40 entry.async_on_unload(entry.add_update_listener(async_options_updated))
41 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
46 """Unload a config entry."""
47 unload_ok = await hass.config_entries.async_unload_platforms(
48 config_entry, PLATFORMS
57 """Define an object to hold kraken data."""
59 def __init__(self, hass: HomeAssistant, config_entry: ConfigEntry) ->
None:
63 self.
_api_api = pykrakenapi.KrakenAPI(krakenex.API(), retry=0, crl_sleep=0)
65 self.
coordinatorcoordinator: DataUpdateCoordinator[KrakenResponse |
None] |
None =
None
68 """Get the latest data from the Kraken.com REST API.
70 All tradeable asset pairs are retrieved, not the tracked asset pairs
71 selected by the user. This enables us to check for an unknown and
72 thus likely removed asset pair in sensor.py and only log a warning
76 async
with asyncio.timeout(10):
78 except pykrakenapi.pykrakenapi.KrakenAPIError
as error:
79 if "Unknown asset pair" in str(error):
81 "Kraken.com reported an unknown asset pair. Refreshing list of"
82 " tradable asset pairs"
87 f
"Unable to fetch data from Kraken.com: {error}"
89 except pykrakenapi.pykrakenapi.CallRateLimitError:
91 "Exceeded the Kraken.com call rate limit. Increase the update interval"
92 " to prevent this error"
98 ticker_df = self.
_api_api.get_ticker_information(websocket_name_pairs)
100 ticker_df = ticker_df.rename(
104 "c":
"last_trade_closed",
106 "p":
"volume_weighted_average",
107 "t":
"number_of_trades",
110 "o":
"opening_price",
113 response_dict: KrakenResponse = ticker_df.transpose().to_dict()
118 get_tradable_asset_pairs, self.
_api_api
122 """Set up the Kraken integration."""
125 CONF_SCAN_INTERVAL: DEFAULT_SCAN_INTERVAL,
126 CONF_TRACKED_ASSET_PAIRS: [DEFAULT_TRACKED_ASSET_PAIR],
128 self.
_hass_hass.config_entries.async_update_entry(
133 await asyncio.sleep(CALL_RATE_LIMIT_SLEEP)
140 seconds=self.
_config_entry_config_entry.options[CONF_SCAN_INTERVAL]
143 await self.
coordinatorcoordinator.async_config_entry_first_refresh()
145 await asyncio.sleep(CALL_RATE_LIMIT_SLEEP)
151 """Set the coordinator update_interval to the supplied update_interval."""
157 """Triggered by config entry options updates."""
None set_update_interval(self, int update_interval)
None __init__(self, HomeAssistant hass, ConfigEntry config_entry)
None _async_refresh_tradable_asset_pairs(self)
KrakenResponse|None async_update(self)
KrakenResponse _get_kraken_data(self)
str _get_websocket_name_asset_pairs(self)
timedelta set_update_interval(int instances_count, int requests_remaining)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
None async_options_updated(HomeAssistant hass, ConfigEntry config_entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry config_entry)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)