|
54 | 54 | ATTR_BLOCKS_CONFIRMED, |
55 | 55 | ATTR_BLOCKS_ORPHANED, |
56 | 56 | ATTR_BLOCK_TIME_IN_SECONDS, |
| 57 | + ATTR_MEMPOOL_FEES_FASTEST, |
| 58 | + ATTR_MEMPOOL_FEES_30MIN, |
| 59 | + ATTR_MEMPOOL_FEES_60MIN, |
| 60 | + ATTR_MEMPOOL_FEES_ECO, |
| 61 | + ATTR_MEMPOOL_FEES_MINIMUM, |
57 | 62 | ATTR_MEMPOOL_TX_COUNT, |
58 | 63 | ATTR_MEMPOOL_TOTAL_FEE, |
59 | 64 | ATTR_MEMPOOL_TOTAL_FEE_CALC, |
|
70 | 75 | API_ENDPOINT_CHAIN_ORPHANS, |
71 | 76 | API_ENDPOINT_CHAIN_BLOCK_TIME, |
72 | 77 | API_ENDPOINT_NOMP_POOL_STATS, |
| 78 | + API_ENDPOINT_MEMPOOL_FEES, |
73 | 79 | API_ENDPOINT_MEMPOOL_STATS, |
74 | 80 | CONF_DIFF_MULTIPLIER, |
75 | 81 | CONF_BLOCK_TIME_MINUTES, |
@@ -188,6 +194,11 @@ def __init__( |
188 | 194 | self._blocks_orphaned = None |
189 | 195 | self._mempool_tx_count = None |
190 | 196 | self._mempool_total_fee = None |
| 197 | + self._mempool_fees_fastest = None |
| 198 | + self._mempool_fees_30min = None |
| 199 | + self._mempool_fees_60min = None |
| 200 | + self._mempool_fees_eco = None |
| 201 | + self._mempool_fees_minimum = None |
191 | 202 |
|
192 | 203 | @property |
193 | 204 | def is_child_sensor(self): |
@@ -428,6 +439,13 @@ def get_extra_state_attrs(self, full_attr_force=False): |
428 | 439 | output_attrs[ATTR_MEMPOOL_TX_COUNT] = self._mempool_tx_count |
429 | 440 | output_attrs[ATTR_MEMPOOL_TOTAL_FEE] = self._mempool_total_fee |
430 | 441 |
|
| 442 | + if full_attr_force or self._fetch_type == CryptoInfoAdvDataFetchType.MEMPOOL_FEES: |
| 443 | + output_attrs[ATTR_MEMPOOL_FEES_FASTEST] = self._mempool_fees_fastest |
| 444 | + output_attrs[ATTR_MEMPOOL_FEES_30MIN] = self._mempool_fees_30min |
| 445 | + output_attrs[ATTR_MEMPOOL_FEES_60MIN] = self._mempool_fees_60min |
| 446 | + output_attrs[ATTR_MEMPOOL_FEES_ECO] = self._mempool_fees_eco |
| 447 | + output_attrs[ATTR_MEMPOOL_FEES_MINIMUM] = self._mempool_fees_minimum |
| 448 | + |
431 | 449 | return output_attrs |
432 | 450 |
|
433 | 451 | @property |
@@ -595,7 +613,7 @@ def check_valid_config(self, raise_error=True): |
595 | 613 |
|
596 | 614 | return False |
597 | 615 |
|
598 | | - if self._fetch_type == CryptoInfoAdvDataFetchType.MEMPOOL_STATS: |
| 616 | + if self._fetch_type in CryptoInfoAdvEntityManager.instance().fetch_mempool_types: |
599 | 617 |
|
600 | 618 | if self.cryptocurrency_name.lower() not in ['btc', 'bitcoin']: |
601 | 619 | _LOGGER.error(f"Sensor {self.name} is not BTC, mempool is only supported for BTC.") |
@@ -733,6 +751,12 @@ def _extract_data_mempool_stats_full(self, json_data): |
733 | 751 | def _extract_data_mempool_stats_primary(self, api_data): |
734 | 752 | return int(api_data["vsize"]) |
735 | 753 |
|
| 754 | + def _extract_data_mempool_fees_full(self, json_data): |
| 755 | + return json_data |
| 756 | + |
| 757 | + def _extract_data_mempool_fees_primary(self, api_data): |
| 758 | + return int(api_data["fastestFee"]) |
| 759 | + |
736 | 760 | async def _fetch_price_data_main(self, api_data=None): |
737 | 761 | if not self._fetch_type == CryptoInfoAdvDataFetchType.PRICE_MAIN: |
738 | 762 | raise ValueError() |
@@ -974,6 +998,31 @@ async def _fetch_mempool_stats(self, api_data=None): |
974 | 998 |
|
975 | 999 | return self.data |
976 | 1000 |
|
| 1001 | + async def _fetch_mempool_fees(self, api_data=None): |
| 1002 | + self.check_valid_config() |
| 1003 | + |
| 1004 | + mempool_data, api_data = await self._async_api_fetch( |
| 1005 | + api_data, |
| 1006 | + API_ENDPOINT_MEMPOOL_FEES.format(API_BASE_URL_MEMPOOLSPACE), |
| 1007 | + self._extract_data_mempool_fees_full, |
| 1008 | + self._extract_data_mempool_fees_primary |
| 1009 | + ) |
| 1010 | + |
| 1011 | + if mempool_data is not None: |
| 1012 | + self._update_all_properties( |
| 1013 | + state=int(mempool_data), |
| 1014 | + mempool_fees_fastest=int(api_data["fastestFee"]), |
| 1015 | + mempool_fees_30min=int(api_data["halfHourFee"]), |
| 1016 | + mempool_fees_60min=int(api_data["hourFee"]), |
| 1017 | + mempool_fees_eco=int(api_data["economyFee"]), |
| 1018 | + mempool_fees_minimum=int(api_data["minimumFee"]), |
| 1019 | + ) |
| 1020 | + |
| 1021 | + else: |
| 1022 | + raise ValueError() |
| 1023 | + |
| 1024 | + return self.data |
| 1025 | + |
977 | 1026 | def _render_fetch_args(self): |
978 | 1027 | if self._fetch_args is None: |
979 | 1028 | return None |
@@ -1052,6 +1101,11 @@ def _update_all_properties( |
1052 | 1101 | blocks_orphaned=None, |
1053 | 1102 | mempool_tx_count=None, |
1054 | 1103 | mempool_total_fee=None, |
| 1104 | + mempool_fees_fastest=None, |
| 1105 | + mempool_fees_30min=None, |
| 1106 | + mempool_fees_60min=None, |
| 1107 | + mempool_fees_eco=None, |
| 1108 | + mempool_fees_minimum=None, |
1055 | 1109 | available=True, |
1056 | 1110 | ): |
1057 | 1111 | self._state = state |
@@ -1080,6 +1134,11 @@ def _update_all_properties( |
1080 | 1134 | self._blocks_orphaned = blocks_orphaned |
1081 | 1135 | self._mempool_tx_count = mempool_tx_count |
1082 | 1136 | self._mempool_total_fee = mempool_total_fee |
| 1137 | + self._mempool_fees_fastest = mempool_fees_fastest |
| 1138 | + self._mempool_fees_30min = mempool_fees_30min |
| 1139 | + self._mempool_fees_60min = mempool_fees_60min |
| 1140 | + self._mempool_fees_eco = mempool_fees_eco |
| 1141 | + self._mempool_fees_minimum = mempool_fees_minimum |
1083 | 1142 | self._attr_available = available |
1084 | 1143 |
|
1085 | 1144 | self._update_child_sensors() |
@@ -1158,6 +1217,9 @@ async def _async_update(self): |
1158 | 1217 | elif self._fetch_type == CryptoInfoAdvDataFetchType.MEMPOOL_STATS: |
1159 | 1218 | api_data = await self._fetch_mempool_stats(api_data) |
1160 | 1219 |
|
| 1220 | + elif self._fetch_type == CryptoInfoAdvDataFetchType.MEMPOOL_FEES: |
| 1221 | + api_data = await self._fetch_mempool_fees(api_data) |
| 1222 | + |
1161 | 1223 | else: |
1162 | 1224 | api_data = await self._fetch_price_data_main(api_data) |
1163 | 1225 |
|
|
0 commit comments