pax_global_header00006660000000000000000000000064144702144610014515gustar00rootroot0000000000000052 comment=c89fc98f58a9c519da9b530fbb9a8a4c7b4e1baf kellerza-pysma-c89fc98/000077500000000000000000000000001447021446100151145ustar00rootroot00000000000000kellerza-pysma-c89fc98/.github/000077500000000000000000000000001447021446100164545ustar00rootroot00000000000000kellerza-pysma-c89fc98/.github/workflows/000077500000000000000000000000001447021446100205115ustar00rootroot00000000000000kellerza-pysma-c89fc98/.github/workflows/main.yml000066400000000000000000000070321447021446100221620ustar00rootroot00000000000000name: CI on: [push, pull_request] env: DEFAULT_PYTHON: "3.9" jobs: black: name: Check black runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - uses: psf/black@stable isort: name: Check isort runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - uses: jamescurtin/isort-action@master flake8: name: Check flake8 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - uses: TrueBrain/actions-flake8@master pylint: name: Check pylint runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Install Requirements run: | python -m pip install --upgrade pip pip install pylint . - name: Run Pylint run: | pylint pysma mypy: name: Check mypy runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Install Requirements run: | pip install mypy . - name: Run mypy run: | mypy pysma/ pydocstyle: name: Check pydocstyle runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Install Requirements run: | pip install pydocstyle - name: Run pydocstyle run: | pydocstyle pytest: name: Run tests Python ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.9", "3.10"] needs: - black - isort - flake8 - pylint - mypy env: PYTHON: ${{ matrix.python-version }} steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Run tests and generate coverage report run: | pip install -r requirements_test.txt pytest --cov=./pysma --cov-report=xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} env_vars: PYTHON verbose: true build-n-publish: name: Build and publish Python 🐍 distributions 📦 to PyPI runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags') needs: - pytest steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.DEFAULT_PYTHON }} uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Install pypa/build run: >- python -m pip install build --user - name: Build a binary wheel and a source tarball run: >- python -m build --sdist --wheel --outdir dist/ . - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@master with: password: ${{ secrets.PYPI_API_TOKEN }} kellerza-pysma-c89fc98/.gitignore000066400000000000000000000020661447021446100171100ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # IPython Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # dotenv .env # virtualenv venv/ ENV/ # Spyder project settings .spyderproject # Rope project settings .ropeproject # IDEs and OSs .vscode .DS_Storekellerza-pysma-c89fc98/.pre-commit-config.yaml000066400000000000000000000012751447021446100214020ustar00rootroot00000000000000repos: - repo: https://github.com/psf/black rev: 22.3.0 hooks: - id: black args: - --quiet - repo: https://github.com/PyCQA/isort rev: 5.12.0 hooks: - id: isort - repo: https://github.com/pycqa/flake8 rev: 4.0.1 hooks: - id: flake8 - repo: https://github.com/codespell-project/codespell rev: v2.1.0 hooks: - id: codespell - repo: https://github.com/pre-commit/mirrors-mypy rev: v0.961 hooks: - id: mypy files: "pysma/.*.py" additional_dependencies: [types-attrs] - repo: https://github.com/pycqa/pydocstyle rev: 6.1.1 hooks: - id: pydocstyle files: "pysma/.*.py" kellerza-pysma-c89fc98/LICENSE000066400000000000000000000020631447021446100161220ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2016 kellerza Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. kellerza-pysma-c89fc98/MANIFEST.in000066400000000000000000000001171447021446100166510ustar00rootroot00000000000000include LICENSE README.md graft pysma graft tests recursive-exclude * *.py[co] kellerza-pysma-c89fc98/README.md000066400000000000000000000037231447021446100164000ustar00rootroot00000000000000# pysma library [![Workflow Status](https://github.com/kellerza/pysma/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/kellerza/pysma/actions) [![Codecov](https://codecov.io/gh/kellerza/pysma/branch/master/graph/badge.svg)](https://codecov.io/gh/kellerza/pysma) [![Documentation Status](https://readthedocs.org/projects/pysma/badge/?version=latest)](https://pysma.readthedocs.io/en/latest/?badge=latest) SMA Webconnect library for Python 3. The library was created to integrate SMA inverters with HomeAssistant See for more information on the SMA solar inverters Other SMA interfaces include [SBFspot](https://github.com/SBFspot/SBFspot/) and a Python [adaptation](https://github.com/TD22057/T-Home/) ## Example usage See [example.py](./example.py) for a basic usage and tests # Home Assistant The Home Assistant sma sensor documentation can be found [here](https://www.home-assistant.io/components/sma) > --- > > **This library uses Webconnect.** ~Modbus~ is not supported > > **If you can access your SMA via your browser, this might work for you.** > > --- If you access your SMA WebConnect via `https://` you should set both `ssl: true` and `verify_ssl: false`. Daily usage is not always available from the SMA WebConnect interface. It is possible to get around this by using a [utility meter](https://www.home-assistant.io/components/utility_meter) or more recently from the Energy management feature in Home Assistant ### How to debug this addon 1. Ensure you can access your SMA from your browser To enable detailed logging in Home Assistant, you can add the following to your configuration ```yaml logger: default: info logs: homeassistant.components.sma: debug pysma: debug ``` ## Energy Meter This library can read the second version of the emnergy meter, there is a seperate Home Assistant OS Addon that could also read older Energy Meters directly. See [Energy Meter](https://github.com/kellerza/hassio-sma-em) kellerza-pysma-c89fc98/docs/000077500000000000000000000000001447021446100160445ustar00rootroot00000000000000kellerza-pysma-c89fc98/docs/Makefile000066400000000000000000000011721447021446100175050ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) kellerza-pysma-c89fc98/docs/conf.py000066400000000000000000000004271447021446100173460ustar00rootroot00000000000000"""Config for pysma documentation.""" project = "PySMA" copyright = "2021, Johann Kellerman, René Klomp" author = "Johann Kellerman, René Klomp" extensions = [ "sphinx.ext.autodoc", "sphinx.ext.napoleon", ] autoclass_content = "both" html_theme = "sphinx_rtd_theme" kellerza-pysma-c89fc98/docs/getting_started.rst000066400000000000000000000045251447021446100217730ustar00rootroot00000000000000Getting Started =============== Install ******* PySMA is available on `pypi`_ and can be installed using pip. .. code-block:: console pip install pysma .. _pypi: https://pypi.org/project/pysma/ Create SMA instance ******************* The :class:`~pysma.SMA` class requires a `ClientSession`_ object, an URL and a password. The default user group is "user", but can be changed by passing it as the fourth ``group`` parameter. .. code-block:: python3 session = aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) url = "https://device-hostname" password = "MyPassword!" sma = pysma.SMA(session, url, password) .. _ClientSession: https://docs.aiohttp.org/en/stable/client_reference.html Create Sensors ************** To retrieve values from the device you need a :class:`~pysma.sensor.Sensors` object. The easiest way is to generate one using the :meth:`~pysma.SMA.get_sensors` method. This will query the device to figure out the device class and returns a :class:`~pysma.sensor.Sensors` object containing specific :class:`~pysma.sensor.Sensor` objects for your device. .. code-block:: python3 sma_sensors = sma.get_sensors() Alternatively this can be manually created by initializing an empty :class:`~pysma.sensor.Sensors` object and adding new :class:`~pysma.sensor.Sensor` objects to it using the :meth:`~pysma.sensor.Sensors.add` method. Predefined sensors can be found in :mod:`pysma.definitions`. See also `definitions.py at Github`_. .. code-block:: python3 sma_sensors = Sensors() my_sensor = Sensor("6300_12345678_0", "dummy_sensor") # This key won't work! sma_sensors.add(my_sensor) sma_sensors.add(pysma.definitions.pv_power_a) .. _definitions.py at Github: https://github.com/kellerza/pysma/blob/master/pysma/definitions.py Read Sensor values ****************** Now you have a :class:`~pysma.sensor.Sensors` object, you can pass this to :meth:`~pysma.SMA.read` to read the values from the device. The retrieved values are stored in the respective :class:`~pysma.sensor.Sensor`. .. code-block:: python3 sma.read(sma_sensors) for sma_sensor in sma_sensors: print(f"{sma_sensor.name}: {sma_sensor.value}") Complete Example **************** A full example can be found in the `Github repository`_ .. _Github repository: https://github.com/kellerza/pysma/blob/master/example.py kellerza-pysma-c89fc98/docs/index.rst000066400000000000000000000004741447021446100177120ustar00rootroot00000000000000Welcome to PySMA's documentation! ================================= .. toctree:: :maxdepth: 1 :caption: Contents: getting_started pysma modules Home Assistant Documentation Indices and tables ================== * :ref:`genindex` * :ref:`modindex` kellerza-pysma-c89fc98/docs/make.bat000066400000000000000000000014331447021446100174520ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd kellerza-pysma-c89fc98/docs/modules.rst000066400000000000000000000012441447021446100202470ustar00rootroot00000000000000Submodules ============= pysma.const module ------------------ .. automodule:: pysma.const :members: :undoc-members: :show-inheritance: pysma.definitions module ------------------------ .. automodule:: pysma.definitions :members: :undoc-members: :show-inheritance: pysma.exceptions module ----------------------- .. automodule:: pysma.exceptions :members: :undoc-members: :show-inheritance: pysma.helpers module -------------------- .. automodule:: pysma.helpers :members: :undoc-members: :show-inheritance: pysma.sensor module ------------------- .. automodule:: pysma.sensor :members: :undoc-members: :show-inheritance:kellerza-pysma-c89fc98/docs/pysma.rst000066400000000000000000000001571447021446100177320ustar00rootroot00000000000000PySMA Main Class ================ .. automodule:: pysma :members: :undoc-members: :show-inheritance: kellerza-pysma-c89fc98/example.py000066400000000000000000000052161447021446100171250ustar00rootroot00000000000000#!/usr/bin/env python """Basic usage example and testing of pysma.""" import argparse import asyncio import logging import signal import sys import aiohttp import pysma # This example will work with Python 3.9+ _LOGGER = logging.getLogger(__name__) VAR = {} def print_table(sensors): """Print sensors formatted as table.""" for sen in sensors: if sen.value is None: print("{:>25}".format(sen.name)) else: print("{:>25}{:>15} {}".format(sen.name, str(sen.value), sen.unit)) async def main_loop(password, user, url): """Run main loop.""" async with aiohttp.ClientSession( connector=aiohttp.TCPConnector(ssl=False) ) as session: VAR["sma"] = pysma.SMA(session, url, password=password, group=user) try: await VAR["sma"].new_session() except pysma.exceptions.SmaAuthenticationException: _LOGGER.warning("Authentication failed!") return except pysma.exceptions.SmaConnectionException: _LOGGER.warning("Unable to connect to device at %s", url) return # We should not get any exceptions, but if we do we will close the session. try: VAR["running"] = True cnt = 5 sensors = await VAR["sma"].get_sensors() device_info = await VAR["sma"].device_info() for name, value in device_info.items(): print("{:>15}{:>25}".format(name, value)) # enable all sensors for sensor in sensors: sensor.enabled = True while VAR.get("running"): await VAR["sma"].read(sensors) print_table(sensors) cnt -= 1 if cnt == 0: break await asyncio.sleep(2) finally: _LOGGER.info("Closing Session...") await VAR["sma"].close_session() async def main(): """Run example.""" logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) parser = argparse.ArgumentParser(description="Test the SMA webconnect library.") parser.add_argument( "url", type=str, help="Web address of the Webconnect module (http://ip-address or https://ip-address)", ) parser.add_argument("user", choices=["user", "installer"], help="Login username") parser.add_argument("password", help="Login password") args = parser.parse_args() def _shutdown(*_): VAR["running"] = False signal.signal(signal.SIGINT, _shutdown) await main_loop(user=args.user, password=args.password, url=args.url) if __name__ == "__main__": asyncio.run(main()) kellerza-pysma-c89fc98/pysma/000077500000000000000000000000001447021446100162455ustar00rootroot00000000000000kellerza-pysma-c89fc98/pysma/__init__.py000066400000000000000000000375411447021446100203700ustar00rootroot00000000000000"""SMA WebConnect library for Python. See: http://www.sma.de/en/products/monitoring-control/webconnect.html Source: http://www.github.com/kellerza/pysma """ import asyncio import copy import json import logging from typing import Any, Dict, Optional import jmespath # type: ignore from aiohttp import ClientSession, ClientTimeout, client_exceptions, hdrs from . import definitions from .const import ( DEFAULT_LANG, DEFAULT_TIMEOUT, DEVICE_INFO, ENERGY_METER_VIA_INVERTER, FALLBACK_DEVICE_INFO, GENERIC_SENSORS, OPTIMIZERS_VIA_INVERTER, URL_ALL_PARAMS, URL_ALL_VALUES, URL_DASH_LOGGER, URL_DASH_VALUES, URL_LOGGER, URL_LOGIN, URL_LOGOUT, URL_VALUES, USERS, ) from .exceptions import ( SmaAuthenticationException, SmaConnectionException, SmaReadException, ) from .helpers import version_int_to_string from .sensor import Sensors _LOGGER = logging.getLogger(__name__) class SMA: """Class to connect to the SMA webconnect module and read parameters.""" # pylint: disable=too-many-instance-attributes _aio_session: ClientSession _new_session_data: Optional[dict] _url: str _sid: Optional[str] _uid: Optional[str] _lang: str _l10n: Optional[dict] _devclass: Optional[str] _device_info_sensors: Sensors def __init__( self, session: ClientSession, url: str, password: Optional[str] = None, group: str = "user", uid: Optional[str] = None, lang: str = DEFAULT_LANG, ): """Init SMA connection. Args: session (ClientSession): aiohttp client session url (str): Url or IP address of device password (str, optional): Password to use during login. Defaults to None. group (str, optional): Username to use during login. Defaults to "user". uid (str, optional): uid used for data extraction. Defaults to None. lang (str, optional): Language code of file to retrieve. Defaults to "en-US". Raises: KeyError: User was not in USERS """ # pylint: disable=too-many-arguments if group not in USERS: raise KeyError(f"Invalid user type: {group}") if password is not None and len(password) > 12: _LOGGER.warning("Password should not exceed 12 characters") if password is None: self._new_session_data = None else: self._new_session_data = {"right": USERS[group], "pass": password} self._url = url.rstrip("/") if not url.startswith("http"): self._url = "http://" + self._url self._aio_session = session self._sid = None self._uid = uid self._lang = lang self._l10n = None self._devclass = None self._device_info_sensors = Sensors(definitions.sensor_map[DEVICE_INFO]) async def _request_json( self, method: str, url: str, **kwargs: Dict[str, Any] ) -> dict: """Request json data for requests. Args: method (str): HTTP method to use url (str): URL to do request to Raises: SmaConnectionException: Connection to device failed Returns: dict: json returned by device """ if self._sid: kwargs.setdefault("params", {}) kwargs["params"]["sid"] = self._sid _LOGGER.debug("Sending %s request to %s: %s", method, url, kwargs) max_retries = 2 for retry in range(max_retries): try: async with self._aio_session.request( method, self._url + url, timeout=ClientTimeout(total=DEFAULT_TIMEOUT), **kwargs, ) as res: res_json = await res.json() _LOGGER.debug("Received reply %s", res_json) return res_json or {} except (client_exceptions.ContentTypeError, json.decoder.JSONDecodeError): _LOGGER.warning("Request to %s did not return a valid json.", url) break except client_exceptions.ServerDisconnectedError as exc: if (retry + 1) < max_retries: # For some reason the SMA device sometimes raises a server disconnected error # If this happens we will retry up to `max_retries` times # This prevents errors in Home Assistant _LOGGER.debug("ServerDisconnectedError, will retry connection.") continue raise SmaConnectionException( f"Server at {self._url} disconnected {max_retries+1} times." ) from exc except ( client_exceptions.ClientError, asyncio.exceptions.TimeoutError, ) as exc: raise SmaConnectionException( f"Could not connect to SMA at {self._url}: {exc}" ) from exc return {} async def _get_json(self, url: str) -> dict: """Get json data for requests. Args: url (str): URL to do GET request to Returns: dict: json returned by device """ return await self._request_json(hdrs.METH_GET, url) async def _post_json(self, url: str, payload: Optional[dict] = None) -> dict: """Post json data for requests. Args: url (str): URL to do POST request to payload (dict, optional): payload to send to device. Defaults to empty dict. Returns: dict: json returned by device """ if payload is None: payload = {} params: Dict[str, Any] = { "data": json.dumps(payload), "headers": {"content-type": "application/json"}, } return await self._request_json(hdrs.METH_POST, url, **params) async def _read_l10n(self) -> dict: """Read device language file. Returns cached value on subsequent calls. Returns: dict: json returned by device """ if self._l10n is None: self._l10n = await self._get_json(f"/data/l10n/{self._lang}.json") if len(self._l10n) == 0: _LOGGER.warning( "Language '%s' not supported, fallback to '%s'", self._lang, DEFAULT_LANG, ) self._l10n = await self._get_json(f"/data/l10n/{DEFAULT_LANG}.json") return self._l10n async def _read_body(self, url: str, payload: dict) -> dict: """Parse the json returned by the device and extract result. Args: url (str): URL to reqquest data from payload (dict): payload to send to device Raises: SmaReadException: The json returned by the device was in an unexpected format Returns: dict: json result """ if self._sid is None and self._new_session_data is not None: await self.new_session() body = await self._post_json(url, payload) # On the first error we close the session which will re-login err = body.get("err") if err is not None: _LOGGER.warning( "%s: error detected, closing session to force another login attempt, got: %s", self._url, body, ) await self.close_session() raise SmaReadException("Error detected while reading") if "result" not in body: _LOGGER.warning("No 'result' in reply from SMA, got: %s", body) raise SmaReadException("No 'result' in reply from SMA") if self._uid is None: # Get the unique ID self._uid = next(iter(body["result"].keys()), None) result_body = body["result"].pop(self._uid, None) if body != {"result": {}}: _LOGGER.warning( "Unexpected body %s, extracted %s", json.dumps(body), json.dumps(result_body), ) return result_body async def new_session(self) -> bool: """Establish a new session. Raises: SmaAuthenticationException: Authentication failed Returns: bool: authentication successful """ body = await self._post_json(URL_LOGIN, self._new_session_data) self._sid = jmespath.search("result.sid", body) if self._sid: _LOGGER.debug("New SID: %s", self._sid) return True err = body.pop("err", None) msg = "Could not start session: %s" if err: if err == 503: _LOGGER.error(msg, "Max amount of sessions reached") elif err == 404: if not self._url.startswith("https"): _LOGGER.error(msg, "Login URL not found, try using HTTPS") else: _LOGGER.error(msg, "Login URL not found") else: _LOGGER.error(msg, err) else: _LOGGER.error(msg, "Session ID expected [result.sid]") raise SmaAuthenticationException() async def close_session(self) -> None: """Close the session login.""" if self._sid is None: return try: await self._post_json(URL_LOGOUT) finally: self._sid = None async def read(self, sensors: Sensors) -> bool: """Read a set of keys. Args: sensors (Sensors): Sensors object containing Sensor objects to read Returns: bool: reading was successful """ if self._new_session_data is None: payload: Dict[str, Any] = {"destDev": [], "keys": []} result_body = await self._read_body(URL_DASH_VALUES, payload) else: payload = { "destDev": [], "keys": list({s.key for s in sensors if s.enabled}), } result_body = await self._read_body(URL_VALUES, payload) notfound = [] l10n = await self._read_l10n() for sen in sensors: if sen.enabled: if sen.key in result_body: sen.extract_value(result_body, l10n) continue notfound.append(f"{sen.name} [{sen.key}]") if notfound: _LOGGER.info( "No values for sensors: %s. Response from inverter: %s", ",".join(notfound), result_body, ) return True async def read_dash_logger(self) -> dict: """Read the dash loggers. Returns: dict: Dictionary containing loggers returned by device. """ return await self._read_body(URL_DASH_LOGGER, {"destDev": [], "key": []}) async def read_logger(self, log_id: int, start: int, end: int) -> list: """Read a logging key and return the results. Args: log_id (int): The ID of the log to read. totWhOut5min: 28672 totWhOutDaily: 28704 GridMsTotWhOutDaily: 28752 GridMsTotWhInDaily: 28768 ObjLogBatCha: 28816 totWhIn5min: 28736 totWhInDaily: 28768 ObjLogBatChrg: 29344 ObjLogBatDsch: 29360 start (int): Start timestamp in seconds. end (int): End timestamp in seconds. Returns: list: The log entries returned by the device """ payload = { "destDev": [], "key": log_id, "tStart": start, "tEnd": end, } result_body = await self._read_body(URL_LOGGER, payload) if not isinstance(result_body, list): raise SmaReadException("List of log entries expected.") return result_body async def device_info(self) -> dict: """Read device info and return the results. Returns: dict: dict containing serial, name, type, manufacturer and sw_version """ await self.read(self._device_info_sensors) device_info = { "serial": self._device_info_sensors["serial_number"].value or FALLBACK_DEVICE_INFO["serial"], "name": self._device_info_sensors["device_name"].value or FALLBACK_DEVICE_INFO["name"], "type": self._device_info_sensors["device_type"].value or FALLBACK_DEVICE_INFO["type"], "manufacturer": self._device_info_sensors["device_manufacturer"].value or FALLBACK_DEVICE_INFO["manufacturer"], "sw_version": version_int_to_string( self._device_info_sensors["device_sw_version"].value ), } return device_info async def _read_all_sensors(self) -> dict: all_values = await self._read_body(URL_ALL_VALUES, {"destDev": []}) all_params = await self._read_body(URL_ALL_PARAMS, {"destDev": []}) return all_values | all_params async def get_sensors(self) -> Sensors: """Get the sensors that are present on the device. Returns: Sensors: Sensors object containing Sensor objects """ all_sensors = await self._read_all_sensors() sensor_keys = all_sensors.keys() device_sensors = Sensors() _LOGGER.debug("Matching generic sensors") for sensor in definitions.sensor_map[GENERIC_SENSORS]: if sensor.key in sensor_keys: if isinstance(all_sensors[sensor.key], list): # SB1.5 multi value val_len = len(all_sensors[sensor.key]) elif "val" in all_sensors[sensor.key]: # SB1.5 single value val_len = 1 else: # All other types, single or multi value sensors_values = list(all_sensors[sensor.key].values())[0] val_len = len(sensors_values) _LOGGER.debug("Found %s with %d value(s).", sensor.key, val_len) if sensor.key_idx < val_len: _LOGGER.debug( "Adding sensor %s (%s_%s)", sensor.name, sensor.key, sensor.key_idx, ) device_sensors.add(sensor) _LOGGER.debug("Checking if Energy Meter is present...") # Detect and add Energy Meter sensors em_sensor = copy.copy(definitions.energy_meter) em_sensor.extract_value(all_sensors) if em_sensor.value: _LOGGER.debug( "Energy Meter with serial %s detected. Adding extra sensors.", em_sensor.value, ) device_sensors.add( [ sensor for sensor in definitions.sensor_map[ENERGY_METER_VIA_INVERTER] if sensor not in device_sensors ] ) _LOGGER.debug("Finding connected optimizers...") # Detect and add Optimizer Sensors optimizers = all_sensors.get(definitions.optimizer_serial.key) if optimizers: serials = optimizers.popitem()[1] for idx, serial in enumerate(serials or []): if serial["val"]: _LOGGER.debug( "Optimizer %s with serial %s detected. Adding extra sensors.", idx, serial, ) for sensor_definition in definitions.sensor_map[ OPTIMIZERS_VIA_INVERTER ]: new_sensor = copy.copy(sensor_definition) new_sensor.key_idx = idx new_sensor.name = f"{sensor_definition.name}_{idx}" device_sensors.add(new_sensor) return device_sensors kellerza-pysma-c89fc98/pysma/const.py000066400000000000000000000024021447021446100177430ustar00rootroot00000000000000"""Constants for SMA WebConnect library for Python.""" URL_LOGIN = "/dyn/login.json" URL_LOGOUT = "/dyn/logout.json" URL_VALUES = "/dyn/getValues.json" URL_ALL_VALUES = "/dyn/getAllOnlValues.json" URL_ALL_PARAMS = "/dyn/getAllParamValues.json" URL_LOGGER = "/dyn/getLogger.json" URL_DASH_LOGGER = "/dyn/getDashLogger.json" URL_DASH_VALUES = "/dyn/getDashValues.json" USERS = {"user": "usr", "installer": "istl"} DEFAULT_TIMEOUT = 15 DEFAULT_LANG = "en-US" JMESPATH_VAL = "val" JMESPATH_VAL_TAG = JMESPATH_VAL + "[0].tag" JMESPATH_VAL_STR = "[?str==sum([`1`,`{}`])].val | [0]" JMESPATH_VAL_IDX = "* | [0][{}].val" JMESPATH_VAL_IDX_TAG = JMESPATH_VAL_IDX + "[0].tag" JMESPATHS_TAG = (JMESPATH_VAL_IDX_TAG, JMESPATH_VAL_TAG) LEGACY_MAP = { "pv_power": {"old_key": "6100_0046C200", "new_sensor": "pv_power_a"}, "pv_voltage": { "old_key": "6380_40451F00", "new_sensor": "pv_power_a", }, "pv_current": { "old_key": "6380_40452100", "new_sensor": "pv_current_a", }, } FALLBACK_DEVICE_INFO = { "manufacturer": "SMA", "name": "SMA Device", "type": "", "serial": "9999999999", } GENERIC_SENSORS = "generic" OPTIMIZERS_VIA_INVERTER = "optimizers" ENERGY_METER_VIA_INVERTER = "energy-meter" DEVICE_INFO = "device-info" kellerza-pysma-c89fc98/pysma/definitions.py000066400000000000000000000473051447021446100211430ustar00rootroot00000000000000"""Sensor definitions for SMA WebConnect library for Python.""" from .const import ( DEVICE_INFO, ENERGY_METER_VIA_INVERTER, GENERIC_SENSORS, JMESPATHS_TAG, OPTIMIZERS_VIA_INVERTER, ) from .sensor import Sensor # Status - Operation #: Status of the device status = Sensor("6180_08214800", "status", path=JMESPATHS_TAG, l10n_translate=True) #: General operating status operating_status_general = Sensor( "6180_08412800", "operating_status_general", path=JMESPATHS_TAG, l10n_translate=True, enabled=False, ) #: Operating status operating_status = Sensor( "6180_08412B00", "operating_status", path=JMESPATHS_TAG, l10n_translate=True, enabled=False, ) # Status - Operation - Inverter #: General operating status inverter_condition = Sensor( "6180_08414C00", "inverter_condition", path=JMESPATHS_TAG, l10n_translate=True, enabled=False, ) #: Inverter Condition inverter_system_init = Sensor( "6800_08811F00", "inverter_system_init", path=JMESPATHS_TAG, l10n_translate=True, enabled=False, ) #: Grid connection status grid_connection_status = Sensor( "6180_0846A700", "grid_connection_status", path=JMESPATHS_TAG, l10n_translate=True, enabled=False, ) #: Grid relay status grid_relay_status = Sensor( "6180_08416400", "grid_relay_status", path=JMESPATHS_TAG, l10n_translate=True, enabled=False, ) # DC side - DC measurements PV #: Current power generated by the solar panels (A side) pv_power_a = Sensor("6380_40251E00_0", "pv_power_a", unit="W") #: Current power generated by the solar panels (B side) pv_power_b = Sensor("6380_40251E00_1", "pv_power_b", unit="W") #: Current power generated by the solar panels (C side) pv_power_c = Sensor("6380_40251E00_2", "pv_power_c", unit="W", enabled=False) #: Current voltage generated by the solar panels (A side) pv_voltage_a = Sensor( "6380_40451F00_0", "pv_voltage_a", unit="V", factor=100, enabled=False ) #: Current voltage generated by the solar panels (B side) pv_voltage_b = Sensor( "6380_40451F00_1", "pv_voltage_b", unit="V", factor=100, enabled=False ) #: Current voltage generated by the solar panels (C side) pv_voltage_c = Sensor( "6380_40451F00_2", "pv_voltage_c", unit="V", factor=100, enabled=False ) #: Current amperage generated by the solar panels (A side) pv_current_a = Sensor("6380_40452100_0", "pv_current_a", unit="A", factor=1000) #: Current amperage generated by the solar panels (B side) pv_current_b = Sensor("6380_40452100_1", "pv_current_b", unit="A", factor=1000) #: Current amperage generated by the solar panels (C side) pv_current_c = Sensor( "6380_40452100_2", "pv_current_c", unit="A", factor=1000, enabled=False ) #: Isolation Resistance pv_isolation_resistance = Sensor( "6102_00254F00_0", "pv_isolation_resistance", unit="kOhm", factor=1000, enabled=False, ) # DC Side - Insulation monitoring #: Insulation residual current insulation_residual_current = Sensor( "6102_40254E00", "insulation_residual_current", unit="mA", enabled=False ) # AC Side - PV Power measurements #: Current power generated by the solar panels pv_power = Sensor("6100_0046C200", "pv_power", unit="W", enabled=False) # AC Side - Grid measurements #: Power supplied to the grid. grid_power = power_l1 + power_l2 + power_l3 grid_power = Sensor("6100_40263F00", "grid_power", unit="W") #: Grid frequency frequency = Sensor("6100_00465700", "frequency", unit="Hz", factor=100, enabled=False) # AC Side - Grid measurements - Active power #: Power for phase 1 power_l1 = Sensor("6100_40464000", "power_l1", unit="W", enabled=False) #: Power for phase 2 power_l2 = Sensor("6100_40464100", "power_l2", unit="W", enabled=False) #: Power for phase 3 power_l3 = Sensor("6100_40464200", "power_l3", unit="W", enabled=False) # AC Side - Grid measurements - Reactive power #: Total Reactive Power grid_reactive_power = Sensor( "6100_40265F00", "grid_reactive_power", unit="var", enabled=False ) #: Reactive Power for phase 1 grid_reactive_power_l1 = Sensor( "6100_40666000", "grid_reactive_power_l1", unit="var", enabled=False ) #: Reactive Power for phase 2 grid_reactive_power_l2 = Sensor( "6100_40666100", "grid_reactive_power_l2", unit="var", enabled=False ) #: Reactive Power for phase 3 grid_reactive_power_l3 = Sensor( "6100_40666200", "grid_reactive_power_l3", unit="var", enabled=False ) # AC Side - Grid measurements - Apparent power #: Total Apparent Power grid_apparent_power = Sensor( "6100_40666700", "grid_apparent_power", unit="VA", enabled=False ) #: Apparent Power for phase 1 grid_apparent_power_l1 = Sensor( "6100_40666800", "grid_apparent_power_l1", unit="VA", enabled=False ) #: Apparent Power for phase 2 grid_apparent_power_l2 = Sensor( "6100_40666900", "grid_apparent_power_l2", unit="VA", enabled=False ) #: Apparent Power for phase 3 grid_apparent_power_l3 = Sensor( "6100_40666A00", "grid_apparent_power_l3", unit="VA", enabled=False ) # AC Side - Grid measurements - Power factor #: Grid Power factor grid_power_factor = Sensor( "6100_00665900", "grid_power_factor", unit="", factor=1000, enabled=False ) #: Grid Power factor excitation grid_power_factor_excitation = Sensor( "6180_08465A00", "grid_power_factor_excitation", path=JMESPATHS_TAG, l10n_translate=True, enabled=False, ) # AC Side - Grid measurements - Phase Current #: Current for phase 1 current_l1 = Sensor("6100_40465300", "current_l1", unit="A", factor=1000, enabled=False) #: Current for phase 2 current_l2 = Sensor("6100_40465400", "current_l2", unit="A", factor=1000, enabled=False) #: Current for phase 3 current_l3 = Sensor("6100_40465500", "current_l3", unit="A", factor=1000, enabled=False) #: Total Current current_total = Sensor("6100_00664F00", "current_total", unit="A", factor=1000) # AC Side - Grid measurements - Phase voltage #: Voltage for phase 1 voltage_l1 = Sensor("6100_00464800", "voltage_l1", unit="V", factor=100, enabled=False) #: Voltage for phase 2 voltage_l2 = Sensor("6100_00464900", "voltage_l2", unit="V", factor=100, enabled=False) #: Voltage for phase 3 voltage_l3 = Sensor("6100_00464A00", "voltage_l3", unit="V", factor=100, enabled=False) # AC Side - Measured values - energy #: Total power yield from a solar installation total_yield = Sensor("6400_00260100", "total_yield", unit="kWh", factor=1000) #: The solar plant's yield for today daily_yield = Sensor("6400_00262200", "daily_yield", unit="Wh") # AC Side - Measured values - Grid measurements #: Power supplied to grid measured by energy meter metering_power_supplied = Sensor("6100_40463600", "metering_power_supplied", unit="W") #: Power absorbed fromgrid measured by energy meter metering_power_absorbed = Sensor("6100_40463700", "metering_power_absorbed", unit="W") #: Grid frequency measured by energy meter metering_frequency = Sensor( "6100_00468100", "metering_frequency", unit="Hz", factor=100 ) #: Total power supplied to the grid measured by energy meter metering_total_yield = Sensor( "6400_00462400", "metering_total_yield", unit="kWh", factor=1000 ) #: Total power from the grid measured by energy meter metering_total_absorbed = Sensor( "6400_00462500", "metering_total_absorbed", unit="kWh", factor=1000 ) # AC Side - Measured values - Phase currents #: Current for phase 1 measured by energy meter metering_current_l1 = Sensor( "6100_40466500", "metering_current_l1", unit="A", factor=1000 ) #: Current for phase 2 measured by energy meter metering_current_l2 = Sensor( "6100_40466600", "metering_current_l2", unit="A", factor=1000 ) #: Current for phase 3 measured by energy meter metering_current_l3 = Sensor( "6100_40466B00", "metering_current_l3", unit="A", factor=1000 ) # AC Side - Measured values - Phase voltage #: Voltage for phase 1 measured by energy meter metering_voltage_l1 = Sensor( "6100_0046E500", "metering_voltage_l1", unit="V", factor=100, enabled=False ) #: Voltage for phase 2 measured by energy meter metering_voltage_l2 = Sensor( "6100_0046E600", "metering_voltage_l2", unit="V", factor=100, enabled=False ) #: Voltage for phase 3 measured by energy meter metering_voltage_l3 = Sensor( "6100_0046E700", "metering_voltage_l3", unit="V", factor=100, enabled=False ) # AC Side - Electricity meter - Measured values - Active power feed-in #: Active Power feed-in for phase 1 measured by energy meter metering_active_power_feed_l1 = Sensor( "6100_0046E800", "metering_active_power_feed_l1", unit="W" ) #: Active Power feed-in for phase 2 measured by energy meter metering_active_power_feed_l2 = Sensor( "6100_0046E900", "metering_active_power_feed_l2", unit="W" ) #: Active Power feed-in for phase 3 measured by energy meter metering_active_power_feed_l3 = Sensor( "6100_0046EA00", "metering_active_power_feed_l3", unit="W" ) # AC Side - Electricity meter - Measured values - Active power drawn #: Active Power drawn for phase 1 measured by energy meter metering_active_power_draw_l1 = Sensor( "6100_0046EB00", "metering_active_power_draw_l1", unit="W" ) #: Active Power drawn for phase 2 measured by energy meter metering_active_power_draw_l2 = Sensor( "6100_0046EC00", "metering_active_power_draw_l2", unit="W" ) #: Active Power drawn for phase 3 measured by energy meter metering_active_power_draw_l3 = Sensor( "6100_0046ED00", "metering_active_power_draw_l3", unit="W" ) #: Current power consumption measured by energy meter metering_current_consumption = Sensor( "6100_00543100", "metering_current_consumption", unit="W", enabled=False ) #: Total power consumption measured by energy meter metering_total_consumption = Sensor( "6400_00543A00", "metering_total_consumption", unit="kWh", factor=1000, enabled=False, ) # AC Side - PV generation #: Total kWh generated to date pv_gen_meter = Sensor("6400_0046C300", "pv_gen_meter", unit="kWh", factor=1000) # AC Side - Emergency power measurements (Secure Power Supply) #: Secure power supply voltage sps_voltage = Sensor( "6100_0046C600", "sps_voltage", unit="V", factor=100, enabled=False ) #: Secure power supply current sps_current = Sensor( "6100_0046C700", "sps_current", unit="A", factor=1000, enabled=False ) #: Secure power supply power sps_power = Sensor("6100_0046C800", "sps_power", unit="W", enabled=False) # PV Inverter Optimizers #: Serial number of optimizer optimizer_serial = Sensor("6800_10852600", "optimizer_serial") #: Power supplied by optimizer optimizer_power = Sensor("6100_40652A00", "optimizer_power", unit="W") #: Current supplied by optimizer optimizer_current = Sensor( "6100_40652900", "optimizer_current", unit="A", factor=1000, enabled=False ) #: Voltage supplied by optimizer optimizer_voltage = Sensor( "6100_40652800", "optimizer_voltage", unit="V", factor=100, enabled=False ) #: Temperature of optimizer optimizer_temp = Sensor( "6100_40652B00", "optimizer_temp", unit="°C", factor=10, enabled=False ) # Battery (inverter) - Battery (general parameters) #: Total battery state of charge battery_soc_total = Sensor("6100_00295A00", "battery_soc_total", unit="%") #: State of charge battery A battery_soc_a = Sensor("6100_00498F00_0", "battery_soc_a", unit="%", enabled=False) #: State of charge battery B battery_soc_b = Sensor("6100_00498F00_1", "battery_soc_b", unit="%", enabled=False) #: State of charge battery C battery_soc_c = Sensor("6100_00498F00_2", "battery_soc_c", unit="%", enabled=False) #: Voltage battery A battery_voltage_a = Sensor( "6100_00495C00_0", "battery_voltage_a", unit="V", factor=100, enabled=False ) #: Voltage battery B battery_voltage_b = Sensor( "6100_00495C00_1", "battery_voltage_b", unit="V", factor=100, enabled=False ) #: Voltage battery C battery_voltage_c = Sensor( "6100_00495C00_2", "battery_voltage_c", unit="V", factor=100, enabled=False ) #: Current battery A battery_current_a = Sensor( "6100_40495D00_0", "battery_current_a", unit="A", factor=1000 ) #: Current battery B battery_current_b = Sensor( "6100_40495D00_1", "battery_current_b", unit="A", factor=1000 ) #: Current battery C battery_current_c = Sensor( "6100_40495D00_2", "battery_current_c", unit="A", factor=1000 ) #: Temperature battery A battery_temp_a = Sensor("6100_40495B00_0", "battery_temp_a", unit="°C", factor=10) #: Temperature battery B battery_temp_b = Sensor("6100_40495B00_1", "battery_temp_b", unit="°C", factor=10) #: Temperature battery C battery_temp_c = Sensor("6100_40495B00_2", "battery_temp_c", unit="°C", factor=10) #: Battery status operating mode battery_status_operating_mode = Sensor( "6180_08495E00", "battery_status_operating_mode", path=JMESPATHS_TAG, l10n_translate=True, ) # Battery (inverter) - Diagnosis #: Total battery capacity battery_capacity_total = Sensor("6100_00696E00", "battery_capacity_total", unit="%") #: Capacity battery A battery_capacity_a = Sensor( "6100_00499100_0", "battery_capacity_a", unit="%", enabled=False ) #: Capacity battery B battery_capacity_b = Sensor( "6100_00499100_1", "battery_capacity_b", unit="%", enabled=False ) #: Capacity battery C battery_capacity_c = Sensor( "6100_00499100_2", "battery_capacity_c", unit="%", enabled=False ) # Battery (inverter) - Charge (voltage) #: Charging voltage battery A battery_charging_voltage_a = Sensor( "6102_00493500_0", "battery_charging_voltage_a", unit="V", factor=100, enabled=False ) #: Charging voltage battery B battery_charging_voltage_b = Sensor( "6102_00493500_1", "battery_charging_voltage_b", unit="V", factor=100, enabled=False ) #: Charging voltage battery C battery_charging_voltage_c = Sensor( "6102_00493500_2", "battery_charging_voltage_c", unit="V", factor=100, enabled=False ) # Battery (inverter) - Battery charge (power & energy) #: Total charging power battery_power_charge_total = Sensor( "6100_00496900", "battery_power_charge_total", unit="W" ) #: Charging power battery A battery_power_charge_a = Sensor( "6100_00499300_0", "battery_power_charge_a", unit="W", enabled=False ) #: Charging power battery B battery_power_charge_b = Sensor( "6100_00499300_1", "battery_power_charge_b", unit="W", enabled=False ) #: Charging power battery C battery_power_charge_c = Sensor( "6100_00499300_2", "battery_power_charge_c", unit="W", enabled=False ) #: Total charge battery_charge_total = Sensor( "6400_00496700", "battery_charge_total", unit="kWh", factor=1000 ) #: Charge battery A battery_charge_a = Sensor( "6400_00499500_0", "battery_charge_a", unit="kWh", factor=1000, enabled=False ) #: Charge battery B battery_charge_b = Sensor( "6400_00499500_1", "battery_charge_b", unit="kWh", factor=1000, enabled=False ) #: Charge battery C battery_charge_c = Sensor( "6400_00499500_2", "battery_charge_c", unit="kWh", factor=1000, enabled=False ) # Battery (inverter) - Battery discharge (power & energy) #: Total discharging power battery_power_discharge_total = Sensor( "6100_00496A00", "battery_power_discharge_total", unit="W" ) #: Disharging power battery A battery_power_discharge_a = Sensor( "6100_00499400_0", "battery_power_discharge_a", unit="W", enabled=False ) #: Disharging power battery B battery_power_discharge_b = Sensor( "6100_00499400_1", "battery_power_discharge_b", unit="W", enabled=False ) #: Disharging power battery C battery_power_discharge_c = Sensor( "6100_00499400_2", "battery_power_discharge_c", unit="W", enabled=False ) #: Total discharge battery_discharge_total = Sensor( "6400_00496800", "battery_discharge_total", unit="kWh", factor=1000 ) #: Discharge battery A battery_discharge_a = Sensor( "6400_00499600_0", "battery_discharge_a", unit="kWh", factor=1000, enabled=False ) #: Discharge battery B battery_discharge_b = Sensor( "6400_00499600_1", "battery_discharge_b", unit="kWh", factor=1000, enabled=False ) #: Discharge battery C battery_discharge_c = Sensor( "6400_00499600_2", "battery_discharge_c", unit="kWh", factor=1000, enabled=False ) # Device Parameters # Type Label - Type Label #: Device serial number serial_number = Sensor("6800_00A21E00", "serial_number") #: Device name device_name = Sensor("6800_10821E00", "device_name") #: Device type device_type = Sensor( "6800_08822000", "device_type", path=JMESPATHS_TAG, l10n_translate=True ) #: Device manufactorer device_manufacturer = Sensor( "6800_08822B00", "device_manufacturer", path=JMESPATHS_TAG, l10n_translate=True ) #: Device software version device_sw_version = Sensor("6800_00823400", "device_sw_version") # Device - Inverter #: Power limit of the Inverter inverter_power_limit = Sensor("6800_00832A00", "inverter_power_limit", unit="W") # System communication - Meter on Speedwire #: Serial number of energy meter energy_meter = Sensor("6800_008AA300", "energy_meter") sensor_map = { GENERIC_SENSORS: [ battery_capacity_a, battery_capacity_b, battery_capacity_c, battery_capacity_total, battery_charge_a, battery_charge_b, battery_charge_c, battery_charge_total, battery_charging_voltage_a, battery_charging_voltage_b, battery_charging_voltage_c, battery_current_a, battery_current_b, battery_current_c, battery_discharge_a, battery_discharge_b, battery_discharge_c, battery_discharge_total, battery_power_charge_a, battery_power_charge_b, battery_power_charge_c, battery_power_charge_total, battery_power_discharge_a, battery_power_discharge_b, battery_power_discharge_c, battery_power_discharge_total, battery_soc_a, battery_soc_b, battery_soc_c, battery_soc_total, battery_status_operating_mode, battery_temp_a, battery_temp_b, battery_temp_c, battery_voltage_a, battery_voltage_b, battery_voltage_c, current_l1, current_l2, current_l3, current_total, daily_yield, frequency, grid_apparent_power, grid_apparent_power_l1, grid_apparent_power_l2, grid_apparent_power_l3, grid_connection_status, grid_power, grid_power_factor, grid_power_factor_excitation, grid_reactive_power, grid_reactive_power_l1, grid_reactive_power_l2, grid_reactive_power_l3, grid_relay_status, insulation_residual_current, inverter_condition, inverter_power_limit, inverter_system_init, operating_status_general, operating_status, power_l1, power_l2, power_l3, pv_current_a, pv_current_b, pv_current_c, pv_gen_meter, pv_isolation_resistance, pv_power, pv_power_a, pv_power_b, pv_power_c, pv_voltage_a, pv_voltage_b, pv_voltage_c, sps_current, sps_power, sps_voltage, status, total_yield, voltage_l1, voltage_l2, voltage_l3, ], OPTIMIZERS_VIA_INVERTER: [ optimizer_power, optimizer_current, optimizer_voltage, optimizer_temp, ], ENERGY_METER_VIA_INVERTER: [ metering_power_supplied, metering_power_absorbed, metering_frequency, metering_total_yield, metering_total_absorbed, metering_current_l1, metering_current_l2, metering_current_l3, metering_voltage_l1, metering_voltage_l2, metering_voltage_l3, metering_active_power_feed_l1, metering_active_power_feed_l2, metering_active_power_feed_l3, metering_active_power_draw_l1, metering_active_power_draw_l2, metering_active_power_draw_l3, metering_current_consumption, metering_total_consumption, ], DEVICE_INFO: [ serial_number, device_name, device_type, device_manufacturer, device_sw_version, ], } kellerza-pysma-c89fc98/pysma/exceptions.py000066400000000000000000000006521447021446100210030ustar00rootroot00000000000000"""Exceptions for the pysma library.""" class SmaException(Exception): """Base exception of the pysma library.""" class SmaAuthenticationException(SmaException): """An attempt to authenticate failed.""" class SmaReadException(SmaException): """Reading the data did not return an expected result.""" class SmaConnectionException(SmaException): """An error occurred in the connection with the device.""" kellerza-pysma-c89fc98/pysma/helpers.py000066400000000000000000000012671447021446100202670ustar00rootroot00000000000000"""Helper functions for the pysma library.""" def version_int_to_string(version_integer: int) -> str: """Convert a version integer to a readable string. Args: version_integer (int): The version integer, as retrieved from the device. Returns: str: The version translated to a readable string. """ if not version_integer: return "" appendixes = ["N", "E", "A", "B", "R", "S"] version_bytes = version_integer.to_bytes(4, "big") version_appendix = ( appendixes[version_bytes[3]] if 0 <= version_bytes[3] < len(appendixes) else "" ) return f"{version_bytes[0]:x}.{version_bytes[1]:x}.{version_bytes[2]}.{version_appendix}" kellerza-pysma-c89fc98/pysma/sensor.py000066400000000000000000000141351447021446100201340ustar00rootroot00000000000000"""Sensor classes for SMA WebConnect library for Python.""" import copy import logging from typing import Any, Iterator, List, Optional, Union import attr import jmespath # type: ignore from .const import JMESPATH_VAL, JMESPATH_VAL_IDX, JMESPATH_VAL_STR _LOGGER = logging.getLogger(__name__) @attr.s(slots=True) class Sensor: """pysma sensor.""" # pylint: disable=too-many-instance-attributes # pylint: disable=too-few-public-methods key: str = attr.ib() name: str = attr.ib() unit: str = attr.ib(default=None) factor: int = attr.ib(default=None) path: Union[list, tuple] = attr.ib(default=None) enabled: bool = attr.ib(default=True) l10n_translate: bool = attr.ib(default=False) value: Any = attr.ib(default=None, init=False) key_idx: int = attr.ib(default=0, repr=False, init=False) def __attrs_post_init__(self) -> None: """Post init Sensor.""" key = str(self.key) skey = key.split("_") if len(skey) > 2 and skey[2].isdigit(): self.key = f"{skey[0]}_{skey[1]}" self.key_idx = int(skey[2]) def extract_value(self, result_body: dict, l10n: Optional[dict] = None) -> bool: """Extract value from json body. Args: result_body (dict): json body retrieved from device l10n (dict, optional): Dictionary to translate tags to strings. Defaults to None. Returns: bool: Extracting value successful """ try: res = result_body[self.key] except (KeyError, TypeError): _LOGGER.warning("Sensor %s: Not found in %s", self.key, result_body) res = self.value self.value = None return self.value != res if not isinstance(self.path, str): # Try different methods until we can decode... _paths = ( [sens_path.format(self.key_idx) for sens_path in self.path] if isinstance(self.path, (list, tuple)) else [ JMESPATH_VAL, JMESPATH_VAL_STR.format(self.key_idx), JMESPATH_VAL_IDX.format(self.key_idx), ] ) while _paths: _path = _paths.pop() _val = jmespath.search(_path, res) if _val is not None: _LOGGER.debug( "Sensor %s: Will be decoded with %s from %s", self.name, _path, res, ) self.path = _path break # Extract new value if isinstance(self.path, str): res = jmespath.search(self.path, res) else: _LOGGER.debug( "Sensor %s: No successful value decoded yet: %s", self.name, res ) res = None # SMA will return None instead of 0 if if no power is generated # For "W" sensors we will set it to 0 by default. if res is None and self.unit == "W": res = 0 if isinstance(res, (int, float)) and self.factor: res /= self.factor if self.l10n_translate and isinstance(l10n, dict): res = l10n.get( str(res), res, ) try: return res != self.value finally: self.value = res class Sensors: """SMA Sensors.""" def __init__(self, sensors: Union[Sensor, List[Sensor], None] = None): """Init Sensors. Args: sensors (Union[Sensor, List[Sensor], None], optional): One or a list of sensors to add on init. Defaults to None. """ self.__s: List[Sensor] = [] if sensors: self.add(sensors) def __len__(self) -> int: """Length of Sensor list. Returns: int: Number of Sensor objects """ return len(self.__s) def __contains__(self, key: Union[str, Sensor]) -> bool: """Check if a sensor is defined. Args: key (str, Sensor): [description] Returns: bool: [description] """ if isinstance(key, Sensor): key = key.name try: if self[key]: return True except KeyError: pass return False def __getitem__(self, key: str) -> Sensor: """Get a sensor. Args: key (str): Either the name or key of the Sensor Raises: KeyError: Item was not found Returns: Sensor: The matching Sensor object """ for sen in self.__s: if key in (sen.name, sen.key): return sen raise KeyError(key) def __iter__(self) -> Iterator[Sensor]: """Iterate Sensor objects. Yields: Iterator[Sensor]: Sensor iterator """ return self.__s.__iter__() def add(self, sensor: Union[Sensor, List[Sensor]]) -> None: """Add a sensor, logs warning if it exists. A copy of sensor, or the sensors in the list, will be added. If the sensor name already exists it will be overwritten. If the sensor key already exists it will not be added. Args: sensor (Sensor, List[Sensor]): One or a list of sensors to add Raises: TypeError: Argument sensor does not match an expected type """ if isinstance(sensor, (list, tuple)): for sss in sensor: self.add(sss) return if isinstance(sensor, Sensor): sensor = copy.copy(sensor) else: raise TypeError("pysma.Sensor expected") if sensor.name in self: old = self[sensor.name] self.__s.remove(old) _LOGGER.warning("Replacing sensor %s with %s", old, sensor) if sensor.key in self and self[sensor.key].key_idx == sensor.key_idx: _LOGGER.warning( "Duplicate SMA sensor key %s (idx: %s)", sensor.key, sensor.key_idx ) self.__s.append(sensor) kellerza-pysma-c89fc98/requirements_test.txt000066400000000000000000000001361447021446100214370ustar00rootroot00000000000000aioresponses jmespath pytest pytest-aiohttp pytest-cov pytest-github-actions-annotate-failureskellerza-pysma-c89fc98/setup.cfg000066400000000000000000000002651447021446100167400ustar00rootroot00000000000000[isort] profile=black [flake8] extend-ignore = E203, E501 W503 [mypy] disallow_untyped_defs = True [pydocstyle] match_dir=pysma convention=google [tool:pytest] asyncio_mode=autokellerza-pysma-c89fc98/setup.py000066400000000000000000000012541447021446100166300ustar00rootroot00000000000000#!/usr/bin/env python """pysma library setup.""" from pathlib import Path from setuptools import setup VERSION = "0.7.5" URL = "https://github.com/kellerza/pysma" setup( name="pysma", version=VERSION, description="Library to interface an SMA Solar WebConnect module", long_description=Path("README.md").read_text(), long_description_content_type="text/markdown", url=URL, download_url="{}/tarball/{}".format(URL, VERSION), author="Johann Kellerman", author_email="kellerza@gmail.com", license="MIT", packages=["pysma"], python_requires=">=3.9", install_requires=["aiohttp>3.3,<4", "attrs>18", "jmespath<2"], zip_safe=True, ) kellerza-pysma-c89fc98/tests/000077500000000000000000000000001447021446100162565ustar00rootroot00000000000000kellerza-pysma-c89fc98/tests/__init__.py000066400000000000000000011476621447021446100204100ustar00rootroot00000000000000"""Tests for pysma.""" import pytest from aioresponses import aioresponses MOCK_DEVICE = { "manufacturer": "SMA", "name": "SMA Device Name", "type": "Sunny Boy 3.6", "serial": "123456789", "sw_version": "", } MOCK_L10N = {"461": "SMA", "9402": "Sunny Boy 3.6"} @pytest.fixture def mock_aioresponse(): """Yield a mock aioresponses.""" with aioresponses() as m: yield m # Testdata based on actual devices # Instances of pytest.param(getAllOnlValues.json, getAllParamValues.json, number_of_sensors_expected, id=XX) SMA_TESTDATA = [ pytest.param( { "result": { "0199-xxxxx385": { "6100_40263F00": {"1": [{"val": 2460}]}, "6100_00411E00": {"1": [{"val": 3680}]}, "6100_00411F00": {"1": [{"val": 0}]}, "6100_00412000": {"1": [{"val": 0}]}, "6100_00416600": {"1": [{"val": None}]}, "6100_00418000": {"1": [{"val": None}]}, "6100_40463600": {"1": [{"val": None}]}, "6100_40463700": {"1": [{"val": None}]}, "6100_40464000": {"1": [{"val": 2460}]}, "6100_40464100": {"1": [{"val": None}]}, "6100_40464200": {"1": [{"val": None}]}, "6100_00464800": {"1": [{"val": 24206}]}, "6100_00464900": {"1": [{"val": None}]}, "6100_00464A00": {"1": [{"val": None}]}, "6100_00464B00": {"1": [{"val": None}]}, "6100_00464C00": {"1": [{"val": None}]}, "6100_00464D00": {"1": [{"val": None}]}, "6100_00464E00": {"1": [{"val": None}]}, "6100_40465300": {"1": [{"val": 10204}]}, "6100_40465400": {"1": [{"val": None}]}, "6100_40465500": {"1": [{"val": None}]}, "6100_00465700": {"1": [{"val": 5000}]}, "6100_40466500": {"1": [{"val": None}]}, "6100_40466600": {"1": [{"val": None}]}, "6100_40466B00": {"1": [{"val": None}]}, "6100_40466C00": {"1": [{"val": None}]}, "6100_40466D00": {"1": [{"val": None}]}, "6100_40466E00": {"1": [{"val": None}]}, "6100_00467700": {"1": [{"val": None}]}, "6100_00467800": {"1": [{"val": None}]}, "6100_00467900": {"1": [{"val": None}]}, "6100_00468100": {"1": [{"val": None}]}, "6100_40468F00": {"1": [{"val": None}]}, "6100_40469900": {"1": [{"val": None}]}, "6100_0046C200": {"1": [{"val": 2460}]}, "6100_0046E500": {"1": [{"val": None}]}, "6100_0046E600": {"1": [{"val": None}]}, "6100_0046E700": {"1": [{"val": None}]}, "6100_0046E800": {"1": [{"val": None}]}, "6100_0046E900": {"1": [{"val": None}]}, "6100_0046EA00": {"1": [{"val": None}]}, "6100_0046EB00": {"1": [{"val": None}]}, "6100_0046EC00": {"1": [{"val": None}]}, "6100_0046ED00": {"1": [{"val": None}]}, "6100_4046EE00": {"1": [{"val": None}]}, "6100_4046EF00": {"1": [{"val": None}]}, "6100_4046F000": {"1": [{"val": None}]}, "6100_4046F100": {"1": [{"val": None}]}, "6100_004AB600": {"1": [{"val": 100}]}, "6100_40571F00": {"1": [{"val": None}]}, "6100_40652800": { "1": [ {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_40652900": { "1": [ {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_40652A00": { "1": [ {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_40652B00": { "1": [ {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_00652C00": { "1": [ {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_00653100": {"1": [{"val": None}]}, "6100_00653200": {"1": [{"val": None}]}, "6100_00664F00": {"1": [{"val": 10204}]}, "6100_00665900": {"1": [{"val": 1000}]}, "6100_40665B00": {"1": [{"val": -1000}]}, "6100_40665F00": {"1": [{"val": 81}]}, "6100_40666000": {"1": [{"val": 81}]}, "6100_40666100": {"1": [{"val": None}]}, "6100_40666200": {"1": [{"val": None}]}, "6100_40666700": {"1": [{"val": 2469}]}, "6100_40666800": {"1": [{"val": 2469}]}, "6100_40666900": {"1": [{"val": None}]}, "6100_40666A00": {"1": [{"val": None}]}, "6180_08214800": {"1": [{"val": [{"tag": 307}]}]}, "6180_08412800": {"1": [{"val": [{"tag": 295}]}]}, "6180_08412900": {"1": [{"val": [{"tag": 302}]}]}, "6180_08413200": {"1": [{"val": [{"tag": 308}]}]}, "6180_08413300": {"1": [{"val": [{"tag": 303}]}]}, "6180_08414900": {"1": [{"val": [{"tag": 886}]}]}, "6180_08414A00": {"1": [{"val": [{"tag": 887}]}]}, "6180_08414B00": {"1": [{"val": [{"tag": 885}]}]}, "6180_08414C00": {"1": [{"val": [{"tag": 307}]}]}, "6180_08416400": {"1": [{"val": [{"tag": 51}]}]}, "6180_08416500": {"1": [{"val": [{"tag": 884}]}]}, "6180_08436800": {"1": [{"val": [{"tag": 1440}]}]}, "6180_08465A00": {"1": [{"val": [{"tag": 1041}]}]}, "6180_0846A600": {"1": [{"val": [{"tag": 1780}]}]}, "6180_084A2C00": {"1": [{"val": [{"tag": 9327}]}]}, "6180_084A2E00": {"1": [{"val": [{"tag": 302}]}]}, "6180_084A6400": {"1": [{"val": [{"tag": 303}]}]}, "6180_084A9600": {"1": [{"val": [{"tag": 1725}]}]}, "6180_084A9700": {"1": [{"val": [{"tag": 302}]}]}, "6180_104A9A00": {"1": [{"val": ""}]}, "6180_104A9B00": {"1": [{"val": ""}]}, "6180_104A9C00": {"1": [{"val": ""}]}, "6180_104A9D00": {"1": [{"val": ""}]}, "6180_084AAA00": {"1": [{"val": [{"tag": 1719}]}]}, "6180_104AB700": {"1": [{"val": "192.168.30.178"}]}, "6180_104AB800": {"1": [{"val": "255.255.255.0"}]}, "6180_104AB900": {"1": [{"val": "192.168.30.1"}]}, "6180_104ABA00": {"1": [{"val": "192.168.30.1"}]}, "6180_084ABB00": {"1": [{"val": [{"tag": 3369}]}]}, "6180_084ABC00": {"1": [{"val": [{"tag": 307}]}]}, "6180_084B1E00": {"1": [{"val": [{"tag": 307}]}]}, "6180_00522700": {"1": [{"low": 0, "high": 7730, "val": None}]}, "6180_40522800": {"1": [{"low": 0, "high": 7730, "val": None}]}, "6180_00522900": {"1": [{"low": 0, "high": 10000, "val": None}]}, "6180_08522A00": {"1": [{"val": [{"tag": 16777213}]}]}, "6180_08522F00": {"1": [{"val": [{"tag": 308}]}]}, "6180_08652400": { "1": [ {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, ] }, "6180_08652500": {"1": [{"val": [{"tag": 303}]}]}, "6180_08652600": { "1": [ {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, ] }, "6180_08653A00": {"1": [{"val": [{"tag": 302}]}]}, "6180_08671E00": {"1": [{"val": [{"tag": 7533}]}]}, "6380_40251E00": {"1": [{"val": 2570}, {"val": 0}]}, "6380_40451F00": {"1": [{"val": 31022}, {"val": 0}]}, "6380_40452100": {"1": [{"val": 8287}, {"val": 0}]}, "6400_00260100": {"1": [{"val": 9796572}]}, "6400_00262200": {"1": [{"val": 8831}]}, "6400_00462400": {"1": [{"val": None}]}, "6400_00462500": {"1": [{"val": None}]}, "6400_00462E00": {"1": [{"val": 39949345}]}, "6400_00462F00": {"1": [{"val": 37709850}]}, "6400_00469100": {"1": [{"val": None}]}, "6400_00469200": {"1": [{"val": None}]}, "6400_0046C300": {"1": [{"val": 9796572}]}, "6400_00618C00": {"1": [{"val": 1413}]}, } } }, { "result": { "0199-xxxxx385": { "6800_08811F00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_10821E00": {"1": [{"val": "SB3.6-1AV-41 981"}]}, "6800_08821F00": { "1": [{"validVals": [8001], "val": [{"tag": 8001}]}] }, "6800_08822000": { "1": [ { "validVals": [9401, 9402, 9403, 9404, 9405], "val": [{"tag": 9402}], } ] }, "6800_08822100": { "1": [ { "validVals": [ 601, 603, 605, 606, 607, 610, 611, 618, 623, 632, 633, 634, 635, 636, 637, 640, 641, 647, 648, ], "val": [ {"tag": 601}, {"tag": 603}, {"tag": 605}, {"tag": 606}, {"tag": 610}, {"tag": 611}, {"tag": 618}, {"tag": 623}, {"tag": 632}, {"tag": 633}, {"tag": 634}, {"tag": 635}, {"tag": 636}, {"tag": 637}, {"tag": 640}, {"tag": 641}, {"tag": 647}, {"tag": 648}, ], } ] }, "6800_00822500": { "1": [{"low": 0, "high": 4294967000, "val": 16000}] }, "6800_08822800": { "1": [{"validVals": [302, 1129, 1130], "val": [{"tag": 302}]}] }, "6800_08822B00": { "1": [{"validVals": [461], "val": [{"tag": 461}]}] }, "6800_00823400": { "1": [{"low": 0, "high": 4294967294, "val": 51389444}] }, "6800_08831900": { "1": [{"validVals": [4145, 4146, 4154, 4289], "val": []}] }, "6800_08831E00": { "1": [ {"validVals": [295, 381, 443, 1855], "val": [{"tag": 295}]} ] }, "6800_00832A00": {"1": [{"low": 3680, "high": 3680, "val": 3680}]}, "6800_08834300": { "1": [{"validVals": [303, 308], "val": [{"tag": 308}]}] }, "6800_08836E00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08836F00": {"1": [{"validVals": [1146], "val": []}]}, "6800_08837800": { "1": [ { "validVals": [ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 796, 797, 798, 799, ], "val": [{"tag": 778}], } ] }, "6800_08838B00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08838C00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08838D00": { "1": [ { "validVals": [ 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9522, 9523, 9524, 9525, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9549, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, ], "val": [{"tag": 9578}], } ] }, "6800_10838F00": {"1": [{"val": "ntp.sunny-portal.com"}]}, "6800_08839500": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08839700": {"1": [{"validVals": [1146], "val": []}]}, "6800_10841E00": {"0": [{"val": ""}]}, "6800_10852100": {"1": [{"val": ""}]}, "6800_40852200": { "1": [{"low": -1, "high": 2147483647, "val": -1}] }, "6800_00852300": {"1": [{"low": 0, "high": None, "val": None}]}, "6800_10852400": { "1": [{"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}] }, "6800_10852500": { "1": [ {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_10852600": { "1": [ {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_08852700": { "1": [ {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, ] }, "6800_08852800": { "1": [ { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, ] }, "6800_10852900": { "1": [ {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_00852A00": {"1": [{"low": 0, "high": 500000, "val": 3680}]}, "6800_08852C00": { "1": [{"validVals": [303, 308, 4127], "val": [{"tag": 303}]}] }, "6800_00852E00": { "1": [ {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, ] }, "6800_00852F00": { "1": [ {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, ] }, "6800_08853000": { "1": [{"validVals": [302, 4155], "val": [{"tag": 302}]}] }, "6800_08853100": { "1": [ {"validVals": [302, 9394, 9395], "val": [{"tag": 302}]}, {"validVals": [302, 9394, 9395], "val": [{"tag": 302}]}, {"validVals": [302, 9394, 9395], "val": [{"tag": 302}]}, {"validVals": [302, 9394, 9395], "val": [{"tag": 302}]}, ] }, "6800_10853200": { "1": [{"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}] }, "6800_10853300": { "1": [ {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_00853400": {"1": [{"low": 0, "high": 3, "val": 0}]}, "6800_10853600": { "1": [ {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_10853700": { "1": [{"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}] }, "6800_08855C00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_0086A300": {"1": [{"low": 0, "high": 4000000, "val": 0}]}, "6800_08871E00": { "1": [ { "validVals": [ 27, 306, 313, 333, 438, 1199, 7510, 7513, 7514, 7517, 7518, 7523, 7527, 7532, 7533, 7536, 7538, 7539, 7549, 7550, 7551, 7556, 7557, 7565, 7566, 7567, 7568, 7569, 7573, 7574, 16777213, ], "val": [{"tag": 7533}], } ] }, "6800_088A2900": { "1": [ { "validVals": [302, 9327, 9375, 9376, 9437, 19043], "val": [{"tag": 9327}], } ] }, "6800_008A2A00": {"1": [{"low": 5, "high": 1500, "val": 100}]}, "6800_108A2B00": {"1": [{"val": ""}]}, "6800_108A3200": {"1": [{"val": ""}]}, "6800_088A3300": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4C00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4D00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_088A5100": {"1": [{"validVals": [1146], "val": []}]}, "6800_088A5200": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_108A5300": {"1": [{"val": "192.168.0.173"}]}, "6800_108A5400": {"1": [{"val": "255.255.255.0"}]}, "6800_108A5500": {"1": [{"val": "192.168.0.1"}]}, "6800_108A5600": {"1": [{"val": "192.168.0.1"}]}, "6800_108A5900": {"1": [{"val": "NetworkSSID"}]}, "6800_108A5A00": {"1": [{"val": ""}]}, "6800_088A5B00": { "1": [{"validVals": [3323, 3324], "val": [{"tag": 3324}]}] }, "6800_088A7700": { "1": [{"validVals": [4330, 4331, 4332], "val": [{"tag": 4330}]}] }, "6800_088A8A00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_008AA200": {"1": [{"low": 0, "high": None, "val": 0}]}, "6800_008AA300": {"1": [{"low": 0, "high": None, "val": None}]}, "6800_108AA400": { "1": [ {"val": "NetworkSSID"}, { "val": "\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0" }, ] }, "6800_088AA500": {"1": [{"validVals": [1146], "val": []}]}, "6800_088B1E00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B1F00": {"1": [{"low": 1, "high": 65535, "val": 80}]}, "6800_108B2000": {"1": [{"val": "255.255.255.255"}]}, "6800_108B2100": {"1": [{"val": ""}]}, "6800_108B2200": {"1": [{"val": ""}]}, "6800_008B2E00": {"1": [{"low": 0, "high": None, "val": 17105412}]}, "6800_088B5200": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088B7000": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7100": {"1": [{"low": 1, "high": 65535, "val": 502}]}, "6800_088B7200": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7300": {"1": [{"low": 1, "high": 65535, "val": 502}]}, "6800_008B7400": {"1": [{"low": 3, "high": 123, "val": 3}]}, "6800_088E7B00": { "1": [ { "validVals": [2109, 3174, 3237, 3312], "val": [ {"tag": 2109}, {"tag": 3174}, {"tag": 3237}, {"tag": 3312}, ], } ] }, "6800_00912100": { "1": [{"low": 0, "high": 4294967294, "val": 16859652}] }, "6800_00922500": {"1": [{"low": 0, "high": 3680, "val": 3680}]}, "6800_00922600": {"1": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_0892D600": { "1": [{"validVals": [303, 2137, 2138], "val": [{"tag": 303}]}] }, "6800_0092D700": {"1": [{"low": 0, "high": 50000, "val": 3680}]}, "6800_0092D800": {"1": [{"low": 0, "high": 100, "val": 100}]}, "6800_00A21E00": { "1": [{"low": 0, "high": None, "val": 3006894981}] }, "6800_10A22F00": {"1": [{"val": ""}]}, "6800_10A23000": {"1": [{"val": "A8:E2:C1:84:C5:31"}]}, "6800_00A63500": {"1": [{"low": 0, "high": 4000000, "val": 0}]}, "6800_40A63A00": { "1": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_40A63B00": { "1": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_10AA6100": {"1": [{"val": "192.168.0.170"}]}, "6800_10AA6200": {"1": [{"val": "255.255.255.0"}]}, "6800_10AA6300": {"1": [{"val": "192.168.0.1"}]}, "6800_10AA6400": {"1": [{"val": "192.168.0.1"}]}, } } }, 37, id="SB 3.6, no energy meter, no optimizers", ), pytest.param( { "result": { "017A-xxxxxB1A": { "6100_40263F00": {"1": [{"val": 652}]}, "6100_00411E00": {"1": [{"val": 3000}]}, "6100_00411F00": {"1": [{"val": 0}]}, "6100_00412000": {"1": [{"val": 0}]}, "6100_00416600": {"1": [{"val": None}]}, "6100_00418000": {"1": [{"val": None}]}, "6100_40463600": {"1": [{"val": None}]}, "6100_40463700": {"1": [{"val": None}]}, "6100_40464000": {"1": [{"val": 218}]}, "6100_40464100": {"1": [{"val": 214}]}, "6100_40464200": {"1": [{"val": 220}]}, "6100_00464800": {"1": [{"val": 23103}]}, "6100_00464900": {"1": [{"val": 22281}]}, "6100_00464A00": {"1": [{"val": 22956}]}, "6100_00464B00": {"1": [{"val": 39351}]}, "6100_00464C00": {"1": [{"val": 39293}]}, "6100_00464D00": {"1": [{"val": 39715}]}, "6100_00464E00": {"1": [{"val": None}]}, "6100_40465300": {"1": [{"val": 956}]}, "6100_40465400": {"1": [{"val": 976}]}, "6100_40465500": {"1": [{"val": 977}]}, "6100_00465700": {"1": [{"val": 5003}]}, "6100_40466500": {"1": [{"val": None}]}, "6100_40466600": {"1": [{"val": None}]}, "6100_40466B00": {"1": [{"val": None}]}, "6100_40466C00": {"1": [{"val": None}]}, "6100_40466D00": {"1": [{"val": None}]}, "6100_40466E00": {"1": [{"val": None}]}, "6100_00467700": {"1": [{"val": None}]}, "6100_00467800": {"1": [{"val": None}]}, "6100_00467900": {"1": [{"val": None}]}, "6100_00468100": {"1": [{"val": None}]}, "6100_40468F00": {"1": [{"val": None}]}, "6100_40469900": {"1": [{"val": None}]}, "6100_0046C200": {"1": [{"val": 652}]}, "6100_0046E500": {"1": [{"val": None}]}, "6100_0046E600": {"1": [{"val": None}]}, "6100_0046E700": {"1": [{"val": None}]}, "6100_0046E800": {"1": [{"val": None}]}, "6100_0046E900": {"1": [{"val": None}]}, "6100_0046EA00": {"1": [{"val": None}]}, "6100_0046EB00": {"1": [{"val": None}]}, "6100_0046EC00": {"1": [{"val": None}]}, "6100_0046ED00": {"1": [{"val": None}]}, "6100_4046EE00": {"1": [{"val": None}]}, "6100_4046EF00": {"1": [{"val": None}]}, "6100_4046F000": {"1": [{"val": None}]}, "6100_4046F100": {"1": [{"val": None}]}, "6100_004AB600": {"1": [{"val": 100}]}, "6100_40571F00": {"1": [{"val": None}]}, "6100_40652800": { "1": [ {"val": 3085}, {"val": 3190}, {"val": 3125}, {"val": 3190}, {"val": 3045}, {"val": 3065}, {"val": 2965}, {"val": 3160}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_40652900": { "1": [ {"val": 3085}, {"val": 3015}, {"val": 3090}, {"val": 3095}, {"val": 3100}, {"val": 3095}, {"val": 3095}, {"val": 3035}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_40652A00": { "1": [ {"val": 95}, {"val": 96}, {"val": 96}, {"val": 98}, {"val": 94}, {"val": 94}, {"val": 91}, {"val": 95}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_40652B00": { "1": [ {"val": 330}, {"val": 321}, {"val": 306}, {"val": 298}, {"val": 334}, {"val": 313}, {"val": 320}, {"val": 323}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_00652C00": { "1": [ {"val": 85}, {"val": 70}, {"val": 55}, {"val": 56}, {"val": 32}, {"val": 61}, {"val": 43}, {"val": 34}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, {"val": None}, ] }, "6100_00653100": {"1": [{"val": 0}]}, "6100_00653200": {"1": [{"val": 0}]}, "6100_00664F00": {"1": [{"val": 2909}]}, "6100_00665900": {"1": [{"val": 995}]}, "6100_40665B00": {"1": [{"val": -995}]}, "6100_40665F00": {"1": [{"val": 57}]}, "6100_40666000": {"1": [{"val": 21}]}, "6100_40666100": {"1": [{"val": 18}]}, "6100_40666200": {"1": [{"val": 18}]}, "6100_40666700": {"1": [{"val": 654}]}, "6100_40666800": {"1": [{"val": 221}]}, "6100_40666900": {"1": [{"val": 217}]}, "6100_40666A00": {"1": [{"val": 224}]}, "6180_08214800": {"1": [{"val": [{"tag": 307}]}]}, "6180_08412800": {"1": [{"val": [{"tag": 2119}]}]}, "6180_08412900": {"1": [{"val": [{"tag": 302}]}]}, "6180_08413200": {"1": [{"val": [{"tag": 308}]}]}, "6180_08413300": {"1": [{"val": [{"tag": 308}]}]}, "6180_08414900": {"1": [{"val": [{"tag": 886}]}]}, "6180_08414A00": {"1": [{"val": [{"tag": 887}]}]}, "6180_08414B00": {"1": [{"val": [{"tag": 885}]}]}, "6180_08414C00": {"1": [{"val": [{"tag": 307}]}]}, "6180_08416400": {"1": [{"val": [{"tag": 51}]}]}, "6180_08416500": {"1": [{"val": [{"tag": 884}]}]}, "6180_0846A600": {"1": [{"val": [{"tag": 1780}]}]}, "6180_084A2C00": {"1": [{"val": [{"tag": 9327}]}]}, "6180_084A2E00": {"1": [{"val": [{"tag": 302}]}]}, "6180_084A6400": {"1": [{"val": [{"tag": 303}]}]}, "6180_084A9600": {"1": [{"val": [{"tag": 307}]}]}, "6180_084A9700": {"1": [{"val": [{"tag": 1721}]}]}, "6180_104A9A00": {"1": [{"val": "10.0.8.3"}]}, "6180_104A9B00": {"1": [{"val": "255.255.255.0"}]}, "6180_104A9C00": {"1": [{"val": "10.0.8.100"}]}, "6180_104A9D00": {"1": [{"val": "10.0.8.100"}]}, "6180_084AAA00": {"1": [{"val": [{"tag": 1719}]}]}, "6180_104AB700": {"1": [{"val": "10.0.8.4"}]}, "6180_104AB800": {"1": [{"val": "255.255.255.0"}]}, "6180_104AB900": {"1": [{"val": "10.0.8.100"}]}, "6180_104ABA00": {"1": [{"val": "10.0.8.100"}]}, "6180_084ABB00": {"1": [{"val": [{"tag": 3369}]}]}, "6180_084ABC00": {"1": [{"val": [{"tag": 307}]}]}, "6180_084B1E00": {"1": [{"val": [{"tag": 307}]}]}, "6180_00522700": {"1": [{"low": 0, "high": 0, "val": 3000}]}, "6180_40522800": {"1": [{"low": 0, "high": 0, "val": None}]}, "6180_00522900": {"1": [{"low": 0, "high": 0, "val": None}]}, "6180_08522A00": {"1": [{"val": [{"tag": 16777213}]}]}, "6180_08522F00": {"1": [{"val": [{"tag": 308}]}]}, "6180_08652400": { "1": [ {"val": [{"tag": 307}]}, {"val": [{"tag": 307}]}, {"val": [{"tag": 307}]}, {"val": [{"tag": 307}]}, {"val": [{"tag": 307}]}, {"val": [{"tag": 307}]}, {"val": [{"tag": 307}]}, {"val": [{"tag": 307}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, {"val": [{"tag": 302}]}, ] }, "6180_08652500": {"1": [{"val": [{"tag": 303}]}]}, "6180_08652600": { "1": [ {"val": [{"tag": 307}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, {"val": [{"tag": 303}]}, ] }, "6180_08653A00": {"1": [{"val": [{"tag": 307}]}]}, "6180_08671E00": {"1": [{"val": [{"tag": 7533}]}]}, "6380_40251E00": {"1": [{"val": 691}, {"val": 0}]}, "6380_40451F00": {"1": [{"val": 24185}, {"val": 0}]}, "6380_40452100": {"1": [{"val": 2861}, {"val": 0}]}, "6400_00260100": {"1": [{"val": 2817372}]}, "6400_00262200": {"1": [{"val": 9860}]}, "6400_00462400": {"1": [{"val": None}]}, "6400_00462500": {"1": [{"val": None}]}, "6400_00462E00": {"1": [{"val": 17223506}]}, "6400_00462F00": {"1": [{"val": 15670689}]}, "6400_00469100": {"1": [{"val": None}]}, "6400_00469200": {"1": [{"val": None}]}, "6400_0046C300": {"1": [{"val": 2817372}]}, "6400_00618C00": {"1": [{"val": 2085}]}, } } }, { "result": { "017A-xxxxxB1A": { "6800_08811F00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_10821E00": {"1": [{"val": "STP3.0-3AV-40 762"}]}, "6800_08821F00": { "1": [{"validVals": [8001], "val": [{"tag": 8001}]}] }, "6800_08822000": { "1": [ { "validVals": [9366, 9344, 9345, 9346], "val": [{"tag": 9366}], } ] }, "6800_08822100": { "1": [ { "validVals": [ 601, 605, 606, 607, 610, 611, 618, 623, 632, 633, 634, 635, 636, 637, 640, 641, 647, 648, ], "val": [ {"tag": 601}, {"tag": 605}, {"tag": 606}, {"tag": 610}, {"tag": 611}, {"tag": 618}, {"tag": 623}, {"tag": 632}, {"tag": 633}, {"tag": 634}, {"tag": 635}, {"tag": 636}, {"tag": 637}, {"tag": 640}, {"tag": 641}, {"tag": 647}, {"tag": 648}, ], } ] }, "6800_00822500": {"1": [{"low": 0, "high": 4500, "val": 4300}]}, "6800_08822800": { "1": [{"validVals": [302, 1129, 1130], "val": [{"tag": 302}]}] }, "6800_08822B00": { "1": [{"validVals": [461], "val": [{"tag": 461}]}] }, "6800_00823400": { "1": [{"low": 0, "high": 4294967294, "val": 51384324}] }, "6800_08831900": { "1": [{"validVals": [4145, 4146, 4154, 4289], "val": []}] }, "6800_08831E00": { "1": [{"validVals": [295, 381, 443], "val": [{"tag": 295}]}] }, "6800_00832A00": {"1": [{"low": 3000, "high": 3000, "val": 3000}]}, "6800_08834300": { "1": [{"validVals": [303, 308], "val": [{"tag": 308}]}] }, "6800_08836E00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08836F00": {"1": [{"validVals": [1146], "val": []}]}, "6800_08837800": { "1": [ { "validVals": [ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 796, 797, 798, 799, ], "val": [{"tag": 778}], } ] }, "6800_08838B00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08838C00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08838D00": { "1": [ { "validVals": [ 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9522, 9523, 9524, 9525, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9549, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, ], "val": [{"tag": 9578}], } ] }, "6800_10838F00": {"1": [{"val": "10.0.8.1"}]}, "6800_08839500": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08839700": {"1": [{"validVals": [1146], "val": []}]}, "6800_10841E00": {"0": [{"val": ""}]}, "6800_10852100": {"1": [{"val": "XXXXXXXXXXXX"}]}, "6800_40852200": { "1": [{"low": -1, "high": 2147483647, "val": 45037}] }, "6800_00852300": {"1": [{"low": 0, "high": None, "val": 34085636}]}, "6800_10852400": { "1": [ {"val": "04C05B300000XXXX"}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_10852500": { "1": [ {"val": "AA1"}, {"val": "AA2"}, {"val": "AA3"}, {"val": "AA4"}, {"val": "AA5"}, {"val": "AA6"}, {"val": "AA7"}, {"val": "AA8"}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_10852600": { "1": [ {"val": "04C05B4000XXXXXX"}, {"val": "04C05B4000XXXXXX"}, {"val": "04C05B4000XXXXXX"}, {"val": "04C05B4000XXXXXX"}, {"val": "04C05B4000XXXXXX"}, {"val": "04C05B4000XXXXXX"}, {"val": "04C05B4000XXXXXX"}, {"val": "04C05B4000XXXXXX"}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_08852700": { "1": [ {"validVals": [302, 4070, 4071], "val": [{"tag": 4070}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, {"validVals": [302, 4070, 4071], "val": [{"tag": 302}]}, ] }, "6800_08852800": { "1": [ { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 9370}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, { "validVals": [ 302, 9368, 9369, 9370, 9371, 9372, 9373, 9374, ], "val": [{"tag": 302}], }, ] }, "6800_10852900": { "1": [ {"val": "AA"}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_00852A00": {"1": [{"low": 0, "high": 500000, "val": 2720}]}, "6800_00852E00": { "1": [ {"low": 0, "high": 60, "val": 8}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, ] }, "6800_00852F00": { "1": [ {"low": 0, "high": 60, "val": 8}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, {"low": 0, "high": 60, "val": 0}, ] }, "6800_08853000": { "1": [{"validVals": [302, 4155], "val": [{"tag": 4155}]}] }, "6800_08853100": { "1": [ {"validVals": [302, 9394, 9395], "val": [{"tag": 9394}]}, {"validVals": [302, 9394, 9395], "val": [{"tag": 302}]}, {"validVals": [302, 9394, 9395], "val": [{"tag": 302}]}, {"validVals": [302, 9394, 9395], "val": [{"tag": 302}]}, ] }, "6800_10853200": { "1": [ {"val": "G5.27 Jul 26 2017 17:51:45"}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_10853300": { "1": [ {"val": "K6.3112"}, {"val": "K6.3112"}, {"val": "K6.3112"}, {"val": "K6.3112"}, {"val": "K6.3112"}, {"val": "K6.3112"}, {"val": "K6.3112"}, {"val": "K6.3112"}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_00853400": {"1": [{"low": 0, "high": 3, "val": 1}]}, "6800_10853600": { "1": [ {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": "!ESO075V475W-H451.9.40S0.12"}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_10853700": { "1": [ {"val": "GW-H158.4.3S0.12"}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6800_08855C00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_0086A300": {"1": [{"low": 0, "high": 4000000, "val": 0}]}, "6800_08871E00": { "1": [ { "validVals": [ 27, 306, 313, 333, 438, 1199, 7510, 7513, 7514, 7517, 7518, 7523, 7527, 7532, 7533, 7536, 7538, 7539, 7549, 7569, 7573, 7574, 16777213, ], "val": [{"tag": 7533}], } ] }, "6800_088A2900": { "1": [ { "validVals": [302, 9327, 9375, 9376, 9437, 19043], "val": [{"tag": 9327}], } ] }, "6800_008A2A00": {"1": [{"low": 5, "high": 1500, "val": 100}]}, "6800_108A2B00": {"1": [{"val": ""}]}, "6800_108A3200": {"1": [{"val": ""}]}, "6800_088A3300": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4C00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4D00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_088A5100": {"1": [{"validVals": [1146], "val": []}]}, "6800_088A5200": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_108A5300": {"1": [{"val": "192.168.0.173"}]}, "6800_108A5400": {"1": [{"val": "255.255.255.0"}]}, "6800_108A5500": {"1": [{"val": "192.168.0.1"}]}, "6800_108A5600": {"1": [{"val": "192.168.0.1"}]}, "6800_108A5900": {"1": [{"val": "wifinetwork"}]}, "6800_108A5A00": {"1": [{"val": ""}]}, "6800_088A5B00": { "1": [{"validVals": [3323, 3324], "val": [{"tag": 3324}]}] }, "6800_088A7700": { "1": [{"validVals": [4330, 4331, 4332], "val": [{"tag": 4330}]}] }, "6800_088A8A00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_008AA200": {"1": [{"low": 0, "high": None, "val": 0}]}, "6800_008AA300": {"1": [{"low": 0, "high": None, "val": None}]}, "6800_108AA400": { "1": [ {"val": "wifinetwork"}, {"val": "Ziggo-ap-3685756"}, {"val": "H368NAFB1C3"}, {"val": "Tuoro"}, {"val": "Recover.Me-008480"}, {"val": "KPN627B06"}, {"val": "KPN"}, {"val": "Ziggo"}, {"val": "wifinetwork2"}, {"val": "Maurice"}, ] }, "6800_088AA500": {"1": [{"validVals": [1146], "val": []}]}, "6800_088B1E00": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B1F00": {"1": [{"low": 1, "high": 65535, "val": 80}]}, "6800_108B2000": {"1": [{"val": "255.255.255.255"}]}, "6800_108B2100": {"1": [{"val": ""}]}, "6800_108B2200": {"1": [{"val": ""}]}, "6800_008B2E00": {"1": [{"low": 0, "high": None, "val": 17105412}]}, "6800_088B5200": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088B7000": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7100": {"1": [{"low": 1, "high": 65535, "val": 502}]}, "6800_088B7200": { "1": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7300": {"1": [{"low": 1, "high": 65535, "val": 502}]}, "6800_008B7400": {"1": [{"low": 3, "high": 123, "val": 3}]}, "6800_088E7B00": { "1": [ { "validVals": [2109, 3174, 3237, 3312], "val": [ {"tag": 2109}, {"tag": 3174}, {"tag": 3237}, {"tag": 3312}, ], } ] }, "6800_00912100": { "1": [{"low": 0, "high": 4294967294, "val": 33695748}] }, "6800_00922500": {"1": [{"low": 0, "high": 3050, "val": 3000}]}, "6800_00922600": {"1": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_0892D600": { "1": [{"validVals": [303, 2137, 2138], "val": [{"tag": 303}]}] }, "6800_0092D700": {"1": [{"low": 0, "high": 500000, "val": 3000}]}, "6800_0092D800": {"1": [{"low": 0, "high": 100, "val": 100}]}, "6800_00A21E00": { "1": [{"low": 0, "high": None, "val": 1001234567}] }, "6800_10A22F00": {"1": [{"val": "AA:BB:CC:DD:EE:FF"}]}, "6800_10A23000": {"1": [{"val": "AA:BB:CC:DD:EE:FF"}]}, "6800_00A63500": {"1": [{"low": 0, "high": 4000000, "val": 0}]}, "6800_40A63A00": { "1": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_40A63B00": { "1": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_10AA6100": {"1": [{"val": "192.168.0.170"}]}, "6800_10AA6200": {"1": [{"val": "255.255.255.0"}]}, "6800_10AA6300": {"1": [{"val": "192.168.0.1"}]}, "6800_10AA6400": {"1": [{"val": "192.168.0.1"}]}, } } }, 68, id="STP 3.0, no energy meter, with 8 optimizers", ), pytest.param( { "result": { "01B8-xxxxxB10": { "6100_40263F00": {"9": [{"val": 3490}]}, "6100_40265F00": {"9": [{"val": 0}]}, "6100_00295A00": {"9": [{"val": 0}]}, "6100_00411E00": {"9": [{"val": 10000}]}, "6100_00411F00": {"9": [{"val": 0}]}, "6100_00412000": {"9": [{"val": 0}]}, "6100_00416600": {"9": [{"val": None}]}, "6100_00418000": {"9": [{"val": 0}]}, "6100_40463600": {"9": [{"val": None}]}, "6100_40463700": {"9": [{"val": None}]}, "6100_40464000": {"9": [{"val": 1156}]}, "6100_40464100": {"9": [{"val": 1166}]}, "6100_40464200": {"9": [{"val": 1160}]}, "6100_00464800": {"9": [{"val": 24360}]}, "6100_00464900": {"9": [{"val": 24480}]}, "6100_00464A00": {"9": [{"val": 24360}]}, "6100_00464B00": {"9": [{"val": 42190}]}, "6100_00464C00": {"9": [{"val": 42390}]}, "6100_00464D00": {"9": [{"val": 42190}]}, "6100_00464E00": {"9": [{"val": None}]}, "6100_40465300": {"9": [{"val": 4700}]}, "6100_40465400": {"9": [{"val": 4700}]}, "6100_40465500": {"9": [{"val": 4700}]}, "6100_00465700": {"9": [{"val": 4997}]}, "6100_40466500": {"9": [{"val": None}]}, "6100_40466600": {"9": [{"val": None}]}, "6100_40466B00": {"9": [{"val": None}]}, "6100_40466C00": {"9": [{"val": None}]}, "6100_40466D00": {"9": [{"val": None}]}, "6100_40466E00": {"9": [{"val": None}]}, "6100_00467700": {"9": []}, "6100_00467800": {"9": []}, "6100_00467900": {"9": []}, "6100_00468100": {"9": [{"val": None}]}, "6100_40468F00": {"9": [{"val": None}]}, "6100_40469900": {"9": [{"val": None}]}, "6100_0046C200": {"9": [{"val": 3490}]}, "6100_0046E500": {"9": [{"val": None}]}, "6100_0046E600": {"9": [{"val": None}]}, "6100_0046E700": {"9": [{"val": None}]}, "6100_0046E800": {"9": [{"val": None}]}, "6100_0046E900": {"9": [{"val": None}]}, "6100_0046EA00": {"9": [{"val": None}]}, "6100_0046EB00": {"9": [{"val": None}]}, "6100_0046EC00": {"9": [{"val": None}]}, "6100_0046ED00": {"9": [{"val": None}]}, "6100_4046EE00": {"9": [{"val": None}]}, "6100_4046EF00": {"9": [{"val": None}]}, "6100_4046F000": {"9": [{"val": None}]}, "6100_4046F100": {"9": [{"val": None}]}, "6100_40495B00": {"9": [{"val": 0}]}, "6100_00495C00": {"9": [{"val": 0}]}, "6100_40495D00": {"9": [{"val": 0}]}, "6100_00496900": {"9": [{"val": 0}]}, "6100_00496A00": {"9": [{"val": 0}]}, "6100_004AB600": {"9": [{"val": 0}]}, "6100_40574600": {"9": [{"val": 0}]}, "6100_40574700": {"9": [{"val": 0}]}, "6100_40574800": {"9": [{"val": 0}]}, "6100_00664F00": {"9": [{"val": 14100}]}, "6100_00665900": {"9": [{"val": 0}]}, "6100_40665B00": {"9": [{"val": -999}]}, "6100_40666000": {"9": [{"val": -1}]}, "6100_40666100": {"9": [{"val": -1}]}, "6100_40666200": {"9": [{"val": -1}]}, "6100_40666700": {"9": [{"val": 3490}]}, "6100_40666800": {"9": [{"val": 1161}]}, "6100_40666900": {"9": [{"val": 1161}]}, "6100_40666A00": {"9": [{"val": 1161}]}, "6100_00696E00": {"9": [{"val": 0}]}, "6180_08214800": {"9": [{"val": [{"tag": 307}]}]}, "6180_08412800": {"9": [{"val": [{"tag": 569}]}]}, "6180_08412900": {"9": [{"val": [{"tag": 302}]}]}, "6180_08412B00": {"9": [{"val": [{"tag": 235}]}]}, "6180_08414900": {"9": [{"val": [{"tag": 886}]}]}, "6180_08414A00": {"9": [{"val": [{"tag": 887}]}]}, "6180_08414B00": {"9": [{"val": [{"tag": 885}]}]}, "6180_08414C00": {"9": [{"val": [{"tag": 307}]}]}, "6180_08414D00": {"9": [{"val": [{"tag": 303}]}]}, "6180_08414E00": {"9": [{"val": [{"tag": 303}]}]}, "6180_08416400": {"9": [{"val": [{"tag": 51}]}]}, "6180_08416900": {"9": [{"val": [{"tag": 16777213}]}]}, "6180_0846A600": {"9": [{"val": [{"tag": 1780}]}]}, "6180_08495E00": {"9": [{"val": [{"tag": 303}]}]}, "6180_084A2C00": {"9": [{"val": [{"tag": 302}]}]}, "6180_084A2E00": {"9": [{"val": [{"tag": 302}]}]}, "6180_084A6400": {"9": [{"val": [{"tag": 307}]}]}, "6180_084A9600": {"9": [{"val": [{"tag": 307}]}]}, "6180_084A9700": {"9": [{"val": [{"tag": 1721}]}]}, "6180_084A9800": {"9": [{"val": [{"tag": 1725}]}]}, "6180_084A9900": {"9": [{"val": [{"tag": 302}]}]}, "6180_104A9A00": {"9": [{"val": "10.10.0.169"}]}, "6180_104A9B00": {"9": [{"val": "255.255.252.0"}]}, "6180_104A9C00": {"9": [{"val": "10.10.0.1"}]}, "6180_104A9D00": {"9": [{"val": "10.10.0.1"}]}, "6180_084AAA00": {"9": [{"val": [{"tag": 1719}]}]}, "6180_104AB700": {"9": [{"val": ""}]}, "6180_104AB800": {"9": [{"val": ""}]}, "6180_104AB900": {"9": [{"val": ""}]}, "6180_104ABA00": {"9": [{"val": ""}]}, "6180_084ABB00": {"9": [{"val": [{"tag": 3369}]}]}, "6180_084ABC00": {"9": [{"val": [{"tag": 1725}]}]}, "6180_084ABD00": {"9": [{"val": [{"tag": 3326}]}]}, "6180_084B1E00": {"9": [{"val": [{"tag": 307}]}]}, "6180_08521E00": {"9": [{"val": [{"tag": 2246}]}]}, "6180_08671E00": {"9": [{"val": []}]}, "6380_40251E00": {"1": [{"val": 854}, {"val": 2733}]}, "6380_40451F00": {"1": [{"val": 35350}, {"val": 43700}]}, "6380_40452100": {"1": [{"val": 2415}, {"val": 6254}]}, "6400_00260100": {"9": [{"val": 158956}]}, "6400_00262200": {"9": [{"val": 51398}]}, "6400_00462400": {"9": [{"val": None}]}, "6400_00462500": {"9": [{"val": None}]}, "6400_00462E00": {"9": [{"val": 0}]}, "6400_00469100": {"9": [{"val": None}]}, "6400_00469200": {"9": [{"val": None}]}, "6400_0046C300": {"9": [{"val": 159054}]}, "6400_00496700": {"9": [{"val": 0}]}, "6400_00496800": {"9": [{"val": 100}]}, "6400_00496D00": {"9": [{"val": None}]}, "6400_00618C00": {"9": [{"val": 30}]}, } } }, { "result": { "01B8-xxxxxB10": { "6800_000E7C00": {"232": []}, "6800_08811F00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_10821E00": {"9": [{"val": "SN: 3012301234"}]}, "6800_08821F00": { "9": [{"validVals": [8009], "val": [{"tag": 8009}]}] }, "6800_08822000": { "9": [ { "validVals": [19048, 19049, 19050, 19051], "val": [{"tag": 19051}], } ] }, "6800_08822100": { "9": [ { "validVals": [ 601, 605, 606, 607, 609, 610, 611, 618, 623, 632, 633, 634, 635, 636, 637, 639, 640, 641, 642, 647, 648, ], "val": [ {"tag": 601}, {"tag": 605}, {"tag": 606}, {"tag": 609}, {"tag": 610}, {"tag": 611}, {"tag": 618}, {"tag": 623}, {"tag": 632}, {"tag": 633}, {"tag": 634}, {"tag": 635}, {"tag": 636}, {"tag": 637}, {"tag": 639}, {"tag": 640}, {"tag": 641}, {"tag": 642}, {"tag": 647}, {"tag": 648}, ], } ] }, "6800_00822500": { "9": [{"low": 0, "high": 4294967000, "val": 43500}] }, "6800_08822800": { "9": [{"validVals": [302, 1129, 1130], "val": [{"tag": 302}]}] }, "6800_08822B00": { "9": [{"validVals": [461], "val": [{"tag": 461}]}] }, "6800_00823400": { "9": [{"low": 0, "high": 4294967294, "val": 50332164}] }, "6800_08831E00": { "9": [{"validVals": [381, 1467], "val": [{"tag": 1467}]}] }, "6800_00832A00": { "9": [{"low": 10000, "high": 10000, "val": 10000}] }, "6800_40833700": {"9": [{"low": 0, "high": 100, "val": 0}]}, "6800_08836E00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08836F00": {"9": [{"validVals": [1146], "val": []}]}, "6800_08837800": { "9": [ { "validVals": [ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 796, 797, 798, 799, ], "val": [{"tag": 778}], } ] }, "6800_08838B00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08838C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08838D00": { "9": [ { "validVals": [ 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9522, 9523, 9524, 9525, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9549, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, ], "val": [{"tag": 9560}], } ] }, "6800_10838F00": {"9": [{"val": "ntp.sunny-portal.com"}]}, "6800_08839500": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08839700": {"9": [{"validVals": [1146], "val": []}]}, "6800_0883AA00": { "9": [ { "validVals": [303, 1341, 1342, 5304], "val": [{"tag": 303}], } ] }, "6800_0883AE00": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6800_10841E00": {"0": [{"val": ""}]}, "6800_00852A00": {"9": [{"low": 0, "high": 50000, "val": 10000}]}, "6800_08855C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_0086A300": {"9": [{"low": 0, "high": 0, "val": 0}]}, "6800_08871E00": { "9": [ { "validVals": [ 27, 438, 7584, 7590, 7592, 7602, 7603, 7615, 16777213, ], "val": [{"tag": 7602}], } ] }, "6800_00893700": {"9": [{"low": 0, "high": None, "val": 0}]}, "6800_08893B00": { "9": [{"validVals": [1785], "val": [{"tag": 1785}]}] }, "6800_08895A00": { "9": [{"validVals": [5277, 5278], "val": [{"tag": 5277}]}] }, "6800_088A2900": { "9": [ { "validVals": [302, 9327, 9375, 9376, 9437, 19043], "val": [{"tag": 9327}], } ] }, "6800_008A2A00": {"9": [{"low": 5, "high": 1500, "val": 100}]}, "6800_108A2B00": {"9": [{"val": ""}]}, "6800_108A3200": {"9": [{"val": ""}]}, "6800_088A3300": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4D00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A5100": {"9": [{"validVals": [1146], "val": []}]}, "6800_088A5200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_108A5300": {"9": [{"val": "192.168.0.173"}]}, "6800_108A5400": {"9": [{"val": "255.255.255.0"}]}, "6800_108A5500": {"9": [{"val": "192.168.0.1"}]}, "6800_108A5600": {"9": [{"val": "192.168.0.1"}]}, "6800_088A5800": { "9": [{"validVals": [1438, 3326, 3327], "val": [{"tag": 1438}]}] }, "6800_108A5900": {"9": [{"val": ""}]}, "6800_108A5A00": {"9": [{"val": ""}]}, "6800_088A5B00": { "9": [{"validVals": [3323, 3324], "val": [{"tag": 3324}]}] }, "6800_088A7700": { "9": [{"validVals": [4330, 4331, 4332], "val": [{"tag": 4330}]}] }, "6800_088A8A00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_008AA200": { "9": [{"low": 0, "high": None, "val": 1901444353}] }, "6800_008AA300": {"9": [{"low": 0, "high": None, "val": None}]}, "6800_108AA400": { "9": [ {"val": "WIFINET"}, {"val": "Another WIFI"}, {"val": ""}, ] }, "6800_088AA500": {"9": [{"validVals": [1146], "val": []}]}, "6800_088B1E00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B1F00": {"9": [{"low": 1, "high": 65535, "val": 80}]}, "6800_108B2000": {"9": [{"val": "255.255.255.255"}]}, "6800_108B2100": {"9": [{"val": ""}]}, "6800_108B2200": {"9": [{"val": ""}]}, "6800_008B2E00": {"9": [{"low": 0, "high": None, "val": 17105924}]}, "6800_088B5200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088B7000": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7100": {"9": [{"low": 1, "high": 65535, "val": 502}]}, "6800_088B7200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7300": {"9": [{"low": 1, "high": 65535, "val": 502}]}, "6800_008B7400": {"9": [{"low": 3, "high": 123, "val": 3}]}, "6800_088C2200": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6800_088E7B00": { "9": [ { "validVals": [2109, 3174, 3237, 3312, 4994, 5143], "val": [ {"tag": 2109}, {"tag": 3174}, {"tag": 3237}, {"tag": 3312}, {"tag": 4994}, ], } ] }, "6800_00912100": {"9": [{"low": 0, "high": None, "val": 16782853}]}, "6800_00922500": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_00922600": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_0892AE00": { "9": [{"validVals": [303, 582], "val": [{"tag": 303}]}] }, "6800_0892D600": { "9": [{"validVals": [303, 2137, 2138], "val": [{"tag": 303}]}] }, "6800_0092D700": {"9": [{"low": 0, "high": 500000, "val": 10000}]}, "6800_0092D800": {"9": [{"low": 0, "high": 100, "val": 100}]}, "6800_00A21E00": { "9": [{"low": 0, "high": 4294967294, "val": 3012401936}] }, "6800_10A22F00": {"9": [{"val": "00:15:BB:04:1D:6A"}]}, "6800_10A23000": {"9": [{"val": "70:74:14:9A:91:36"}]}, "6800_08A33A00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_40A63A00": { "9": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_40A63B00": { "9": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_10AA6100": {"9": [{"val": "192.168.0.170"}]}, "6800_10AA6200": {"9": [{"val": "255.255.255.0"}]}, "6800_10AA6300": {"9": [{"val": "192.168.0.1"}]}, "6800_10AA6400": {"9": [{"val": "192.168.0.1"}]}, } } }, 48, id="STP 10.0 SE, no energy meter, no optimizers", ), pytest.param( { "result": { "01B8-xxxxxBA3": { "6100_40263F00": {"9": [{"val": 320}]}, "6100_40265F00": {"9": [{"val": 0}]}, "6100_00295A00": {"9": [{"val": 18}]}, "6100_00411E00": {"9": [{"val": 6000}]}, "6100_00411F00": {"9": [{"val": 0}]}, "6100_00412000": {"9": [{"val": 0}]}, "6100_00416600": {"9": [{"val": None}]}, "6100_00418000": {"9": [{"val": 0}]}, "6100_40463600": {"9": [{"val": 44}]}, "6100_40463700": {"9": [{"val": 0}]}, "6100_40464000": {"9": [{"val": 151}]}, "6100_40464100": {"9": [{"val": 152}]}, "6100_40464200": {"9": [{"val": 151}]}, "6100_00464800": {"9": [{"val": 23410}]}, "6100_00464900": {"9": [{"val": 23360}]}, "6100_00464A00": {"9": [{"val": 23430}]}, "6100_00464B00": {"9": [{"val": 40540}]}, "6100_00464C00": {"9": [{"val": 40450}]}, "6100_00464D00": {"9": [{"val": 40580}]}, "6100_00464E00": {"9": [{"val": 27}]}, "6100_40465300": {"9": [{"val": 600}]}, "6100_40465400": {"9": [{"val": 600}]}, "6100_40465500": {"9": [{"val": 600}]}, "6100_00465700": {"9": [{"val": 5000}]}, "6100_40466500": {"9": [{"val": 928}]}, "6100_40466600": {"9": [{"val": 575}]}, "6100_40466B00": {"9": [{"val": 609}]}, "6100_40466C00": {"9": [{"val": 162}]}, "6100_40466D00": {"9": [{"val": 125}]}, "6100_40466E00": {"9": [{"val": 36}]}, "6100_00467700": {"9": []}, "6100_00467800": {"9": []}, "6100_00467900": {"9": []}, "6100_00468100": {"9": [{"val": 5001}]}, "6100_40468F00": {"9": [{"val": 164}]}, "6100_40469900": {"9": [{"val": None}]}, "6100_0046C200": {"9": [{"val": 2368}]}, "6100_0046E500": {"9": [{"val": 23371}]}, "6100_0046E600": {"9": [{"val": 23315}]}, "6100_0046E700": {"9": [{"val": 23292}]}, "6100_0046E800": {"9": [{"val": 0}]}, "6100_0046E900": {"9": [{"val": 113}]}, "6100_0046EA00": {"9": [{"val": 26}]}, "6100_0046EB00": {"9": [{"val": 96}]}, "6100_0046EC00": {"9": [{"val": 0}]}, "6100_0046ED00": {"9": [{"val": 0}]}, "6100_4046EE00": {"9": [{"val": 130}]}, "6100_4046EF00": {"9": [{"val": 52}]}, "6100_4046F000": {"9": [{"val": 24}]}, "6100_4046F100": {"9": [{"val": 158}]}, "6100_40495B00": {"9": [{"val": 170}]}, "6100_00495C00": {"9": [{"val": 42900}]}, "6100_40495D00": {"9": [{"val": -4773}]}, "6100_00496900": {"9": [{"val": 2048}]}, "6100_00496A00": {"9": [{"val": 0}]}, "6100_004AB600": {"9": [{"val": 0}]}, "6100_40574600": {"9": [{"val": 100}]}, "6100_40574700": {"9": [{"val": 0}]}, "6100_40574800": {"9": [{"val": 0}]}, "6100_00664F00": {"9": [{"val": 1800}]}, "6100_00665900": {"9": [{"val": 0}]}, "6100_40665B00": {"9": [{"val": -998}]}, "6100_40666000": {"9": [{"val": -2}]}, "6100_40666100": {"9": [{"val": -2}]}, "6100_40666200": {"9": [{"val": -2}]}, "6100_40666700": {"9": [{"val": 320}]}, "6100_40666800": {"9": [{"val": 110}]}, "6100_40666900": {"9": [{"val": 110}]}, "6100_40666A00": {"9": [{"val": 110}]}, "6100_00696E00": {"9": [{"val": 100}]}, "6102_40254E00": {"9": [{"val": 29}]}, "6102_00254F00": {"9": [{"val": 3409000}]}, "6102_00493700": {"9": [{"val": 25000}]}, "6102_00493800": {"9": [{"val": 25000}]}, "6102_00495100": {"9": [{"val": 0}]}, "6102_004B2D00": {"9": [{"val": 835301}]}, "6180_08214800": {"9": [{"val": [{"tag": 307}]}]}, "6180_08412500": {"9": [{"val": [{"tag": 311}]}]}, "6180_08412800": {"9": [{"val": [{"tag": 569}]}]}, "6180_08412900": {"9": [{"val": [{"tag": 302}]}]}, "6180_08412B00": {"9": [{"val": [{"tag": 235}]}]}, "6180_08414900": {"9": [{"val": [{"tag": 886}]}]}, "6180_08414A00": {"9": [{"val": [{"tag": 887}]}]}, "6180_08414B00": {"9": [{"val": [{"tag": 885}]}]}, "6180_08414C00": {"9": [{"val": [{"tag": 307}]}]}, "6180_08414D00": {"9": [{"val": [{"tag": 307}]}]}, "6180_08414E00": {"9": [{"val": [{"tag": 307}]}]}, "6180_08416400": {"9": [{"val": [{"tag": 51}]}]}, "6180_08416900": {"9": [{"val": [{"tag": 16777213}]}]}, "6180_0846A600": {"9": [{"val": [{"tag": 1780}]}]}, "6180_08495E00": {"9": [{"val": [{"tag": 2292}]}]}, "6180_084A2C00": {"9": [{"val": [{"tag": 302}]}]}, "6180_084A2E00": {"9": [{"val": [{"tag": 302}]}]}, "6180_084A6400": {"9": [{"val": [{"tag": 307}]}]}, "6180_084A9600": {"9": [{"val": [{"tag": 307}]}]}, "6180_084A9700": {"9": [{"val": [{"tag": 1721}]}]}, "6180_084A9800": {"9": [{"val": [{"tag": 307}]}]}, "6180_084A9900": {"9": [{"val": [{"tag": 1721}]}]}, "6180_104A9A00": {"9": [{"val": "192.168.0.71"}]}, "6180_104A9B00": {"9": [{"val": "255.255.255.0"}]}, "6180_104A9C00": {"9": [{"val": "192.168.0.1"}]}, "6180_104A9D00": {"9": [{"val": "192.168.0.20"}]}, "6180_084AAA00": {"9": [{"val": [{"tag": 307}]}]}, "6180_104AB700": {"9": [{"val": ""}]}, "6180_104AB800": {"9": [{"val": ""}]}, "6180_104AB900": {"9": [{"val": ""}]}, "6180_104ABA00": {"9": [{"val": ""}]}, "6180_084ABB00": {"9": [{"val": [{"tag": 3369}]}]}, "6180_084ABC00": {"9": [{"val": [{"tag": 1725}]}]}, "6180_084ABD00": {"9": [{"val": [{"tag": 3326}]}]}, "6180_084B1E00": {"9": [{"val": [{"tag": 303}]}]}, "6180_08521E00": {"9": [{"val": [{"tag": 2246}]}]}, "6180_08671E00": {"9": [{"val": []}]}, "6182_08412B00": {"9": [{"val": [{"tag": 235}]}]}, "6182_08495600": {"9": [{"val": [{"tag": 1129}]}]}, "6182_08497600": {"9": [{"val": [{"tag": 2614}]}]}, "6182_08498A00": {"9": [{"val": []}]}, "6182_084A9E00": {"9": [{"val": [{"tag": 1727}]}]}, "6182_084A9F00": {"9": [{"val": [{"tag": 1727}]}]}, "6182_08636900": {"9": [{"val": [{"tag": 303}]}]}, "6380_40251E00": {"1": [{"val": 1681}, {"val": 826}]}, "6380_40451F00": {"1": [{"val": 34110}, {"val": 17050}]}, "6380_40452100": {"1": [{"val": 4928}, {"val": 4844}]}, "6400_00260100": {"9": [{"val": 119103}]}, "6400_00262200": {"9": [{"val": 1485}]}, "6400_00462400": {"9": [{"val": 87240}]}, "6400_00462500": {"9": [{"val": 63853}]}, "6400_00462E00": {"9": []}, "6400_00469100": {"9": [{"val": 87240}]}, "6400_00469200": {"9": [{"val": 63853}]}, "6400_0046C300": {"9": [{"val": 135097}]}, "6400_00496700": {"9": [{"val": 48662}]}, "6400_00496800": {"9": [{"val": 32539}]}, "6400_00496D00": {"9": [{"val": 41}]}, "6400_00497E00": {"9": [{"val": 50}]}, "6400_00618C00": {"9": [{"val": 41}]}, "6402_00618D00": {"9": [{"val": 32}]}, } } }, { "result": { "01B8-xxxxxBA3": { "6800_000EA900": {"188": []}, "6800_08811F00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_10821E00": {"9": [{"val": "STP6.0-3SE-40 411"}]}, "6800_08821F00": { "9": [{"validVals": [8009], "val": [{"tag": 8009}]}] }, "6800_08822000": { "9": [ { "validVals": [19048, 19049, 19050, 19051], "val": [{"tag": 19049}], } ] }, "6800_08822100": { "9": [ { "validVals": [ 601, 605, 606, 607, 609, 610, 611, 618, 623, 632, 633, 634, 635, 636, 637, 639, 640, 641, 642, 647, 648, ], "val": [ {"tag": 601}, {"tag": 605}, {"tag": 606}, {"tag": 609}, {"tag": 610}, {"tag": 611}, {"tag": 618}, {"tag": 623}, {"tag": 632}, {"tag": 633}, {"tag": 634}, {"tag": 635}, {"tag": 636}, {"tag": 637}, {"tag": 639}, {"tag": 640}, {"tag": 641}, {"tag": 642}, {"tag": 647}, {"tag": 648}, ], } ] }, "6800_00822500": { "9": [{"low": 0, "high": 4294967000, "val": 26100}] }, "6800_08822800": { "9": [{"validVals": [302, 1129, 1130], "val": [{"tag": 302}]}] }, "6800_08822B00": { "9": [{"validVals": [461], "val": [{"tag": 461}]}] }, "6800_00823400": { "9": [{"low": 0, "high": 4294967294, "val": 50398724}] }, "6800_08831E00": { "9": [{"validVals": [381, 1467], "val": [{"tag": 1467}]}] }, "6800_00832A00": {"9": [{"low": 6000, "high": 6000, "val": 6000}]}, "6800_40833700": {"9": [{"low": 0, "high": 100, "val": 0}]}, "6800_08836E00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08836F00": {"9": [{"validVals": [1146], "val": []}]}, "6800_08837800": { "9": [ { "validVals": [ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 796, 797, 798, 799, ], "val": [{"tag": 778}], } ] }, "6800_08838B00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08838C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08838D00": { "9": [ { "validVals": [ 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9522, 9523, 9524, 9525, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9549, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, ], "val": [{"tag": 9499}], } ] }, "6800_10838F00": {"9": [{"val": "ntp.sunny-portal.com"}]}, "6800_08839500": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08839700": {"9": [{"validVals": [1146], "val": []}]}, "6800_0883AA00": { "9": [ { "validVals": [303, 1341, 1342, 5304], "val": [{"tag": 303}], } ] }, "6800_0883AE00": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6800_10841E00": {"0": [{"val": ""}]}, "6800_00852A00": {"9": [{"low": 0, "high": 50000, "val": 6000}]}, "6800_08855C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_0086A300": {"9": [{"low": 0, "high": 4000000, "val": 0}]}, "6800_08871E00": { "9": [ { "validVals": [ 27, 438, 7539, 7550, 7584, 7590, 7592, 7594, 7595, 7602, 7603, 7615, 7637, 16777213, ], "val": [{"tag": 7602}], } ] }, "6800_00893700": {"9": [{"low": 0, "high": None, "val": 10200}]}, "6800_08893B00": { "9": [{"validVals": [1785], "val": [{"tag": 1785}]}] }, "6800_08895A00": { "9": [{"validVals": [5277, 5278], "val": [{"tag": 5277}]}] }, "6800_088A2900": { "9": [ { "validVals": [302, 9327, 9375, 9376, 9437, 19043], "val": [{"tag": 9327}], } ] }, "6800_008A2A00": {"9": [{"low": 5, "high": 1500, "val": 100}]}, "6800_108A2B00": {"9": [{"val": ""}]}, "6800_108A3200": {"9": [{"val": ""}]}, "6800_088A3300": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_088A4C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4D00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A5100": {"9": [{"validVals": [1146], "val": []}]}, "6800_088A5200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_108A5300": {"9": [{"val": "192.168.0.173"}]}, "6800_108A5400": {"9": [{"val": "255.255.255.0"}]}, "6800_108A5500": {"9": [{"val": "192.168.0.1"}]}, "6800_108A5600": {"9": [{"val": "192.168.0.1"}]}, "6800_088A5800": { "9": [{"validVals": [1438, 3326, 3327], "val": [{"tag": 1438}]}] }, "6800_108A5900": {"9": [{"val": ""}]}, "6800_108A5A00": {"9": [{"val": ""}]}, "6800_088A5B00": { "9": [{"validVals": [3323, 3324], "val": [{"tag": 3324}]}] }, "6800_088A7700": { "9": [{"validVals": [4330, 4331, 4332], "val": [{"tag": 4330}]}] }, "6800_088A8A00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_008AA200": { "9": [{"low": 0, "high": None, "val": 3014931446}] }, "6800_008AA300": { "9": [{"low": 0, "high": None, "val": 3014931446}] }, "6800_108AA400": { "9": [ {"val": "SomeWifiNetwork"}, {"val": "WiFiNetwork2"}, ] }, "6800_088AA500": {"9": [{"validVals": [1146], "val": []}]}, "6800_088B1E00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B1F00": {"9": [{"low": 1, "high": 65535, "val": 80}]}, "6800_108B2000": {"9": [{"val": "255.255.255.255"}]}, "6800_108B2100": {"9": [{"val": ""}]}, "6800_108B2200": {"9": [{"val": ""}]}, "6800_008B2E00": {"9": [{"low": 0, "high": None, "val": 17105924}]}, "6800_088B5200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_088B7000": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7100": {"9": [{"low": 1, "high": 65535, "val": 502}]}, "6800_088B7200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7300": {"9": [{"low": 1, "high": 65535, "val": 502}]}, "6800_008B7400": {"9": [{"low": 3, "high": 123, "val": 3}]}, "6800_088C2300": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6800_088E7B00": { "9": [ { "validVals": [2109, 3174, 3237, 3312, 4994, 5143], "val": [ {"tag": 2109}, {"tag": 3174}, {"tag": 3312}, {"tag": 4994}, ], } ] }, "6800_00912100": {"9": [{"low": 0, "high": None, "val": 16784133}]}, "6800_00922500": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_00922600": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_0892AE00": { "9": [{"validVals": [303, 582], "val": [{"tag": 303}]}] }, "6800_0892D600": { "9": [{"validVals": [303, 2137, 2138], "val": [{"tag": 303}]}] }, "6800_0092D700": {"9": [{"low": 0, "high": 500000, "val": 10000}]}, "6800_0092D800": {"9": [{"low": 0, "high": 100, "val": 100}]}, "6800_00A21E00": { "9": [{"low": 0, "high": 4294967294, "val": 3012373411}] }, "6800_10A22F00": {"9": [{"val": "00:15:BB:03:47:3C"}]}, "6800_10A23000": {"9": [{"val": "74:7A:90:69:2B:DE"}]}, "6800_08A33A00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_40A63A00": { "9": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_40A63B00": { "9": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_10AA6100": {"9": [{"val": "192.168.0.170"}]}, "6800_10AA6200": {"9": [{"val": "255.255.255.0"}]}, "6800_10AA6300": {"9": [{"val": "192.168.0.1"}]}, "6800_10AA6400": {"9": [{"val": "192.168.0.1"}]}, "6802_08822200": { "9": [{"validVals": [603, 651], "val": [{"tag": 651}]}] }, "6802_08822C00": { "9": [ { "validVals": [2340, 8605, 8620, 16777213], "val": [{"tag": 8620}], } ] }, "6802_00822D00": {"9": [{"low": 0, "high": None, "val": 0}]}, "6802_00823300": { "9": [{"low": 0, "high": 4294967294, "val": 16843010}] }, "6802_00830800": {"9": [{"low": 20, "high": 10000, "val": 20}]}, "6802_08831700": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6802_08831800": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6802_00832B00": {"9": [{"low": 3000, "high": 6050, "val": 6000}]}, "6802_00832E00": {"9": [{"low": 3000, "high": 6050, "val": 6000}]}, "6802_00832F00": {"9": [{"low": 6000, "high": 6000, "val": 6000}]}, "6802_08833900": { "9": [{"validVals": [3585, 7517], "val": [{"tag": 3585}]}] }, "6802_08833A00": {"9": [{"validVals": [1146], "val": []}]}, "6802_08834500": { "9": [{"validVals": [303, 1438], "val": [{"tag": 303}]}] }, "6802_08834D00": { "9": [ { "validVals": [237, 353, 355, 409, 411, 418, 568, 720], "val": [], } ] }, "6802_08837300": {"9": [{"validVals": [72], "val": []}]}, "6802_08838800": {"9": [{"validVals": [1146], "val": []}]}, "6802_00839B00": {"9": [{"low": 0, "high": None, "val": 0}]}, "6802_00839E00": { "9": [{"low": 0, "high": 4294967294, "val": 18940420}] }, "6802_00839F00": { "9": [{"low": 0, "high": 4294967294, "val": 16908292}] }, "6802_4083DB00": {"9": [{"low": -1, "high": 100, "val": 100}]}, "6802_4083DC00": {"9": [{"low": -1, "high": 100, "val": 0}]}, "6802_4083DD00": {"9": [{"low": -1, "high": 100, "val": 30}]}, "6802_4083DE00": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083DF00": {"9": [{"low": -1, "high": 100, "val": 60}]}, "6802_4083E000": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E100": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E200": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E300": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E400": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E500": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E600": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E700": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E800": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083E900": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_4083EA00": {"9": [{"low": -1, "high": 100, "val": -1}]}, "6802_0083EB00": {"9": [{"low": 0, "high": 99, "val": 0}]}, "6802_4083EC00": {"9": [{"low": -1, "high": 100, "val": 100}]}, "6802_0083ED00": {"9": [{"low": 1, "high": 60, "val": 5}]}, "6802_4083F300": {"9": [{"low": 0, "high": 10000, "val": 3600}]}, "6802_4083F600": {"9": [{"low": 0, "high": 10000, "val": -3600}]}, "6802_4083F700": {"9": [{"low": 800, "high": 1000, "val": -800}]}, "6802_4083FA00": {"9": [{"low": 800, "high": 1000, "val": 800}]}, "6802_10841F00": {"0": [{"val": ""}]}, "6802_00855D00": {"9": [{"low": 360, "high": 1800, "val": 360}]}, "6802_00865F00": {"9": [{"low": 80, "high": 245, "val": 230}]}, "6802_40866000": {"9": [{"low": -20, "high": 20, "val": 0}]}, "6802_08871F00": { "9": [ { "validVals": [ 438, 7539, 7550, 7584, 7590, 7592, 7594, 7595, 7602, 7603, 7615, 7637, ], "val": [], } ] }, "6802_08872000": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6802_08872200": { "9": [ { "validVals": [ 438, 7539, 7550, 7584, 7590, 7592, 7594, 7595, 7602, 7603, 7615, 7637, ], "val": [{"tag": 7602}], } ] }, "6802_08872900": { "9": [{"validVals": [43, 4546, 4547, 4548], "val": []}] }, "6802_00872A00": { "9": [{"low": 20000, "high": 3000000, "val": 200000}] }, "6802_08872B00": { "9": [{"validVals": [303, 308], "val": [{"tag": 308}]}] }, "6802_00873700": {"9": [{"low": 0, "high": 3600000, "val": 60000}]}, "6802_00873800": { "9": [{"low": 10000, "high": 900000, "val": 20000}] }, "6802_00873B00": {"9": [{"low": 1000, "high": 2000, "val": 1150}]}, "6802_00873C00": {"9": [{"low": 1000, "high": 2000, "val": 1150}]}, "6802_00873D00": {"9": [{"low": 1000, "high": 2000, "val": 1150}]}, "6802_00873E00": {"9": [{"low": 200, "high": 1000, "val": 800}]}, "6802_00873F00": {"9": [{"low": 150, "high": 1000, "val": 800}]}, "6802_00874000": {"9": [{"low": 200, "high": 1000, "val": 800}]}, "6802_00874100": {"9": [{"low": 0, "high": 1000000, "val": 200}]}, "6802_00874200": {"9": [{"low": 1000, "high": 2000, "val": 2000}]}, "6802_00874300": {"9": [{"low": 1000, "high": 2000, "val": 1100}]}, "6802_00874400": {"9": [{"low": 0, "high": 1000, "val": 850}]}, "6802_00875100": {"9": [{"low": 0, "high": 1000000, "val": 200}]}, "6802_00875300": {"9": [{"low": 0, "high": 1000000, "val": 200}]}, "6802_00875500": {"9": [{"low": 0, "high": 1000000, "val": 200}]}, "6802_00875700": {"9": [{"low": 0, "high": 1000000, "val": 200}]}, "6802_00875900": {"9": [{"low": 0, "high": 1000000, "val": 200}]}, "6802_00877F00": {"9": [{"low": 4500, "high": 5500, "val": 5000}]}, "6802_00878000": {"9": [{"low": 5001, "high": 5500, "val": 5150}]}, "6802_00878100": {"9": [{"low": 0, "high": 600000, "val": 200}]}, "6802_00878200": {"9": [{"low": 5001, "high": 5500, "val": 5150}]}, "6802_00878300": {"9": [{"low": 0, "high": 600000, "val": 200}]}, "6802_00878400": {"9": [{"low": 5001, "high": 5500, "val": 5150}]}, "6802_00878500": {"9": [{"low": 0, "high": 600000, "val": 200}]}, "6802_00878600": {"9": [{"low": 4500, "high": 4996, "val": 4750}]}, "6802_00878700": {"9": [{"low": 0, "high": 600000, "val": 200}]}, "6802_00878800": {"9": [{"low": 4500, "high": 4996, "val": 4750}]}, "6802_00878900": {"9": [{"low": 0, "high": 600000, "val": 200}]}, "6802_00878A00": {"9": [{"low": 4500, "high": 4996, "val": 4750}]}, "6802_00878B00": {"9": [{"low": 0, "high": 600000, "val": 200}]}, "6802_00878C00": {"9": [{"low": 0, "high": 1000, "val": 1000}]}, "6802_00878D00": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6802_00878E00": {"9": [{"low": 4400, "high": 5000, "val": 4990}]}, "6802_00878F00": {"9": [{"low": 5000, "high": 5500, "val": 5010}]}, "6802_00879000": {"9": [{"low": 5000, "high": 5500, "val": 5020}]}, "6802_00879100": {"9": [{"low": 40, "high": 90000, "val": 200}]}, "6802_00879200": {"9": [{"low": 4400, "high": 5000, "val": 4750}]}, "6802_00879300": {"9": [{"low": 40, "high": 300000, "val": 200}]}, "6802_08893600": { "9": [{"validVals": [303, 2289, 2290], "val": [{"tag": 303}]}] }, "6802_00895000": {"9": [{"low": 1, "high": 50, "val": 5}]}, "6802_00895100": {"9": [{"low": 0, "high": 100, "val": 0}]}, "6802_00895600": {"9": [{"low": 0, "high": 100, "val": 0}]}, "6802_00895700": {"9": [{"low": 0, "high": 100, "val": 100}]}, "6802_08896800": { "9": [ { "validVals": [ 4333, 8610, 8623, 8628, 8629, 8630, 8634, 8636, 8638, 19033, 19034, 19045, 19046, 19073, ], "val": [{"tag": 19046}], } ] }, "6802_00897000": {"9": [{"low": 0, "high": 10600, "val": 9000}]}, "6802_00897100": {"9": [{"low": 0, "high": 2500, "val": 0}]}, "6802_00897200": {"9": [{"low": 0, "high": 10600, "val": 7200}]}, "6802_00897300": {"9": [{"low": 0, "high": 2650, "val": 0}]}, "6802_108A2300": { "9": [ {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, {"val": ""}, ] }, "6802_088A7500": { "9": [{"validVals": [303, 4478, 4479], "val": [{"tag": 4479}]}] }, "6802_008A7600": {"9": [{"low": 11, "high": 31744, "val": 125}]}, "6802_088B4300": { "9": [{"validVals": [5181, 5182], "val": [{"tag": 5182}]}] }, "6802_008B4500": {"9": [{"low": 0, "high": 4, "val": 0}]}, "6802_008B4600": {"9": [{"low": 0, "high": 4, "val": 0}]}, "6802_008B4700": {"9": [{"low": 0, "high": 4, "val": 0}]}, "6802_088B7500": { "9": [{"validVals": [303, 308], "val": [{"tag": 308}]}] }, "6802_008B8A00": {"9": [{"low": 0, "high": 16384, "val": 16384}]}, "6802_108B8B00": {"9": [{"val": "01:0C:CD:01:00:00"}]}, "6802_00912300": {"9": [{"low": 0, "high": 255, "val": 0}]}, "6802_00912600": {"9": [{"low": 0, "high": 4294967294, "val": 0}]}, "6802_00912900": { "9": [{"low": 0, "high": 4294967294, "val": 38938372}] }, "6802_00912A00": { "9": [{"low": 0, "high": 4294967294, "val": 4613}] }, "6802_00916100": { "9": [{"low": 0, "high": 4294967294, "val": 18022404}] }, "6802_00918900": {"9": [{"low": 0, "high": None, "val": 51904516}]}, "6802_08918D00": { "9": [ { "validVals": [ 4333, 8610, 8623, 8628, 8629, 8630, 8634, 8636, 8638, 19033, 19034, 19045, 19046, 19073, ], "val": [{"tag": 19046}], } ] }, "6802_00921C00": {"9": [{"low": 0, "high": 3600, "val": 1800}]}, "6802_40921D00": { "9": [{"low": -500000, "high": 500000, "val": 0}] }, "6802_00922000": {"9": [{"low": 5, "high": 6000, "val": 10}]}, "6802_08922100": { "9": [{"validVals": [303, 308], "val": [{"tag": 308}]}] }, "6802_00922300": {"9": [{"low": 3, "high": 6000, "val": 20}]}, "6802_00922400": {"9": [{"low": 10, "high": 10000, "val": 10000}]}, "6802_08922900": { "9": [ { "validVals": [ 303, 1069, 1070, 1071, 1072, 1074, 1075, 1076, ], "val": [{"tag": 303}], } ] }, "6802_40922A00": {"9": [{"low": -3600, "high": 3600, "val": 0}]}, "6802_40922B00": {"9": [{"low": -600, "high": 600, "val": 0}]}, "6802_08924000": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6802_08924100": { "9": [ { "validVals": [303, 1077, 1078, 1079], "val": [{"tag": 303}], } ] }, "6802_00924200": {"9": [{"low": 0, "high": 6000, "val": 6000}]}, "6802_00924300": {"9": [{"low": 0, "high": 100, "val": 100}]}, "6802_08925900": { "9": [{"validVals": [303, 1132], "val": [{"tag": 303}]}] }, "6802_00925A00": {"9": [{"low": 0, "high": 500, "val": 20}]}, "6802_00925B00": {"9": [{"low": 0, "high": 100, "val": 40}]}, "6802_00925C00": {"9": [{"low": 0, "high": 500, "val": 5}]}, "6802_08925D00": { "9": [{"validVals": [303, 308], "val": [{"tag": 308}]}] }, "6802_00925E00": {"9": [{"low": 0, "high": 100, "val": 10}]}, "6802_00926300": {"9": [{"low": 80, "high": 120, "val": 100}]}, "6802_00926400": {"9": [{"low": 0, "high": 600, "val": 0}]}, "6802_00926500": {"9": [{"low": 0, "high": 200, "val": 0}]}, "6802_00926600": {"9": [{"low": 0, "high": 100, "val": 0}]}, "6802_08926800": { "9": [{"validVals": [1330, 1331], "val": [{"tag": 1330}]}] }, "6802_00926D00": {"9": [{"low": 0, "high": 100, "val": 50}]}, "6802_00926E00": {"9": [{"low": 80, "high": 100, "val": 100}]}, "6802_08926F00": { "9": [{"validVals": [1041, 1042], "val": [{"tag": 1041}]}] }, "6802_00927000": {"9": [{"low": 0, "high": 100, "val": 100}]}, "6802_00927100": {"9": [{"low": 80, "high": 100, "val": 95}]}, "6802_08927200": { "9": [{"validVals": [1041, 1042], "val": [{"tag": 1042}]}] }, "6802_00927300": {"9": [{"low": 1000, "high": 1100, "val": 1050}]}, "6802_00927400": {"9": [{"low": 900, "high": 1000, "val": 1000}]}, "6802_00927800": {"9": [{"low": 0, "high": 100, "val": None}]}, "6802_00927900": {"9": [{"low": 0, "high": 500, "val": None}]}, "6802_00927C00": {"9": [{"low": 0, "high": 100, "val": None}]}, "6802_4092A400": { "9": [ {"low": 0, "high": 100000, "val": 20000}, {"low": 0, "high": 100000, "val": 50000}, {"low": 0, "high": 100000, "val": 100000}, {"low": 0, "high": 100000, "val": 100000}, {"low": 0, "high": 100000, "val": 100000}, {"low": 0, "high": 100000, "val": 100000}, {"low": 0, "high": 100000, "val": 100000}, {"low": 0, "high": 100000, "val": 100000}, ] }, "6802_4092A500": { "9": [ {"low": -1000, "high": 1000, "val": -900}, {"low": -1000, "high": 1000, "val": -1000}, {"low": -1000, "high": 1000, "val": -900}, {"low": -1000, "high": 1000, "val": -900}, {"low": -1000, "high": 1000, "val": -900}, {"low": -1000, "high": 1000, "val": -900}, {"low": -1000, "high": 1000, "val": -900}, {"low": -1000, "high": 1000, "val": -900}, ] }, "6802_0092E100": {"9": [{"low": 1, "high": 8, "val": 8}]}, "6802_0892E500": { "9": [{"validVals": [3053, 3547], "val": [{"tag": 3547}]}] }, "6802_0892E600": { "9": [{"validVals": [2506, 2507], "val": [{"tag": 2506}]}] }, "6802_0092E700": {"9": [{"low": 5, "high": 32400, "val": 600}]}, "6802_0092E800": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6802_0892E900": { "9": [{"validVals": [2506, 2507], "val": [{"tag": 2506}]}] }, "6802_0092EA00": {"9": [{"low": 5, "high": 32400, "val": 600}]}, "6802_4092EB00": {"9": [{"low": -6000, "high": 6000, "val": 0}]}, "6802_0892EC00": { "9": [{"validVals": [2506, 2507], "val": [{"tag": 2506}]}] }, "6802_0092ED00": {"9": [{"low": 5, "high": 32400, "val": 600}]}, "6802_4092EE00": { "9": [{"low": 8000, "high": 10000, "val": 10000}] }, "6802_0892EF00": { "9": [{"validVals": [1041, 1042], "val": [{"tag": 1042}]}] }, "6802_00953000": { "9": [ {"low": 800, "high": 1200, "val": 800}, {"low": 800, "high": 1200, "val": 950}, {"low": 800, "high": 1200, "val": 1050}, {"low": 800, "high": 1200, "val": 1150}, {"low": 800, "high": 1200, "val": 1150}, {"low": 800, "high": 1200, "val": 1050}, {"low": 800, "high": 1200, "val": 950}, {"low": 800, "high": 1200, "val": 800}, ] }, "6802_40953100": { "9": [ {"low": -66000, "high": 66000, "val": 25000}, {"low": -66000, "high": 66000, "val": 0}, {"low": -66000, "high": 66000, "val": 0}, {"low": -66000, "high": 66000, "val": -25000}, {"low": -66000, "high": 66000, "val": -25000}, {"low": -66000, "high": 66000, "val": 0}, {"low": -66000, "high": 66000, "val": 0}, {"low": -66000, "high": 66000, "val": 25000}, ] }, "6802_08953A00": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6802_00953B00": {"9": [{"low": 5, "high": 10000, "val": 42}]}, "6802_00953C00": {"9": [{"low": 5, "high": 10000, "val": 42}]}, "6802_00956700": { "9": [{"low": 8000, "high": 10000, "val": 10000}] }, "6802_08956800": { "9": [{"validVals": [1041, 1042], "val": [{"tag": 1042}]}] }, "6802_0095A500": {"9": [{"low": 0, "high": 8, "val": 8}]}, "6802_0095C300": { "9": [{"low": 100, "high": 1000000, "val": 2000}] }, "6802_0095C400": { "9": [{"low": 100, "high": 1000000, "val": 2000}] }, "6802_0095DA00": { "9": [{"low": 100, "high": 1000000, "val": 1000}] }, "6802_0095DB00": { "9": [{"low": 100, "high": 1000000, "val": None}] }, "6802_0895DE00": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6802_0095E200": {"9": [{"low": 10, "high": 100000, "val": 1000}]}, "6802_0095E300": {"9": [{"low": 10, "high": 100000, "val": 1000}]}, "6802_0095E600": {"9": [{"low": 0, "high": 8, "val": 8}]}, "6802_0095E700": { "9": [ {"low": 800, "high": 1400, "val": 800}, {"low": 800, "high": 1400, "val": 850}, {"low": 800, "high": 1400, "val": 900}, {"low": 800, "high": 1400, "val": 947}, {"low": 800, "high": 1400, "val": 1000}, {"low": 800, "high": 1400, "val": 1000}, {"low": 800, "high": 1400, "val": 1108}, {"low": 800, "high": 1400, "val": 1152}, ] }, "6802_4095E800": { "9": [ {"low": 0, "high": 100000, "val": 100000}, {"low": 0, "high": 100000, "val": 75000}, {"low": 0, "high": 100000, "val": 50000}, {"low": 0, "high": 100000, "val": 25000}, {"low": 0, "high": 100000, "val": 100000}, {"low": 0, "high": 100000, "val": 75000}, {"low": 0, "high": 100000, "val": 50000}, {"low": 0, "high": 100000, "val": 25000}, ] }, "6802_0895FD00": { "9": [{"validVals": [4405, 4443], "val": [{"tag": 4405}]}] }, "6802_08A33B00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6802_00B12100": { "9": [{"low": 0, "high": 4294967294, "val": 3012373411}] }, "6802_00B12200": { "9": [{"low": 0, "high": 4294967294, "val": 451}] }, "6802_00B12900": { "9": [{"low": 0, "high": 4294967294, "val": 3011973023}] }, "6802_00B12A00": { "9": [{"low": 0, "high": 4294967294, "val": 440}] }, "6802_00B18900": {"9": [{"low": 0, "high": 0, "val": 206170139}]}, "6802_00B22400": {"9": [{"low": 0, "high": None, "val": 0}]}, "6802_00B22500": {"9": [{"low": 0, "high": None, "val": 0}]}, } } }, 69, id="STP 6.0 SE, with energy meter, no optimizers", ), pytest.param( { "result": { "01B8-xxxxx099": { "6100_40263F00": {"9": [{"val": -10}]}, "6100_40265F00": {"9": [{"val": 0}]}, "6100_00295A00": {"9": [{"val": 0}]}, "6100_00411E00": {"9": [{"val": 10000}]}, "6100_00411F00": {"9": [{"val": 0}]}, "6100_00412000": {"9": [{"val": 0}]}, "6100_00416600": {"9": [{"val": None}]}, "6100_00418000": {"9": [{"val": 0}]}, "6100_40463600": {"9": [{"val": 0}]}, "6100_40463700": {"9": [{"val": 2812}]}, "6100_40464000": {"9": [{"val": -9}]}, "6100_40464100": {"9": [{"val": -7}]}, "6100_40464200": {"9": [{"val": -4}]}, "6100_00464800": {"9": [{"val": 23430}]}, "6100_00464900": {"9": [{"val": 23250}]}, "6100_00464A00": {"9": [{"val": 23430}]}, "6100_00464B00": {"9": [{"val": 40580}]}, "6100_00464C00": {"9": [{"val": 40260}]}, "6100_00464D00": {"9": [{"val": 40580}]}, "6100_00464E00": {"9": [{"val": 99}]}, "6100_40465300": {"9": [{"val": 400}]}, "6100_40465400": {"9": [{"val": 400}]}, "6100_40465500": {"9": [{"val": 400}]}, "6100_00465700": {"9": [{"val": 4997}]}, "6100_40466500": {"9": [{"val": 3936}]}, "6100_40466600": {"9": [{"val": 5560}]}, "6100_40466B00": {"9": [{"val": 4043}]}, "6100_40466C00": {"9": [{"val": 791}]}, "6100_40466D00": {"9": [{"val": 1204}]}, "6100_40466E00": {"9": [{"val": 844}]}, "6100_00467700": {"9": []}, "6100_00467800": {"9": []}, "6100_00467900": {"9": []}, "6100_00468100": {"9": [{"val": 4996}]}, "6100_40468F00": {"9": [{"val": 2817}]}, "6100_40469900": {"9": [{"val": None}]}, "6100_0046C200": {"9": [{"val": 0}]}, "6100_0046E500": {"9": [{"val": 23292}]}, "6100_0046E600": {"9": [{"val": 23223}]}, "6100_0046E700": {"9": [{"val": 23322}]}, "6100_0046E800": {"9": [{"val": 0}]}, "6100_0046E900": {"9": [{"val": 0}]}, "6100_0046EA00": {"9": [{"val": 0}]}, "6100_0046EB00": {"9": [{"val": 791}]}, "6100_0046EC00": {"9": [{"val": 1181}]}, "6100_0046ED00": {"9": [{"val": 839}]}, "6100_4046EE00": {"9": [{"val": 17}]}, "6100_4046EF00": {"9": [{"val": 231}]}, "6100_4046F000": {"9": [{"val": 83}]}, "6100_4046F100": {"9": [{"val": 166}]}, "6100_40495B00": {"9": [{"val": 0}]}, "6100_00495C00": {"9": [{"val": 0}]}, "6100_40495D00": {"9": [{"val": 0}]}, "6100_00496900": {"9": [{"val": 0}]}, "6100_00496A00": {"9": [{"val": 0}]}, "6100_004AB600": {"9": [{"val": 0}]}, "6100_40574600": {"9": [{"val": 0}]}, "6100_40574700": {"9": [{"val": 0}]}, "6100_40574800": {"9": [{"val": 0}]}, "6100_00664F00": {"9": [{"val": 1200}]}, "6100_00665900": {"9": [{"val": 0}]}, "6100_40665B00": {"9": [{"val": -977}]}, "6100_40666000": {"9": [{"val": -2}]}, "6100_40666100": {"9": [{"val": -2}]}, "6100_40666200": {"9": [{"val": -2}]}, "6100_40666700": {"9": [{"val": 10}]}, "6100_40666800": {"9": [{"val": 6}]}, "6100_40666900": {"9": [{"val": 6}]}, "6100_40666A00": {"9": [{"val": 6}]}, "6100_00696E00": {"9": [{"val": 0}]}, "6180_08214800": {"9": [{"val": [{"tag": 307}]}]}, "6180_08412500": {"9": [{"val": [{"tag": 311}]}]}, "6180_08412800": {"9": [{"val": [{"tag": 569}]}]}, "6180_08412900": {"9": [{"val": [{"tag": 302}]}]}, "6180_08412B00": {"9": [{"val": [{"tag": 235}]}]}, "6180_08414900": {"9": [{"val": [{"tag": 886}]}]}, "6180_08414A00": {"9": [{"val": [{"tag": 887}]}]}, "6180_08414B00": {"9": [{"val": [{"tag": 885}]}]}, "6180_08414C00": {"9": [{"val": [{"tag": 307}]}]}, "6180_08414D00": {"9": [{"val": [{"tag": 303}]}]}, "6180_08414E00": {"9": [{"val": [{"tag": 303}]}]}, "6180_08416400": {"9": [{"val": [{"tag": 51}]}]}, "6180_08416900": {"9": [{"val": [{"tag": 16777213}]}]}, "6180_0846A600": {"9": [{"val": [{"tag": 1780}]}]}, "6180_08495E00": {"9": [{"val": [{"tag": 303}]}]}, "6180_084A2C00": {"9": [{"val": [{"tag": 302}]}]}, "6180_084A2E00": {"9": [{"val": [{"tag": 302}]}]}, "6180_084A6400": {"9": [{"val": [{"tag": 303}]}]}, "6180_084A9600": {"9": [{"val": [{"tag": 307}]}]}, "6180_084A9700": {"9": [{"val": [{"tag": 1721}]}]}, "6180_084A9800": {"9": [{"val": [{"tag": 1725}]}]}, "6180_084A9900": {"9": [{"val": [{"tag": 302}]}]}, "6180_104A9A00": {"9": [{"val": "192.168.2.107"}]}, "6180_104A9B00": {"9": [{"val": "255.255.255.0"}]}, "6180_104A9C00": {"9": [{"val": "192.168.2.1"}]}, "6180_104A9D00": {"9": [{"val": "192.168.2.1"}]}, "6180_084AAA00": {"9": [{"val": [{"tag": 307}]}]}, "6180_104AB700": {"9": [{"val": ""}]}, "6180_104AB800": {"9": [{"val": ""}]}, "6180_104AB900": {"9": [{"val": ""}]}, "6180_104ABA00": {"9": [{"val": ""}]}, "6180_084ABB00": {"9": [{"val": [{"tag": 3366}]}]}, "6180_084ABC00": {"9": [{"val": [{"tag": 303}]}]}, "6180_084ABD00": {"9": [{"val": [{"tag": 3326}]}]}, "6180_084B1E00": {"9": [{"val": [{"tag": 303}]}]}, "6180_08521E00": {"9": [{"val": [{"tag": 2246}]}]}, "6180_08671E00": {"9": [{"val": []}]}, "6380_40251E00": {"1": [{"val": 5}, {"val": 58}]}, "6380_40451F00": {"1": [{"val": 31180}, {"val": 59180}]}, "6380_40452100": {"1": [{"val": 16}, {"val": 98}]}, "6400_00260100": {"9": [{"val": 3662679}]}, "6400_00262200": {"9": [{"val": 24847}]}, "6400_00462400": {"9": [{"val": 2134875}]}, "6400_00462500": {"9": [{"val": 550848}]}, "6400_00462E00": {"9": []}, "6400_00469100": {"9": [{"val": 2134875}]}, "6400_00469200": {"9": [{"val": 550848}]}, "6400_0046C300": {"9": [{"val": 3662347}]}, "6400_00496700": {"9": [{"val": 0}]}, "6400_00496800": {"9": [{"val": 0}]}, "6400_00496D00": {"9": [{"val": None}]}, "6400_00497E00": {"9": [{"val": None}]}, "6400_00618C00": {"9": [{"val": 84}]}, } } }, { "result": { "01B8-xxxxx099": { "6800_000EA900": {"188": []}, "6800_08811F00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_10821E00": {"9": [{"val": "SN: 3012000000"}]}, "6800_08821F00": { "9": [{"validVals": [8009], "val": [{"tag": 8009}]}] }, "6800_08822000": { "9": [ { "validVals": [19048, 19049, 19050, 19051], "val": [{"tag": 19051}], } ] }, "6800_08822100": { "9": [ { "validVals": [ 601, 605, 606, 607, 609, 610, 611, 618, 623, 632, 633, 634, 635, 636, 637, 639, 640, 641, 642, 647, 648, ], "val": [ {"tag": 601}, {"tag": 605}, {"tag": 606}, {"tag": 609}, {"tag": 610}, {"tag": 611}, {"tag": 618}, {"tag": 623}, {"tag": 632}, {"tag": 633}, {"tag": 634}, {"tag": 635}, {"tag": 636}, {"tag": 637}, {"tag": 639}, {"tag": 640}, {"tag": 641}, {"tag": 642}, {"tag": 647}, {"tag": 648}, ], } ] }, "6800_00822500": { "9": [{"low": 0, "high": 4294967000, "val": 43500}] }, "6800_08822800": { "9": [{"validVals": [302, 1129, 1130], "val": [{"tag": 302}]}] }, "6800_08822B00": { "9": [{"validVals": [461], "val": [{"tag": 461}]}] }, "6800_00823400": { "9": [{"low": 0, "high": 4294967294, "val": 50398468}] }, "6800_08831E00": { "9": [{"validVals": [381, 1467], "val": [{"tag": 1467}]}] }, "6800_00832A00": { "9": [{"low": 10000, "high": 10000, "val": 10000}] }, "6800_40833700": {"9": [{"low": 0, "high": 100, "val": 0}]}, "6800_08836E00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08836F00": {"9": [{"validVals": [1146], "val": []}]}, "6800_08837800": { "9": [ { "validVals": [ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 796, 797, 798, 799, ], "val": [{"tag": 777}], } ] }, "6800_08838B00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08838C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_08838D00": { "9": [ { "validVals": [ 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9522, 9523, 9524, 9525, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9549, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, ], "val": [{"tag": 9499}], } ] }, "6800_10838F00": {"9": [{"val": "ntp.sunny-portal.com"}]}, "6800_08839500": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_08839700": {"9": [{"validVals": [1146], "val": []}]}, "6800_0883AA00": { "9": [ { "validVals": [303, 1341, 1342, 5304], "val": [{"tag": 303}], } ] }, "6800_0883AE00": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6800_10841E00": {"0": [{"val": ""}]}, "6800_00852A00": {"9": [{"low": 0, "high": 50000, "val": 10000}]}, "6800_08855C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_0086A300": {"9": [{"low": 0, "high": 4000000, "val": 0}]}, "6800_08871E00": { "9": [ { "validVals": [ 27, 438, 7539, 7550, 7584, 7590, 7592, 7594, 7595, 7602, 7603, 7615, 7637, 16777213, ], "val": [{"tag": 7584}], } ] }, "6800_00893700": {"9": [{"low": 0, "high": None, "val": 0}]}, "6800_08893B00": { "9": [{"validVals": [1785], "val": [{"tag": 1785}]}] }, "6800_08895A00": { "9": [{"validVals": [5277, 5278], "val": [{"tag": 5277}]}] }, "6800_088A2900": { "9": [ { "validVals": [302, 9327, 9375, 9376, 9437, 19043], "val": [{"tag": 9327}], } ] }, "6800_008A2A00": {"9": [{"low": 5, "high": 1500, "val": 100}]}, "6800_108A2B00": {"9": [{"val": ""}]}, "6800_108A3200": {"9": [{"val": ""}]}, "6800_088A3300": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_088A4C00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_088A4D00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_088A5100": {"9": [{"validVals": [1146], "val": []}]}, "6800_088A5200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_108A5300": {"9": [{"val": "192.168.0.173"}]}, "6800_108A5400": {"9": [{"val": "255.255.255.0"}]}, "6800_108A5500": {"9": [{"val": "192.168.0.1"}]}, "6800_108A5600": {"9": [{"val": "192.168.0.1"}]}, "6800_088A5800": { "9": [{"validVals": [1438, 3326, 3327], "val": [{"tag": 1438}]}] }, "6800_108A5900": {"9": [{"val": ""}]}, "6800_108A5A00": {"9": [{"val": ""}]}, "6800_088A5B00": { "9": [{"validVals": [3323, 3324], "val": [{"tag": 3324}]}] }, "6800_088A7700": { "9": [{"validVals": [4330, 4331, 4332], "val": [{"tag": 4330}]}] }, "6800_088A8A00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_008AA200": { "9": [{"low": 0, "high": None, "val": 3013357833}] }, "6800_008AA300": { "9": [{"low": 0, "high": None, "val": 3013357833}] }, "6800_108AA400": {"9": [{"val": ""}]}, "6800_088AA500": {"9": [{"validVals": [1146], "val": []}]}, "6800_088B1E00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B1F00": {"9": [{"low": 1, "high": 65535, "val": 80}]}, "6800_108B2000": {"9": [{"val": "255.255.255.255"}]}, "6800_108B2100": {"9": [{"val": ""}]}, "6800_108B2200": {"9": [{"val": "password"}]}, "6800_008B2E00": {"9": [{"low": 0, "high": None, "val": 17105924}]}, "6800_088B5200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_088B7000": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7100": {"9": [{"low": 1, "high": 65535, "val": 502}]}, "6800_088B7200": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1130}]}] }, "6800_008B7300": {"9": [{"low": 1, "high": 65535, "val": 502}]}, "6800_008B7400": {"9": [{"low": 3, "high": 123, "val": 3}]}, "6800_088C2300": { "9": [{"validVals": [303, 308], "val": [{"tag": 303}]}] }, "6800_088E7B00": { "9": [ { "validVals": [2109, 3174, 3237, 3312, 4994, 5143], "val": [ {"tag": 2109}, {"tag": 3174}, {"tag": 3312}, {"tag": 4994}, ], } ] }, "6800_00912100": {"9": [{"low": 0, "high": None, "val": 16783877}]}, "6800_00922500": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_00922600": {"9": [{"low": 0, "high": 10000, "val": 10000}]}, "6800_0892AE00": { "9": [{"validVals": [303, 582], "val": [{"tag": 303}]}] }, "6800_0892D600": { "9": [{"validVals": [303, 2137, 2138], "val": [{"tag": 303}]}] }, "6800_0092D700": {"9": [{"low": 0, "high": 500000, "val": 10000}]}, "6800_0092D800": {"9": [{"low": 0, "high": 100, "val": 100}]}, "6800_00A21E00": { "9": [{"low": 0, "high": 4294967294, "val": 3012395161}] }, "6800_10A22F00": {"9": [{"val": "DE:DE:DE:DE:DE:DE"}]}, "6800_10A23000": {"9": [{"val": "DE:DE:DE:DE:DE:DE"}]}, "6800_08A33A00": { "9": [{"validVals": [1129, 1130], "val": [{"tag": 1129}]}] }, "6800_40A63A00": { "9": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_40A63B00": { "9": [{"low": -4000000, "high": 4000000, "val": 0}] }, "6800_10AA6100": {"9": [{"val": "192.168.0.170"}]}, "6800_10AA6200": {"9": [{"val": "255.255.255.0"}]}, "6800_10AA6300": {"9": [{"val": "192.168.0.1"}]}, "6800_10AA6400": {"9": [{"val": "192.168.0.1"}]}, } } }, 67, id="STP 10.0 SE, with energy meter, no optimizers", ), pytest.param( { "result": { "012F-7309D11A": { "6100_40263F00": {"val": 46}, "6100_00411E00": {"val": 1500}, "6100_00411F00": {"val": 0}, "6100_00412000": {"val": 0}, "6100_00416600": {"val": None}, "6100_00418000": {"val": None}, "6100_40463600": {"val": None}, "6100_40463700": {"val": None}, "6100_40464000": {"val": 46}, "6100_40464100": {"val": None}, "6100_40464200": {"val": None}, "6100_00464800": {"val": 22935}, "6100_00464900": {"val": None}, "6100_00464A00": {"val": None}, "6100_00464B00": {"val": None}, "6100_00464C00": {"val": None}, "6100_00464D00": {"val": None}, "6100_40465300": {"val": 202}, "6100_40465400": {"val": None}, "6100_40465500": {"val": None}, "6100_00465700": {"val": 4999}, "6100_0046C200": {"val": 46}, "6100_004AB600": {"val": 81}, "6100_00543100": {"val": None}, "6100_00543200": {"val": None}, "6100_00543300": {"val": None}, "6100_00543400": {"val": None}, "6100_00543600": {"val": None}, "6100_00543800": {"val": None}, "6100_00543E00": {"val": None}, "6100_00665900": {"val": 988}, "6100_40665F00": {"val": -7}, "6100_40666000": {"val": -7}, "6100_40666100": {"val": None}, "6100_40666200": {"val": None}, "6100_40666700": {"val": 46}, "6100_40666800": {"val": 46}, "6100_40666900": {"val": None}, "6100_40666A00": {"val": None}, "6102_40254E00": {"val": 3}, "6102_00254F00": {"val": 3000000}, "6180_08214800": {"val": [{"tag": 307}]}, "6180_08412900": {"val": [{"tag": 302}]}, "6180_08413200": {"val": [{"tag": 308}]}, "6180_08413300": {"val": [{"tag": 303}]}, "6180_08414900": {"val": [{"tag": 302}]}, "6180_08414A00": {"val": [{"tag": 887}]}, "6180_08414B00": {"val": [{"tag": 302}]}, "6180_08416400": {"val": [{"tag": 51}]}, "6180_08416500": {"val": [{"tag": 884}]}, "6180_0846A600": {"val": []}, "6180_084A9600": {"val": [{"tag": 1725}]}, "6180_084A9700": {"val": [{"tag": 302}]}, "6180_104A9A00": {"val": ""}, "6180_104A9B00": {"val": ""}, "6180_104A9C00": {"val": ""}, "6180_104A9D00": {"val": ""}, "6180_084AAA00": {"val": [{"tag": 1725}]}, "6180_104AB700": {"val": "192.168.1.125"}, "6180_104AB800": {"val": "255.255.255.0"}, "6180_104AB900": {"val": "192.168.1.1"}, "6180_104ABA00": {"val": "192.168.1.11"}, "6180_084ABB00": {"val": [{"tag": 3369}]}, "6180_084ABC00": {"val": [{"tag": 307}]}, "6180_084B1E00": {"val": [{"tag": 307}]}, "6180_00522700": {"val": None, "min": 0, "max": 0}, "6180_40522800": {"val": None, "min": 0, "max": 0}, "6180_00522900": {"val": None, "min": 0, "max": 0}, "6180_08522A00": {"val": [{"tag": 16777213}]}, "6180_08522F00": {"val": [{"tag": 308}]}, "6180_08671E00": {"val": [{"tag": 7517}]}, "6182_084A9E00": {"val": [{"tag": 302}]}, "6380_40251E00": [{"str": 1, "val": 57}], "6380_40451F00": [{"str": 1, "val": 11356}], "6380_40452100": [{"str": 1, "val": 502}], "6400_00260100": {"val": 5736656}, "6400_00262200": {"val": 37}, "6400_00462400": {"val": None}, "6400_00462500": {"val": None}, "6400_00462E00": {"val": 71636106}, "6400_00462F00": {"val": 67130459}, "6400_0046C300": {"val": 5736656}, "6400_00543A00": {"val": 0}, "6400_00543B00": {"val": 0}, "6400_00543C00": {"val": 0}, "6400_00543D00": {"val": 0}, "6400_00618C00": {"val": 817}, "6402_00618D00": {"val": 923}, "6402_00666F00": {"val": 2426}, } } }, { "result": { "012F-7309D11A": { "6322_00851E00": [ {"str": 1, "val": 6500, "min": 5000, "max": 50000} ], "6322_00851F00": [{"str": 1, "val": 1, "min": 1, "max": 4}], "6322_00854D00": [ {"str": 1, "val": 50000, "min": 5000, "max": 50000} ], "6800_08811F00": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_10821E00": {"val": "SN: 1930023194"}, "6800_08821F00": {"val": [{"tag": 8001}], "validVals": [8001]}, "6800_08822000": { "val": [{"tag": 9301}], "validVals": [9301, 9303, 9302], }, "6800_08822100": { "val": [ {"tag": 601}, {"tag": 603}, {"tag": 605}, {"tag": 606}, {"tag": 610}, {"tag": 611}, {"tag": 618}, {"tag": 620}, {"tag": 632}, {"tag": 633}, {"tag": 634}, {"tag": 635}, {"tag": 637}, {"tag": 640}, {"tag": 641}, {"tag": 647}, {"tag": 648}, ], "validVals": [ 601, 603, 605, 606, 607, 610, 611, 618, 620, 632, 633, 634, 635, 636, 637, 640, 641, 647, 648, ], }, "6800_00822500": {"val": 7000, "min": 0, "max": 7000}, "6800_00823400": {"val": 33751296, "min": 0, "max": 4294967294}, "6800_08831E00": { "val": [{"tag": 295}], "validVals": [295, 381, 443], }, "6800_00832A00": {"val": 1500, "min": 1500, "max": 1500}, "6800_08834300": {"val": [{"tag": 303}], "validVals": [303, 308]}, "6800_08836E00": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_08837800": { "val": [{"tag": 778}], "validVals": [ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 798, 801, ], }, "6800_08838B00": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_08838C00": { "val": [{"tag": 1130}], "validVals": [1129, 1130], }, "6800_08838D00": { "val": [{"tag": 9560}], "validVals": [ 302, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9515, 9516, 9517, 9518, 9519, 9520, 9522, 9523, 9524, 9525, 9528, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9586, 9587, 9588, 9589, 9591, 9592, 9593, 9594, 9595, 9596, ], }, "6800_10838F00": {"val": "ntp.sunny-portal.com"}, "6800_10841E00": {"val": ""}, "6800_00852A00": {"val": 1500, "min": 0, "max": 50000}, "6800_08855C00": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_08871E00": { "val": [{"tag": 7517}], "validVals": [ 27, 42, 438, 7510, 7517, 7523, 7525, 7527, 7532, 7533, 7536, 16777213, ], }, "6800_088A4C00": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_088A4D00": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_108A4E00": {"val": "TIM-69890546"}, "6800_108A4F00": {"val": ""}, "6800_088A5000": { "val": [{"tag": 3397}], "validVals": [1831, 3322, 3394, 3395, 3396, 3397], }, "6800_088A5100": {"val": [], "validVals": [3321]}, "6800_088A5200": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_108A5300": {"val": "192.168.1.30"}, "6800_108A5400": {"val": "255.255.255.0"}, "6800_108A5500": {"val": "192.168.1.1"}, "6800_108A5600": {"val": "192.168.1.1"}, "6800_008A5700": {"val": 1, "min": 1, "max": 4}, "6800_088A8A00": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_008AA200": {"val": 0, "min": 0, "max": 4294967294}, "6800_008AA300": [ {"str": 1, "val": None, "min": 0, "max": 4294967294}, {"str": 2, "val": None, "min": 0, "max": 4294967294}, {"str": 3, "val": None, "min": 0, "max": 4294967294}, ], "6800_108AA400": [ {"str": 1, "val": "SMA1930022724"}, {"str": 2, "val": "TIM-69890546"}, ], "6800_088AA500": {"val": [], "validVals": [11621]}, "6800_088B5200": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6800_088B7000": { "val": [{"tag": 1130}], "validVals": [1129, 1130], }, "6800_008B7100": {"val": 502, "min": 1, "max": 65535}, "6800_088B7200": { "val": [{"tag": 1130}], "validVals": [1129, 1130], }, "6800_008B7300": {"val": 502, "min": 1, "max": 65535}, "6800_088E7B00": { "val": [{"tag": 2109}, {"tag": 3174}, {"tag": 3237}], "validVals": [2109, 3174, 3237], }, "6800_00912100": {"val": 33751300, "min": 0, "max": 4294967294}, "6800_00922500": {"val": 1500, "min": 0, "max": 2550}, "6800_00922600": {"val": 10000, "min": 0, "max": 10000}, "6800_0892D600": { "val": [{"tag": 303}], "validVals": [303, 2137, 2138], }, "6800_0092D700": {"val": 1500, "min": 0, "max": 50000}, "6800_0092D800": {"val": 100, "min": 0, "max": 100}, "6800_00A21E00": {"val": 1930023194, "min": 0, "max": 4294967294}, "6800_10A22F00": {"val": "00:40:AD:96:B8:10"}, "6800_10A23000": {"val": "00:AE:FA:06:F0:5E"}, "6800_00A63500": {"val": 0, "min": 0, "max": 4000000}, "6800_40A63A00": {"val": 0, "min": -4000000, "max": 4000000}, "6800_40A63B00": {"val": 0, "min": -4000000, "max": 4000000}, "6800_10AA6100": {"val": "192.168.0.170"}, "6800_10AA6200": {"val": "255.255.255.0"}, "6800_10AA6300": {"val": "192.168.0.170"}, "6800_10AA6400": {"val": "192.168.0.170"}, "6802_08822200": {"val": [{"tag": 636}], "validVals": [636]}, "6802_00823300": {"val": 16909570, "min": 0, "max": 4294967294}, "6802_00832B00": {"val": 1500, "min": 0, "max": 1550}, "6802_00832E00": {"val": 1500, "min": 0, "max": 1550}, "6802_00832F00": {"val": 1500, "min": 1500, "max": 1500}, "6802_00833300": {"val": 2, "min": 1, "max": 3600}, "6802_08833900": {"val": [{"tag": 7517}], "validVals": [302, 7517]}, "6802_08833A00": {"val": [], "validVals": [7517]}, "6802_08834D00": { "val": [], "validVals": [237, 353, 355, 356, 409, 411, 418, 568], }, "6802_08837300": {"val": [], "validVals": [72]}, "6802_00839C00": {"val": 16843780, "min": 0, "max": 4294967294}, "6802_00839E00": {"val": 16850948, "min": 0, "max": 4294967294}, "6802_00839F00": {"val": 16777476, "min": 0, "max": 4294967294}, "6802_10841F00": {"val": ""}, "6802_00855D00": {"val": 360, "min": 360, "max": 1800}, "6802_08861E00": { "val": [{"tag": 325}], "validVals": [325, 327, 329], }, "6802_00864000": {"val": 100, "min": 0, "max": 500}, "6802_00864100": {"val": 200, "min": 0, "max": 500}, "6802_00865F00": {"val": 230, "min": 80, "max": 245}, "6802_40866000": {"val": 0, "min": -20, "max": 20}, "6802_08871F00": { "val": [], "validVals": [ 42, 438, 7510, 7517, 7523, 7525, 7527, 7532, 7533, 7536, ], }, "6802_08872000": { "val": [{"tag": 1129}], "validVals": [1129, 1130], }, "6802_00872A00": {"val": 20000, "min": 20000, "max": 3000000}, "6802_08872B00": {"val": [{"tag": 308}], "validVals": [303, 308]}, "6802_00873500": {"val": 0, "min": 0, "max": 400000}, "6802_00873600": {"val": 300000, "min": 0, "max": 1600000}, "6802_00873700": {"val": 300000, "min": 0, "max": 1600000}, "6802_00873800": {"val": 30000, "min": 0, "max": 1600000}, "6802_00874D00": {"val": 230, "min": 100, "max": 280}, "6802_00874E00": {"val": 40000, "min": 30000, "max": 42000}, "6802_00874F00": {"val": 312, "min": 100, "max": 5000}, "6802_00875000": {"val": 28000, "min": 10000, "max": 30000}, "6802_00875100": {"val": 10000, "min": 0, "max": 60000}, "6802_00875200": {"val": 26450, "min": 10000, "max": 28000}, "6802_00875300": {"val": 200, "min": 0, "max": 60000}, "6802_00875400": {"val": 19550, "min": 4500, "max": 23000}, "6802_00875500": {"val": 400, "min": 0, "max": 10000}, "6802_00875600": {"val": 9200, "min": 4500, "max": 23000}, "6802_00875700": {"val": 200, "min": 0, "max": 10000}, "6802_00877500": {"val": 2000, "min": 40, "max": 10000}, "6802_00877600": {"val": 25300, "min": 10000, "max": 28000}, "6802_00877800": {"val": 19550, "min": 4500, "max": 24000}, "6802_00877900": {"val": 25300, "min": 10000, "max": 28000}, "6802_00877F00": {"val": 5000, "min": 4400, "max": 6500}, "6802_00878200": {"val": 6500, "min": 5000, "max": 6500}, "6802_00878300": {"val": 10000, "min": 0, "max": 10000}, "6802_00878400": {"val": 5150, "min": 5000, "max": 6500}, "6802_00878500": {"val": 100, "min": 0, "max": 90000}, "6802_00878600": {"val": 4750, "min": 4400, "max": 6000}, "6802_00878700": {"val": 100, "min": 0, "max": 300000}, "6802_00878800": {"val": 4400, "min": 4400, "max": 6000}, "6802_00878900": {"val": 300000, "min": 0, "max": 300000}, "6802_00878C00": {"val": 1000, "min": 0, "max": 1000}, "6802_00878D00": {"val": 10000, "min": 0, "max": 10000}, "6802_00878E00": {"val": 4990, "min": 4400, "max": 6000}, "6802_00878F00": {"val": 5010, "min": 5000, "max": 6500}, "6802_00879000": {"val": 5050, "min": 5000, "max": 6500}, "6802_00879100": {"val": 100, "min": 40, "max": 90000}, "6802_00879200": {"val": 4950, "min": 4400, "max": 6000}, "6802_00879300": {"val": 100, "min": 40, "max": 300000}, "6802_40879400": {"val": 35, "min": 18, "max": 2000}, "6802_00879500": {"val": 200, "min": 0, "max": 10000}, "6802_08879900": {"val": [{"tag": 303}], "validVals": [303, 308]}, "6802_00879A00": {"val": 10000, "min": 0, "max": 10000}, "6802_008B8A00": {"val": 16384, "min": 0, "max": 16384}, "6802_108B8B00": {"val": "01:0C:CD:01:00:00"}, "6802_00912200": {"val": 2, "min": 0, "max": 4294967294}, "6802_00912300": {"val": 0, "min": 0, "max": 255}, "6802_00912900": {"val": 33751300, "min": 0, "max": 4294967294}, "6802_00912A00": {"val": 257, "min": 0, "max": 4294967294}, "6802_00912B00": {"val": 0, "min": 0, "max": 255}, "6802_00919900": {"val": 16777220, "min": 0, "max": 4294967294}, "6802_00921E00": {"val": 20, "min": 1, "max": 1000}, "6802_00922000": {"val": 20, "min": 1, "max": 10000}, "6802_08922100": {"val": [{"tag": 308}], "validVals": [303, 308]}, "6802_00922200": {"val": 20, "min": 1, "max": 50}, "6802_00922300": {"val": 20, "min": 1, "max": 10000}, "6802_08922900": { "val": [{"tag": 1074}], "validVals": [303, 1069, 1070, 1072, 1074, 1075, 1076, 2270], }, "6802_40922B00": {"val": 0, "min": -500, "max": 500}, "6802_40923100": {"val": 100, "min": 80, "max": 100}, "6802_08923200": { "val": [{"tag": 1042}], "validVals": [1041, 1042], }, "6802_08924000": { "val": [{"tag": 1130}], "validVals": [1129, 1130], }, "6802_08924100": { "val": [{"tag": 303}], "validVals": [303, 1077, 1078, 1079], }, "6802_00924200": {"val": 1500, "min": 0, "max": 1550}, "6802_00924300": {"val": 100, "min": 0, "max": 100}, "6802_08925900": { "val": [{"tag": 1132}], "validVals": [303, 1132, 3175], }, "6802_00925A00": {"val": 30, "min": 0, "max": 500}, "6802_00925B00": {"val": 83, "min": 10, "max": 130}, "6802_00925C00": {"val": 10, "min": 0, "max": 500}, "6802_08925D00": {"val": [{"tag": 308}], "validVals": [303, 308]}, "6802_00925E00": {"val": 5, "min": 1, "max": 10000}, "6802_00925F00": {"val": 300, "min": 0, "max": 1600}, "6802_40926000": {"val": -10, "min": -500, "max": 0}, "6802_40926100": {"val": 10, "min": 0, "max": 500}, "6802_00926200": {"val": 0, "min": 0, "max": 60000}, "6802_00926300": {"val": 100, "min": 80, "max": 120}, "6802_00926400": {"val": 0, "min": 0, "max": 500}, "6802_00926500": {"val": 0, "min": 0, "max": 200}, "6802_00926600": {"val": 0, "min": 0, "max": 100}, "6802_00926700": {"val": 10, "min": 2, "max": 60}, "6802_08926800": { "val": [{"tag": 1330}], "validVals": [1330, 1331], }, "6802_00926D00": {"val": 50, "min": 0, "max": 100}, "6802_00926E00": {"val": 100, "min": 80, "max": 100}, "6802_08926F00": { "val": [{"tag": 1041}], "validVals": [1041, 1042], }, "6802_00927000": {"val": 100, "min": 0, "max": 100}, "6802_00927100": {"val": 95, "min": 80, "max": 100}, "6802_08927200": { "val": [{"tag": 1042}], "validVals": [1041, 1042], }, "6802_00927300": {"val": 1050, "min": 0, "max": 1200}, "6802_00927400": {"val": 1000, "min": 0, "max": 1200}, "6802_00927800": {"val": 70, "min": 0, "max": 100}, "6802_00927C00": {"val": 5, "min": 0, "max": 100}, "6802_08927F00": { "val": [{"tag": 1265}], "validVals": [1264, 1265], }, "6802_00928700": {"val": 1800, "min": 60, "max": 86400}, "6802_0892E600": { "val": [{"tag": 2506}], "validVals": [2506, 2507], }, "6802_0092E700": {"val": 600, "min": 5, "max": 86400}, "6802_0092E800": {"val": 10000, "min": 0, "max": 10000}, "6802_0892E900": { "val": [{"tag": 2506}], "validVals": [2506, 2507], }, "6802_0092EA00": {"val": 600, "min": 5, "max": 86400}, "6802_4092EB00": {"val": 0, "min": -5000, "max": 5000}, "6802_0892EC00": { "val": [{"tag": 2506}], "validVals": [2506, 2507], }, "6802_0092ED00": {"val": 600, "min": 5, "max": 86400}, "6802_4092EE00": {"val": 10000, "min": 8000, "max": 10000}, "6802_0892EF00": { "val": [{"tag": 1042}], "validVals": [1041, 1042], }, "6802_00A62A00": {"val": 0, "min": 0, "max": 440000}, "6802_00A62B00": {"val": 0, "min": 0, "max": 440000}, "6802_00B12100": {"val": 1930023194, "min": 0, "max": 4294967294}, "6802_00B12200": {"val": 302, "min": 0, "max": 4294967294}, "6802_00B12900": {"val": 23194, "min": 0, "max": 4294967294}, "6802_00B12A00": {"val": 303, "min": 0, "max": 4294967294}, } } }, 32, id="Sunny Boy 1.5, no energy meter, no optimizers", ), ] kellerza-pysma-c89fc98/tests/test_definitions.py000066400000000000000000000015631447021446100222070ustar00rootroot00000000000000"""Test pysma const file.""" import pysma.definitions from pysma.sensor import Sensor def test_duplicate_sensors(): """Test if defined sensors have unique key and name.""" variables = vars(pysma.definitions) found_keys = [] found_names = [] for value in variables.values(): if isinstance(value, Sensor): found_key = f"{value.key}_{value.key_idx}" found_name = value.name assert found_key not in found_keys found_keys.append(found_key) assert found_name not in found_names found_names.append(found_name) def test_sensor_map(): """Test if all map entries only contain unique items.""" for sensor_map in pysma.definitions.sensor_map.values(): unique_items = list({f"{s.key}_{s.key_idx}": s for s in sensor_map}.values()) assert unique_items == sensor_map kellerza-pysma-c89fc98/tests/test_helpers.py000066400000000000000000000006611447021446100213340ustar00rootroot00000000000000"""Test pysma helpers file.""" from pysma.helpers import version_int_to_string def test_version_int_to_string(): """Ensure version_int_to_string returns correct values.""" assert version_int_to_string(4294967294) == "ff.ff.255." assert version_int_to_string(51387396) == "3.10.28.R" assert version_int_to_string(1) == "0.0.0.E" assert version_int_to_string(0) == "" assert version_int_to_string(None) == "" kellerza-pysma-c89fc98/tests/test_init.py000066400000000000000000000416001447021446100206330ustar00rootroot00000000000000"""Test pysma init.""" import asyncio import logging import re from unittest.mock import patch import aiohttp import pytest from pysma import SMA from pysma.definitions import device_type as device_type_sensor from pysma.exceptions import ( SmaAuthenticationException, SmaConnectionException, SmaReadException, ) from pysma.sensor import Sensors from . import MOCK_DEVICE, MOCK_L10N, SMA_TESTDATA, mock_aioresponse # noqa: F401 _LOGGER = logging.getLogger(__name__) class Test_SMA_class: """Test the SMA class.""" @pytest.fixture(autouse=True) def _setup(self, mock_aioresponse): # noqa: F811 self.host = "1.1.1.1" self.base_url = f"http://{self.host}" mock_aioresponse.get( re.compile(f"{self.base_url}/data/l10n/en-US.json.*"), payload=MOCK_L10N, repeat=True, ) mock_aioresponse.post( f"{self.base_url}/dyn/logout.json?sid=ABCD", payload={}, repeat=True ) async def test_request_json_connect_error(self, mock_aioresponse): # noqa: F811 """Test request_json with a SmaConnectionException.""" mock_aioresponse.get( f"{self.base_url}/dummy-url", exception=aiohttp.client_exceptions.ClientConnectionError("mocked error"), ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") with pytest.raises(SmaConnectionException): await sma._get_json("/dummy-url") async def test_request_json_server_disconnect_error( self, mock_aioresponse # noqa: F811 ): """Test request_json with a SmaConnectionException from ServerDisconnectedError.""" mock_aioresponse.get( f"{self.base_url}/dummy-url", exception=aiohttp.client_exceptions.ServerDisconnectedError("mocked error"), repeat=True, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") with pytest.raises(SmaConnectionException): await sma._get_json("/dummy-url") async def test_timeout_error(self, mock_aioresponse): # noqa: F811 """Test request_json with a SmaConnectionException from TimeoutError.""" mock_aioresponse.get( f"{self.base_url}/dummy-url", exception=asyncio.TimeoutError("mocked error"), repeat=True, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") with pytest.raises(SmaConnectionException): await sma._get_json("/dummy-url") @patch("pysma._LOGGER.warning") async def test_request_json_invalid_json( self, mock_warn, mock_aioresponse # noqa: F811 ): """Test request_json with invalid json.""" mock_aioresponse.get( f"{self.base_url}/dummy-url", body="THIS IS NOT A VALID JSON", ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") json = await sma._get_json("/dummy-url") assert isinstance(json, dict) assert json == {} assert mock_warn.call_count == 1 @patch("pysma._LOGGER.warning") async def test_read_no_password(self, mock_warn, mock_aioresponse): # noqa: F811 """Test read_body without password.""" mock_aioresponse.post( f"{self.base_url}/dyn/getDashValues.json", payload={ "result": { "0199-xxxxx385": { "6800_08822000": { "1": [ { "validVals": [9401, 9402, 9403, 9404, 9405], "val": [{"tag": 9402}], } ] }, } } }, ) session = aiohttp.ClientSession() sma = SMA(session, self.host) sensors = Sensors(device_type_sensor) assert await sma.read(sensors) assert sensors["6800_08822000"].value == "Sunny Boy 3.6" assert mock_warn.call_count == 0 @patch("pysma._LOGGER.warning") async def test_read_body_error(self, mock_warn, mock_aioresponse): # noqa: F811 """Test read_body with SmaReadException.""" mock_aioresponse.post( f"{self.base_url}/dyn/getValues.json?sid=ABCD", payload={"err": 401} ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") sma._sid = "ABCD" with pytest.raises(SmaReadException): await sma._read_body("/dyn/getValues.json", payload={"dummy": "payload"}) assert mock_warn.call_count == 1 @patch("pysma._LOGGER.warning") async def test_read_body_unexpected( self, mock_warn, mock_aioresponse # noqa: F811 ): """Test read_body with unexpected body.""" mock_aioresponse.post( f"{self.base_url}/dyn/getValues.json?sid=ABCD", payload={ "result": { "0199-xxxxx385": {}, "0199-yyyyy385": {}, } }, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") sma._sid = "ABCD" result_body = await sma._read_body( "/dyn/getValues.json", payload={"dummy": "payload"} ) assert result_body == {} assert mock_warn.call_count == 1 async def test_read_dash_logger(self, mock_aioresponse): # noqa: F811 """Test read_dash_logger.""" mock_aioresponse.post( f"{self.base_url}/dyn/getDashLogger.json", payload={ "result": { "0199-xxxxx385": { "7000": { "1": [ {"t": 1622569500, "v": 4565239}, {"t": 1622569800, "v": 4565249}, ] }, "7020": { "1": [ {"t": 1622498400, "v": 4542749}, {"t": 1622584800, "v": 4565355}, ] }, } } }, ) session = aiohttp.ClientSession() sma = SMA(session, self.host) read_dash_logger = await sma.read_dash_logger() assert read_dash_logger == { "7000": { "1": [ {"t": 1622569500, "v": 4565239}, {"t": 1622569800, "v": 4565249}, ] }, "7020": { "1": [ {"t": 1622498400, "v": 4542749}, {"t": 1622584800, "v": 4565355}, ] }, } async def test_read_logger(self, mock_aioresponse): # noqa: F811 """Test read_logger.""" mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"result": {"sid": "ABCD"}} ) mock_aioresponse.post( f"{self.base_url}/dyn/getLogger.json?sid=ABCD", payload={ "result": { "0199-xxxxx385": [ {"t": 1622498400, "v": 4542749}, {"t": 1622584800, "v": 4565355}, ] } }, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") read_logger = await sma.read_logger(28704, 1622592000, 1622491200) assert read_logger == [ {"t": 1622498400, "v": 4542749}, {"t": 1622584800, "v": 4565355}, ] async def test_read_logger_error(self, mock_aioresponse): # noqa: F811 """Test read_logger with SmaReadException.""" mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"result": {"sid": "ABCD"}} ) mock_aioresponse.post( f"{self.base_url}/dyn/getLogger.json?sid=ABCD", payload={"result": {"0199-xxxxx385": "NOT A LIST"}}, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") with pytest.raises(SmaReadException): await sma.read_logger(28704, 1622592000, 1622491200) @patch("pysma._LOGGER.warning") async def test_new_session(self, mock_warn, mock_aioresponse): # noqa: F811 """Test new_session.""" mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"result": {"sid": "ABCD"}} ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "extralongpassword") assert await sma.new_session() assert mock_warn.call_count == 1 await sma.close_session() await sma.close_session() assert mock_warn.call_count == 1 async def test_new_session_invalid_group(self, mock_aioresponse): # noqa: F811 """Test new_session with invalid group.""" session = aiohttp.ClientSession() with pytest.raises(KeyError): SMA(session, self.host, "pass", "invalid-group") async def test_new_session_fail(self, mock_aioresponse): # noqa: F811 """Test new_session with empty result.""" mock_aioresponse.post(f"{self.base_url}/dyn/login.json", payload={"result": {}}) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") with pytest.raises(SmaAuthenticationException): await sma.new_session() @patch("pysma._LOGGER.error") async def test_new_session_error(self, mock_error, mock_aioresponse): # noqa: F811 """Test new_session with error.""" session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"err": "dummy-error"} ) with pytest.raises(SmaAuthenticationException): await sma.new_session() assert mock_error.call_count == 1 mock_aioresponse.post(f"{self.base_url}/dyn/login.json", payload={"err": 404}) with pytest.raises(SmaAuthenticationException): await sma.new_session() assert mock_error.call_count == 2 # Temporary update the URL to have https sma._url = f"https://{self.host}" mock_aioresponse.post( f"https://{self.host}/dyn/login.json", payload={"err": 404} ) with pytest.raises(SmaAuthenticationException): await sma.new_session() sma._url = f"http://{self.host}" assert mock_error.call_count == 3 mock_aioresponse.post(f"{self.base_url}/dyn/login.json", payload={"err": 503}) with pytest.raises(SmaAuthenticationException): await sma.new_session() assert mock_error.call_count == 4 async def test_device_info(self, mock_aioresponse): # noqa: F811 """Test device_info.""" mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"result": {"sid": "ABCD"}} ) mock_aioresponse.post( f"{self.base_url}/dyn/getValues.json?sid=ABCD", payload={ "result": { "0199-xxxxx385": { "6800_08822B00": { "1": [{"validVals": [461], "val": [{"tag": 461}]}] }, "6800_00A21E00": { "1": [ {"low": 0, "high": None, "val": MOCK_DEVICE["serial"]} ] }, "6800_08822000": { "1": [ { "validVals": [9401, 9402, 9403, 9404, 9405], "val": [{"tag": 9402}], } ] }, "6800_10821E00": {"1": [{"val": MOCK_DEVICE["name"]}]}, } } }, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") result = await sma.device_info() assert result assert result == MOCK_DEVICE async def test_device_info_fallback(self, mock_aioresponse): # noqa: F811 """Test device_info fallback.""" mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"result": {"sid": "ABCD"}} ) mock_aioresponse.post( f"{self.base_url}/dyn/getValues.json?sid=ABCD", payload={ "result": { "0199-xxxxx385": { "6800_08822B00": { "1": [{"validVals": [461], "val": [{"tag": 461}]}] }, "6800_10821E00": {"1": [{"val": MOCK_DEVICE["name"]}]}, } } }, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") assert await sma.new_session() result = await sma.device_info() assert result assert result["manufacturer"] == "SMA" assert result["name"] == MOCK_DEVICE["name"] assert result["type"] == "" assert result["serial"] == "9999999999" assert result["sw_version"] == "" async def test_device_info_fail(self, mock_aioresponse): # noqa: F811 """Test device_info with SmaReadException.""" mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"result": {"sid": "ABCD"}} ) mock_aioresponse.post( f"{self.base_url}/dyn/getValues.json?sid=ABCD", payload={}, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") assert await sma.new_session() with pytest.raises(SmaReadException): await sma.device_info() @pytest.mark.parametrize( "get_all_onl_values,get_all_param_values,number_of_sensors", SMA_TESTDATA ) async def test_get_sensors( self, get_all_onl_values, get_all_param_values, number_of_sensors, mock_aioresponse, # noqa: F811 ): """Test get_sensors.""" mock_aioresponse.post( f"{self.base_url}/dyn/getAllOnlValues.json?sid=ABCD", payload=get_all_onl_values, repeat=True, ) mock_aioresponse.post( f"{self.base_url}/dyn/getAllParamValues.json?sid=ABCD", payload=get_all_param_values, repeat=True, ) mock_aioresponse.post( f"{self.base_url}/dyn/login.json", payload={"result": {"sid": "ABCD"}} ) mock_aioresponse.post( f"{self.base_url}/dyn/getValues.json?sid=ABCD", payload={ "result": { "0199-xxxxx385": { "6180_08214800": { "1": [{"val": [{"tag": "123"}]}], }, "6800_008AA300": { "1": [{"val": "0123456"}], }, "6800_10852600": { "1": [ {"val": "1"}, {"val": "2"}, {"val": None}, ] }, } } }, repeat=True, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") assert len(await sma.get_sensors()) == number_of_sensors async def test_post_json(self): session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass") with patch("pysma.SMA._request_json") as mock_request_json: await sma._post_json("dummy_url") mock_request_json.assert_called_once_with( "POST", "dummy_url", data="{}", headers={"content-type": "application/json"}, ) with patch("pysma.SMA._request_json") as mock_request_json: await sma._post_json("dummy_url", {"data": "dummy"}) mock_request_json.assert_called_once_with( "POST", "dummy_url", data='{"data": "dummy"}', headers={"content-type": "application/json"}, ) @patch("pysma._LOGGER.warning") async def test_unsupported_lang(self, mock_warn, mock_aioresponse): # noqa: F811 """Test fallback lang in case requested lang is not available.""" mock_aioresponse.get( f"{self.base_url}/data/l10n/de-CH.json", status=400, ) session = aiohttp.ClientSession() sma = SMA(session, self.host, "pass", lang="de-CH") await sma._read_l10n() assert mock_warn.call_count == 1 assert len(sma._l10n) > 0 kellerza-pysma-c89fc98/tests/test_sensor.py000066400000000000000000000112611447021446100212010ustar00rootroot00000000000000"""Test pysma sensors.""" import logging from json import loads from unittest.mock import patch import pytest from pysma.const import ( GENERIC_SENSORS, JMESPATH_VAL, JMESPATH_VAL_IDX, JMESPATH_VAL_STR, ) from pysma.definitions import sensor_map from pysma.sensor import Sensor, Sensors _LOGGER = logging.getLogger(__name__) SB_1_5 = loads( # {"result": {"012F-7309879F": """ { "6400_00260100": {"1": [{"val": 3514000}]}, "6400_00262200": {"1": [{"val": 402}]}, "6380_40251E00": {"1": [{"val": 448}, {"val": 522}]} } """ # }} ) SB_2_5 = loads( # {"result": {"012F-730A2A43": """ { "6400_00262200": {"val": 402}, "6100_40263F00": {"val": null}, "6400_00260100": {"val": 3514000}, "6380_40251E00": [{"str": 1, "val": 448}, {"str": 2, "val": 522}] } """ # }} ) @pytest.fixture def sensors(): """Fixture to create some sensors.""" yield [ (402, True, Sensor("6400_00262200", "s_402", "W")), (3514, True, Sensor("6400_00260100", "s_3514", "W", 1000)), (448, True, Sensor("6380_40251E00_0", "pv_power_a", unit="W")), (522, True, Sensor("6380_40251E00_1", "pv_power_b", unit="W")), ] class Test_sensor_class: """Test the Sensor class.""" def test_sensor_sb_1_5(self, sensors): """Test extract value.""" for val, change, sens in sensors: assert sens.path is None assert sens.extract_value(SB_1_5) is change assert sens.value == val assert sens.path == JMESPATH_VAL_IDX.format(sens.key_idx) assert sens.extract_value(SB_1_5) is False def test_sensor_sb_2_5(self, sensors): """Test extract value.""" for val, change, sens in sensors: assert sens.path is None assert sens.extract_value(SB_2_5) is change assert sens.value == val assert sens.path == JMESPATH_VAL or JMESPATH_VAL_STR.format(sens.key_idx) assert sens.extract_value(SB_2_5) is False def test_null(self): """Test a null or None result.""" sens = Sensor("6100_40263F00", "s_null", "kWh") assert sens.extract_value({"6100_40263F00": {"val": None}}) is False assert sens.value is None assert sens.extract_value({"6100_40263F00": {"1": [{"val": None}]}}) is False assert sens.value is None assert sens.extract_value({}) is False assert sens.value is None # For "W" sensors we will set it to 0 by default. sens = Sensor("6100_40263F00", "s_null", "W") assert sens.extract_value({"6100_40263F00": {"val": None}}) is True assert sens.value == 0 assert sens.extract_value({"6100_40263F00": {"1": [{"val": None}]}}) is False assert sens.value == 0 assert sens.extract_value({}) is True assert sens.value is None def test_no_value_decoded(self): sens = Sensor("6100_40263F00", "s_null", "W") assert sens.extract_value({"6100_40263F00": None}) is True sens = Sensor("6100_40263F00", "s_null", "kWh") assert sens.extract_value({"6100_40263F00": None}) is False class Test_sensors_class: """Test the Sensors class.""" @patch("pysma.sensor._LOGGER.warning") def test_default_no_duplicates(self, mock_warn): """Ensure warning on duplicates.""" sen = Sensors(sensor_map[GENERIC_SENSORS]) assert len(sen) == len(sensor_map[GENERIC_SENSORS]) assert mock_warn.call_count == 0 # Add duplicate frequency news = Sensor("key1", "frequency", "") sen.add(news) assert mock_warn.call_count == 1 assert sen[news.name] == news # Add duplicate freq, key should not be raised sen.add(Sensor("6100_00465700", "frequency", "")) assert mock_warn.call_count == 2 # Add duplicate freq key only sen.add(Sensor("6100_00465700", "f001", "")) assert mock_warn.call_count == 3 # Test different key_idx only sen.add(Sensor("key1_0", "frequency_0", "")) assert mock_warn.call_count == 3 sen.add(Sensor("key1_1", "frequency_1", "")) assert mock_warn.call_count == 3 @patch("pysma.sensor._LOGGER.warning") def test_type_error(self, mock_warn): """Ensure TypeError on not isinstance.""" sen = Sensors() with pytest.raises(TypeError): sen.add("This is not a Sensor") @patch("pysma.sensor._LOGGER.warning") def test_default_jmes(self, mock_warn): """Ensure default sensors are ok.""" sens = Sensors(sensor_map[GENERIC_SENSORS]) for sen in sens: sen.extract_value(SB_1_5) assert mock_warn.called