Add support for all currencies

This commit is contained in:
Cathal O Cuimin 2022-05-15 20:45:47 -07:00 committed by Roxedus
parent 0e94842c9d
commit 6b85fe5e70
No known key found for this signature in database
GPG Key ID: EBC13557C4D91D7B
4 changed files with 38 additions and 5 deletions

View File

@ -102,7 +102,10 @@ class BalanceSensor(Entity):
return ICON_CURRENCY_EUR
elif self.currency == CURRENCY_USD:
return ICON_CURRENCY_USD
return ICON_CURRENCY_BTC
elif self.currency == CURRENCY_BTC:
return ICON_CURRENCY_BTC
return ICON_CURRENCY_USD
@property
def unit_of_measurement(self):

View File

@ -58,6 +58,23 @@ NICEHASH_ATTRIBUTION = "Data provided by NiceHash"
CURRENCY_BTC = "BTC"
CURRENCY_USD = "USD"
CURRENCY_EUR = "EUR"
SUPPORTED_CURRENCIES = [
"ERN","HKD","GGP","RSD","SHP","USD","MYR","PYG","RON","DOP","TWD","AWG",
"CVE","BND","RUB","NGN","XCD","JEP","ZWL","HNL","NZD","AFN","MUR","DKK",
"CNY","JOD","CHF","COP","XAF","XAG","ZMK","GNF","ZMW","GIP","BTC","MKD",
"WST","IDR","IQD","BHD","YER","MAD","KGS","PHP","PEN","BMD","DJF","MVR",
"QAR","JPY","SCR","IMP","KRW","HRK","SOS","VUV","NIO","KYD","LAK","ISK",
"BOB","IRR","NPR","EGP","BBD","CAD","XAU","CUP","SDG","PKR","UZS","CLF",
"CUC","STD","MGA","FJD","DZD","TJS","EURKM","SZL","THB","SRD","BDT",
"BTN","CZK","AMD","UGX","TRY","AUD","UAH","HUF","SLL","VND","RWF","LBP",
"ANG","SAR","LVL","KHR","BYR","TTD","OMR","LTL","GTQ","ALL","MRO","MWK",
"LSL","SBD","BGN","LRD","JMD","CRC","ETB","NAD","GYD","LKR","INR","SEK",
"KES","KMF","VEF","ARS","HTG","BAM","BWP","GEL","KZT","AED","KWD","XDR",
"EUR","TND","MDL","LYD","BSD","GHS","MOP","PAB","ZAR","AZN","TOP","SVC",
"KPW","TMT","BZD","GMD","XOF","UYU","MNT","NOK","XPF","BIF","BYN","FKP",
"GBP","MXN","SYP","PGK","MZN","PLN","MMK","SGD","AOA","ILS","CLP","TZS",
"CDF","BRL"
]
# Balance type
BALANCE_TYPE_AVAILABLE = "available"
BALANCE_TYPE_PENDING = "pending"

View File

@ -12,6 +12,7 @@ from homeassistant.helpers.update_coordinator import (
from .const import (
CURRENCY_BTC,
CURRENCY_USD,
DOMAIN,
)
from .nicehash import NiceHashPrivateClient, NiceHashPublicClient
@ -41,13 +42,25 @@ class AccountsDataUpdateCoordinator(DataUpdateCoordinator):
accounts = await self._client.get_accounts()
exchange_rates = await NiceHashPublicClient().get_exchange_rates()
rates_dict = dict()
# NiceHash supports BTC->USD and BTC->EUR only.
for rate in exchange_rates:
fromCurrency = rate.get("fromCurrency")
# Only care about the Bitcoin exchange rates
if fromCurrency == CURRENCY_BTC:
toCurrency = rate.get("toCurrency")
exchange_rate = float(rate.get("exchangeRate"))
rates_dict[f"{fromCurrency}-{toCurrency}"] = exchange_rate
# For non-USD/EUR currencies, get exchange rate using USD as an intermediary. e.g. BTC->USD->CAD
btc_to_usd_rate = rates_dict[f"BTC-USD"]
for rate in exchange_rates:
fromCurrency = rate.get("fromCurrency")
if fromCurrency == CURRENCY_USD:
toCurrency = rate.get("toCurrency")
exchange_rate = float(rate.get("exchangeRate")) * btc_to_usd_rate
if f"{CURRENCY_BTC}-{toCurrency}" not in rates_dict:
rates_dict[f"{CURRENCY_BTC}-{toCurrency}"] = exchange_rate
return {
"accounts": accounts,
"exchange_rates": rates_dict,

View File

@ -20,6 +20,7 @@ from .const import (
DEVICE_RPM,
DEVICE_SPEED_RATE,
DEVICE_SPEED_ALGORITHM,
SUPPORTED_CURRENCIES,
)
from .nicehash import (
MiningRig,
@ -122,7 +123,7 @@ def create_balance_sensors(organization_id, currency, coordinator):
balance_type=BALANCE_TYPE_TOTAL,
),
]
if currency == CURRENCY_USD or currency == CURRENCY_EUR:
if currency in SUPPORTED_CURRENCIES:
_LOGGER.debug(f"Creating {currency} account balance sensors")
balance_sensors.append(
BalanceSensor(
@ -149,8 +150,7 @@ def create_balance_sensors(organization_id, currency, coordinator):
)
)
else:
_LOGGER.warn("Invalid currency: must be EUR or USD")
_LOGGER.warn("Currency is invalid.")
return balance_sensors