|
22 | 22 | ) |
23 | 23 | from ._e3dc_rscp_web import E3DC_RSCP_web |
24 | 24 | from ._rscpLib import rscpFindTag, rscpFindTagIndex |
| 25 | +from ._rscpTags import getPowermeterType |
25 | 26 |
|
26 | 27 | REMOTE_ADDRESS = "https://s10.e3dc.com/s10/phpcmd/cmd.php" |
27 | 28 | REQUEST_INTERVAL_SEC = 10 # minimum interval between requests |
@@ -1746,6 +1747,50 @@ def get_pvis_data(self, pvis=None, keepAlive=False): |
1746 | 1747 |
|
1747 | 1748 | return outObj |
1748 | 1749 |
|
| 1750 | + def get_powermeters(self, keepAlive=False): |
| 1751 | + """Scans for installed power meters via rscp protocol locally. |
| 1752 | +
|
| 1753 | + Args: |
| 1754 | + keepAlive (Optional[bool]): True to keep connection alive |
| 1755 | +
|
| 1756 | + Returns: |
| 1757 | + dict: Dictionary containing the found powermeters as follows.:: |
| 1758 | +
|
| 1759 | + "powermeters": [ |
| 1760 | + {'index': 0, 'type': 1, 'typeName': 'PM_TYPE_ROOT'}, |
| 1761 | + {'index': 1, 'type': 4, 'typeName': 'PM_TYPE_ADDITIONAL_CONSUMPTION'} |
| 1762 | + ] |
| 1763 | + """ |
| 1764 | + maxPowermeters = 8 |
| 1765 | + outObj = [] |
| 1766 | + for pmIndex in range( |
| 1767 | + maxPowermeters |
| 1768 | + ): # max 8 powermeters according to E3DC spec |
| 1769 | + res = self.sendRequest( |
| 1770 | + ( |
| 1771 | + "PM_REQ_DATA", |
| 1772 | + "Container", |
| 1773 | + [ |
| 1774 | + ("PM_INDEX", "Uint16", pmIndex), |
| 1775 | + ("PM_REQ_TYPE", "None", None), |
| 1776 | + ], |
| 1777 | + ), |
| 1778 | + keepAlive=True if pmIndex < (maxPowermeters - 1) else keepAlive, |
| 1779 | + ) |
| 1780 | + |
| 1781 | + pmType = rscpFindTagIndex(res, "PM_TYPE") |
| 1782 | + |
| 1783 | + if pmType is not None: |
| 1784 | + outObj.append( |
| 1785 | + { |
| 1786 | + "index": pmIndex, |
| 1787 | + "type": pmType, |
| 1788 | + "typeName": getPowermeterType(pmType), |
| 1789 | + } |
| 1790 | + ) |
| 1791 | + |
| 1792 | + return outObj |
| 1793 | + |
1749 | 1794 | def get_powermeter_data(self, pmIndex=None, keepAlive=False): |
1750 | 1795 | """Polls the power meter data via rscp protocol locally. |
1751 | 1796 |
|
|
0 commit comments