pax_global_header00006660000000000000000000000064150501372330014511gustar00rootroot0000000000000052 comment=389f383906ad1a6cac4d1c0054cf92af3a22c593 pyenphase-2.3.1/000077500000000000000000000000001505013723300135105ustar00rootroot00000000000000pyenphase-2.3.1/.all-contributorsrc000066400000000000000000000004401505013723300173370ustar00rootroot00000000000000{ "projectName": "pyenphase", "projectOwner": "pyenphase", "repoType": "github", "repoHost": "https://github.com", "files": ["README.md"], "imageSize": 80, "commit": true, "commitConvention": "angular", "contributors": [], "contributorsPerLine": 7, "skipCi": true } pyenphase-2.3.1/.copier-answers.yml000066400000000000000000000007651505013723300172620ustar00rootroot00000000000000# Changes here will be overwritten by Copier _commit: 038bdbe _src_path: gh:browniebroke/pypackage-template add_me_as_contributor: false copyright_year: '2023' documentation: true email: cgarwood@gmail.com full_name: pyenphase github_username: pyenphase initial_commit: true open_source_license: MIT package_name: pyenphase project_name: pyenphase project_short_description: Library to control enphase envoy project_slug: pyenphase run_poetry_install: true setup_github: false setup_pre_commit: true pyenphase-2.3.1/.editorconfig000066400000000000000000000004441505013723300161670ustar00rootroot00000000000000# http://editorconfig.org root = true [*] indent_style = space indent_size = 4 trim_trailing_whitespace = true insert_final_newline = true charset = utf-8 end_of_line = lf [*.bat] indent_style = tab end_of_line = crlf [LICENSE] insert_final_newline = false [Makefile] indent_style = tab pyenphase-2.3.1/.flake8000066400000000000000000000000561505013723300146640ustar00rootroot00000000000000[flake8] exclude = docs max-line-length = 188 pyenphase-2.3.1/.github/000077500000000000000000000000001505013723300150505ustar00rootroot00000000000000pyenphase-2.3.1/.github/FUNDING.yml000066400000000000000000000000261505013723300166630ustar00rootroot00000000000000github: ["pyenphase"] pyenphase-2.3.1/.github/ISSUE_TEMPLATE/000077500000000000000000000000001505013723300172335ustar00rootroot00000000000000pyenphase-2.3.1/.github/ISSUE_TEMPLATE/1-bug_report.md000066400000000000000000000004221505013723300220610ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve labels: bug --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: **Additional context** Add any other context about the problem here. pyenphase-2.3.1/.github/ISSUE_TEMPLATE/2-feature-request.md000066400000000000000000000006721505013723300230420ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project labels: enhancement --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Additional context** Add any other context or screenshots about the feature request here. pyenphase-2.3.1/.github/dependabot.yml000066400000000000000000000013631505013723300177030ustar00rootroot00000000000000# To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file # version: 4 version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "monthly" commit-message: prefix: "chore(ci): " groups: github-actions: patterns: - "*" - package-ecosystem: "pip" # See documentation for possible values directory: "/" # Location of package manifests schedule: interval: "weekly" pyenphase-2.3.1/.github/labels.toml000066400000000000000000000035151505013723300172130ustar00rootroot00000000000000[breaking] color = "ffcc00" name = "breaking" description = "Breaking change." [bug] color = "d73a4a" name = "bug" description = "Something isn't working" [dependencies] color = "0366d6" name = "dependencies" description = "Pull requests that update a dependency file" [github_actions] color = "000000" name = "github_actions" description = "Update of github actions" [documentation] color = "1bc4a5" name = "documentation" description = "Improvements or additions to documentation" [duplicate] color = "cfd3d7" name = "duplicate" description = "This issue or pull request already exists" [enhancement] color = "a2eeef" name = "enhancement" description = "New feature or request" ["good first issue"] color = "7057ff" name = "good first issue" description = "Good for newcomers" ["help wanted"] color = "008672" name = "help wanted" description = "Extra attention is needed" [invalid] color = "e4e669" name = "invalid" description = "This doesn't seem right" [nochangelog] color = "555555" name = "nochangelog" description = "Exclude pull requests from changelog" [question] color = "d876e3" name = "question" description = "Further information is requested" [removed] color = "e99695" name = "removed" description = "Removed piece of functionalities." [tests] color = "bfd4f2" name = "tests" description = "CI, CD and testing related changes" [wontfix] color = "ffffff" name = "wontfix" description = "This will not be worked on" [discussion] color = "c2e0c6" name = "discussion" description = "Some discussion around the project" [hacktoberfest] color = "ffa663" name = "hacktoberfest" description = "Good issues for Hacktoberfest" [answered] color = "0ee2b6" name = "answered" description = "Automatically closes as answered after a delay" [waiting] color = "5f7972" name = "waiting" description = "Automatically closes if no answer after a delay" pyenphase-2.3.1/.github/workflows/000077500000000000000000000000001505013723300171055ustar00rootroot00000000000000pyenphase-2.3.1/.github/workflows/ci.yml000066400000000000000000000046331505013723300202310ustar00rootroot00000000000000name: CI on: push: branches: - main pull_request: concurrency: group: ${{ github.head_ref || github.run_id }} cancel-in-progress: true permissions: write-all jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - uses: pre-commit/action@v3.0.1 test: strategy: fail-fast: false matrix: python-version: - "3.11" - "3.12" - "3.13" os: - ubuntu-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: snok/install-poetry@v1.4.1 - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: "poetry" - name: Install Dependencies run: poetry install shell: bash - name: Test with Pytest run: poetry run pytest --cov-report=xml shell: bash - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} release: needs: - test - lint runs-on: ubuntu-latest environment: release concurrency: release permissions: id-token: write contents: write outputs: released: ${{ steps.release.outputs.released }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.head_ref || github.ref_name }} # Do a dry run of PSR - name: Test release uses: python-semantic-release/python-semantic-release@v10.2.0 if: github.ref_name != 'main' with: no_operation_mode: true # On main branch: actual PSR + upload to PyPI & GitHub - name: Release uses: python-semantic-release/python-semantic-release@v10.2.0 id: release if: github.ref_name == 'main' with: github_token: ${{ secrets.GITHUB_TOKEN }} - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 if: steps.release.outputs.released == 'true' - name: Publish package distributions to GitHub Releases uses: python-semantic-release/publish-action@v10.2.0 if: steps.release.outputs.released == 'true' with: github_token: ${{ secrets.GITHUB_TOKEN }} pyenphase-2.3.1/.github/workflows/hacktoberfest.yml000066400000000000000000000005341505013723300224560ustar00rootroot00000000000000name: Hacktoberfest on: schedule: # Run every day in October - cron: "0 0 * 10 *" # Run on the 1st of November to revert - cron: "0 13 1 11 *" jobs: hacktoberfest: runs-on: ubuntu-latest steps: - uses: browniebroke/hacktoberfest-labeler-action@v2.3.0 with: github_token: ${{ secrets.GH_PAT }} pyenphase-2.3.1/.github/workflows/issue-manager.yml000066400000000000000000000013401505013723300223660ustar00rootroot00000000000000name: Issue Manager on: schedule: - cron: "0 0 * * *" issue_comment: types: - created issues: types: - labeled pull_request_target: types: - labeled workflow_dispatch: jobs: issue-manager: runs-on: ubuntu-latest steps: - uses: tiangolo/issue-manager@0.5.1 with: token: ${{ secrets.GITHUB_TOKEN }} config: > { "answered": { "message": "Assuming the original issue was solved, it will be automatically closed now." }, "waiting": { "message": "Automatically closing. To re-open, please provide the additional information requested." } } pyenphase-2.3.1/.github/workflows/poetry-upgrade.yml000066400000000000000000000003401505013723300225740ustar00rootroot00000000000000name: Upgrader on: workflow_dispatch: schedule: - cron: "19 14 6 * *" jobs: upgrade: uses: browniebroke/github-actions/.github/workflows/poetry-upgrade.yml@v1 secrets: gh_pat: ${{ secrets.GH_PAT }} pyenphase-2.3.1/.github/workflows/pr-title.yml000066400000000000000000000005601505013723300213710ustar00rootroot00000000000000name: PR Title on: pull_request: pull_request_target: jobs: # Make sure pre title follow the conventional commits convention: # https://www.conventionalcommits.org commitlint: name: Lint PR Title runs-on: ubuntu-latest steps: - uses: amannn/action-semantic-pull-request@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} pyenphase-2.3.1/.gitignore000066400000000000000000000153501505013723300155040ustar00rootroot00000000000000# Created by https://www.toptal.com/developers/gitignore/api/python,visualstudiocode,pycharm+all,linux,macos,windows # Edit at https://www.toptal.com/developers/gitignore?templates=python,visualstudiocode,pycharm+all,linux,macos,windows ### Linux ### *~ # temporary files which can be created if a process still has a handle open of a deleted file .fuse_hidden* # KDE directory preferences .directory # Linux trash folder which might appear on any partition or disk .Trash-* # .nfs files are created when an open file is removed but is still being accessed .nfs* ### macOS ### # General .DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk ### macOS Patch ### # iCloud generated files *.icloud ### PyCharm+all ### # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml .idea/**/usage.statistics.xml .idea/**/dictionaries .idea/**/shelf # AWS User-specific .idea/**/aws.xml # Generated files .idea/**/contentModel.xml # Sensitive or high-churn files .idea/**/dataSources/ .idea/**/dataSources.ids .idea/**/dataSources.local.xml .idea/**/sqlDataSources.xml .idea/**/dynamic.xml .idea/**/uiDesigner.xml .idea/**/dbnavigator.xml # Gradle .idea/**/gradle.xml .idea/**/libraries # Gradle and Maven with auto-import # When using Gradle or Maven with auto-import, you should exclude module files, # since they will be recreated, and may cause churn. Uncomment if using # auto-import. # .idea/artifacts # .idea/compiler.xml # .idea/jarRepositories.xml # .idea/modules.xml # .idea/*.iml # .idea/modules # *.iml # *.ipr # CMake cmake-build-*/ # Mongo Explorer plugin .idea/**/mongoSettings.xml # File-based project format *.iws # IntelliJ out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Cursive Clojure plugin .idea/replstate.xml # SonarLint plugin .idea/sonarlint/ # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties # Editor-based Rest Client .idea/httpRequests # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser ### PyCharm+all Patch ### # Ignore everything but code style settings and run configurations # that are supposed to be shared within teams. .idea/* !.idea/codeStyles !.idea/runConfigurations ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # 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/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. #pdm.lock # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ ### Python Patch ### # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration poetry.toml # ruff .ruff_cache/ # LSP config files pyrightconfig.json ### VisualStudioCode ### .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json !.vscode/*.code-snippets # Local History for Visual Studio Code .history/ # Built Visual Studio Code Extensions *.vsix ### VisualStudioCode Patch ### # Ignore all local history of files .history .ionide ### Windows ### # Windows thumbnail cache files Thumbs.db Thumbs.db:encryptable ehthumbs.db ehthumbs_vista.db # Dump file *.stackdump # Folder config file [Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msix *.msm *.msp # Windows shortcuts *.lnk # End of https://www.toptal.com/developers/gitignore/api/python,visualstudiocode,pycharm+all,linux,macos,windows pyenphase-2.3.1/.gitpod.yml000066400000000000000000000003061505013723300155760ustar00rootroot00000000000000tasks: - command: | pip install poetry PIP_USER=false poetry install - command: | pip install pre-commit pre-commit install PIP_USER=false pre-commit install-hooks pyenphase-2.3.1/.pre-commit-config.yaml000066400000000000000000000033331505013723300177730ustar00rootroot00000000000000# See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks exclude: "CHANGELOG.md|.copier-answers.yml" default_stages: [pre-commit] ci: autofix_commit_msg: "chore(pre-commit.ci): auto fixes" autoupdate_commit_msg: "chore(pre-commit.ci): pre-commit autoupdate" repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: debug-statements - id: check-builtin-literals - id: check-case-conflict - id: check-docstring-first - id: check-json exclude: | (?x)^( tests/fixtures/.*/.*\.json )$ - id: check-toml - id: check-xml - id: check-yaml - id: detect-private-key - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/python-poetry/poetry rev: 2.1.3 hooks: - id: poetry-check - repo: https://github.com/pre-commit/mirrors-prettier rev: v4.0.0-alpha.8 hooks: - id: prettier args: ["--tab-width", "2", "--no-error-on-unmatched-pattern"] - repo: https://github.com/asottile/pyupgrade rev: v3.20.0 hooks: - id: pyupgrade args: [--py310-plus] - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.12.8 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] - id: ruff-format - repo: https://github.com/codespell-project/codespell rev: v2.4.1 hooks: - id: codespell - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.17.1 hooks: - id: mypy additional_dependencies: ["types-orjson"] - repo: https://github.com/PyCQA/bandit rev: 1.8.6 hooks: - id: bandit args: [-x, tests] pyenphase-2.3.1/.prettierignore000066400000000000000000000000311505013723300165450ustar00rootroot00000000000000tests/fixtures/**/*.json pyenphase-2.3.1/.readthedocs.yml000066400000000000000000000012471505013723300166020ustar00rootroot00000000000000# Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-20.04 tools: python: "3.11" jobs: post_create_environment: # Install poetry - pip install poetry post_install: # Install dependencies # VIRTUAL_ENV needs to be set manually for now. # See https://github.com/readthedocs/readthedocs.org/pull/11152/ - VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH poetry install --with docs # Build documentation in the docs directory with Sphinx sphinx: configuration: docs/conf.py pyenphase-2.3.1/.rtx.toml000066400000000000000000000000701505013723300152750ustar00rootroot00000000000000[tools] python = { version="3.11", virtualenv=".venv" } pyenphase-2.3.1/CHANGELOG.md000066400000000000000000002161751505013723300153350ustar00rootroot00000000000000# CHANGELOG ## v2.3.1 (2025-08-16) ### Bug Fixes - Error asyncio unclosed client session at app close ([#319](https://github.com/pyenphase/pyenphase/pull/319), [`b59a71d`](https://github.com/pyenphase/pyenphase/commit/b59a71ddcd25803d14c24ae6857f86f463ab36e8)) ### Chores - Enable additional ruff linting rules for code quality improvements ([#320](https://github.com/pyenphase/pyenphase/pull/320), [`b10df2f`](https://github.com/pyenphase/pyenphase/commit/b10df2fd7dc4a7198bfad9f9b265443df7840683)) ## v2.3.0 (2025-08-13) ### Chores - **deps**: Bump aiohttp from 3.12.14 to 3.12.15 ([#316](https://github.com/pyenphase/pyenphase/pull/316), [`83d07aa`](https://github.com/pyenphase/pyenphase/commit/83d07aaf8bc7ee5f2fa65e58ed940b79a572a79a)) - **deps**: Bump awesomeversion from 25.5.0 to 25.8.0 ([#317](https://github.com/pyenphase/pyenphase/pull/317), [`2144c90`](https://github.com/pyenphase/pyenphase/commit/2144c909c96d2870cff5d342eb9156642f4f0630)) - **deps**: Bump orjson from 3.10.18 to 3.11.1 ([#314](https://github.com/pyenphase/pyenphase/pull/314), [`231de76`](https://github.com/pyenphase/pyenphase/commit/231de768e6f3594caadd1eac3bf35e0bf0452f76)) - **deps-dev**: Bump pytest-asyncio from 1.0.0 to 1.1.0 ([#315](https://github.com/pyenphase/pyenphase/pull/315), [`04cbb38`](https://github.com/pyenphase/pyenphase/commit/04cbb38344c38a3476b1f17f80b07fc381846df6)) - **pre-commit.ci**: Pre-commit autoupdate ([#318](https://github.com/pyenphase/pyenphase/pull/318), [`6ed4108`](https://github.com/pyenphase/pyenphase/commit/6ed4108d17c956757b8b36d83d70ab2508c68912)) - **pre-commit.ci**: Pre-commit autoupdate ([#312](https://github.com/pyenphase/pyenphase/pull/312), [`e5560b7`](https://github.com/pyenphase/pyenphase/commit/e5560b7463b39ab5ab8f62663b39af5d22401814)) ### Features - Add iq meter collar and c6 combiner data ([#311](https://github.com/pyenphase/pyenphase/pull/311), [`47a2365`](https://github.com/pyenphase/pyenphase/commit/47a23655e426da3346e150e759fc91a03904d52a)) ## v2.2.3 (2025-07-29) ### Bug Fixes - 3RD-PV is not a valid DryContactType ([#313](https://github.com/pyenphase/pyenphase/pull/313), [`de641a6`](https://github.com/pyenphase/pyenphase/commit/de641a69330e87ad8b854dc43c127804d5e4d314)) - 3RD-PV is not a valid DryContactType - add new type ([#313](https://github.com/pyenphase/pyenphase/pull/313), [`de641a6`](https://github.com/pyenphase/pyenphase/commit/de641a69330e87ad8b854dc43c127804d5e4d314)) ### Chores - **deps**: Bump aiohttp from 3.12.13 to 3.12.14 ([#307](https://github.com/pyenphase/pyenphase/pull/307), [`b1be28b`](https://github.com/pyenphase/pyenphase/commit/b1be28ba71960b8eacb1a1d110631adb5703313b)) - **pre-commit.ci**: Pre-commit autoupdate ([#310](https://github.com/pyenphase/pyenphase/pull/310), [`189adbc`](https://github.com/pyenphase/pyenphase/commit/189adbc963488ada345e7873818bd36483d0c2ef)) - **pre-commit.ci**: Pre-commit autoupdate ([#308](https://github.com/pyenphase/pyenphase/pull/308), [`7378188`](https://github.com/pyenphase/pyenphase/commit/7378188512565b6a0fff311aaf029f600d4dc7f4)) ## v2.2.2 (2025-07-16) ### Bug Fixes - Fallback to v1 inverter endpoint if installed inverters exceed deviceDataLimit ([#305](https://github.com/pyenphase/pyenphase/pull/305), [`c62c048`](https://github.com/pyenphase/pyenphase/commit/c62c0482b98bcbfdd01010905ecf876f20e0eae1)) - Fallback to v1 inverter endpoint if number of installed inverters exceed deviceDataLimit ([#305](https://github.com/pyenphase/pyenphase/pull/305), [`c62c048`](https://github.com/pyenphase/pyenphase/commit/c62c0482b98bcbfdd01010905ecf876f20e0eae1)) ### Chores - **ci**: Bump the github-actions group with 2 updates ([#302](https://github.com/pyenphase/pyenphase/pull/302), [`21f28de`](https://github.com/pyenphase/pyenphase/commit/21f28decbd7566844bc10fce1900ae8342db68d2)) - **pre-commit.ci**: Pre-commit autoupdate ([#306](https://github.com/pyenphase/pyenphase/pull/306), [`50c3163`](https://github.com/pyenphase/pyenphase/commit/50c3163149acda115a1591cafa9cfd1d9779648e)) ## v2.2.1 (2025-07-06) ### Bug Fixes - Early v7 firmware returns 401 on production probe with aiohttp. ([#304](https://github.com/pyenphase/pyenphase/pull/304), [`86f4df2`](https://github.com/pyenphase/pyenphase/commit/86f4df2aff689458312e7b0bae39dc8ecc565ed4)) ## v2.2.0 (2025-07-03) ### Chores - **deps**: Bump lxml from 5.4.0 to 6.0.0 ([#300](https://github.com/pyenphase/pyenphase/pull/300), [`c9a668e`](https://github.com/pyenphase/pyenphase/commit/c9a668eee25dc80293399ac324b73611f9f6b46d)) - **deps-dev**: Bump pytest from 8.4.0 to 8.4.1 ([#298](https://github.com/pyenphase/pyenphase/pull/298), [`28439b6`](https://github.com/pyenphase/pyenphase/commit/28439b6da778622d20dc715a8152e9feb12e6f08)) - **pre-commit.ci**: Auto fixes ([#299](https://github.com/pyenphase/pyenphase/pull/299), [`1e1087e`](https://github.com/pyenphase/pyenphase/commit/1e1087ec3fc18f3f1e89544ab583a385cd49cb53)) - **pre-commit.ci**: Pre-commit autoupdate ([#301](https://github.com/pyenphase/pyenphase/pull/301), [`10451ab`](https://github.com/pyenphase/pyenphase/commit/10451ab48f8ef89f9fc69273ac83617fd960353a)) - **pre-commit.ci**: Pre-commit autoupdate ([#299](https://github.com/pyenphase/pyenphase/pull/299), [`1e1087e`](https://github.com/pyenphase/pyenphase/commit/1e1087ec3fc18f3f1e89544ab583a385cd49cb53)) ### Features - Add debug logging for HTTP errors and authentication failures ([#303](https://github.com/pyenphase/pyenphase/pull/303), [`3a9fb42`](https://github.com/pyenphase/pyenphase/commit/3a9fb4230fc52b2040b1fc864ea72ff06b647202)) ## v2.1.2 (2025-06-19) ### Bug Fixes - Set change log mode to init to regenerate missed 2.1.0 ([#297](https://github.com/pyenphase/pyenphase/pull/297), [`39289b4`](https://github.com/pyenphase/pyenphase/commit/39289b4125dbb7a14e78d61ab57a3966895c59e8)) - Set change log mode to init to regenerated missed 2.1.0 ([#297](https://github.com/pyenphase/pyenphase/pull/297), [`39289b4`](https://github.com/pyenphase/pyenphase/commit/39289b4125dbb7a14e78d61ab57a3966895c59e8)) ## v2.1.1 (2025-06-19) ### Bug Fixes - Empty commit to force changelog update ([#296](https://github.com/pyenphase/pyenphase/pull/296), [`f81a4ee`](https://github.com/pyenphase/pyenphase/commit/f81a4eee8fe7b96e96e5f5d350765fe24b94a128)) ### Chores - Add insertion flag to changelog ([#290](https://github.com/pyenphase/pyenphase/pull/290), [`eb7087e`](https://github.com/pyenphase/pyenphase/commit/eb7087e10ea4e427c818a0f2ef7b0123ec38b840)) - **deps**: Bump aiohttp from 3.12.11 to 3.12.13 ([#292](https://github.com/pyenphase/pyenphase/pull/292), [`db1b8ef`](https://github.com/pyenphase/pyenphase/commit/db1b8ef06c0b6a0b2f39dc609c75815800a3aa3c)) - **deps-dev**: Bump pytest-asyncio from 0.26.0 to 1.0.0 ([#291](https://github.com/pyenphase/pyenphase/pull/291), [`0c40ea3`](https://github.com/pyenphase/pyenphase/commit/0c40ea3e7f3048fbed4c815a31eb976b5a2cacd4)) - **deps-dev**: Bump pytest-cov from 6.1.1 to 6.2.1 ([#293](https://github.com/pyenphase/pyenphase/pull/293), [`bbf0f5a`](https://github.com/pyenphase/pyenphase/commit/bbf0f5ab92416775abde872fd7b31f5f7f0ece56)) - **deps-dev**: Bump requests from 2.32.3 to 2.32.4 ([#289](https://github.com/pyenphase/pyenphase/pull/289), [`919bda4`](https://github.com/pyenphase/pyenphase/commit/919bda470025f19f017edba64bedf7f7df0897c8)) - **deps-dev**: Bump urllib3 from 2.2.2 to 2.5.0 ([#295](https://github.com/pyenphase/pyenphase/pull/295), [`2b8d6f2`](https://github.com/pyenphase/pyenphase/commit/2b8d6f2e74ffceefb6e094c92932d66b3c4f0d22)) - **pre-commit.ci**: Pre-commit autoupdate ([#294](https://github.com/pyenphase/pyenphase/pull/294), [`17f9387`](https://github.com/pyenphase/pyenphase/commit/17f9387d76fd0254a126193ac9785381e84b0427)) - **pre-commit.ci**: Pre-commit autoupdate ([#288](https://github.com/pyenphase/pyenphase/pull/288), [`353dde0`](https://github.com/pyenphase/pyenphase/commit/353dde00af0e15fc8a7a0ede961758944af87ea8)) ## v2.1.0 (2025-06-10) ### Chores - **ci**: Bump the github-actions group with 2 updates ([#282](https://github.com/pyenphase/pyenphase/pull/282), [`249f2c7`](https://github.com/pyenphase/pyenphase/commit/249f2c77460bc9f586b4d3f17d410b37e58e2a94)) - **deps**: Bump aiohttp from 3.12.9 to 3.12.11 ([#286](https://github.com/pyenphase/pyenphase/pull/286), [`54f9d18`](https://github.com/pyenphase/pyenphase/commit/54f9d188dcdd95b4d39c8a3a98f191eb7f5edbb8)) - **deps-dev**: Bump pytest from 8.3.5 to 8.4.0 ([#287](https://github.com/pyenphase/pyenphase/pull/287), [`65543b6`](https://github.com/pyenphase/pyenphase/commit/65543b62931da67120a37f87175d522cd5928f98)) ### Features - Use `/ivp/pdm/device_data` to obtain detailed device statistics ([#281](https://github.com/pyenphase/pyenphase/pull/281), [`66872c6`](https://github.com/pyenphase/pyenphase/commit/66872c6743ee0b0c57a868cb5788f46d22c52b5f)) ## v2.0.1 (2025-06-07) ### Bug Fixes - Pass middleware as a tuple ([#285](https://github.com/pyenphase/pyenphase/pull/285), [`7d140c5`](https://github.com/pyenphase/pyenphase/commit/7d140c5e7d61f31afea0715b53381fcd7025ac65)) ## v2.0.0 (2025-06-06) ### Chores - **deps**: Bump awesomeversion from 24.6.0 to 25.5.0 ([#283](https://github.com/pyenphase/pyenphase/pull/283), [`1f02a1f`](https://github.com/pyenphase/pyenphase/commit/1f02a1fd18193bd931aa771926b23c0f10791560)) - **pre-commit.ci**: Pre-commit autoupdate ([#284](https://github.com/pyenphase/pyenphase/pull/284), [`9632e90`](https://github.com/pyenphase/pyenphase/commit/9632e9047614dbc0bea13f820ed23be1734d6cd1)) - **pre-commit.ci**: Pre-commit autoupdate ([#278](https://github.com/pyenphase/pyenphase/pull/278), [`d0581b8`](https://github.com/pyenphase/pyenphase/commit/d0581b89821fa67aaf4509d0e9e46b86799bf5d9)) - **pre-commit.ci**: Pre-commit autoupdate ([#276](https://github.com/pyenphase/pyenphase/pull/276), [`76ba3a6`](https://github.com/pyenphase/pyenphase/commit/76ba3a6676632008a81b38185792f97048f6dbb1)) ### Features - Migrate to aiohttp ([#277](https://github.com/pyenphase/pyenphase/pull/277), [`ebcc2c3`](https://github.com/pyenphase/pyenphase/commit/ebcc2c307bcbdabc01a46ae9d7964ff04cea0ea7)) ## v1.26.1 (2025-05-10) ### Bug Fixes - Metered envoy without ct reports wrong production in fw 8.2.4264 ([#275](https://github.com/pyenphase/pyenphase/pull/275), [`a998bab`](https://github.com/pyenphase/pyenphase/commit/a998bab2fbc3251371b2833100d8cf16de098088)) ### Chores - **deps**: Bump h11 from 0.14.0 to 0.16.0 ([#269](https://github.com/pyenphase/pyenphase/pull/269), [`a6c8fce`](https://github.com/pyenphase/pyenphase/commit/a6c8fce90afe016de64af7df954ae85a8158c419)) - **deps**: Bump lxml from 5.3.2 to 5.4.0 ([#270](https://github.com/pyenphase/pyenphase/pull/270), [`ffced2f`](https://github.com/pyenphase/pyenphase/commit/ffced2f4466bc29d57fbdfeefb430218c6fdd650)) - **deps**: Bump orjson from 3.10.16 to 3.10.18 ([#272](https://github.com/pyenphase/pyenphase/pull/272), [`4cee284`](https://github.com/pyenphase/pyenphase/commit/4cee2843989981b947825d33cf64b0f1291007e0)) - **pre-commit.ci**: Pre-commit autoupdate ([#273](https://github.com/pyenphase/pyenphase/pull/273), [`03af646`](https://github.com/pyenphase/pyenphase/commit/03af6469eb0560bafc86e0711073ce6d0011b95c)) - **pre-commit.ci**: Pre-commit autoupdate ([#271](https://github.com/pyenphase/pyenphase/pull/271), [`b53cbae`](https://github.com/pyenphase/pyenphase/commit/b53cbaecbd995f978a37372a5f7ee590d153ce09)) ## v1.26.0 (2025-04-25) ### Chores - **deps**: Bump lxml from 5.3.1 to 5.3.2 ([#262](https://github.com/pyenphase/pyenphase/pull/262), [`eea42ef`](https://github.com/pyenphase/pyenphase/commit/eea42ef0700ca583728a650dfec6c96fbe18f74b)) - **deps**: Bump tenacity from 9.0.0 to 9.1.2 ([#263](https://github.com/pyenphase/pyenphase/pull/263), [`7a3e38b`](https://github.com/pyenphase/pyenphase/commit/7a3e38b0fdb0d46a32f4b43e1efc86c07383af80)) - **deps-dev**: Bump pytest-cov from 6.0.0 to 6.1.1 ([#264](https://github.com/pyenphase/pyenphase/pull/264), [`aa99971`](https://github.com/pyenphase/pyenphase/commit/aa99971016ca1808a1a90f704c4771ec754d2e97)) - **pre-commit.ci**: Pre-commit autoupdate ([#267](https://github.com/pyenphase/pyenphase/pull/267), [`e3f555c`](https://github.com/pyenphase/pyenphase/commit/e3f555c246561f35c1befee1a25c880485803829)) - **pre-commit.ci**: Pre-commit autoupdate ([#266](https://github.com/pyenphase/pyenphase/pull/266), [`ff371d0`](https://github.com/pyenphase/pyenphase/commit/ff371d0b24292d73605b41e437a74c3d31efde0d)) - **pre-commit.ci**: Pre-commit autoupdate ([#265](https://github.com/pyenphase/pyenphase/pull/265), [`5f5b120`](https://github.com/pyenphase/pyenphase/commit/5f5b12053df3c4165c2e6df130afafeeeeb703b1)) ### Features - Add method to return envoy active interface settings ([#268](https://github.com/pyenphase/pyenphase/pull/268), [`70ff7ac`](https://github.com/pyenphase/pyenphase/commit/70ff7ac6e1a01b6ea62e1ea6df2638cddd4215e1)) ### Testing - De-duplicate fixture loading by using single fixture load function ([#261](https://github.com/pyenphase/pyenphase/pull/261), [`8ec3fba`](https://github.com/pyenphase/pyenphase/commit/8ec3fba4c1769bd1df702b5db182ec18cb0a6d2c)) - De-duplicate fixture loading by using single function ([#261](https://github.com/pyenphase/pyenphase/pull/261), [`8ec3fba`](https://github.com/pyenphase/pyenphase/commit/8ec3fba4c1769bd1df702b5db182ec18cb0a6d2c)) - Run blocking calls in executor ([#261](https://github.com/pyenphase/pyenphase/pull/261), [`8ec3fba`](https://github.com/pyenphase/pyenphase/commit/8ec3fba4c1769bd1df702b5db182ec18cb0a6d2c)) ## v1.25.5 (2025-04-02) ### Bug Fixes - V4 metered without cons CT crashes with KeyError: 'measurementType' ([#259](https://github.com/pyenphase/pyenphase/pull/259), [`da11b5b`](https://github.com/pyenphase/pyenphase/commit/da11b5bd84463188e6f98eb823a1a2f8420fde60)) ### Chores - Lock due to https://github.com/dependabot/dependabot-core/pull/11275 ([#236](https://github.com/pyenphase/pyenphase/pull/236), [`dffeee0`](https://github.com/pyenphase/pyenphase/commit/dffeee0becae187b154e8c63b56ccfdd6b6abaae)) - Rebuild poetry.lock ([#245](https://github.com/pyenphase/pyenphase/pull/245), [`351036f`](https://github.com/pyenphase/pyenphase/commit/351036fa541075073c5bec8c30cfdf1dfc02a613)) - Replace tenacity .retry.statistics by .statistics ([#236](https://github.com/pyenphase/pyenphase/pull/236), [`dffeee0`](https://github.com/pyenphase/pyenphase/commit/dffeee0becae187b154e8c63b56ccfdd6b6abaae)) - Restore some legacy poetry keys to fix dependabot ([#232](https://github.com/pyenphase/pyenphase/pull/232), [`48e930e`](https://github.com/pyenphase/pyenphase/commit/48e930e51ceb9bada135b7fa6a064dc36c5b78de)) - Update dependabot.yml to force re-run attempt ([#231](https://github.com/pyenphase/pyenphase/pull/231), [`baabe6e`](https://github.com/pyenphase/pyenphase/commit/baabe6e5ddfe3f13c75c8b638b90f96cb7c990ec)) - Update dependabot.yml to force rerun ([`ba8f487`](https://github.com/pyenphase/pyenphase/commit/ba8f487f1f036304b7433276fffb23a3c77dc436)) - Update dev status to production/stable ([#243](https://github.com/pyenphase/pyenphase/pull/243), [`d97f24c`](https://github.com/pyenphase/pyenphase/commit/d97f24cb14451ea75d16e43e796e0ea968c38ff7)) - Update poetry.lock ([#248](https://github.com/pyenphase/pyenphase/pull/248), [`fb8ad43`](https://github.com/pyenphase/pyenphase/commit/fb8ad430a676ce43d22e9210d5e18e06eab3606d)) - **ci**: Bump the github-actions group with 2 updates ([#247](https://github.com/pyenphase/pyenphase/pull/247), [`31475ff`](https://github.com/pyenphase/pyenphase/commit/31475ffd7772b5bab3915c29aa2f52e789f8aec1)) - **deps**: Bump orjson from 3.10.15 to 3.10.16 ([#256](https://github.com/pyenphase/pyenphase/pull/256), [`abfd861`](https://github.com/pyenphase/pyenphase/commit/abfd8617dd006b3d40ac8a08bcef222c9ad14928)) - **deps**: Bump tenacity from 8.2.3 to 9.0.0 ([#236](https://github.com/pyenphase/pyenphase/pull/236), [`dffeee0`](https://github.com/pyenphase/pyenphase/commit/dffeee0becae187b154e8c63b56ccfdd6b6abaae)) - **deps-dev**: Bump jinja2 from 3.1.5 to 3.1.6 ([#251](https://github.com/pyenphase/pyenphase/pull/251), [`f0b50de`](https://github.com/pyenphase/pyenphase/commit/f0b50dea3f98374821d0d01055d95c3bcba0ff65)) - **deps-dev**: Bump myst-parser from 4.0.0 to 4.0.1 ([#240](https://github.com/pyenphase/pyenphase/pull/240), [`5423632`](https://github.com/pyenphase/pyenphase/commit/54236321c624e980a537fb6b7af01e5d1a14fc45)) - **deps-dev**: Bump pytest from 7.4.4 to 8.3.4 ([#235](https://github.com/pyenphase/pyenphase/pull/235), [`199bd4a`](https://github.com/pyenphase/pyenphase/commit/199bd4a9cbe3c96a6abbee8a2c0b2dc4371e3a26)) - **deps-dev**: Bump pytest from 8.3.4 to 8.3.5 ([#248](https://github.com/pyenphase/pyenphase/pull/248), [`fb8ad43`](https://github.com/pyenphase/pyenphase/commit/fb8ad430a676ce43d22e9210d5e18e06eab3606d)) - **deps-dev**: Bump pytest-asyncio from 0.21.2 to 0.25.3 ([#239](https://github.com/pyenphase/pyenphase/pull/239), [`24ab1c0`](https://github.com/pyenphase/pyenphase/commit/24ab1c0c36a1b5fcdcce7c4d948f7bed7d34445e)) - **deps-dev**: Bump pytest-asyncio from 0.25.3 to 0.26.0 ([#257](https://github.com/pyenphase/pyenphase/pull/257), [`9f73bce`](https://github.com/pyenphase/pyenphase/commit/9f73bce62b15fed33082a36ff5f8b150eef0eaf5)) - **deps-dev**: Bump sphinx from 7.3.7 to 8.1.3 ([#234](https://github.com/pyenphase/pyenphase/pull/234), [`6310f28`](https://github.com/pyenphase/pyenphase/commit/6310f2881e5b7250b69885a2344bbdf6d71f7933)) - **deps-dev**: Bump sphinx-autodoc-typehints from 1.25.3 to 3.0.1 ([#233](https://github.com/pyenphase/pyenphase/pull/233), [`29ca29d`](https://github.com/pyenphase/pyenphase/commit/29ca29dd8e97b59a427d7fe017ea5bc34411c238)) - **deps-dev**: Bump sphinx-rtd-theme from 2.0.0 to 3.0.2 ([#237](https://github.com/pyenphase/pyenphase/pull/237), [`7d4498b`](https://github.com/pyenphase/pyenphase/commit/7d4498b2327f1e39a524668f578c923636d2a783)) - **deps-dev**: Bump syrupy from 4.8.1 to 4.8.2 ([#245](https://github.com/pyenphase/pyenphase/pull/245), [`351036f`](https://github.com/pyenphase/pyenphase/commit/351036fa541075073c5bec8c30cfdf1dfc02a613)) - **deps-dev**: Bump syrupy from 4.8.2 to 4.9.0 ([#250](https://github.com/pyenphase/pyenphase/pull/250), [`107e0c6`](https://github.com/pyenphase/pyenphase/commit/107e0c6e9829dafd0dca90ea754c4a408d0e8b4e)) - **deps-dev**: Bump syrupy from 4.9.0 to 4.9.1 ([#254](https://github.com/pyenphase/pyenphase/pull/254), [`7f964d2`](https://github.com/pyenphase/pyenphase/commit/7f964d2e6dafed0dc62cf38a542c61e11c8fe2c6)) - **pre-commit.ci**: Pre-commit autoupdate ([#258](https://github.com/pyenphase/pyenphase/pull/258), [`153787d`](https://github.com/pyenphase/pyenphase/commit/153787d76070f30504dd41847b2863ca2471535d)) - **pre-commit.ci**: Pre-commit autoupdate ([#255](https://github.com/pyenphase/pyenphase/pull/255), [`20772e5`](https://github.com/pyenphase/pyenphase/commit/20772e5039e24983fbc2c030bd881dc044b925e5)) - **pre-commit.ci**: Pre-commit autoupdate ([#253](https://github.com/pyenphase/pyenphase/pull/253), [`3601946`](https://github.com/pyenphase/pyenphase/commit/3601946bed60eea298f215735fc0695d15af55d2)) - **pre-commit.ci**: Pre-commit autoupdate ([#252](https://github.com/pyenphase/pyenphase/pull/252), [`ea01214`](https://github.com/pyenphase/pyenphase/commit/ea012147bb5b18efc6f3f6d831708af23f5cc438)) - **pre-commit.ci**: Pre-commit autoupdate ([#249](https://github.com/pyenphase/pyenphase/pull/249), [`78547ef`](https://github.com/pyenphase/pyenphase/commit/78547efabf80242680498c801823ee8f661c535a)) - **pre-commit.ci**: Pre-commit autoupdate ([#246](https://github.com/pyenphase/pyenphase/pull/246), [`9878d8f`](https://github.com/pyenphase/pyenphase/commit/9878d8fb0e4946bf1a2566fd72c6100b4c300464)) - **pre-commit.ci**: Pre-commit autoupdate ([#241](https://github.com/pyenphase/pyenphase/pull/241), [`df71b5c`](https://github.com/pyenphase/pyenphase/commit/df71b5c3de495acaab0d484ff732b9044279b4f5)) ### Documentation - Reorganize and update usage documentation ([#244](https://github.com/pyenphase/pyenphase/pull/244), [`37d107b`](https://github.com/pyenphase/pyenphase/commit/37d107be3e9f87d02fe45d6abd36b4f8f25004fb)) - Replace black badge by ruff badge in readme ([#242](https://github.com/pyenphase/pyenphase/pull/242), [`d3fb541`](https://github.com/pyenphase/pyenphase/commit/d3fb541e342377e0eed98d6c8561f99deb9b3a2f)) - Update docstring examples to reflect ruff formatting rules. ([#238](https://github.com/pyenphase/pyenphase/pull/238), [`ede8786`](https://github.com/pyenphase/pyenphase/commit/ede87866a41cd55403c12031058cef28fc0c4852)) ### Refactoring - Remove unneeded int cast based on ruf046 ([#253](https://github.com/pyenphase/pyenphase/pull/253), [`3601946`](https://github.com/pyenphase/pyenphase/commit/3601946bed60eea298f215735fc0695d15af55d2)) ## v1.25.4 (2025-02-11) ### Bug Fixes - Add missing requires-python key to project ([#230](https://github.com/pyenphase/pyenphase/pull/230), [`8f48344`](https://github.com/pyenphase/pyenphase/commit/8f48344d4b4e73ba54548979355d0a6ab3c8fbff)) ### Chores - Add Python 3.13 to the CI ([#213](https://github.com/pyenphase/pyenphase/pull/213), [`3678102`](https://github.com/pyenphase/pyenphase/commit/36781022234d9efd5beefe02e5394908c97737e4)) - Bump pytest-asyncio to 0.21.2 ([#226](https://github.com/pyenphase/pyenphase/pull/226), [`098fa61`](https://github.com/pyenphase/pyenphase/commit/098fa61f0f262dbd84fc7773a0bf71a6b353ff33)) - Modify dependabot config to force re-run ([#219](https://github.com/pyenphase/pyenphase/pull/219), [`77c5f75`](https://github.com/pyenphase/pyenphase/commit/77c5f75bea06539698b12a897a8bfff7a6f329da)) - Switch to ruff to replace black/isort/flake8 ([#217](https://github.com/pyenphase/pyenphase/pull/217), [`716eca6`](https://github.com/pyenphase/pyenphase/commit/716eca6a9bd7f80e98734d88f2c4d0a897368167)) - Update anyio in poetry.lock ([#224](https://github.com/pyenphase/pyenphase/pull/224), [`51d496c`](https://github.com/pyenphase/pyenphase/commit/51d496c91ff2c5953980da32a2899a7eb8b604e9)) - Update certifi to 2025.1.31 ([#227](https://github.com/pyenphase/pyenphase/pull/227), [`b9ad2a2`](https://github.com/pyenphase/pyenphase/commit/b9ad2a25d2f6887c9b0110a0e6a957e636ec67f7)) - Update dependabot.yml to retrigger run ([`20fc3bb`](https://github.com/pyenphase/pyenphase/commit/20fc3bb0b74a64bb45642c662925722e3a12c1aa)) - Update httpcore in poetry.lock ([#223](https://github.com/pyenphase/pyenphase/pull/223), [`f284b80`](https://github.com/pyenphase/pyenphase/commit/f284b80199cf570a4fe1c2fe8200ee41d964849b)) - Update httpx in the poetry lock ([#220](https://github.com/pyenphase/pyenphase/pull/220), [`e3d5717`](https://github.com/pyenphase/pyenphase/commit/e3d5717dd4d2f02bcf91b76a36c2845e62cbd676)) - Update idna in poetry lock ([#222](https://github.com/pyenphase/pyenphase/pull/222), [`cbf3b28`](https://github.com/pyenphase/pyenphase/commit/cbf3b28efc95bb97fc838f437328ce0c597b28fd)) - Update packaging to 24.2 ([#229](https://github.com/pyenphase/pyenphase/pull/229), [`828e960`](https://github.com/pyenphase/pyenphase/commit/828e96027ed4b13484280e236af506c3a4973860)) - Update pluggy to 1.5.0 ([#228](https://github.com/pyenphase/pyenphase/pull/228), [`c7b042e`](https://github.com/pyenphase/pyenphase/commit/c7b042ecf16d0fa0b3eef1587f4ab68b68719eb6)) - Update pyjwt in poetry.lock ([#225](https://github.com/pyenphase/pyenphase/pull/225), [`9d1b4ba`](https://github.com/pyenphase/pyenphase/commit/9d1b4bab44d463c8c1236e3432c41821ecfab653)) - Update pyupgrade to Python 3.10+ ([#216](https://github.com/pyenphase/pyenphase/pull/216), [`5278800`](https://github.com/pyenphase/pyenphase/commit/5278800f2de866cd1149096647b5f10052ae0eba)) - Update requests in poetry.lock ([#221](https://github.com/pyenphase/pyenphase/pull/221), [`8d19c79`](https://github.com/pyenphase/pyenphase/commit/8d19c79294e2d01628948ff192cd24071a38941f)) - Update zeroconf in the lock to speed up CI ([#218](https://github.com/pyenphase/pyenphase/pull/218), [`c89bfbe`](https://github.com/pyenphase/pyenphase/commit/c89bfbed1a728d930f4db98977dad4e3c59909ff)) - **ci**: Bump the github-actions group with 7 updates ([#206](https://github.com/pyenphase/pyenphase/pull/206), [`61e31b4`](https://github.com/pyenphase/pyenphase/commit/61e31b48da41fb606ee8135443b308fe0a472141)) ## v1.25.3 (2025-02-11) ### Bug Fixes - Bump orjson requirement to 3.10+ for Python 3.13 ([#215](https://github.com/pyenphase/pyenphase/pull/215), [`7db2256`](https://github.com/pyenphase/pyenphase/commit/7db2256a59a26a4fc89b79a8dbaf4fbb16d5eb35)) ## v1.25.2 (2025-02-11) ### Bug Fixes - Update to poetry 2 ([#212](https://github.com/pyenphase/pyenphase/pull/212), [`43e5a15`](https://github.com/pyenphase/pyenphase/commit/43e5a15d747251dbecbad343b71562000d7f5b4f)) ### Chores - Add missing cache to CI ([#214](https://github.com/pyenphase/pyenphase/pull/214), [`d97d6cc`](https://github.com/pyenphase/pyenphase/commit/d97d6cc42b3eace1aa500d07d9abf5824b3ee7ad)) - Create dependabot.yml ([#205](https://github.com/pyenphase/pyenphase/pull/205), [`f3cf369`](https://github.com/pyenphase/pyenphase/commit/f3cf369a866fc91621e6cfb661e51643ed62aad2)) - **deps**: Bump awesomeversion from 24.2.0 to 24.6.0 ([#208](https://github.com/pyenphase/pyenphase/pull/208), [`6488aa6`](https://github.com/pyenphase/pyenphase/commit/6488aa67d4d2c53783894ef31ba90135c0075b52)) - **deps-dev**: Bump pytest-cov from 5.0.0 to 6.0.0 ([#210](https://github.com/pyenphase/pyenphase/pull/210), [`c8924a4`](https://github.com/pyenphase/pyenphase/commit/c8924a434311c9051efdc4e24ccab21347384219)) - **deps-dev**: Bump respx from 0.20.2 to 0.22.0 ([#209](https://github.com/pyenphase/pyenphase/pull/209), [`607cbdf`](https://github.com/pyenphase/pyenphase/commit/607cbdf56db34b99f16ba005880aa4a617be1ceb)) - **deps-dev**: Bump sphinx-autodoc-typehints from 1.25.3 to 3.0.1 ([#207](https://github.com/pyenphase/pyenphase/pull/207), [`bbf89ad`](https://github.com/pyenphase/pyenphase/commit/bbf89adf4c9d9f8b3081299dfc59d72c4affe19d)) - **deps-dev**: Bump syrupy from 4.6.1 to 4.8.1 ([#211](https://github.com/pyenphase/pyenphase/pull/211), [`1ac802e`](https://github.com/pyenphase/pyenphase/commit/1ac802e6a5763d579fca1a731a969d461778718c)) ## v1.25.1 (2025-02-11) ### Bug Fixes - Indexerror crash for fw 8.3.5027 that sends data for not present CT ([#203](https://github.com/pyenphase/pyenphase/pull/203), [`770cab0`](https://github.com/pyenphase/pyenphase/commit/770cab092890d05b8f32fc9b180be6f58081a013)) ### Chores - **pre-commit.ci**: Auto fixes ([#203](https://github.com/pyenphase/pyenphase/pull/203), [`770cab0`](https://github.com/pyenphase/pyenphase/commit/770cab092890d05b8f32fc9b180be6f58081a013)) ## v1.25.0 (2025-02-11) ### Features - Add http method to request method parameters ([#197](https://github.com/pyenphase/pyenphase/pull/197), [`943f8d9`](https://github.com/pyenphase/pyenphase/commit/943f8d99306cc3dd1b45cf9ec810aa8936698c53)) ## v1.24.0 (2025-02-11) ### Chores - **deps-dev**: Bump jinja2 from 3.1.4 to 3.1.5 ([#200](https://github.com/pyenphase/pyenphase/pull/200), [`ed9b448`](https://github.com/pyenphase/pyenphase/commit/ed9b448d3937fb922ecaccb2ee7dc135113f216b)) - **pre-commit.ci**: Pre-commit autoupdate ([#204](https://github.com/pyenphase/pyenphase/pull/204), [`2e5920d`](https://github.com/pyenphase/pyenphase/commit/2e5920d18569868cd6e1ede48678158465b5bd08)) - **pre-commit.ci**: Pre-commit autoupdate ([#202](https://github.com/pyenphase/pyenphase/pull/202), [`75b0ef0`](https://github.com/pyenphase/pyenphase/commit/75b0ef075ed29793471110de3e3fd0de9fe6d450)) - **pre-commit.ci**: Pre-commit autoupdate ([#201](https://github.com/pyenphase/pyenphase/pull/201), [`5fbb475`](https://github.com/pyenphase/pyenphase/commit/5fbb475b9c3770cc132d1ad36472dbd5842561bd)) ### Features - Add token_type property to identify user or installer type token. ([#180](https://github.com/pyenphase/pyenphase/pull/180), [`3708a54`](https://github.com/pyenphase/pyenphase/commit/3708a543bada7827fc16c52f9b747c0808061260)) - **tariff**: Add new firmware 8.2.42xx Storage settings opt_schedules property to EnvoyStorageSettings ([#179](https://github.com/pyenphase/pyenphase/pull/179), [`7b3d559`](https://github.com/pyenphase/pyenphase/commit/7b3d559ab56582519a6ccd34ce446f0f4014656e)) - **tariff**: Add opt_schedules to EnvoyStorageSettings ([#179](https://github.com/pyenphase/pyenphase/pull/179), [`7b3d559`](https://github.com/pyenphase/pyenphase/commit/7b3d559ab56582519a6ccd34ce446f0f4014656e)) ### Refactoring - Add exception catch for envoy._json_request() indirectly used by HA actions. ([#194](https://github.com/pyenphase/pyenphase/pull/194), [`e2224e2`](https://github.com/pyenphase/pyenphase/commit/e2224e22d8870210c8e1614b7114e16c9426c535)) ## v1.23.1 (2025-01-21) ### Bug Fixes - Set EnvoyStorageMode to None if tariff storage_settings mode is null and causes exception None is not a valid EnvoyStorageMode. ([#199](https://github.com/pyenphase/pyenphase/pull/199), [`d06680a`](https://github.com/pyenphase/pyenphase/commit/d06680adee686929aa648d294358e0c9a951f1be)) - Tariff storage_settings mode: None causes exception "None is not a valid EnvoyStorageMode", set EnvoyStorageMode to None. ([#199](https://github.com/pyenphase/pyenphase/pull/199), [`d06680a`](https://github.com/pyenphase/pyenphase/commit/d06680adee686929aa648d294358e0c9a951f1be)) ### Chores - Fix lint text issues ([#181](https://github.com/pyenphase/pyenphase/pull/181), [`a6bbc25`](https://github.com/pyenphase/pyenphase/commit/a6bbc256eedf2b8edbcaae7ed0549cb99957fc11)) - **pre-commit.ci**: Auto fixes ([#190](https://github.com/pyenphase/pyenphase/pull/190), [`58b2df1`](https://github.com/pyenphase/pyenphase/commit/58b2df1faa077fcc834377b4a03caf619156c2d2)) - **pre-commit.ci**: Auto fixes ([#186](https://github.com/pyenphase/pyenphase/pull/186), [`76de306`](https://github.com/pyenphase/pyenphase/commit/76de306906e0a7252def6c133a16c88d71913276)) - **pre-commit.ci**: Auto fixes ([#187](https://github.com/pyenphase/pyenphase/pull/187), [`ecc88c2`](https://github.com/pyenphase/pyenphase/commit/ecc88c285147ac55b2c370a6b28376ca68d4532d)) - **pre-commit.ci**: Auto fixes ([#184](https://github.com/pyenphase/pyenphase/pull/184), [`b869d0d`](https://github.com/pyenphase/pyenphase/commit/b869d0d9bcb9341c83d3848879efcac5ff5d597f)) - **pre-commit.ci**: Auto fixes ([#181](https://github.com/pyenphase/pyenphase/pull/181), [`a6bbc25`](https://github.com/pyenphase/pyenphase/commit/a6bbc256eedf2b8edbcaae7ed0549cb99957fc11)) - **pre-commit.ci**: Pre-commit autoupdate ([#198](https://github.com/pyenphase/pyenphase/pull/198), [`a4bc451`](https://github.com/pyenphase/pyenphase/commit/a4bc451f254d9fc7a5000d5f0e7b2d227950483e)) - **pre-commit.ci**: Pre-commit autoupdate ([#196](https://github.com/pyenphase/pyenphase/pull/196), [`ed7c44a`](https://github.com/pyenphase/pyenphase/commit/ed7c44aa486ecd14e129cdd030b6a38684ab3514)) - **pre-commit.ci**: Pre-commit autoupdate ([#193](https://github.com/pyenphase/pyenphase/pull/193), [`60d9fbf`](https://github.com/pyenphase/pyenphase/commit/60d9fbfe64ebf346d3802ea903d2c3446580d008)) ### Documentation - Docs gen 2, refactor authentication doc ([#181](https://github.com/pyenphase/pyenphase/pull/181), [`a6bbc25`](https://github.com/pyenphase/pyenphase/commit/a6bbc256eedf2b8edbcaae7ed0549cb99957fc11)) - Fix codespell lint issues ([#187](https://github.com/pyenphase/pyenphase/pull/187), [`ecc88c2`](https://github.com/pyenphase/pyenphase/commit/ecc88c285147ac55b2c370a6b28376ca68d4532d)) - Fix issue with multiple docstrings in ssl module. ([#186](https://github.com/pyenphase/pyenphase/pull/186), [`76de306`](https://github.com/pyenphase/pyenphase/commit/76de306906e0a7252def6c133a16c88d71913276)) - Fix more textlint issues ([#184](https://github.com/pyenphase/pyenphase/pull/184), [`b869d0d`](https://github.com/pyenphase/pyenphase/commit/b869d0d9bcb9341c83d3848879efcac5ff5d597f)) - Fix multiple docstrings in const.py ([#190](https://github.com/pyenphase/pyenphase/pull/190), [`58b2df1`](https://github.com/pyenphase/pyenphase/commit/58b2df1faa077fcc834377b4a03caf619156c2d2)) - Fix textlint issues ([#184](https://github.com/pyenphase/pyenphase/pull/184), [`b869d0d`](https://github.com/pyenphase/pyenphase/commit/b869d0d9bcb9341c83d3848879efcac5ff5d597f)) - Refactor const.py to use docstring for documentation. ([#190](https://github.com/pyenphase/pyenphase/pull/190), [`58b2df1`](https://github.com/pyenphase/pyenphase/commit/58b2df1faa077fcc834377b4a03caf619156c2d2)) - Refactor envoy class documentation using docstrings ([#184](https://github.com/pyenphase/pyenphase/pull/184), [`b869d0d`](https://github.com/pyenphase/pyenphase/commit/b869d0d9bcb9341c83d3848879efcac5ff5d597f)) - Refactor EnvoyData class documentation using docstrings ([#189](https://github.com/pyenphase/pyenphase/pull/189), [`6048a0f`](https://github.com/pyenphase/pyenphase/commit/6048a0fda2ef9eae1404962db13fcf300291530e)) - Refactor firmware class documentation ([#185](https://github.com/pyenphase/pyenphase/pull/185), [`ab7bae4`](https://github.com/pyenphase/pyenphase/commit/ab7bae40d135207f34ba762a14b35c0fa24acb08)) - Refactor firmware class documentation using docstrings ([#185](https://github.com/pyenphase/pyenphase/pull/185), [`ab7bae4`](https://github.com/pyenphase/pyenphase/commit/ab7bae40d135207f34ba762a14b35c0fa24acb08)) - Refactor json helper documentation using docstrings ([#188](https://github.com/pyenphase/pyenphase/pull/188), [`aea3359`](https://github.com/pyenphase/pyenphase/commit/aea3359762a105106705d066324729d7ac768b48)) - Refactor ssl helper documentation using docstring ([#186](https://github.com/pyenphase/pyenphase/pull/186), [`76de306`](https://github.com/pyenphase/pyenphase/commit/76de306906e0a7252def6c133a16c88d71913276)) - Update guidelines to documentation for using docstring ([#187](https://github.com/pyenphase/pyenphase/pull/187), [`ecc88c2`](https://github.com/pyenphase/pyenphase/commit/ecc88c285147ac55b2c370a6b28376ca68d4532d)) ## v1.23.0 (2024-11-21) ### Chores - **pre-commit.ci**: Auto fixes ([#182](https://github.com/pyenphase/pyenphase/pull/182), [`fa24372`](https://github.com/pyenphase/pyenphase/commit/fa2437208e76d6c1f90a01b55c98fdd1ca3cb450)) - **pre-commit.ci**: Pre-commit autoupdate ([#176](https://github.com/pyenphase/pyenphase/pull/176), [`fc76ed5`](https://github.com/pyenphase/pyenphase/commit/fc76ed5a43b76b4506b99423938bfbef49ad3a5d)) ### Documentation - Add license to documentation project info section ([#182](https://github.com/pyenphase/pyenphase/pull/182), [`fa24372`](https://github.com/pyenphase/pyenphase/commit/fa2437208e76d6c1f90a01b55c98fdd1ca3cb450)) - Minor updates to usage example. ([#183](https://github.com/pyenphase/pyenphase/pull/183), [`b287005`](https://github.com/pyenphase/pyenphase/commit/b28700558b53ebfaeb7d21e7cdb68415c9a78f1a)) ### Features - Add ACB model documentation and some pre-commit cleanup ([#191](https://github.com/pyenphase/pyenphase/pull/191), [`1caeff2`](https://github.com/pyenphase/pyenphase/commit/1caeff2f49397e6c2dabf2ff99cb7a8ccc685a50)) - Add ACB updaters ([#191](https://github.com/pyenphase/pyenphase/pull/191), [`1caeff2`](https://github.com/pyenphase/pyenphase/commit/1caeff2f49397e6c2dabf2ff99cb7a8ccc685a50)) - Add model for ACB batteries ([#191](https://github.com/pyenphase/pyenphase/pull/191), [`1caeff2`](https://github.com/pyenphase/pyenphase/commit/1caeff2f49397e6c2dabf2ff99cb7a8ccc685a50)) - Add support for ACB batteries ([#191](https://github.com/pyenphase/pyenphase/pull/191), [`1caeff2`](https://github.com/pyenphase/pyenphase/commit/1caeff2f49397e6c2dabf2ff99cb7a8ccc685a50)) ### Refactoring - Implement review change proposals. ([#191](https://github.com/pyenphase/pyenphase/pull/191), [`1caeff2`](https://github.com/pyenphase/pyenphase/commit/1caeff2f49397e6c2dabf2ff99cb7a8ccc685a50)) ### Testing - Add 8.2.4382 ACB battery fixture ([#191](https://github.com/pyenphase/pyenphase/pull/191), [`1caeff2`](https://github.com/pyenphase/pyenphase/commit/1caeff2f49397e6c2dabf2ff99cb7a8ccc685a50)) - Add ACB battery tests ([#191](https://github.com/pyenphase/pyenphase/pull/191), [`1caeff2`](https://github.com/pyenphase/pyenphase/commit/1caeff2f49397e6c2dabf2ff99cb7a8ccc685a50)) ## v1.22.0 (2024-08-03) ### Features - **netconsumption**: Add system_net_consumption and phases ([#177](https://github.com/pyenphase/pyenphase/pull/177), [`c734a6d`](https://github.com/pyenphase/pyenphase/commit/c734a6d67b6ac355ba528fcf78fd86a33e48a419)) ## v1.21.0 (2024-07-16) ### Chores - **deps**: Bump certifi from 2024.2.2 to 2024.7.4 ([#175](https://github.com/pyenphase/pyenphase/pull/175), [`52eb502`](https://github.com/pyenphase/pyenphase/commit/52eb502f4a710259cffc5313432c2b7ea8fee603)) ### Features - **generator**: Probe for generator ([#160](https://github.com/pyenphase/pyenphase/pull/160), [`42a2533`](https://github.com/pyenphase/pyenphase/commit/42a2533f44ec975c72bd0be9dc70c75a987ff030)) ### Refactoring - Extend fixture_collector with cmdline args and option to read HA config file ([#162](https://github.com/pyenphase/pyenphase/pull/162), [`cb6c40c`](https://github.com/pyenphase/pyenphase/commit/cb6c40cf5d423893f259bb7fd4c98a5a1e693b92)) - Tweak code ([#162](https://github.com/pyenphase/pyenphase/pull/162), [`cb6c40c`](https://github.com/pyenphase/pyenphase/commit/cb6c40cf5d423893f259bb7fd4c98a5a1e693b92)) - Use HA config information and cmdline args for fixture collection ([#162](https://github.com/pyenphase/pyenphase/pull/162), [`cb6c40c`](https://github.com/pyenphase/pyenphase/commit/cb6c40cf5d423893f259bb7fd4c98a5a1e693b92)) ## v1.20.6 (2024-07-03) ### Bug Fixes - Raise EnvoyCommunicationError for hhtpx NetworkError and TimeoutExcpetion exceptions ([#170](https://github.com/pyenphase/pyenphase/pull/170), [`c6d238f`](https://github.com/pyenphase/pyenphase/commit/c6d238f83b10622cb20493bcf70e4e54deb751d2)) - Raise EnvoyCommunicationError for httpx ConnectError and TimeoutException exceptions during Envoy.update ([#170](https://github.com/pyenphase/pyenphase/pull/170), [`c6d238f`](https://github.com/pyenphase/pyenphase/commit/c6d238f83b10622cb20493bcf70e4e54deb751d2)) ### Testing - Httpx.TimeoutException and NetworkError map to EnvoyCommunicationError ([#170](https://github.com/pyenphase/pyenphase/pull/170), [`c6d238f`](https://github.com/pyenphase/pyenphase/commit/c6d238f83b10622cb20493bcf70e4e54deb751d2)) ## v1.20.5 (2024-07-03) ### Bug Fixes - Report EnvoyHTTPStatusError for _json_request if status not in 200-300 ([#171](https://github.com/pyenphase/pyenphase/pull/171), [`46fb2b3`](https://github.com/pyenphase/pyenphase/commit/46fb2b386ff1991ba26d4b60628163cff147afa9)) ### Chores - **pre-commit.ci**: Pre-commit autoupdate ([#174](https://github.com/pyenphase/pyenphase/pull/174), [`3fc9920`](https://github.com/pyenphase/pyenphase/commit/3fc99208c47f6d491442b341d9d571f658623169)) ### Refactoring - Get monotonic time and only when in debug mode ([#172](https://github.com/pyenphase/pyenphase/pull/172), [`8f0e092`](https://github.com/pyenphase/pyenphase/commit/8f0e092a52b7eea7d9c13a0d1ba1bf2172992e88)) - Unify request reply debug log all showing url and duration. ([#172](https://github.com/pyenphase/pyenphase/pull/172), [`8f0e092`](https://github.com/pyenphase/pyenphase/commit/8f0e092a52b7eea7d9c13a0d1ba1bf2172992e88)) ### Testing - Add test for request status not between 200-300 ([#171](https://github.com/pyenphase/pyenphase/pull/171), [`46fb2b3`](https://github.com/pyenphase/pyenphase/commit/46fb2b386ff1991ba26d4b60628163cff147afa9)) ## v1.20.4 (2024-07-02) ### Bug Fixes - For fw 3.x mark production with only zero values as EnvoyPoorDataQuality error ([#173](https://github.com/pyenphase/pyenphase/pull/173), [`8b6b302`](https://github.com/pyenphase/pyenphase/commit/8b6b302b626742e101708c5bbd0c0a46e86f9cb7)) ### Chores - **deps-dev**: Bump jinja2 from 3.1.3 to 3.1.4 ([#163](https://github.com/pyenphase/pyenphase/pull/163), [`d8d90f9`](https://github.com/pyenphase/pyenphase/commit/d8d90f92344ee10d2fe7bacdc7b40a59166be1fc)) - **deps-dev**: Bump requests from 2.31.0 to 2.32.0 ([#164](https://github.com/pyenphase/pyenphase/pull/164), [`114854d`](https://github.com/pyenphase/pyenphase/commit/114854df454ad6b8d8a0aad9abd87168857af7ed)) - **deps-dev**: Bump urllib3 from 2.2.1 to 2.2.2 ([#167](https://github.com/pyenphase/pyenphase/pull/167), [`9f130fb`](https://github.com/pyenphase/pyenphase/commit/9f130fb4e816953ea8652552b744cf5c4ea48cbb)) ## v1.20.3 (2024-05-07) ### Bug Fixes - Get production phase data using details parameter ([#159](https://github.com/pyenphase/pyenphase/pull/159), [`d2a478c`](https://github.com/pyenphase/pyenphase/commit/d2a478c25581cbb147506d138db3043c70345fae)) ### Chores - **deps**: Bump pytest-cov to 5.0 ([#156](https://github.com/pyenphase/pyenphase/pull/156), [`a955c65`](https://github.com/pyenphase/pyenphase/commit/a955c6587595cd36a2a0a24274de0778ae23df3d)) - **deps**: Remove deprecated cookies on request ([#158](https://github.com/pyenphase/pyenphase/pull/158), [`b4eecda`](https://github.com/pyenphase/pyenphase/commit/b4eecda718fd89894396d48e1c5ec484898ffe99)) - **deps**: Replace deprecated httpx data with content ([#157](https://github.com/pyenphase/pyenphase/pull/157), [`86f8ba2`](https://github.com/pyenphase/pyenphase/commit/86f8ba2a183ebdf0ca57bd92fd75c57841f4875d)) ## v1.20.2 (2024-04-18) ### Bug Fixes - Add missing EnvoyTokenAuth class properties ([#150](https://github.com/pyenphase/pyenphase/pull/150), [`d01157a`](https://github.com/pyenphase/pyenphase/commit/d01157a1ec3139f67e085f0a4e529f2e7af09943)) ### Chores - Update dependancies to latest versions ([#153](https://github.com/pyenphase/pyenphase/pull/153), [`e750144`](https://github.com/pyenphase/pyenphase/commit/e7501441baff3c66a198e8eec260292dc13bbb85)) - **deps**: Bump idna from 3.4 to 3.7 ([#149](https://github.com/pyenphase/pyenphase/pull/149), [`0596e59`](https://github.com/pyenphase/pyenphase/commit/0596e59d1f232376ce3f97342b8a76ba1bdac174)) ### Documentation - Let readtedocs use virtualenv for build ([#151](https://github.com/pyenphase/pyenphase/pull/151), [`9e8b648`](https://github.com/pyenphase/pyenphase/commit/9e8b648875db5fcc2210d7f180c0d278485eafb8)) - Let readthedocs use virtualenv for build ([#151](https://github.com/pyenphase/pyenphase/pull/151), [`9e8b648`](https://github.com/pyenphase/pyenphase/commit/9e8b648875db5fcc2210d7f180c0d278485eafb8)) - Use new format to specify virtual env for readthedocs ([#152](https://github.com/pyenphase/pyenphase/pull/152), [`4b9a9ea`](https://github.com/pyenphase/pyenphase/commit/4b9a9ea79ef94dfd1fed2b262a12cb016da2802c)) ### Testing - Correct 7.6.175 fw fixture and add 7.3.466 fw ([#155](https://github.com/pyenphase/pyenphase/pull/155), [`074eb7c`](https://github.com/pyenphase/pyenphase/commit/074eb7cd7ca6d19534ef84be3dc7a281edf3af48)) - Improve code coverage ([#146](https://github.com/pyenphase/pyenphase/pull/146), [`c55aa92`](https://github.com/pyenphase/pyenphase/commit/c55aa92e0b45fb9ed7b435d6fdc55c3a49e552dd)) ## v1.20.1 (2024-03-26) ### Bug Fixes - Endless loop on envoy unreachable ([#145](https://github.com/pyenphase/pyenphase/pull/145), [`f074c61`](https://github.com/pyenphase/pyenphase/commit/f074c61b56b0fdb1080ff3c54f82c59a8015b6d9)) ## v1.20.0 (2024-03-21) ### Features - Report storage CT data ([#144](https://github.com/pyenphase/pyenphase/pull/144), [`52c53fe`](https://github.com/pyenphase/pyenphase/commit/52c53fe20123514177290e964e03a23454e42e9c)) ### Refactoring - Add empty data structures for storage CT ([#142](https://github.com/pyenphase/pyenphase/pull/142), [`669b95a`](https://github.com/pyenphase/pyenphase/commit/669b95aba0d333807d795e6a83a657ae5c7c295b)) ## v1.19.2 (2024-03-08) ### Bug Fixes - Consumption CT not found when 3 CT reported ([#140](https://github.com/pyenphase/pyenphase/pull/140), [`7c2f52c`](https://github.com/pyenphase/pyenphase/commit/7c2f52cc28fdc872a8c5875fc7f7d8b7e233bc01)) ## v1.19.1 (2024-02-27) ### Bug Fixes - Force release ([#139](https://github.com/pyenphase/pyenphase/pull/139), [`b16f132`](https://github.com/pyenphase/pyenphase/commit/b16f13264ffdb90de53d3d9730eb0cd700724ffd)) ### Chores - **deps**: Bump orjson from 3.9.10 to 3.9.15 ([#137](https://github.com/pyenphase/pyenphase/pull/137), [`25ad476`](https://github.com/pyenphase/pyenphase/commit/25ad4769681e70cd414ddb4efd665f3334aee361)) ### Refactoring - Add type hint to PHASENAMES ([#138](https://github.com/pyenphase/pyenphase/pull/138), [`b20d60f`](https://github.com/pyenphase/pyenphase/commit/b20d60fe8a4262c605e9598d5d33468aeb85051b)) ## v1.19.0 (2024-01-27) ### Features - Add envoy_model property ([#136](https://github.com/pyenphase/pyenphase/pull/136), [`42652cd`](https://github.com/pyenphase/pyenphase/commit/42652cda168d1cf1d4b637071f0603d0b0707066)) ## v1.18.0 (2024-01-23) ### Documentation - Document CT meter data ([#134](https://github.com/pyenphase/pyenphase/pull/134), [`cfd396b`](https://github.com/pyenphase/pyenphase/commit/cfd396bde18a908d7703d421a10126abc06f0542)) ### Features - Add updater for Current Transformer data ([#135](https://github.com/pyenphase/pyenphase/pull/135), [`1ca6118`](https://github.com/pyenphase/pyenphase/commit/1ca6118e6aaecb829b4cd711d72d6296fad26bae)) ### Refactoring - Add CT meters model datastructures ([#133](https://github.com/pyenphase/pyenphase/pull/133), [`8d6e2c5`](https://github.com/pyenphase/pyenphase/commit/8d6e2c585b2962838fc9be0ff30153915e6873c2)) - Add meters model datastructures ([#133](https://github.com/pyenphase/pyenphase/pull/133), [`8d6e2c5`](https://github.com/pyenphase/pyenphase/commit/8d6e2c585b2962838fc9be0ff30153915e6873c2)) ## v1.17.0 (2024-01-11) ### Chores - Bump python for readthedocs to 3.11 ([#130](https://github.com/pyenphase/pyenphase/pull/130), [`35fa785`](https://github.com/pyenphase/pyenphase/commit/35fa78501c0e0656c33c79bf96476b01ac0a2913)) - **deps-dev**: Bump jinja2 from 3.1.2 to 3.1.3 ([#132](https://github.com/pyenphase/pyenphase/pull/132), [`c2a9460`](https://github.com/pyenphase/pyenphase/commit/c2a9460d8a958cc0b3d161e2fbfdcbaf648b021e)) ### Documentation - Reorganize and extend documentation. ([#129](https://github.com/pyenphase/pyenphase/pull/129), [`4d8e463`](https://github.com/pyenphase/pyenphase/commit/4d8e463fc5d5e500876f721ae2831cc90a275d9a)) ### Features - Write request reply to debuglog when in debug ([#131](https://github.com/pyenphase/pyenphase/pull/131), [`e255684`](https://github.com/pyenphase/pyenphase/commit/e25568444ca4a629bc38904c0f27777550219117)) ## v1.16.0 (2024-01-09) ### Features - Provide phase data for envoy metered with ct ([#126](https://github.com/pyenphase/pyenphase/pull/126), [`454dbc5`](https://github.com/pyenphase/pyenphase/commit/454dbc58ebb2edf23e9c64173fb8b5d155b327fc)) ## v1.15.2 (2023-12-20) ### Bug Fixes - 3.9.x firmware with meters probe ([#128](https://github.com/pyenphase/pyenphase/pull/128), [`06606c5`](https://github.com/pyenphase/pyenphase/commit/06606c5516c84b3ee500843b8b843bf180658055)) ## v1.15.1 (2023-12-20) ### Bug Fixes - Skip meters endpoint if it returns a 401 ([#125](https://github.com/pyenphase/pyenphase/pull/125), [`166c25c`](https://github.com/pyenphase/pyenphase/commit/166c25c410b6fa319bddea78db44606da7364aeb)) ### Chores - Add tests ([#125](https://github.com/pyenphase/pyenphase/pull/125), [`166c25c`](https://github.com/pyenphase/pyenphase/commit/166c25c410b6fa319bddea78db44606da7364aeb)) ## v1.15.0 (2023-12-19) ### Features - Provide phase configuration for envoy metered with ct ([#122](https://github.com/pyenphase/pyenphase/pull/122), [`12204a8`](https://github.com/pyenphase/pyenphase/commit/12204a8ec2082cb561f334e21e6febfdb2c8a082)) ### Refactoring - Add empty data structures and tests for phase information ([#121](https://github.com/pyenphase/pyenphase/pull/121), [`f5cbea7`](https://github.com/pyenphase/pyenphase/commit/f5cbea7bf431c1ce10420851a6e66383c6641fbb)) - Add sphinx napoleon extension for auto doc generation. ([#117](https://github.com/pyenphase/pyenphase/pull/117), [`577c40e`](https://github.com/pyenphase/pyenphase/commit/577c40ee9310ed02dfca675ffd63826c8c0287b1)) - Rename data parameter of EnvoyUpdater base class to envoy_data ([#119](https://github.com/pyenphase/pyenphase/pull/119), [`a0abccd`](https://github.com/pyenphase/pyenphase/commit/a0abccd7423ed0fa48e67543cd9bcc32352b0b74)) - Use TypedDict for meter data and enum for fields and phasenames ([#116](https://github.com/pyenphase/pyenphase/pull/116), [`0f7fe6b`](https://github.com/pyenphase/pyenphase/commit/0f7fe6bb80cd44f5fbd3bcededdb2d0e4ff2d3a1)) ### Testing - Add 401 test for ivp/meters and change not existing reply to 404 ([#120](https://github.com/pyenphase/pyenphase/pull/120), [`12bbe91`](https://github.com/pyenphase/pyenphase/commit/12bbe91812161360e2f6f62269f19544084e2f77)) ## v1.14.3 (2023-11-11) ### Bug Fixes - **#99**: Envoy metered without CT reporting wrong values ([#111](https://github.com/pyenphase/pyenphase/pull/111), [`2188969`](https://github.com/pyenphase/pyenphase/commit/21889696fdc06f423f382eb404483e1b5d641094)) ### Chores - Fix docs build ([#115](https://github.com/pyenphase/pyenphase/pull/115), [`809bb5a`](https://github.com/pyenphase/pyenphase/commit/809bb5affd67c2d846485728fe03e329392b9fa3)) - Fix python version in readthedocs ([#114](https://github.com/pyenphase/pyenphase/pull/114), [`c89c989`](https://github.com/pyenphase/pyenphase/commit/c89c98989033b382bc05170972e1c4bedc67c3db)) ### Documentation - Update usage.md ([#109](https://github.com/pyenphase/pyenphase/pull/109), [`2e31671`](https://github.com/pyenphase/pyenphase/commit/2e316718081fccab314844a76aa9c6e4e54d20a9)) ## v1.14.2 (2023-11-06) ### Bug Fixes - Make date field optional in storage settings tariff model ([#112](https://github.com/pyenphase/pyenphase/pull/112), [`cf98198`](https://github.com/pyenphase/pyenphase/commit/cf98198b80326f5bf57c58c77eedbe17b6142b0b)) ### Chores - **deps**: Update deps via poetry ([#113](https://github.com/pyenphase/pyenphase/pull/113), [`34aaa0e`](https://github.com/pyenphase/pyenphase/commit/34aaa0e210c36cfe63e72fe5b1c3fef0f02ab4eb)) ## v1.14.1 (2023-11-02) ### Bug Fixes - Add economy EnvoyStorageMode ([#110](https://github.com/pyenphase/pyenphase/pull/110), [`edaf93c`](https://github.com/pyenphase/pyenphase/commit/edaf93c8c1cd71f34bf0be227436f676b1c13772)) ## v1.14.0 (2023-10-24) ### Features - **multiphase**: Add phase_count property to envoy ([#105](https://github.com/pyenphase/pyenphase/pull/105), [`39ec460`](https://github.com/pyenphase/pyenphase/commit/39ec4606b1bfc152189c48edc89396267564ac13)) ## v1.13.1 (2023-10-21) ### Bug Fixes - Ensure tariff endpoint is skipped on firmware 3 ([#102](https://github.com/pyenphase/pyenphase/pull/102), [`4fd7796`](https://github.com/pyenphase/pyenphase/commit/4fd77967230089ec9e86c6e6c3e237b6153abb87)) ### Chores - Add python 3.12 to the CI ([#103](https://github.com/pyenphase/pyenphase/pull/103), [`c23c3cf`](https://github.com/pyenphase/pyenphase/commit/c23c3cf1402076bf32af685187247d240b4790d4)) - **deps-dev**: Bump urllib3 from 2.0.4 to 2.0.7 ([#100](https://github.com/pyenphase/pyenphase/pull/100), [`f9ae1a7`](https://github.com/pyenphase/pyenphase/commit/f9ae1a766eafd5287c4801a55faa8f1b9a510dfc)) ## v1.13.0 (2023-10-20) ### Features - Add support for changing storage mode and reserve soc ([#101](https://github.com/pyenphase/pyenphase/pull/101), [`16a1471`](https://github.com/pyenphase/pyenphase/commit/16a1471d7b2e961be218825151401a4cd27fe096)) ## v1.12.0 (2023-10-11) ### Chores - Add 4.10.35 fixtures ([#92](https://github.com/pyenphase/pyenphase/pull/92), [`27e81d2`](https://github.com/pyenphase/pyenphase/commit/27e81d2233594b07d86eb2927bb97acbe10e7e08)) - Add fixtures for 7.6.185 with cts and battery 3t ([#93](https://github.com/pyenphase/pyenphase/pull/93), [`5d7a8f8`](https://github.com/pyenphase/pyenphase/commit/5d7a8f83fc0892c01ce7eae4d8c503090847ae8c)) - Add tests for 7.6.185_with_cts_and_battery_3t ([#94](https://github.com/pyenphase/pyenphase/pull/94), [`2ae0fa2`](https://github.com/pyenphase/pyenphase/commit/2ae0fa2058c34ca16cd005395bfaa51f79f29561)) - Bump syrupy to 4.5.0 ([#98](https://github.com/pyenphase/pyenphase/pull/98), [`7ea6c1c`](https://github.com/pyenphase/pyenphase/commit/7ea6c1cf2ca596c8b02ec1975d56121cec143147)) ### Features - Add initial tariff support and charge from grid functions ([#95](https://github.com/pyenphase/pyenphase/pull/95), [`5418d4c`](https://github.com/pyenphase/pyenphase/commit/5418d4c99ee6a5f0998367525ccba65f0edb9bc5)) ## v1.11.4 (2023-09-13) ### Bug Fixes - Use eim if activeCount is true ([#91](https://github.com/pyenphase/pyenphase/pull/91), [`ac041a4`](https://github.com/pyenphase/pyenphase/commit/ac041a4abd2119fa3c784aa74634b27e118b7624)) ## v1.11.3 (2023-09-13) ### Bug Fixes - More dry contact settings should be optional ([#90](https://github.com/pyenphase/pyenphase/pull/90), [`4fc503a`](https://github.com/pyenphase/pyenphase/commit/4fc503a4f8f60051319aaabf386bced2cd0f3076)) ### Chores - Update fixtures for 5.0.62 with newer fixture collector ([#88](https://github.com/pyenphase/pyenphase/pull/88), [`9086494`](https://github.com/pyenphase/pyenphase/commit/9086494081b02e0b9a97c606a0eb16e9f97dfa7f)) ## v1.11.2 (2023-09-12) ### Bug Fixes - Disable consumption when there are no active meters ([#87](https://github.com/pyenphase/pyenphase/pull/87), [`fa28f1c`](https://github.com/pyenphase/pyenphase/commit/fa28f1c31344f0e2d1bc60640902e94bd55b0331)) ### Chores - Add 7.3.130 fixtures without consumption ([#85](https://github.com/pyenphase/pyenphase/pull/85), [`4922693`](https://github.com/pyenphase/pyenphase/commit/49226932a95a69cab59c740f3033b4ebe413e8b0)) - Add tests for no consumption ([#86](https://github.com/pyenphase/pyenphase/pull/86), [`14039a6`](https://github.com/pyenphase/pyenphase/commit/14039a6b9481dfcda1ba3810584a0f1560acf36a)) ## v1.11.1 (2023-09-12) ### Bug Fixes - Black_s_start key not returned by all Ensemble systems ([#84](https://github.com/pyenphase/pyenphase/pull/84), [`357f0bd`](https://github.com/pyenphase/pyenphase/commit/357f0bd132a976f31a052063ce514ac86534de8e)) - Black_s_start not returned by all Ensemble systems ([#84](https://github.com/pyenphase/pyenphase/pull/84), [`357f0bd`](https://github.com/pyenphase/pyenphase/commit/357f0bd132a976f31a052063ce514ac86534de8e)) ## v1.11.0 (2023-09-08) ### Bug Fixes - Get watt_hours_lifetime on total system ([#83](https://github.com/pyenphase/pyenphase/pull/83), [`d7e195e`](https://github.com/pyenphase/pyenphase/commit/d7e195e498362d1374366d88a24afc8da6b01321)) ### Chores - Compare Enphase dataclasses as dict ([#82](https://github.com/pyenphase/pyenphase/pull/82), [`fd93f4c`](https://github.com/pyenphase/pyenphase/commit/fd93f4ceb4825feba80dcbedf0b6beb1b10af688)) ### Features - Add fallback when api/v1/production endpoint if broken ([#83](https://github.com/pyenphase/pyenphase/pull/83), [`d7e195e`](https://github.com/pyenphase/pyenphase/commit/d7e195e498362d1374366d88a24afc8da6b01321)) - Add fallback when api/v1/production endpoint is broken ([#83](https://github.com/pyenphase/pyenphase/pull/83), [`d7e195e`](https://github.com/pyenphase/pyenphase/commit/d7e195e498362d1374366d88a24afc8da6b01321)) ## v1.10.0 (2023-09-08) ### Features - Add 7.6.175 fixtures with total consumption ([#81](https://github.com/pyenphase/pyenphase/pull/81), [`1bc2b20`](https://github.com/pyenphase/pyenphase/commit/1bc2b20a427c6d03df318fcf5c529391fc6e25ed)) ## v1.9.3 (2023-09-07) ### Bug Fixes - Handle /production returning a 401 even with the correct auth on some 3.x firmwares ([#80](https://github.com/pyenphase/pyenphase/pull/80), [`947605f`](https://github.com/pyenphase/pyenphase/commit/947605fba25b41d12db273e9352c29b08cac1d4d)) ## v1.9.2 (2023-09-07) ### Bug Fixes - Raise EnvoyAuthenticationRequired when local auth is incorrect ([#79](https://github.com/pyenphase/pyenphase/pull/79), [`208e91a`](https://github.com/pyenphase/pyenphase/commit/208e91a6a66e8afa0931bb3a78e557b882277148)) ## v1.9.1 (2023-09-04) ### Bug Fixes - Envoy default password is last 6 not first 6 ([#78](https://github.com/pyenphase/pyenphase/pull/78), [`33d07f6`](https://github.com/pyenphase/pyenphase/commit/33d07f6fb231a274bfdf5e693d1d2200fc0b516d)) ### Chores - Fix snapshot ([#78](https://github.com/pyenphase/pyenphase/pull/78), [`33d07f6`](https://github.com/pyenphase/pyenphase/commit/33d07f6fb231a274bfdf5e693d1d2200fc0b516d)) ## v1.9.0 (2023-09-03) ### Chores - Add additional endpoints to fixture collector ([#76](https://github.com/pyenphase/pyenphase/pull/76), [`9590d21`](https://github.com/pyenphase/pyenphase/commit/9590d219cdee3049364ce82691b74606062898e5)) ### Features - Add ivp/meters and ivp/meters/readings to fixture collector ([#77](https://github.com/pyenphase/pyenphase/pull/77), [`74c02bc`](https://github.com/pyenphase/pyenphase/commit/74c02bc882435f8605c85600c7f598a7e77c7141)) ## v1.8.1 (2023-08-23) ### Bug Fixes - Preemptively update dry contact state when toggling ([#75](https://github.com/pyenphase/pyenphase/pull/75), [`6a3f12f`](https://github.com/pyenphase/pyenphase/commit/6a3f12f26355721a4d12f3ef490659e4c4ce4a4c)) ## v1.8.0 (2023-08-19) ### Features - Add initial support for firmware 8.1.41 ([#73](https://github.com/pyenphase/pyenphase/pull/73), [`3562261`](https://github.com/pyenphase/pyenphase/commit/3562261d51a2f3d539d125c3512d9b1ca9b9bd6d)) ## v1.7.1 (2023-08-15) ### Bug Fixes - Startup was blocked for multiple minutes if the envoy was offline ([#71](https://github.com/pyenphase/pyenphase/pull/71), [`983ef52`](https://github.com/pyenphase/pyenphase/commit/983ef52e92ffff5a91b8de8bddda68f460058b56)) ## v1.7.0 (2023-08-15) ### Features - Add support for opening and closing dry contact relays ([#70](https://github.com/pyenphase/pyenphase/pull/70), [`f59aa54`](https://github.com/pyenphase/pyenphase/commit/f59aa546e4991c5aee446e9629b48df2ca556272)) ## v1.6.0 (2023-08-13) ### Features - Add support for changing settings on dry contact relays ([#68](https://github.com/pyenphase/pyenphase/pull/68), [`345165a`](https://github.com/pyenphase/pyenphase/commit/345165a92ffc7ffc35c5d09626757c53f4add7d2)) ## v1.5.3 (2023-08-12) ### Bug Fixes - Add "schedule" to DryContactAction ([#67](https://github.com/pyenphase/pyenphase/pull/67), [`403d8dc`](https://github.com/pyenphase/pyenphase/commit/403d8dc5c0361a30b95e57fdeda13ea25fd8179a)) ## v1.5.2 (2023-08-11) ### Bug Fixes - Add EnvoyEnchargeAggregate to __all__ ([#66](https://github.com/pyenphase/pyenphase/pull/66), [`63b7698`](https://github.com/pyenphase/pyenphase/commit/63b76980d620cf7e125df0d6058c80230f66756a)) ## v1.5.1 (2023-08-11) ### Bug Fixes - Switch fetching aggregate Encharge data to simpler endpoint ([#65](https://github.com/pyenphase/pyenphase/pull/65), [`e076476`](https://github.com/pyenphase/pyenphase/commit/e07647656920779e7a18a045ddfea1dec583fba7)) ## v1.5.0 (2023-08-11) ### Features - Add EnchargeAggregate model for aggregated battery data ([#64](https://github.com/pyenphase/pyenphase/pull/64), [`6985935`](https://github.com/pyenphase/pyenphase/commit/69859358ad6c4146fac30198ec5a342633db9834)) ## v1.4.0 (2023-08-10) ### Features - Add support for toggling grid on/off ([#62](https://github.com/pyenphase/pyenphase/pull/62), [`63d44dd`](https://github.com/pyenphase/pyenphase/commit/63d44ddbc59d04ca6afb6b3526a37cda32c7417d)) ## v1.3.0 (2023-08-09) ### Features - Refactor register interface to allow unregistering an updater ([#60](https://github.com/pyenphase/pyenphase/pull/60), [`82efcec`](https://github.com/pyenphase/pyenphase/commit/82efcec228dbe263c3f1c39e6ded3e9283fbfac2)) ## v1.2.2 (2023-08-09) ### Bug Fixes - Remove unreachable code in inverters updater ([#61](https://github.com/pyenphase/pyenphase/pull/61), [`84b6be0`](https://github.com/pyenphase/pyenphase/commit/84b6be081cde7bf624baaae2b5df5c1177144dec)) ## v1.2.1 (2023-08-09) ### Bug Fixes - Incorrect typing on enpower mains_*_state attributes ([#59](https://github.com/pyenphase/pyenphase/pull/59), [`14c7c14`](https://github.com/pyenphase/pyenphase/commit/14c7c14124ca33df6e011b1fa32ed4c57da7e294)) ### Chores - Add collected and mocked fixtures for 3.7.0 ([#58](https://github.com/pyenphase/pyenphase/pull/58), [`56ba6fa`](https://github.com/pyenphase/pyenphase/commit/56ba6fa54cdac7f4680697a5a54d97d595246f30)) - Update 3.17.3 with new fixture downloader ([#57](https://github.com/pyenphase/pyenphase/pull/57), [`afb525c`](https://github.com/pyenphase/pyenphase/commit/afb525ce60900192cfa1e088a890da652b1b70bd)) - Update fixtures for 3.9.36 with new fixture fetcher ([#56](https://github.com/pyenphase/pyenphase/pull/56), [`20e7bbf`](https://github.com/pyenphase/pyenphase/commit/20e7bbfee2d9a49b2cb10bb3766ab6eb6cd2af18)) ## v1.2.0 (2023-08-09) ### Chores - Update firmware 7.3.517 fixtures ([#55](https://github.com/pyenphase/pyenphase/pull/55), [`c2dcb19`](https://github.com/pyenphase/pyenphase/commit/c2dcb19e4ea1aef815c145ad5dc688881215dcc2)) ### Features - Refactor to break updaters into modules ([#54](https://github.com/pyenphase/pyenphase/pull/54), [`a4686a3`](https://github.com/pyenphase/pyenphase/commit/a4686a30be37f88a3af27257b4a8d017d1579122)) ## v1.1.4 (2023-08-08) ### Bug Fixes - Return DryContactStatus enum for status ([#53](https://github.com/pyenphase/pyenphase/pull/53), [`d366ff3`](https://github.com/pyenphase/pyenphase/commit/d366ff3c86a3419bb0ffcbd24a1edb0333b0a32f)) ## v1.1.3 (2023-08-08) ### Bug Fixes - Handle envoy sending bad json ([#52](https://github.com/pyenphase/pyenphase/pull/52), [`7109e66`](https://github.com/pyenphase/pyenphase/commit/7109e6604f5fc1d1b197a128ceb264c9e00410d4)) ## v1.1.2 (2023-08-08) ### Bug Fixes - Adjust timeouts for when envoy is having trouble with DNS ([#51](https://github.com/pyenphase/pyenphase/pull/51), [`c82f9bb`](https://github.com/pyenphase/pyenphase/commit/c82f9bbf69f884516985dde04207d375c4953ad3)) ## v1.1.1 (2023-08-08) ### Bug Fixes - Add Enpower and DryContact classes to __all__ ([#50](https://github.com/pyenphase/pyenphase/pull/50), [`d37b5e9`](https://github.com/pyenphase/pyenphase/commit/d37b5e9b6e6f12d62ba57a2f6d745868adf67914)) ## v1.1.0 (2023-08-08) ### Features - Add support for pulling dry contact data ([#48](https://github.com/pyenphase/pyenphase/pull/48), [`7814650`](https://github.com/pyenphase/pyenphase/commit/78146506bb4a93b51987a2b8725cc32f35368643)) ## v1.0.0 (2023-08-08) ### Refactoring - Drop python3.10 support ([#49](https://github.com/pyenphase/pyenphase/pull/49), [`9d8c20d`](https://github.com/pyenphase/pyenphase/commit/9d8c20d8f1d9b08b57649f7c8b84715f25312887)) ## v0.18.0 (2023-08-08) ### Features - Add support for polling Enpower data ([#47](https://github.com/pyenphase/pyenphase/pull/47), [`0ac58e0`](https://github.com/pyenphase/pyenphase/commit/0ac58e0396d67b4e858deba08eb6bef5c6de9f39)) ## v0.17.0 (2023-08-07) ### Features - Add fixtures for 7.6.114 without clamps ([#44](https://github.com/pyenphase/pyenphase/pull/44), [`4be0a33`](https://github.com/pyenphase/pyenphase/commit/4be0a339ed9ae458246f2260e03c5d4c89c58410)) ## v0.16.0 (2023-08-07) ### Features - Collect headers as well as XML files ([#43](https://github.com/pyenphase/pyenphase/pull/43), [`82678be`](https://github.com/pyenphase/pyenphase/commit/82678be2bdcd59b77befc04883b2bb4693789f36)) - Update 7.6.175 fixtures ([#45](https://github.com/pyenphase/pyenphase/pull/45), [`9c96475`](https://github.com/pyenphase/pyenphase/commit/9c96475f345786a24b5b786a4880a949a01cabd8)) ## v0.15.1 (2023-08-07) ### Bug Fixes - Add Encharge classes to __all__ ([#42](https://github.com/pyenphase/pyenphase/pull/42), [`229a84d`](https://github.com/pyenphase/pyenphase/commit/229a84df72a1ec6292f47fe426c46890feb1b83e)) ## v0.15.0 (2023-08-07) ### Chores - Remove unreachable code ([#39](https://github.com/pyenphase/pyenphase/pull/39), [`4335835`](https://github.com/pyenphase/pyenphase/commit/43358358ceb32ed114987931e90db1e7176d05ef)) ### Features - Add Encharge battery support ([#40](https://github.com/pyenphase/pyenphase/pull/40), [`e1a96e9`](https://github.com/pyenphase/pyenphase/commit/e1a96e9de3ade6429561ef863ed8302b481e02df)) ## v0.14.1 (2023-08-07) ### Bug Fixes - Probe failures with 5.0.62 firmware ([#38](https://github.com/pyenphase/pyenphase/pull/38), [`314df6d`](https://github.com/pyenphase/pyenphase/commit/314df6d83c4dfd7c91970e61f86e34218ce46be8)) ### Chores - Add tests for 7.6.175 with CTs ([#37](https://github.com/pyenphase/pyenphase/pull/37), [`84884f9`](https://github.com/pyenphase/pyenphase/commit/84884f9c1fa40ba7a78babfb1173a088c4c10248)) ## v0.14.0 (2023-08-06) ### Chores - Add second 7.6.175 fixtures ([#35](https://github.com/pyenphase/pyenphase/pull/35), [`6bf5309`](https://github.com/pyenphase/pyenphase/commit/6bf530964b13aa3c20524cc18626f64f15118c00)) ### Features - Add part number ([#36](https://github.com/pyenphase/pyenphase/pull/36), [`5b1d46d`](https://github.com/pyenphase/pyenphase/commit/5b1d46dd7c64180fff3118b087330a48de6646fe)) ## v0.13.0 (2023-08-06) ### Features - Add fixture collecting script ([#30](https://github.com/pyenphase/pyenphase/pull/30), [`5d66ee9`](https://github.com/pyenphase/pyenphase/commit/5d66ee96154bbd6238a27b6e449b6bb0aece3a54)) ## v0.12.0 (2023-08-06) ### Chores - Add test fixtures from Envoy 7.3.517 and Ensemble ([#29](https://github.com/pyenphase/pyenphase/pull/29), [`31ffcfa`](https://github.com/pyenphase/pyenphase/commit/31ffcfa00bd39c62df3abf791c250b859234f1b3)) - Add tests for 7.3.517 firmware/setup ([#33](https://github.com/pyenphase/pyenphase/pull/33), [`4d6434f`](https://github.com/pyenphase/pyenphase/commit/4d6434f0af01e0b4aff50d0d5624eb63519f91a5)) - Update gitignore ([#32](https://github.com/pyenphase/pyenphase/pull/32), [`57f5b52`](https://github.com/pyenphase/pyenphase/commit/57f5b526706151a0124a99983909a4f3f2aec1e2)) ### Features - Probe for Encharge and Enpower support ([#26](https://github.com/pyenphase/pyenphase/pull/26), [`da2db7d`](https://github.com/pyenphase/pyenphase/commit/da2db7d8005c81153dff6b5802d3c4851dd79432)) ### Refactoring - Small cleanups ([#31](https://github.com/pyenphase/pyenphase/pull/31), [`3b4c5ae`](https://github.com/pyenphase/pyenphase/commit/3b4c5ae1070cd2e67df0d1155422a03be8d1c887)) ## v0.11.0 (2023-08-06) ### Features - Add support for bifurcated endpoints ([#28](https://github.com/pyenphase/pyenphase/pull/28), [`7853cfd`](https://github.com/pyenphase/pyenphase/commit/7853cfd1ecb2e1cadf8e874f6d351c4efe408a79)) ## v0.10.0 (2023-08-06) ### Features - Add the ability to refresh the token on demand ([#25](https://github.com/pyenphase/pyenphase/pull/25), [`d1e391c`](https://github.com/pyenphase/pyenphase/commit/d1e391ccd9fcc9fcb3636f6f4a101005998f9f60)) ## v0.9.0 (2023-08-05) ### Features - Add EnvoyTokenAuth to __all__ ([#24](https://github.com/pyenphase/pyenphase/pull/24), [`738f4c7`](https://github.com/pyenphase/pyenphase/commit/738f4c7b1385e1045e9ca5065e06b0816d6a398f)) ## v0.8.0 (2023-08-05) ### Features - Add EnvoyData to __all__ ([#23](https://github.com/pyenphase/pyenphase/pull/23), [`63f9ba9`](https://github.com/pyenphase/pyenphase/commit/63f9ba94f7d10945aa314836f9a7425cda28ae59)) ## v0.7.1 (2023-08-05) ### Bug Fixes - Legacy installer auth was not working ([#22](https://github.com/pyenphase/pyenphase/pull/22), [`a2dd5e5`](https://github.com/pyenphase/pyenphase/commit/a2dd5e55ccfc796d7e162ccc75bb116fde1ca631)) ## v0.7.0 (2023-08-05) ### Features - Export a few more models for type checking ([#21](https://github.com/pyenphase/pyenphase/pull/21), [`e2337c4`](https://github.com/pyenphase/pyenphase/commit/e2337c4b8bf69e816611e76e4239fdbea78bf6e9)) ## v0.6.1 (2023-08-05) ### Bug Fixes - Unclosed cloud client session ([#20](https://github.com/pyenphase/pyenphase/pull/20), [`b46282a`](https://github.com/pyenphase/pyenphase/commit/b46282a9f9ed20be4487582cd2461a02b7740de6)) ## v0.6.0 (2023-08-05) ### Features - Export names at top level ([#19](https://github.com/pyenphase/pyenphase/pull/19), [`b209357`](https://github.com/pyenphase/pyenphase/commit/b2093578d12978da49788ca08c3959d2c3fb3641)) ## v0.5.0 (2023-08-05) ### Features - Add consumption api ([#17](https://github.com/pyenphase/pyenphase/pull/17), [`f094c4d`](https://github.com/pyenphase/pyenphase/commit/f094c4d129cbb26e0f6bf3cf9024967a0def46e7)) ## v0.4.0 (2023-08-05) ### Chores - Add comments for properties that come from additional API endpoints ([#14](https://github.com/pyenphase/pyenphase/pull/14), [`73520b6`](https://github.com/pyenphase/pyenphase/commit/73520b6c72e1dfb867d945054fcada84ee75d879)) - Adjust CI to only validate PR title ([#12](https://github.com/pyenphase/pyenphase/pull/12), [`b518216`](https://github.com/pyenphase/pyenphase/commit/b518216d37eadb46b9ad0c785b7182bac94453b2)) - Cleanup duplicate endpoints ([#15](https://github.com/pyenphase/pyenphase/pull/15), [`cb0ed2a`](https://github.com/pyenphase/pyenphase/commit/cb0ed2a66c8d4242345dab390b7636cf4c81e7d0)) - Only run action-semantic-pull-request on pull request ([#18](https://github.com/pyenphase/pyenphase/pull/18), [`ce022aa`](https://github.com/pyenphase/pyenphase/commit/ce022aab4a7594a66ebc97da503a1fc3a0b6b661)) - Start bootstrapping some models ([#13](https://github.com/pyenphase/pyenphase/pull/13), [`c5d2f36`](https://github.com/pyenphase/pyenphase/commit/c5d2f364f00c9efd7b3c239d2bb16c6affd84ff7)) ### Features - Add update functions ([#16](https://github.com/pyenphase/pyenphase/pull/16), [`d2802e0`](https://github.com/pyenphase/pyenphase/commit/d2802e0e9322050d37e0affa4a87f127731c29a2)) ## v0.3.0 (2023-07-26) ### Chores - Update deps to fix certifi vuln ([#10](https://github.com/pyenphase/pyenphase/pull/10), [`243d28b`](https://github.com/pyenphase/pyenphase/commit/243d28b9e7be10aba73d8f7fefc2123f0ea717fc)) ### Features - Add support for legacy firmware ([#11](https://github.com/pyenphase/pyenphase/pull/11), [`49cb15c`](https://github.com/pyenphase/pyenphase/commit/49cb15c58cde38dc41ff30c24c3365c491605274)) ## v0.2.0 (2023-07-26) ### Chores - Bump PSR to fix release process ([#8](https://github.com/pyenphase/pyenphase/pull/8), [`d2889e2`](https://github.com/pyenphase/pyenphase/commit/d2889e2c10e4565cddee1c10c337159fa4fa4e8b)) - Remove unused labels workflow ([#9](https://github.com/pyenphase/pyenphase/pull/9), [`a4c9d1b`](https://github.com/pyenphase/pyenphase/commit/a4c9d1bf158bcc8899c6388dc15d0a4938f78a79)) ### Features - Use cookie sessionId ([#7](https://github.com/pyenphase/pyenphase/pull/7), [`09a1a8a`](https://github.com/pyenphase/pyenphase/commit/09a1a8aa30f2e3be1aa636f2488dc736f4d4f476)) - Use sessionId cookie to have access to some endpoints ([#7](https://github.com/pyenphase/pyenphase/pull/7), [`09a1a8a`](https://github.com/pyenphase/pyenphase/commit/09a1a8aa30f2e3be1aa636f2488dc736f4d4f476)) ## v0.1.0 (2023-05-28) ### Chores - Add constants for API endpoint URLs ([#5](https://github.com/pyenphase/pyenphase/pull/5), [`9583a1f`](https://github.com/pyenphase/pyenphase/commit/9583a1fdc1d6070897fc6793c7f2dc8f13482bc2)) ### Features - Add initial cloud auth support ([#6](https://github.com/pyenphase/pyenphase/pull/6), [`28f4872`](https://github.com/pyenphase/pyenphase/commit/28f4872625a01ee209153d489de566b7ba2302e6)) ## v0.0.3 (2023-05-23) - Initial Release pyenphase-2.3.1/CONTRIBUTING.md000066400000000000000000000074121505013723300157450ustar00rootroot00000000000000# Contributing Contributions are welcome, and they are greatly appreciated! Every little helps, and credit will always be given. You can contribute in many ways: ## Types of Contributions ### Report Bugs Report bugs to [our issue page][gh-issues]. If you are reporting a bug, please include: - Your operating system name and version. - Any details about your local setup that might be helpful in troubleshooting. - Detailed steps to reproduce the bug. ### Fix Bugs Look through the GitHub issues for bugs. Anything tagged with "bug" and "help wanted" is open to whoever wants to implement it. ### Implement Features Look through the GitHub issues for features. Anything tagged with "enhancement" and "help wanted" is open to whoever wants to implement it. ### Write Documentation pyenphase could always use more documentation, whether as part of the official pyenphase docs, in docstrings, or even on the web in blog posts, articles, and such. ### Submit Feedback The best way to send feedback [our issue page][gh-issues] on GitHub. If you are proposing a feature: - Explain in detail how it would work. - Keep the scope as narrow as possible, to make it easier to implement. - Remember that this is a volunteer-driven project, and that contributions are welcome 😊 ## Get Started! Ready to contribute? Here's how to set yourself up for local development. 1. Fork the repo on GitHub. 2. Clone your fork locally: ```shell $ git clone git@github.com:your_name_here/pyenphase.git ``` 3. Install the project dependencies with [Poetry](https://python-poetry.org): ```shell $ poetry install ``` 4. Create a branch for local development: ```shell $ git checkout -b name-of-your-bugfix-or-feature ``` Now you can make your changes locally. 5. When you're done making changes, check that your changes pass our tests: ```shell $ poetry run pytest ``` 6. Linting is done through [pre-commit](https://pre-commit.com). Provided you have the tool installed globally, you can run them all as one-off: ```shell $ pre-commit run -a ``` Or better, install the hooks once and have them run automatically each time you commit: ```shell $ pre-commit install ``` 7. Commit your changes and push your branch to GitHub: ```shell $ git add . $ git commit -m "feat(something): your detailed description of your changes" $ git push origin name-of-your-bugfix-or-feature ``` Note: the commit message should follow [the conventional commits](https://www.conventionalcommits.org). We run [`commitlint` on CI](https://github.com/marketplace/actions/commit-linter) to validate it, and if you've installed pre-commit hooks at the previous step, the message will be checked at commit time. 8. Submit a pull request through the GitHub website or using the GitHub CLI (if you have it installed): ```shell $ gh pr create --fill ``` ## Pull Request Guidelines We like to have the pull request open as soon as possible, that's a great place to discuss any piece of work, even unfinished. You can use draft pull request if it's still a work in progress. Here are a few guidelines to follow: 1. Include tests for feature or bug fixes. 2. Update the documentation for significant features. 3. Ensure tests are passing on CI. ## Tips To run a subset of tests: ```shell $ pytest tests ``` ## Making a new release The deployment should be automated and can be triggered from the Semantic Release workflow in GitHub. The next version will be based on [the commit logs](https://python-semantic-release.readthedocs.io/en/latest/commit-log-parsing.html#commit-log-parsing). This is done by [python-semantic-release](https://python-semantic-release.readthedocs.io/en/latest/index.html) via a GitHub action. [gh-issues]: https://github.com/pyenphase/pyenphase/issues pyenphase-2.3.1/LICENSE000066400000000000000000000020531505013723300145150ustar00rootroot00000000000000 MIT License Copyright (c) 2023 pyenphase 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. pyenphase-2.3.1/README.md000066400000000000000000000065751505013723300150040ustar00rootroot00000000000000# pyenphase

CI Status Documentation Status Test coverage percentage

Poetry ruff pre-commit

PyPI Version Supported Python versions License

Library to control enphase envoy ## Installation Install this via pip (or your favourite package manager): `pip install pyenphase` ## Contributors ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! ## Credits This package was created with [Copier](https://copier.readthedocs.io/) and the [browniebroke/pypackage-template](https://github.com/browniebroke/pypackage-template) project template. pyenphase-2.3.1/commitlint.config.mjs000066400000000000000000000003621505013723300176470ustar00rootroot00000000000000export default { extends: ["@commitlint/config-conventional"], rules: { "header-max-length": [0, "always", Infinity], "body-max-line-length": [0, "always", Infinity], "footer-max-line-length": [0, "always", Infinity], }, }; pyenphase-2.3.1/devtools/000077500000000000000000000000001505013723300153475ustar00rootroot00000000000000pyenphase-2.3.1/devtools/experiment.py000066400000000000000000000025271505013723300201070ustar00rootroot00000000000000import asyncio import logging import os from pprint import pprint from pyenphase.envoy import Envoy logging.basicConfig(level=logging.DEBUG) async def main() -> None: envoy = Envoy(os.environ.get("ENVOY_HOST", "envoy.local")) await envoy.setup() username = os.environ.get("ENVOY_USERNAME") password = os.environ.get("ENVOY_PASSWORD") token = os.environ.get("ENVOY_TOKEN") await envoy.authenticate(username=username, password=password, token=token) # Test https://enphase.com/download/iq-gateway-access-using-local-apis-or-local-ui-token-based-authentication-tech-brief endpoints print(await envoy.update()) end_points = [ "/ivp/livedata/status", "/api/v1/production", "/api/v1/production/inverters", "/production.json", "/production", "/ivp/meters", "/ivp/meters/readings", "/ivp/meters/reports/consumption", "/ivp/ensemble/inventory", "/ivp/ensemble/dry_contacts", "/ivp/ss/dry_contact_settings", "/ivp/pdm/device_data", ] for end_point in end_points: try: json_dict = await envoy.request(end_point) except Exception as e: print(e) continue print((end_point, "=" * 80)) pprint(json_dict) print((end_point, "=" * 80)) asyncio.run(main()) pyenphase-2.3.1/devtools/fixture_collector.py000066400000000000000000000203171505013723300214600ustar00rootroot00000000000000""" Create test fixture file set for pyenphase by scanning known endpoints on Envoy. execute python fixture_collector.py --help for directons Copy this file to the Home Assistant config folder. Open a terminal on your HA system Navigate to the config folder and execute python fixture_collector.py Alternatively copy and execute this file to a system with pyenphase installed and network connectivity to your Home Assistant config folder and the Envoy. """ import argparse import asyncio import contextlib import getpass import json import logging import os import zipfile from pyenphase.envoy import DEFAULT_HEADERS, Envoy from pyenphase.exceptions import ( EnvoyAuthenticationRequired, EnvoyFirmwareFatalCheckError, ) # logging.basicConfig(level=logging.WARNING) _LOGGER = logging.getLogger(__name__) async def main( envoy_address: str | None, username: str | None, password: str | None, token: str | None, verbose: bool = False, label: str = "", clean: bool = False, ) -> None: envoy = Envoy(os.environ.get("ENVOY_HOST", envoy_address or "envoy.local")) try: await envoy.setup() except EnvoyFirmwareFatalCheckError as err: print(f"Could not connect to Envoy: {err.status_code} {err.status}") return try: await envoy.authenticate(username=username, password=password, token=token) except EnvoyAuthenticationRequired: print("Could not authenticate with Envoy") return target_dir = f"enphase-{envoy.firmware}{label}" with contextlib.suppress(FileExistsError): os.mkdir(target_dir) end_points = [ "/info", "/api/v1/production", "/api/v1/production/inverters", "/production.json", "/production.json?details=1", "/production", "/ivp/ensemble/power", "/ivp/ensemble/inventory", "/ivp/ensemble/dry_contacts", "/ivp/ensemble/status", "/ivp/ensemble/secctrl", "/ivp/ss/dry_contact_settings", "/admin/lib/tariff", "/ivp/ss/gen_config", "/ivp/ss/gen_schedule", "/ivp/sc/pvlimit", "/ivp/ss/pel_settings", "/ivp/ensemble/generator", "/ivp/meters", "/ivp/meters/readings", "/ivp/pdm/device_data", ] assert envoy.auth # nosec for end_point in end_points: url = envoy.auth.get_endpoint_url(end_point) if verbose: print(end_point) try: response = await envoy._client.get( url, headers={**DEFAULT_HEADERS, **envoy.auth.headers}, cookies=envoy.auth.cookies, follow_redirects=True, auth=envoy.auth.auth, timeout=envoy._timeout, ) except Exception as ex: _LOGGER.debug("Error getting %s", end_point, exc_info=ex) continue file_name = end_point[1:].replace("/", "_").replace("?", "_").replace("=", "_") with open(os.path.join(target_dir, file_name), "w") as fixture_file: fixture_file.write(response.text) with open( os.path.join(target_dir, f"{file_name}_log.json"), "w" ) as metadata_file: metadata_file.write( json.dumps( { "headers": dict(response.headers.items()), "code": response.status_code, } ) ) if not clean or verbose: print(f"Fixtures written to {target_dir}") zip_file_name = f"{target_dir}.zip" with zipfile.ZipFile(zip_file_name, "w") as zip_file: for file_name in os.listdir(target_dir): zip_file.write(os.path.join(target_dir, file_name), file_name) if clean: os.remove(os.path.join(target_dir, file_name)) print(f"Zip file written to {zip_file_name}") if clean: try: os.rmdir(target_dir) if verbose: print(f"Removed {target_dir}") except OSError as err: print(f"Could not clean folder: {err.strerror}") except FileNotFoundError: pass def _read_ha_config(file_path: str) -> dict[str, list[str | None]]: result: dict[str, list[str | None]] = {} try: with open(file_path) as fp: content = json.load(fp) except (FileNotFoundError, ValueError): return result if content: for entry in content["data"]["entries"]: if entry["domain"] != "enphase_envoy" or entry["source"] == "ignore": continue data = entry["data"] unique_id = entry["unique_id"] result[unique_id] = [ data["host"], data["username"], data["password"], data["token"], ] return result if __name__ == "__main__": description = ( "Scan Enphase Envoy for endpoint list usable for pyenphase test fixtures. \ Creates output folder envoy_[label] with results of scan.\ Zips content of created folder into envoy_[label].zip.\ " ) parser = argparse.ArgumentParser(description=description) parser.add_argument( "-d", "--debug", help="Enable debug logging", action="store_true" ) parser.add_argument("-v", "--verbose", action="store_true") parser.add_argument( "-c", "--clean", help="Remove created folder, but keep zip file", action="store_true", ) parser.add_argument( "-l", "--label", help="Label to append to output folder and zip file names" ) parser.add_argument( "-r", "--readhaconfig", const=".", nargs="?", dest="ha_config_folder", help="Read envoyname, username, password and token from HA config folder.\ Use -r path_to_ha_config_folder. Default is current folder.\ Overrides any specified username, password and token.", ) parser.add_argument( "-e", "--envoyname", default="envoy.local", help="Envoy Name or IP address. IP is preferred, default is envoy.local", ) parser.add_argument( "-u", "--username", help="Username (for Envoy or for Enphase token website)" ) parser.add_argument( "-p", "--password", help="Password (blank or for Enphase token website)" ) parser.add_argument( "-t", "--token", help="Enphase owner token or @path_to_file to read from file" ) args = parser.parse_args() if args.debug: logging.basicConfig(level=logging.DEBUG) host = args.envoyname username: str | None = args.username password: str | None = args.password read_ha_config: str = args.ha_config_folder verbose: bool = args.verbose config_entries: dict[str, list[str | None]] = {} target_ha_file: str = "" if args.ha_config_folder: target_ha_file = os.path.join(read_ha_config, ".storage/core.config_entries") config_entries = _read_ha_config(target_ha_file) else: username = args.username password = args.password token = args.token if not username: username = os.environ.get("ENVOY_USERNAME", input("Enter the Username: ")) if not password: password = os.environ.get( "ENVOY_PASSWORD", getpass.getpass("Enter the Password: ") ) if not token: token = os.environ.get("ENVOY_TOKEN", getpass.getpass("Enter the token: ")) if token and token[0] == "@": try: with open(token[1:]) as f: token = f.read() except FileExistsError: token = None config_entries.update({"unknown": [host, username, password, token]}) for sn, configs in config_entries.items(): host, username, password, token = configs if verbose: print(f"Using {host} sn: {sn}, {target_ha_file}") asyncio.run( main( envoy_address=host, username=username, password=password, token=token, verbose=verbose, label=args.label or "", clean=args.clean, ) ) pyenphase-2.3.1/docs/000077500000000000000000000000001505013723300144405ustar00rootroot00000000000000pyenphase-2.3.1/docs/Makefile000066400000000000000000000011721505013723300161010ustar00rootroot00000000000000# 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) pyenphase-2.3.1/docs/_static/000077500000000000000000000000001505013723300160665ustar00rootroot00000000000000pyenphase-2.3.1/docs/_static/.gitkeep000066400000000000000000000000001505013723300175050ustar00rootroot00000000000000pyenphase-2.3.1/docs/advanced.md000066400000000000000000000301521505013723300165300ustar00rootroot00000000000000# Updater modification ## Register updater The package can be extended by registering an additional `updater` as a sub class of `EnvoyUpdater`. Such an updater can serve as an alternative data source for existing data sources and provide requested data if other updaters don't. The added updater can only store data in one of the existing data attributes of [EnvoyData](#pyenphase.EnvoyData) or store the raw data in Envoy's [`raw`](./data_raw.md#raw-data) attribute. An updater requires 2 methods. A `probe` method which is used to initialize the updater and is only called once and signals capability to provide the data, and an `update` method which is called repeatedly to collect the data. Each may collect the same or different data based on the needs. The updater will have to provide same data as other updaters for the data attributes in scope. ### Example: Extend EnvoySystemProduction The [EnvoySystemProduction](#pyenphase.models.system_production.EnvoySystemProduction) class provides overall [production data](./data_production.md) reported by the Envoy. The data is sourced from various endpoints based on Envoy type and the firmware running in the Envoy. This package does not include reporting from Envoy Legacy HTML pages.[^1] [^1]: Prime intent during design was to work with [Home Assistant](https://www.home-assistant.io/) and Home Assistant has an [architectural rule denying the use of webscraping](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md) for core integrations. Though it allows scraping for custom integrations. This package however can be used to build any application, hence this example. #### Legacy Envoy SystemProduction This example will get production data from legacy Envoy html production page and report it in the existing EnvoySystemProduction class also used for other Envoy versions. First step is to define a data model as a sub-class of [EnvoySystemProduction](#pyenphase.models.system_production.EnvoySystemProduction) and its method to obtain the data from the returned Envoy html. In below example the method 'from_production_legacy' provides this. The returned data should be the EnvoysSystemProduction class members. ```python from pyenphase import EnvoyData, EnvoySystemProduction, register_updater from pyenphase.const import URL_PRODUCTION, SupportedFeatures from pyenphase.envoy import get_updaters from pyenphase.exceptions import ENDPOINT_PROBE_EXCEPTIONS # regex to find production data in html page _KEY_TO_REGEX = { "watts_now": r"Current.*\s*\s*(\d+|\d+\.\d+)\s*(W|kW|MW)", "watt_hours_last_7_days": r"Past Week\s*\s*(\d+|\d+\.\d+)\s*(Wh|kWh|MWh)", "watt_hours_today": r"Today\s*\s*(\d+|\d+\.\d+)\s*(Wh|kWh|MWh)", "watt_hours_lifetime": r"Since Installation\s*\s*(\d+|\d+\.\d+)\s*(Wh|kWh|MWh)", } class LegacyEnvoySystemProduction(EnvoySystemProduction): """Get production data from legacy Envoy html""" def from_production_legacy(cls, text: str) -> EnvoySystemProduction: """Legacy parser.""" data: dict[str, int] = { "watts_now": 0, "watt_hours_today": 0, "watt_hours_last_7_days": 0, "watt_hours_lifetime": 0, } # extract the date from the html using regex for key, regex in _KEY_TO_REGEX.items(): if match := re.search(regex, text, re.MULTILINE): unit = match.group(2).lower() value = float(match.group(1)) # scale units to w or wh if unit.startswith("k"): value *= 1000 elif unit.startswith("m"): value *= 1000000 data[key] = int(value) return cls(**data) ``` #### LegacyProductionScraper Next define the actual updater as a subclass of [EnvoyUpdater](#pyenphase.updaters.base.EnvoyUpdater). The updater will collect the data and use above model to report the data. ```python class LegacyProductionScraper(EnvoyUpdater): ``` ##### Probe As described before, the `probe` method is called once at initialization to detect and configure all that is needed. It is passed the bit mask (flags) of already `SupportedFeatures` by other updaters. If the feature this updater provides is already provided by an other updater, ours should exit and leave it to the other updater. In this example the feature flag is `SupportedFeatures.PRODUCTION`. If not set yet, the updater should configure and return `SupportedFeatures.PRODUCTION` flag set to signal the Envoy class it should be used to obtain data or None if not. Returning a set SupportedFeatures flag will cause the update method to be used during data collection. To collect the data the EnvoyUpdater class provides the methods `_probe_request(endpoint)` and `_json_probe_request(endpoint)`. These methods can be used retrieve text/html or json data. ```python async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for for Production HTML and return PRODUCTION SupportedFeature.""" if SupportedFeatures.PRODUCTION in discovered_features: # Already discovered from another updater, leave alone return None try: # get html data from the envoy using the probe_request response = await self._probe_request(URL_PRODUCTION) data = response.text except ENDPOINT_PROBE_EXCEPTIONS: return None # check if response contains what we expect if "Since Installation" not in data: return None # remember and return PRODUCTION as my supported feature. self._supported_features |= SupportedFeatures.PRODUCTION return self._supported_features ``` ##### Update The `update` method is called at each update cycle to provide the actual data. It is passed the EnvoyData class to store the data to. The data collection methods provided by the EnvoyUpdater class are `_json_request(endpoint)` and `_request(endpoint)`. Typically the method uses a data model to extract the data from the response. ```python async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this updater.""" # Get the HTML data from the Envoy response = await self._request(URL_PRODUCTION) production_data = response.text # Store the data as is in the raw json of the EnvoyData envoy_data.raw[URL_PRODUCTION] = production_data # Store data in Envoy data using our data model. envoy_data.system_production = ( LegacyEnvoySystemProduction.from_production_legacy(production_data) ) ``` ##### Register updater To make the updater available for use, it must be registered with the Envoy using `register_updater`. Upon completion of the registration perform the usual setup, authentication and probe of the Envoy and start data collection. ```python # Initialize Envoy, setup and authenticate envoy = Envoy(host) # register our updater for legacy envoy remove = register_updater(LegacyProductionScraper) assert LegacyProductionScraper in get_updaters() # setup and authenticate with Envoy await envoy.setup() await envoy.authenticate(username=username, password=password, token=token) # probe what endpoints are available await envoy.probe() # get data, the production values now fill from html data: EnvoyData = await envoy.update() # remove our updater from the envoy remove() assert LegacyProductionScraper not in get_updaters() ``` Registering the updater inserts it at the end of the updaters giving priority to existing updaters to return production (in this example) data. If all prior ones fail, the newly registered one will be used. Adding a new one only makes sense for cases where the endpoint is not successfully accessed by the other ones. This is implemented by the use of the SupportedFeatures flags. ### Example: New attribute EnvoyHomeInformation The previous example [Extend EnvoySystemProduction](#example-extend-envoysystemproduction) added a new data source for an existing attribute. Similarly a datasource for a new attribute can be added by registering an updater. The process is the same as the previous example with only difference being no existing EnvoyData attribute available and the EnvoyData.raw is to be used. This example will add retrieval of data from the Envoy Home endpoint /home.json. #### EnvoyHomeInformation The data model to use is new and designed towards the needs. ```python from pyenphase import EnvoyData, EnvoySystemProduction, register_updater from pyenphase.const import URL_PRODUCTION, SupportedFeatures from pyenphase.envoy import get_updaters from pyenphase.exceptions import ENDPOINT_PROBE_EXCEPTIONS @dataclass(slots=True) class EnvoyHomeInformation(): """Get home data from Envoy""" software_build_epoch: int timezone: str @classmethod def from_home(cls, data: dict[str, Any]): """Initialize from the Home API.""" return cls( software_build_epoch=data["software_build_epoch"], timezone=data["timezone"], ) ``` #### EnvoyHome As described, the updater is a subclass of [EnvoyUpdater](#pyenphase.updaters.base.EnvoyUpdater) and provides `probe` and `update` methods. As this is a new attribute no SupportedFeatures flags exists for it. The next higher flag is used to signal back this updater has data to provide. [^2] [^2]: When adding multiple new unique features make sure flags are unique by adding more left shifts as needed `myflag = 1 << (len(SupportedFeatures) + 1)`. ```python class EnvoyHome(EnvoyUpdater): async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for home information.""" myflag = 1 << len(SupportedFeatures) if myflag & discovered_features: # Already discovered from another updater return None try: home_json: dict[str, Any] = await self._json_probe_request("/home.json") except ENDPOINT_PROBE_EXCEPTIONS: return None # our data not found in the page if "software_build_epoch" not in home_json: return None # signal we can provide this data self._supported_features |= myflag return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this /home.json.""" home_data = await self._json_request("/home.json") # No EnvoyData attribute, only return raw as is envoy_data.raw["/home.json"] = home_data ``` As there's no EnvoyData attribute to store the `EnvoyHome` data it should be obtained by the application using the model. ```python # Initialize Envoy, setup and authenticate envoy = Envoy(host) # register our updater for legacy envoy remove = register_updater(EnvoyHome) assert EnvoyHome in get_updaters() # setup and authenticate with Envoy await envoy.setup() await envoy.authenticate(username=username, password=password, token=token) # probe what endpoints are available await envoy.probe() # get data, the production values now fill from html data: EnvoyData = await envoy.update() # obtain our data from raw using the model home_info: EnvoyHomeInformation = ( EnvoyHomeInformation.from_home(data.raw['/home.json']) ) print(f'Home info: {home_info.timezone}') ``` ## Unregister updater The reverse of [registering an updater](#register-updater) is to remove an existing updater by removing its registration. If the data should not be collected, or causes issues, one could consider removing the registration. Make sure to do this before first probe/data collection, or re-run probe after removing an updater. ```python from pyenphase.envoy import get_updaters from pyenphase.updaters.base import EnvoyUpdater from pyenphase.updaters.tariff import EnvoyTariffUpdater """Remove the EnvoyTariffUpdater Pyenphase UPDATERS.""" updaters: list[type[EnvoyUpdater]] = get_updaters() if EnvoyTariffUpdater in updaters: updaters.remove(EnvoyTariffUpdater) ``` pyenphase-2.3.1/docs/changelog.md000066400000000000000000000000421505013723300167050ustar00rootroot00000000000000```{include} ../CHANGELOG.md ``` pyenphase-2.3.1/docs/conf.py000066400000000000000000000023051505013723300157370ustar00rootroot00000000000000# Configuration file for the Sphinx documentation builder. # # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = "pyenphase" copyright = "2023-2024, pyenphase" author = "pyenphase" release = "|release|" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ "myst_parser", "sphinx.ext.autodoc", "sphinx.ext.napoleon", "sphinx_autodoc_typehints", ] # The suffix of source filenames. source_suffix = [ ".rst", ".md", ] templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # Generate internal ancjors for headings myst_heading_anchors = 4 # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "sphinx_rtd_theme" html_static_path = ["_static"] pyenphase-2.3.1/docs/contributing.md000066400000000000000000000000451505013723300174700ustar00rootroot00000000000000```{include} ../CONTRIBUTING.md ``` pyenphase-2.3.1/docs/ct-model.png000066400000000000000000000700051505013723300166540ustar00rootroot00000000000000‰PNG  IHDR`ª¬ðøŸ IDATxí½mð&W]çÚ²¬}á R[·[·ÖZq‡]÷Á-΋]ˇPeU”E*»lmjÕuA¹•AÄlŒÊ(Y@a"˜BF&<˜ Œ&$Yè"&1“„²™D f€˜€F=w}zæ{Íï:ÿÓ×s÷ÕßSÕÿî>¿ó9§û|ûôù÷uV²3000h•ÀY­–æÂLÀLÀLÀLÀ’˜; ˜€ ˜€ ˜€ ´LÀ¬eà.ÎL ¥w½ó]Æ`&`£&`6êæwåM`;,À¶ÃÝ¥š€ t‡€XwÚ–˜ÀhX€¦©]Q0`5`ìm&`&`&`M°kЬó5000`5`ìm&`&`&`M°kЬó5¨%à5`µh`&0`#ihWÓºDÀ¬K­a[LÀ¶AÀlÔ]¦ Œœ€ØÈ;€«o&à/Ộ€ ˜€ ˜€ ˜@Û<Ö6q—g&`&`&0z`£ï`&`&`&Ð6 °¶‰»<0ÿ¤û€ ˜Àè X€¾ € ´OÀ‹ðÛgîMÀºEÀ¬[íakL`,ÀFÑÌ®¤ ˜À `3à8ÈLÀLÀLÀš `ÖUçi&`&`&`3X€Í€ã 000h‚€XT§ ˜ÀL^6MÀF@Àlì*š@×X€u­El ˜@Û,ÀÚ&îòLÀü0÷0Ѱ}0000¶ X€µMÜ噀 ˜€ ˜€ Œž€Øè»€˜€ ˜€ ˜€ ´MÀ¬mâ.ÏLÀkÀÜLÀFOÀlô]ÀL }þ/Èö™»D0n°ëV{Ø °Q4³+i&0ƒ€Ø 82000&X€5AÕyš€ ˜€ ˜€ ˜À `3à8ÈLÀLÀLÀš `ÖUçi&0“€×€ÍÄã@0°A#»Š&Ð5`]kÛc&Ð6 °¶‰»<0Ì}ÀL`ô,ÀFß ÀLÀLÀL m`mwy&`&`&`£'`6ú.`&`&`&`m°k›¸Ë3ð0÷0Ѱ}0ØIàØ±ciÏž=i×®]鬳Ϊ6Žñ;räÈÎKúð_çŸ~•ï’IÝLÀAÀlÍèJ˜Àæ=z4}öÙÑ…PbÛ½{÷DŒ6è  °¾´”í400  °Á4¥+b&`&`&Ð`}i)Ûi"À0;03 °1·¾ën["`¶%ð.ÖL 3,À:Ó6ÄÆCÀl|8±5éøy$Øé÷(õóK*W?{¹Æã&msÞ&`Ã"`6¬ötmL " †`Ð&?‰‰M¢ZV€Í+¡ÈoQFÇoBò‘M9ÄeðÛ””ŸsÃ8òçw/Uoù5e›ó5 °áµ©kdÕ,â w~ÐzÓNBdSù"›°s–}”‰ø:zôèŽh C€É!ºJŒî½ ˜€ Ì"°ó=+¶ÃLÀzA@³]¹±QØ p8g¦) ‰ üJ¯-™AÓ+:ö–(Àb*¿Xþy9š™Ã.âj““½Ê1´gÏžIÄELàc#Šˆ#q„A„à‘`R Ÿˆ(·‡5`ä«4z'SÊ#`.üHƒ-äAž1Ω3vâ_÷“ôÔ ±¶¨ÃvÒØ™€ ˜À*|÷X…šÓ˜@Ç Hð ´ÉOb ñ’¯³B°ä"„8y ТCØ D$¦JâIe+,/‡2ˆ‡+å˜fÝ$¶”/y¨Nä!»Ž_n?aSªƒâÏÚ+ͬ830:`udìo=&€Ð@Å áEO4TU¢&!¤ÑLiØr·Œ£X^NÌsžÓŒYLÃ1¯e_)qÉÓy,'âs0¦ X€5MØù›ÀÔ hÊ¢Œ3 °ø 3浬‹ñc>:.‰§hocökF¹Ôº5`ˆFòe/ç0‘ðÞL``«Psè8UUjë$,ÎÆQvXó˜fëæ½‚”SsÍâBõ"+¦#,: °HÃÇ&`˰[–˜ã›@Ì2? ù1ƒÄL^Ö-Â'^Û|⌖^Y’–pf«È“8r”ƒ Q9šÑÒ¹òˆ+·—õ]ø§n>áÑÍâBä)Š-lJ“ FÂbb9>60yÎÜçÅt¸ ˜@oH4Ì284ŠKZDâ"_7F„•‚E³QOÄA`‘ž×zñ5&á¬ËË!ŽbûH/•ÛKòV9²Ey¿ÒF?â×9ò$ê§ò£mJk&Þ›€ ¬B þN´JnNc&` @€Ù™€ ˜À˜ X€¹õ]÷a8tèL½x ¥K/íÜùD€uÁ¾;î8ÃÇG&`&Ð °–@»hÀå—Ÿ]ˆ›óÎKéå/÷9"´ŽÇÉ“­5 20° ïM`H]ˆ/DÎç³y ©í]0^°ëE3ÙHX€Ä—’ú\$NísÓ¡>30F X€5Š×™›€ ”LÖ€•íg&`# `6‚FvM k,ÀºÖ"¶ÇL m`mwy&`ÕwÀŒÁLÀÆLÀḽﺛ€ ˜€ ˜€ l…€ØV°»P0001°së»î&`&`&`[!`¶ì.ÔÆMÀ‹ðÇÝþ®½ ˜@J`î&`­°k¹ 4è °Ž5ˆÍ11°C+»Ž&`³X€Í¢ã0000h€€XP¥ ˜Àf 9r$þù›ÍÔ¹™€ ˜À X€m¾‹6& VÎ:ë¬tðàÁtöÙgWÇ{öìI'NœH‡N»víš{ôèÑI\y"tH›çÃù¶œضȻ\0¦X€5EÖùšÀ–H8!ºp¯Ý»w§}ûöUçˆ2„?YŒ‹x#ṀóMºE×€!±'ß¶)7ÉÁy™€ Œ—€ØxÛÞ5( §X=f´ô ï /Lû÷﯂ñcV Q†ãXñJùÄ<×9^T€© l‘]òóÞLÀúLÀ¬Ï­gÛM @ $œ¢€‘cVK‹2fÅöîÝ;g¥|bqqVЏ‹º}‡nª~ ’ý¢.Ú¿hÇ30.°ërëØ6X@I8It‘ ñ„Ÿ^="¼ô:òرcU©¥|V0gG’ÿ繯HÚvÖxX€Õ€±· ˜@o X€õ¶él¸ ” H8iÍ‚+®#¯óXû…цsâÉ)oj/ñÅÞÎLÀÆJÀl¬-ïz–€„LÿÉ Wt¬c,.®'nŒ§|bºM[€m‚¢ó0è; °¾· í7Œ@SÂ)+fåS‹ð=¶2B'4 °4¢«`<¾üå/W³[•ßÇ>6 ÚÈùLç·Â™Ø МÄL`p,Àפ®Ð¨ ÜqGJçw Á)]pÁfÏ/½tm¼`k#t&` `6€FtL`г^眓ÒE¥tòdJ›>Ÿ*lù˜¶åS;… ˜€ ƒ€Ø0Úѵ0i¼*D|Émú\ù®°—øbog&`c%`6Ö–w½M`K,À¶ÞÅš€ tŠ€X§šÃƘÀð Àúü_|¨VßXSkñ]µøË:VxöúïXÙÆ»ùù©èð'î²Nù/›ÎñM`¬,ÀÆÚò®· l‰@ßXIh drQÖ&^ÊÖGuëÊÍíFH’†ï¿Å´`uío›%`¶YžÎÍL`®0>:‹øÐ/ð[˜rÇY-~²‰ÖJÄhI¢kž#>¿å—8¦LýäeÆòrADÞØÊž ‡`"Îõ]ò#ÿ(¦ˆK8a²½Ê ü‘ÓGy%À8ç8ÚI”‹#œvW}°‘c;0ÅøjYŒ“c™€ lˆ@Ö€IÀHt Ž$n¨&"CâŠ8„W2„+~ Âq$1Cüø«”§ü)sÊÁ¥sòà\¶ó Q¢(¯a¤Ç•ì®Rª„“òÇV#°dq¢²›c±ƒs 0õÞæ°›ÏÈ1LÀ6H   g¼døë¸Tí’Aä&n>ä¿D çˆ5…—ÊCäHÐOǤ%ÀB”%¡‡(ÒŒXÉnÕ/ÚIá'n1ùÌÊ_åxo&p†€Ø>, BT‹sŒ|‹ƒâ¶«¯,ÚÈà§o“öÁC`“ù.’WL™½/û8{£v¨«K)<IyÚ\¬DþÊ<´1£¥ö)å͈!ˆûuѬaš)S9¹mœGûâ1a”õÄlZcy¼Yù—Ê´Ÿ Œ€ØØ{À@ëŸqÀÛF•)_3uåç˜^ë0nÚm“GÖ€!`` Ù#fè?u.ÆUœ’HRûYý‘òfµqž7ñõÊ1–¡c %öˆ1¹’Ý„Ñ/)_B-·U‚N{å—Ç«Ë_ñ½7˜&P—™Žç3h¶(`$Nؤ4 ?ùcø<ÁA\f xÂç˜2ã ySa VÑå!ËvÒŸ0ò#ÿ˜Û'¬4€å~ÑlaP„ƒm>(c—`Ò©nØ„a¿®ûø§Hw?ø…¥²YU€iæl©Âj"Sw 0øÁžr°T8~Q°ÑVÄ•`!<æ§<âžø´¥œúŒÎó~AyZkUÊ?òÔFüØ_±Ÿêó•=Ëî/xÍÛÓ3~õ-K%낃Lh71äXŽpüñc£Ԟġo(-ç1®Ò°—ãXý¿¼?Î*¼Õ椥Mc_Çóû¨_tê_Ñ>òVQ\ò!N̼ˆúq GÌqlg&°_-‹qr¬– ps–™ü:.™Æ@Ã5¨à7¥-Å×€ÃàHxt p Ø+.qf 0êE^ÄÁ1°kF {£m#”äJv(LyI4F8åãæ6ǰE™ýÒ¬Ô2³`JÃ~§tˤbܻ(À$Ä©3‚,ž‘ƒëd}'0=ªô½6¶0*ˆÍÔH@IT!Nt\ªt>OpÌŠ/ƒÈÒgJy3"€ˆO\‘õÒàHuÅ©Åßôä_ W<í)ƒüp1‰±<_ÂK6+ŸE÷Ì~I-3 ¦4[`‡©"¿—É–ËõàüoögÓC=”žö´§¥¾ÿýé“ßó=é/þâ/ª|ñ¾ûÒMO{ZºÿþûÓc=vê÷@·]?~ ÞÎL` °HìÑÄGtQ$­2–çW—7þQ ÄÙ¤˜FÇ1.~Q)NÜóÊaÉ1&WJÄ‘¨"_Ìr{Ú·”onó¬46Ïg:wŸ™Àè X€¾ À¦ Üpà E&Ey²x¾išÌoß¡›3`qLç/»ú†¹EwF€ÍµÔLÀL 9`ͱuΫ`NtzM$¿ŽŸ?ùÞ÷¦ûšqBd½ôÒÉëÇÏþóéO^ò’tçwNfÐ&¯Á¶U?^¿­è4óµLr¥a¿ŒSºeÒ8® ˜€ t•€XW[fÌv!Î;ïH_pÏ›äñò—¯ÜÛVEJc¶2v'4 °4â «À¿®³HZÿBïófy¬Ø‰$¦–I®4`ËPs\0¡°Z‹©>ù«HŸO·î¦yLç¾Ð™ÄTùžúÝiÖÆAÎ Ïóã¼®¬R\û™€ ˜@× X€u½…lŸ t˜@(š%®³ëp£Ú40VX€µ‚Ù…˜À0 Ì` Ï÷úXî/áV¢¥¸¥0û™€ ˜@ßX€õ­Ål¯ tˆ@(’Rø¢{¥+UQy”Âìg&`}#`Ö·³½&Ð!u¢HBJá‹î•®TEåQ ³Ÿ ˜€ ô€XßZÌöš@‡Ô‰" ©U÷¥*Ö•UŠk?0è: °®·í3¨Eó„—áw¸Qmš ˜@+,ÀZÁìBL`˜êجڒF‹ðgÅËÃV)+ÏÃç&`&Ð`]i Ûa=$°Š(²ëaCÛd0°Û8Rghã!°ª['Ýx躦&`C&`6äÖuÝL aë)Ò.ãV)k™ü×LÀÚ$`Ö&m—e#°Š(R °uWÇL`)`Kárd0H@b*úÍ;&áÏ£äp0¡°z »~&Ð  °á:k0A°tóºr&Ð,¦ØÝ~!iSY:?þèÉf+çÜMÀL A` ÂuÖ&0tEËÔSiØÏs/»ú†ãÇã}‡nš—Üá&`&ÐY`mfÝ' A´Œ¥JÃ~žûòã_+ °§¾ð²ä°yôn&Ðe`]nÛf' 1µŒ™J³ˆ#ßÒ,˜g¿–!î¸&`]$`ÖÅV±M&ÐS˘Kšeþ 2Ÿóì×2´·-L{÷îm«8—3`hDWÁ¶E  FÝâ,˜g¿¶ÕÚ.w}ûö¥óÏ?V‡™À °)>1X†@[L³`žýZ¦u·M`mÒFY`ÃhG×¶B`U¶J:fÁ<ûµ•fv¡ @€}öÙÕ,3a³6^WÚ™€˜û€ ˜ÀÊElË8‰/öË8fÁüŸËsÜ6 ÀvíÚ•ØÏÛŽ9Ò¦i.«£,À:Ú06ˆJ`U6T®×0 º¼lmÙV-,ÀÚ"írLÀ*°eþ ÒØL ,ÀúÐJݲѬ[íakL`ð,ÀßÄ£¬ ¯µ¶ëèÑ£S Nœ8‘Ž;6åç°s0h•€X«¸]X‹Z¼†<ë¬é¡q†aı3L÷310† x XÀýÖìÞ½;±>|xÊD~ Ÿ ôÉh X€¶é]qØ °ípw©Í`–‹ÏPÌšá"Œ8þ/ÈfÛ¢/¹[€õ¥¥l§ „€Ø@ÒÕ˜"°è"|^C×Î,ÀÜLÀZ%à5`­âva-°k ô€Š±Pcº*&Ð`}h%Û¸,þ’±ÎsÄÑK΋ëða°vûºv&Ð9`k´ZßµgÏžÚÜ›·N¬6±GÀlpMê ™@· x X·ÛÇÖ­N€™->7Á;òJ’ÅölãG˜g¿Vç;´”`CkQ×Ç:NÀ¬ã dóÖ"€àºð +±…àÒ†Ÿÿûq-´ƒKlÖr“ò…dþ f‘mïÞ½-[çâL y`Í3v Ý Àý>ÿ*~7,³] `Ör+,"ÀX#ÀS"ÍΆFÀkÀ†Ö¢®ÏJNžLé¹Ï])© ƒ€X‡Ú‘Eœ,ÒD|1]͹ €ØÐZÔõY™ÀÇ>–Òyç­œÜ ûMÀ¬#íÇÏT0óÅ¿(ç?cÑm† l„€ØF0:“¡¸à‚”Jm\%X€-«‰¨ÌriÁ&k¾<ëÕeçÙ%^Ö¥Ö°-Mà^®ÿ€ä¿ ã6YŒÏ+Èš2Áùvœ€Ø(ÎzM.È-Úã¢M  `mPvÛ$pìØ±ê†þ2ß@tÝqGJçž»M3]ö– X€m¡<ëµè.²3,À:Ó6¤!Ìv±œdî ¯k¨ú‘­XËퟌô£¬qj:ûƒ}-7Ž‹k…€×€µ‚Ù…l‘÷ñ…?#ä5`[l©ímÖ2^5æÓÑuçþ EËãâZ!`Ö f²E|nh‘ß…¬>Cá5`[l©ím¶]þ.ÝFGÀltM>º ó¦ƒO ±ñÐo?ü°×€®W쬰ØN&­úpar±Ú™ÀXx ØXZz¼õädÝ› ü ¯œ×€·“¤”,À¶Ðüq¾.R¾æ5_[h Ù: °Ö‘»À.ð°.·N£¶Y€5Š·œ9k»vïÞ]}puÿþý“cD˜?ÂZffß~xèÄ—Óßóùtà#·¦_9xcúÑ˦~ÕÛÒ÷½ôÊôôKÞþå‹~#}óó^QmÿïO½ªò#Œ8Ä%ÍU½­ÊãáǾÒJÛJ˜A€õ`¼é(þ&¤¿6ƒÜðƒ,ÀZnc.B„–þ=™ S‹í™㣬v&з{8½éßH?~ŻӮ^–âìÖ¬ãw½ó] Åýç{öUySÆíÇþ¼/Xl§ T‚‹…øzËÁžó‰ówÀFßK,ÀZîQpQt<Ç-›åâL`!ÿÿÞÿ'ŸJÿ㿟žZ\ÿöç3ýȯ_•.zÛµé‡oN‡oÿLºõþ‡Ò½}1ôdzì«§¿yòïŒcü#Îu·&½ñº›«´Ï~õU‰¼rG™” Øbg]$ Ï ±Ö‹û:áÅ9à“u¿^ÖÅækÍ& °ÖPŸ*HfiŒÙ¯…¿Ó²Ý.nÜnúÔ±ô?\›¾ý¯™Eÿþ%oJ¸6½÷w¥e^"ÀqäIÞøP¢¬(Ȱ›°ÍκD€¥%uo3ð'|â¼l‚bl`[hqþ5Y‹îy:â˜5aSOF[°ËEš@N€õXß»÷ÍSÂ癯:~ûÆO¦ã'¾œGoüœ2)¢ûÞ—^YÛÐ˜Ó IDAT­kÜ` `¦kòŸŽYü©0¯ËèŒëÔlKíÍz/Ä3b\<iVlK&¹X¨|ýoŸL¿uÝ'ÒÓ~áõ‘ó=ÿëÍiß¡›ÒgþËÎPÂlÂ6‰1lþ­ënNÔÁζE€û{݇Xñ¿þúëý°m5N‡ÊµëPc Æü)Š5ÈMyËŸLÿâgÏ,¦ÿ¡W¼5]ó‰»:OâšOÜ~è•o1ê@]ìL`[x«ØÒŒ{ÎñŸ8¯› ãØ–Z™Ì€ÅMŸ¤ÐÌØB¦<¹P4G2YþèžÏWŸ‚ÐLÒs.{gúðŸÝ7+ÉZa‹®[¶ëï¸/ý—ËÞ9b|Þ‚ºÙ™@Ûx£Áš^ÿÉžóo:¼¬í¦éLy`[h ]ñß“ócž–æ:þù¼óR²›‹Êʾô×O¤Ÿë'‚……îðÉ{Ê‘7èÛ”“‰Ô!.Ú§ŽÔÕÎ:EÀkÀ:ÕmcÖ2qf·Xl?ùL(Ÿ0},x—O‹¯O}üãé)OyÊÔ·fr1G¾v&¸íþ‡ÒÿYÈzª¶\ÓLõ NšÕ£®ÔÙΚ"À}}Ç W]aþX™Ñø[€µÜÔ³DÖ¬°f>ð@Jçž›¾ö…/¤[n¹¥Z;ÆÌ_Ò'6ýìÂ7„…Øc¨Þóñ;Ó7?ï••8ùOûÞ‘>÷'†ZÕªnÔ!F©» 4A€‡_­ùÊ„ãùä ‡×€5Ñ ½ÉÓl‹MÅ¢ûÒLØÂ&a¼‚¼øâ‹‹?c„(£;W¿ÿc“Y¡KÞ~XÞƒßSW͆ÁÀÎ6M€`x¹çêA¸´Ÿº'{ ئ›¡7ùY€m±©x Zø•cÉΰì9ÏyNuÁçÑÈŸ€ |íožLÏó5råõ·Œ u–ƒLìL`ÓXS"+0æ5`Ìø-À¶Øæk ° ¾¨y1Û¥5žÂø¯JÖ›ùä¹#Eêø#é¿ú–J||Ç‹~#Ýxô³[µ¬­5`¥JRw Ä`›¾8}?Pöòp_méxòŠK·¼çAP¶±ç¾ÔÔ¯~ÿ¶:á_×ø8pÀßÛrŸìBñ`[l.Ä•gÀÂëGUZ¼ÉñͦÄíÆMàzOú¶Ÿ~u%8ø,ñGÛ:m 0*X Â`£>8îq`—Û–í<ðÕýäN´©d7"lê'yb‚5Ž·)ÀxØ¥M´þ–ã¸é­“z{ Ø-Ýÿ¤`[lC.Ƶž "l‹ÕqÑ$ÀVë•Û‹~ç±pÛL `">°jÃ!Z˜­æ©4ÄCaš)’àÊg‘°užÓC÷Ê"O姺r®0ÊÐŒ¹òæ>E8ç„Göc'þ²Yy²Gd Dp¹+ùE;âÃ#eaƒ6`^ñ©nø‘Ç6˜˜aC݆`ãªN^¦¦ÝÞ¬­&G,ñÚp“.{ ³ææÄM‹‹›B[޲âÍ’rK7"nÈ]rºqËVnæ°Ó+]lÕÍu»É¿í:ÿŸ;?7m~bb>ÛL?U³¦âB3 Ä1”ËuKÔ5Ë9}Qý02óú¤úµÊS| ®UÊ×9ñÔO¥pŽÉS.Š#ì”Ý„¦ó’Ý1¾ì¨BЎæ8ËF\òÆåéˆùU‘¶ðF‘S­ ^V‹f `m´2⋦²Ï7(Ýt² Ù§ñÅMš7'nBÜô8×Ísv†› 妣¸rÜæ ‘º3hh“Mù>·›øøÅÁORžv‘ó<ÿEÒ¬ç–ûLßúü_«د\}Ã:Y"íË®¾¡bõ­Ïÿõ»&ýH×${®WúŽë5¿~¢-%!Ãõ•o>¥~¯G„ʦì!Wêï³3Q„㸧!ìä°;·1.ÈíP:åEZ1#.œp9übýªH[øCýçÞ×¹‡Ÿ{î¬s‘]!`ÖtKð•z.² ¾¸‘ä7$nV<Í-ìÈ|OŸ›b 76ݬÎ/D$­ò#OŽc~ˆ“h?eÎ<Þd5̺!ê&¯'Yâ’wtz½Aœ¢˜Â›1þH8g`Ã~òþìg?[ÙoŠäC<\i ÂŸºÉÙŠ¿lªŸþC€È; a*Ÿ˜¦‰c~¤ú_ýÜk+AqÑÛ®m¢ˆAæ +^G~Ç‹^ÛèŽÓOèôõUõݺ~(à¤Q\übŸTœ¸/å¯Gòã`¯M᥼éׄc?é°_Žk‹ë Ç5íÌíæú!®î+y¸òÔžë‡ë˜ø”?+ìWÚmíáÁý@÷öºWNlò° Š1X€µÑê—_žÒEMJâfÃÅÈMˆ›7«¥oA„½ï}ï›Ü¹ÈÉ[7©IÁ žžÇñfÊWç”A}ôDŠ?çÑͪ—nòº1‘7fìÇq#½Dûxã& –Vܤcùñ©<¯aªGÉnÊ—}ù1çØ!»8‡‹ìŽŒ° £]ÄoÊ=óôâòç¿éš¦ŠX;ß®¬Ë+3DØ3_u ÚÈyÞÉ”~¡~Èu4«ŸÄ¸¤ý³d`©_Çë‘kB×nž¾”7ñ¹Æêœîkñš$nn7~ÄQ^ùµ™çO<•Í^®”o¬Ÿâµ½×}L÷Úóxÿªìò°¶›§3åY€µÕ/yJ—^šyä‘ài¸@ãÍe®i…×\øÜ¬4\èùpnž)U¢B‚†øä¥A„\«»á“&nÄÕnòñ¦Z¨épùÍ–ºËV£Cq”ãXõ,ÙM¼h_<& .šÐÀš§QYuù+|Sû_zÇu•€øþ—íO_ÿÛî~㪫 f°C„ÁrÓŽ>`ú$çºè±Os=ÓOÕßcŸÃ¶¼Oæö–ú]ÌŸò¹ž(§ë›óRÞòÓµŒmQÀqý‘_¼É7^Ó²‘kG÷;ÒÅëQv(.{8‘qå”NöcK¬Ÿâµ½/Ý·°Aí9aæ5`m7M§Ê«I;efÏa¦êô°[o½uÇÍIµãæ–߸¶c__ŠC>ÜܸrÓâf¶ŒÓM[$¾d—nÀuùÍ»áçéJùQ–$öºñâϬüf«7s º9S6þð`Sð/Ù´/F䇃·ÄXðºü«ÄúóŽ›n¯„âá¶ûÞP®ÍdÓUFmaC6˜nÚÑOè·çœsN%^b§,=(ð¯ßõ]ß5¹»÷Þ{«>Gz~‚Œû ÇlÄ'OŽuý”„áôQ9]c¤ÿøÉ,.ù“_tÏ~ö³§î'ØC~r'Ož¬Î£H"Œ:^qÅŠVío¼ñƪ~ò$œú’×áÑñk„Çë™ðœ'×}¬_Ì£­c˜ª ò2ñ÷wÀr*ãzÛºÙ>= Ås£j底ãÞгóÏ\}ºï¾ûNÕàäÉôµO:}ÿ÷íùÖë'Ö-ï¹Ïëá,/zJ z XŽgTç`m4w¶ŒÁ‘ç™üôJl!³‚㧈HÏ@¿T…‚¢¨Á6Í$)*7Ê‘C éQCüèb~ÑŸãyL72‰IÍp!8qyÞ„Ã6Ž£ #?ü°1>Iç‰xøWe³'ϘN3 ùÍ–sÂpä•3¬6øç¿ýæÕ•`¸ä*xwSXa‰ƒíÆë}˜½F|ñú‰¤éÑù_íÚ•î½úêtäÚkÓ­ßùésßôMéñ›o®êsǹç¦{¾ñÓcùHwêîÆq~F\óÜw¸7rÓ¦:s/ùúÿpJ‡ÍÏÔ1GÀ¬­&=½LÅ!T4ÃÅÊ`vÅ›¹Ï^CrQ#êüÙ¸Ø*Ëæ‹]1Lû“§fÀ°!Â9b„×”£2{ì±I˜D™Äâ³W~¼æà<º8†¿^ÉW"Ê—0ʧÞr¯xÅ+&Â?ìEŒƒÂæèÈ3ÚGý¹yÞ}÷Ý1ZBèOù=ðÀÕy´‰0¢\ìS}Tç© 7pò®?ú³J(üë¿.}ùñ¯m Gg¯<þµôo^üºŠ-Œ7â^,GÐÂkŸ7Ëc#¶|&ºŸp¯¨Ûx yä©OM×ý×ÿº|N1Ó#ß ªÔÁJðÖÂwÀb͈:ĆÄB ¯=f@ˆ®gç~îséškÎü÷ßß?öXzÖ³ž5™ÅÊÏõI•Û®ï¤àÕ\/fj~ï7ü¡ßÕLZ(U—׀ŠÀ¶·ô1^=Éù¼Yâܵ=ÐþX×Z¥U{,ÀšÆÍ͵ð0fW⓳%š[Ȥðúq¡ø‹FºôÒ3_ìçÕ)‹p¹Qàzpþ7ßò-éØûÞ—Þö¶·¥;Ÿ÷¼ôçz%’R:~ñÅéÁôÒCמþ6VêÃò®á.y{¯ÉÖ°gѤ}`Ôgòz÷í~½»hû:Þ‚¼lAPÃŒfÖF»fkÀxÅÆ«5f§Ø˜²æµ×R³UA„éÕXu:^*O#³u|·ŒÍçÍòX£ÿÝ÷çV³3ÌÐÜsü‘5rj?iŸlaÌs;X„€–ƒè>÷SKô:z‘LgP,ÀÚjΆ¿ÆZ%‰9íYç×g-\UD¢QÎçÍòç%÷¿pÕ‡*Qpñ-™ÒÑ—%cÌíL`­£E„é~÷¬û­œ¿6å Ã-ÀÚhÞ°¬ï€Å*ñjsr±Ç÷šÀ±Gó¬L‹-gaog³0Ã…øšé¼l&ž1Z€5ÝÊÌ…5`ˆ!¦¢õ_ƒ±x.Øü¿óbøÔqxý8åŸð$f–AÀ©¾xÿâ·~pµéG`Í,Ø/z-X?l‹V²¼„u¾s×€ÍE4ä`m´n¶ ‘ÅÌOILKóߊøÅoN-d–fÖyv£!ð¥¯>1™ýº÷¡/ö²Þ}Z&À°ÖZ°/}õqy{oE¬ó]諼¬Èo ž`mµrö0Ä"L 3yZâÓv&0ÀïþáŸVBàÇ.?ó›xóÒt-¼ †0G„Ñv&0‹Õº¿çûÉ"|¯›…pða`m4±fªØÛ™Àšžùª•xß-Ó‰]3ÛV’óšß¾ 0˜#Àh;¨# Eøìãâ{?üðç>ïãï€Õ!…¿XÓÍœ­kº¸˜?3j¥µf1Îï~ð éeWßÐ˪c;`× /kÌ~ú 3²ú5ö<Íob-!³¾ ­Y°vÌ,LfL³n4ØÓ´ÅØ]Ÿ¯¥&ÛŽ>9w>x X“ÍÐù¼-ÀÚh¢°Œ' |::žoòçjÈ‹òì¦ HÄ0ˆöMˆýï÷üa5ø7µ‘…àâôôÎŒ ÿMˆ°éÖ8õ{ž«Š¨m0ØÓwh‹±»>_KM¶‹ð¹†r^¶¦!F²k«UO¯{â‰'ŠSÒúÙ M®³+7n4Hû$ľï¥WVö6µ‰~ˆ¨É…çM‰uò]'m¹wÌ÷Õ<Úbì®Ï×RÓmǬñÜEø^Öt3t: °6šgÁ5`\° €ë8¦½^lšÉàx“Ânû楕 ÚÖ¾Ë3b?ö•J|ó‚×Ìør83Q%F†Ì¦J˜•„¯ñÏûýPýZ}“5`*‹4ÚâL˜fVúGÂHÃF9œ3óÛ°2š„´}”6éªÛÖ5¤r»|-ÑOšt¥¾­~Ìžâ®~âÍkÀšl†ÎçÝl/ì|õ[0p‰5` 8 Pë8-ôd bàã¼/kÁtóÞÆþ©/¼,í;tS:þh7?ëñžßY ú?vÅ»×é"3Ój¦‹WŽ<½Kpå‰Cù+  (¢è{ 8DQ€‘·ÂyøàXååþœSe(6‘7~ØC®!ÎsÛrû×=ÿñ+Þ]µmÒU·kHevýZ¢ß4éÔ·é“¥mÒ‡½¬Éfè|ÞÍöÂÎW¿%ðY%2ˆ¬+ÀbþäÅÅo7M mÒõÁBÖëC W^‹¼ÙÓg0 Rl#ª&ƒFJ•8#Lž4œ3Åçˆ9¹(ÀäGº(Úð'^Ì?Ê"®fÓðãœë&:Í>D¿M_yýŸTlìÂíëµD¿éŒó°Î4EÛ†t¨¶]õ–Ë;½ìøñãÕ Á  ´ñ¿)Çà§™‡Må9„|4hôEx‰ùÓ/yC5èßÕÒß!¸;ú*3KꟄá§5.ô5ÍBá/a†ˆ"LNLç쉟 °’_L£ãR¼6˜úm2f'}»–š~0%úaÝ6)ßkÀÆ|ù¤Ñ °­’°ìÁ,^” lq†aÔ½²áÊóŠ±Ë¯KÕÿÒ_Ÿúúý9?ÓÜú¯R¹òãºa&+Îf!®xuˆãX3S5„™f¬&ƒÍé™-DXt%Uò‹it\Š×†£|Ú‚Wn´ÍX]¯¥6ÚJ}þ™o\+×_½×€µÑ/£³Œ8OÔÜÌÕ¹ùk­È*\y'¯øD>/]Hq™—f*|‰5`Sé|2—À7<õ»SÝ67qÏ"ÜzÿCÕ`ÿƒ—þN£–smÔ]ºd‚‹ëS³az€àºå:å&<º¡Ì€Q'ÚFÛôÝå:Úv;1Ž À&®5`ºNÙÏrØÂx˜?ÍJã°Íèœã©™!ÑEgÕM&ÿºAb ÒëI}V\…©3¯,ÀÈ([ÆlõÒÂìuÔ¹Êö~6ºAÿ¡¹ƒGŽVƒý ö¿¿Ñªé¡G¯caôÑ(¨èÇ\O\‹qfL ¦2å£k9~ Ÿ<ò¾Ïõ15P…5`1n)-áø7íh mÓwWw-õ½^]´Ÿk€kdâ6¼Lý?^'“²ÂX€±¥ÃæïRKVŒ›.7Oöz¢ŽYÐi4+6¯ƒÅt««3¯%À(<ü$ö“/õÓì±eÄáªuJ: úÏ+öòJUWüþ©°¾ö$¯Föˆ*ú'‚оH¿g°`ÐàºÌû'ñˆˆôêÿ©&¼‚ŒŒ<ÈŸ²tÍsLyZWƹġâ€8ù}@×l#€B¦´}޶é»Óu£kIç}¯Wí§¯OúlkÀÔÿ'eÔ@Ð5†=vÛ!Ð)ÆÍZâ«ô.Dê8Üà›vêÌ”¹² kÀn½õÖ©'{òד¾fÂV.gd 5Hhвû‰7¼§ìÿà“÷4Þʈ0f®¸¾¸Ù¸Ik~4áEx¦©ü:&¶(À¸¶aä òT>„!À°-º< aºfc¼&Ži úmÓw—_K:ï{½¶e? ôë|cŒãºjr ˜ú¼–J°ëǬD§¿N 0Ýló›y 'ÞÕ¡èxøsæƒá›Õ1ó›½òVåQ²e¦_¶Œ|b‡§ÎºPò°™ù:p2Û5öíÔpò³ÇÝò!@[Ð÷h›¾; .]K:ï{½¶e¿Æ ÆŸ|‹³ÅMü¤ÊÖ¸RÇ€ñf–cLÔJ<’wã ´òV™uãd]9”Áx(F*#pS9XéÙ4¯žJÛÅ}g˜^[uU;OlRä©N’7˜fÞˆO#\¯;Ôë:ÖB¶†5`Ô“rˆ²—c¶(ÆÊwä‘4HhÐ`/¿¡¡ù_ùíj°¿çø#C«ZoëC[Ðçh›¾;]7º–tÞ÷zõÂþ®c©c1c‚Qc¢ü¯¢ÓØZ7N’.N<ñ…?¢‹ôlŒ¿òËE˜fÛc|‰·<ïh[—WW;®•ÄÈ: • 8õ”qÚVuörD¤É;•„auKùÌ݇5`êHäK‡ÃQo¶¼ÓÍÍwÄ4Hhвûî_<õ °ÿ²›_éc7¤-ès´Mß]~-é¼ïõê’ýz-9eSƒkÀ*WJ{Í$v26‘>4&’6:­uã$ùååpŽ^†òŠëM5¶çy`ƒD¶õÍõF€—†É·Øàj¤¼s¨QÔ°ìåÔ¡$„䯽ÄR,Ga ïÃ0¥Ñ¬—ν_ž€‰1°ïø¹×Vƒýcõøò :˜"®ë y ™t⯯ڄ¶é»Ë¯%÷½^Û´_c6hœApLƧ;îH©ß‚Ô8GY‹l¹¨‘ÝQEŽnqÂBeÖ“Ø‘—#– ' ùżd³f¹“`ämUß\o˜+ïPQLI€å ­FQ'‰iJ~ŠÏ^á±3Äð¹ÇÙ°¹ñ7ŽF2¤c ±N%¿Þ÷ã¯?ùä†{Èv²‚£-èOÿô'_Ùûk,¿nòó¾_7|±¿MÇxÁë; ŽK˜íAÀÈ¿‹kÀ4ÖÖyÙËɯ.MI€‰a̶!²à’ψQ†l"eå›ò=}ÙWŒ›¡¶h¸üò›eþ@—¸Z$58û?6tô§^Jýå—ç#uþ„Ç|¿èz XŒÏYªo1þÌüO–â#À¢¼‘ÑŸcˆõ¢Ýb½VíÅþ9£ÿ4ŸºÈõµ^`Ñþ¡\_C»Ž¢‹í¥>ØT?'_„÷úX.ãŠ\ô—ûuü)Oe¬“O=uùGË%¾Æ¶èÏì¢ ýñ“‹þä£-÷gLÅEåÑUÿÎÌ€ˆFîäé ÒËŽõÞ7ÆUGWCgI&L“pŽ)3úÅt +†/||z ØÉ“''å‘g¾ÅiÝ…óžÑ3`¯èýìDÔûêxöfF7ßJ¯ƒi›oûéW÷¾å3^ùyìƒ}<Ž¬Î¸!Á>ŽIœOÆ›×€Mʨ©pÝx‰­Œ‰ucžÆÄ˜¿üêÒ_dP2 1ÆkO逘¿l*ÍŽ•òê‹_§˜Þ“Ó³@ÓP¨]¶¯®C©1ÔIbê̶րñ0:£ÝúJƒ„üÖϽ[9Lá?êEø]i/ÂïJKtϤŸ[ìg«Øs~ß}÷5ö[¥q®D¨n¼ÄfÆ(l-¹Ò—Tf) õ. 0Ò”âkMWl²)N¸DÛÈ‹­o®sJ@ üØÓ¹£Ó(N¼®C)âÓb::þùì6ò^ÉekÀÔ¹VÊˉ¦HlÅ'rùMEÀÉ™ÏP|qµFüŠa´cSµ@, "4Þ0†0¹0%::ø[ŒƒŒy¥‰±„E§±2_O^¯£ "-ã.[œDÁ_åǼ4n’W_6ÅøÑ¶.wN€WÓt€sΦ†ÄEœ;5DÞЊW`„Åož0F<Ê¢s”Ô¾ò[x¾Fl×E¹pޏƒ€ÄÖض>Īkfü5=X§±IÇ=¡íkÊbÝd Ž8¯~L×=BKã•–ý0.æ“q"#ŽÙ\—J—˱ ޵Q&éÏ£“È#\qÉ{JñcÚ®wN€ °?‚ `ÀǸ<ÝÖ=)+ù‡'^f¾ãÓ3¯D4¸ám l%›”_{Ú‚×ß´MW¯¥í´ }‘~›¯WÚaMkÀv”aÎè†C¤œw^ª>J§)Ù.Ÿ/#Àhú°LÓÒ B¥Ád¬ŽÁâ‚×¼½ÔØÛ!pëýU\~ðÒß9ãÙ â†Á„ÙYú¬ÖLFÁ£5 ˆ.õk¥³ºšЫ ÒqL±ïk£\ކø".6PygŒ¶@€Ñ6]s¾–¶Û"ôYúêBnÃkÀ*Ó‘:A  a7]?_¶ùN¯;~üx5X0`”¶ø¤¿l} -¨·›nÍ/ýõÕ`Îϼf: á3‰( ‡hbJN¢,â_4^. Jå’7ñò !–§—]Mîi ú+mÓçk©-ÁõƒÁ\§ ‡¹aˆº#À†HWu kÀä•ï¹`_ù–ÇÒyi°kkÿ²«oè Ò§_rê¹Ûü¨¤„PI‚K r黥‡^!"ŽrÇ"|ü4[– ¨R¹Zìs—§ÏÃ7}~׃_¨ÄmÒçk© ­pÆ® >ØÔÇãþá‡ö°3¸F{dÖtÓ/±Œ'ûüé~óØú ä®»ý3I¢¢-Á•—Ó'öâ·~°ô¯¼þOVé+¥) !2ÊÅPËãÑ/”`¼®$ç¹€*•›ç+”§aM_yý-U[Ð&]p¾–k…ÒCÂb)—‹¥þK¿,m„WÎkÀ–;°Ø`m4hX6«8ýKî¬8‹„q“a°ê‹+ ~¹³õÞóñ;«Aÿǯx÷ÎÀ†|4äÙ¯:†ØâÕeþŠ\@•Êí’û±+Þ]µmÒ%çkivkÐÏ:缬sMÒ–AìmU½årN¯{â‰'ŠSÒˆ/f Öu}`ªo<,ÀDñà˜e IDATåÌþáǾR úç¼ ½u`BùŒ*},®q‘ ËãIp©¤c‹ŽÛEy/Ÿ%.¥ù7qL0›J›tÑùZšnÄ{ð:ŸŽµ…3¯ÛôîiÖF[„5`ú-H’|C€åØ*æõU€©® ?÷»Щ÷À÷½ôÊjàÿÝ?üÓàÛÜ!Œ+ú& \eˆ.9ú­âipS¼ø_dʫVùkOz®ʦœºôŠßÄöˆ/Ú¢ëÎ×Ò©’ð§ïè8Øt[rM¨¿S.×ç“{<ŸZ:÷ÜMëüzDÀ¬éÆZp OñÌ(L.Φírþ½$ð¿ßó‡Õàÿ‹o?ÜŠý!*“>÷ÀÿÜ-ò0úwüVǤc€ŠyÖ 0 jÄgÓW°óô¹m›<‡=Œ¶°ëúIŽ~ª5ŽôexhàZšzÐö°6š£³e´Ó;[ý– [p hþz¥% ]LOð þ»^xYO,.›™¯+Çê¦/ìiƒ6ÿµ›$úgU[Œ™Y„VÉág…“×€•0ÂϬ­f>½lVqÌ24=->«|‡õƒÀ3_u ï»åî~\°²¯ æˆ/ÚÀ®˜‰jÃ1ëgtc™Sa^ÑŒîØ¬&kÀNž^‰„À½}±ÿêI ` s¶/}µ;_¿ï ¾î›Éz¬ 9îãZt¯‡löZ”?¹Ï{ ؆ˆ÷3 °6ÚmÁ5`m˜â2†A@ Á»ò!ÐaP] }÷—ÞqÝìˆí' ‹!þ±Šõ^ña›sü§œ×€MáÓ‰X[­½À°¶Lq9ý'pì‘Ç&³1÷ýù£ý¯PÇkcÍ~Á~ŽÿÍ×ñ:+ð:Þ†}ueb³ìb¯Ùþ\ˆÆ,ѲNoæ¥ËÙãó[Ä¢ :f»°q2ëóö°HctÇ`-4ù­ï}oºåÿãtËÁƒéœsΙºÅÇ^„ßBƒ ¤ˆ_¸êC•(¸øÀ‡zW£¾­ƒ1 æÛr%¡Áýb!aÑÑ”=õ}…rˆïk/übQ„5-ÀXc‹ˆ­u,A!Â6ä`#QÉžµa!æï€mˆr³±kºíNžLO~çw¦Çï¹'ñV.B>5ÁT4ÇÚ¸!§§›¶Ïù÷–@œ•¹çø#½ªGŸl5ûµ‰ÙF®Ä‚ ¿æ$qVKîä>Ö¸_àf 0¥APVé/ÿ¾[Dä­ìÙpÊ‹sê@øí·ß^åÅ ùP&.`•gJÕz(募…ã˜uQ~„ë[røañç9ÄO~ßÕý·J»áW”# T±Ãâ6üÚs’¯zA`~¯íE5:ndXÆÍƒ‹ròLçf«‹5x÷æÛ¹¡Éiàæ7 Š·í=ƒ@´O˦íMæ{Éé‚þ·ß¼z“Ù6žWŸl`°^×iÖõŸÿ·‚B×qè›ÄÁ•úኟۦøqº÷ ºpú½Dûxo"oÎÉGñc¸Äa¢h¢HçìÉ+w²OþØ¢²ÈOõ&œ:§ŽõKÔ‰0ÒÎsñÏ«´Cy;Ë6쥧îó~*Ëûî˜ßk»_‡~Xxz ØñãÇ‹7#*Áͧt£êGw>ç7ضëÁ€ÂzžË1ìf ‰À¼< o‚Ç—ÿZú×/~]%~ïïXÄ ÇY‚L_ÿæÅ¯K°^×!z$xÈ‹Xâ—Ê)õún.&t©‹/a”‹?ÊÔ Çùuíu,Š1Ò"24ƒµŠƒKœ)¢\q£¾ÔM®TO…-½ßÐ0ê,ι Sa^–ãÕ¹X;vï½÷V7LÝLbñ\˜‹†˜fÓÇØÅ(7==uªlÄŸ› qô4ÄŸwc$/ÒQ†òÄO.>ÝR^´Eys£&-çÄ'?Ù}øçƒù3øðäŒËš’_©Þ”‡]hHGy”‹#œö+ìçxÓî]ôg‘ð• ˆ„MÛ××ü\/Œ7ḾèôQöqöF}º®œRx©ï*ý¼øêÓä¡kI×`)ol&aôóxÓ9~„Ë‘_<—n×~r”õÅõÅX/ÏGéó=öq Æ2¦âlp XIܪ,Xø;`¢1îýæGƒqóÜYûì;`DàäæÂÍ€›“nPùegfÍûp“ÒÌ‚sݰ;œKppc¤rÔK7oüæÝ‰KUžâS.ŽÁ‰¾ÇÊ_q‰ã+œ4Ü´±‡ª‡Ât^²;ÆŸUol’ýä‹=вûØ8§¾M¸Ék²«ÖMÖ„}}Ìó’«Nýæã&_ïÆ> õcŽ.³úGŒ+žyß•ž·üc|úm¼¾Gû?ìãú¯sô{mºîˆË5I^¹ãzˆþùýplÔ^éóx%.Š÷ÄÃ>î \ßäË=L÷Mþ$yR|)WçøOÊÜàkÏXW÷ƒ@3£A?êÞž•a ˜ ÕM‰› 75]¨ ßÖž…nì¹YIÔ`£ŽKöå7lò¢~ù†?N b^ñæEq¸Yꆭ¼cZn¨Ñ¾(À¸ñŽC@Æ„ ·Ýÿð&²l,. 0ØI|Át“Ž>Jߤo<ç9Ï©ú¢ú4åNÃï)OyJ%.Ô §OFœâ*>{6Ü-·Ü29®< ‚>+{øDN¼.°/žßxãá£ü¢@Äþ¯Å!h× éî¾{ú·L¯¸âŠ*^,ÛTWåüàC8BJuVœº=÷Íü‘†|8Ÿ¸ ­›äwZ$ríÇvœ„{ ØÅ,ÀÚhõ°lVq\¤ùÍfVüM‡qóƒü±G7Äüf›—ã6Opo^_nФÃa 6•\)o싯>òt Iñ‰:·›tÄU^óêÍ€³ÉW%¹ÝËœó•vÄÃ÷¿lúúß>¹LÒVãvU€Á v0lü‹÷,Oˆ®ãç'î¿?ýò/ÿò‹Ož¬Î%`ž|ôÑô¬g=ëÌ5Û±ú ÖØ¸^¹ìDØ»áï€U8b\à[`v£%`ÖtÓsQŸ{nJ\l§O±ˆ ÄFÝ&Ñ£4mì5Q€q“â\¶hÊ^âq„ýrÜØâ¬SI$).ûyŒ¼âÓ47zÍ0•ò–Ÿ˜r³Õà@yØOú\ô•e#¼”޼êê ò…•âÛ•7{Î#¯*óþ<óU*ñü7]Ó@îÃÎfˆ¯g¾êm›¯è¥—žp8u_Ð܃ó¿ûwÿ.ýß?øƒôú׿>Ýö¢¥Ï}Ó7¥‡®½¶âôÀË_žîùÆoœœ§.Ô'û *×"×{î ñZ­*Ñà«@î=ñÞ¸ùÎåûHàÌèÙGëûbsX&Ñ Á7 üvÜZª+7 nR^¹8A4FD "MŽºáG˜êÅq¾IÐÍ`Q´¶PŽüñ‹¤püÅZqÈ4šÙ’^Gü%>gV½‰C½É':ÊÃ2 §ÜÜæSÇŸyø/Ów¼èµ•¸èm§ÈMå=ä|`…øúW?÷ÚÃ;ÆÎ;/%„ØEz(óys<ò¸Ó ʽƒû÷ ®Ë‰0Úð°ØJ÷ºîãq˜ÁÆÉ Zà;`퀬/åG~äG¦Øý÷ß_‰E¥ÈÏå?Äý-÷=˜¾õù¿V Š—]}ë¸Ñ:ýÊÕ7T¬`»Æ¢€{ÄÏ›åQÓa0('®5`äm6!ìƒ@À,Àhì0¬;yòä”Hˆe2cgpbX+ÇzBaóD(׃ó¯|àég~ægÒþè¦{¯¾:Ý÷Û¿]¸Ïþþï§»Þð†ô‘|äTºP Âb¼áýÿ¹ós•¨`Vgß¡›6œûzÙui l`Ä3»a`š×.Í|!Ä&Žë±¡5``Ê>,ÀŒF¹¨Ã0D}Ý&–¿&kĶ#Òd™]È›ºJ|ÁÀn\¸×–ÜÄ¿Á5`¥rígåi.›%Ö€‘1O@LC³×T5b ?=mÖçfÓÞóñ;Ó7?ï•• ùOûÞ‘>÷á5ÌtÔFÎÚ\Fݨ#â‹:Sw»ñàAwêuãéŸ Â¿r-­y׏ހX™MûŸ^Æg(xâ* -fÁØìL  ·ÝÿPú/yÓdV¨ÍOU´%Àâ'&þýKÞ”¨³Ý8 Ä]³^‹ÏRð Ìñ½÷Þ›ÒkÀrªä˽¾´y~Nkœç`m´{Xvë­·žYs•ÍM€™0;h‹À—þú‰ôóoýàD„!Rþà“ÍÿG`ÓŒ:P½r¤ŽÔÕn¼JBH~ü°÷ï½éMk­‹dõKì~ °¦Û9[Æ:/^5–*§ ´Màîùüä³ ˆ–ÿrÙ;ÓõwÜ×¶k—÷á?»/=ç²wN„Ÿš nv&0—KE²ßœ›¦&‚––œ?XómVndÞ`m4x¶Œ"´¸0qˆ2þƒa[± Ó\† Do¹ñ“é_üìeóC¯|kºæwÇ(<¾æw¥zÅ['vSêbgÛ €ã$ŽugÜóå¢8“Ÿ÷ã$`ÖV»‡ï€qAê? 5Žøò·aÚj —3‹À×ÿöÉô[×Ýœžö ¯Ÿšïù_o®~Ψ‘©žeÌŒ0la¶éU㹿ðúô[×}"Q;ؽéàšû=÷wý—;ß^¶­–éV¹`m´GX‹cšY0Í„Å0›@\õÑÛÒ÷¾ôʉÀAè<óUÒoßøÉtüÄ—W6qÕ5`”IÙØ ÑÅþ{÷¾9a« t…€ásGpŇm¿‚ìJ+m× °¦ùgkÀš.Îù›@núÔ±ô?\›¾ý¯™>,t¿øÀ‡Ò{?qWzø±¯,\ô¢Œ<Éûâ×N-ªGta 6a› t€ä[|u½¥Ú³Ï¬ Öa OCz*íý_m4ˆËX•ÀßÿÃ?$~´ú¼ñ÷ÓS_xf­˜f£þíÏÿfzö«¯J½íÚôÆënN×Ýþ™tëý¥{úb:þèÉôØWOóäß%ÇøFœÃ·&½ñðÍUÚùõ«y)_í)“²±[ìL ‹f½Ù˜ÖźئæX€5Çv:çÓkÀžxâ‰ÉkG]ˆìõ­˜Nì3è&ÛýyzÓ‡?‘~üŠw§¾gßÁ$á´ê~מ˪¼)ãöcw‚­2ŒÀ¬…ö¼šô° ØHO-ÀÚhøš5`yÑ|#!fg}%À+Ã?¾çóÕz¬_9xcúÑËVŸ·ø¾—^™ž~ÉÒ?ûÿ~=ýÓŸ|eµýËýFåGŸ‹ .i|äÖ*‡ÖXcÖW~¶»ßx½ˆ¸âM›„˜öÜãýWýnãMZo¶I𥼖XÆ¿‚,A´ßPÄ™°¡ÔÉõ0à ÷p~ÞˆMB,îý-ZÞ[€µÑ°YÅñïÉ`³9¬ï$À]„ß÷úÚþqÐŒ×8kïZ/JÀlQRëÆ;½ìøñã3áûC¬ë‚vú.°ërëØ¶&0+Æ:_¯ïm‚n¿ó´k£ý°|pǺž–^þ÷ä6Ãel“€Ø6é»ì6 ¸x ÿÛs ±6[¡ÛeY€5Ý>K¬kÚçoÛ& ÆÞΆJ€‡iÛópÍìáÅ9þ~ØjË/W/ °åx­{Á5`«eîT&Ð`ýi+[º:Ú³¦·äð÷Bü™ñùY€µÕæ¤tèP[¥¹è$ °N6‹Ú0Y‹ðg…mØ g×q`h ¦£5MÝsl‚ 4F@ÌÿÙbgܬ֕Laáv&`¶¥>€èÒGùâ"ÍÝ»wûâÜR›¸Øæ X€5ÏØ%tƒ÷rÄ–f¼ØsŽ¿ @Àl ý€Å˜,Ääbäg)øHfÀ´nA†8³3¡°Z‹º>"À=<Îl8q¢º¿#¸¸§³ç~¿ @Àl ý€­r1Ö]ˆ\Ä\°~-¹…Æq‘cogC"À —?¤=¤m¾.`Í3ž*Wˆ«yÿ†Ì ˜gÁ¦Ðùd,ÀЈ®B‘€X‹=g°›§‰ fµ`óœ/æy„ÞG`}l5Û¼­ñb?oóÛEˆ?Î|%0|­ÖЬUÜ.¬c$Àü_k›³6Dk{ão×ǵbkì zKÀl M·Èú..\.h; °!µ¦ë p¿ö°HÄÇóX€Í#Ô@8ÿ ÓOAùZ0þC’/%ž‡5`г4V X€µŠÛ…µHÀ¬EØ)ÊlK ‰c&,Ÿåâ ŠÏSø[·Ô0.¶Q`ìíL`Hx æ¾ng‹°[”Tñø E>Ë%áÅZ1¯hº³Ü* °­âwá&`"`֡ƈ¦x:;ÒðñPX€ ¥%]0u X€­K°¡ô` u¶[% æÿ‚Üj3¸p0°k¹x券š·éß—[6ÏÅ™@£,ÀÅëÌMÀzDÀ¬åÆb—ÄÕ¬= ñ ·3!°Rkº.&`ë°[‡^ƒiý ²A¸Îzk$ÀØÛ™€ ˜À˜ X€u´õ-À:Ú06k-`kásb0°ëhcú›2m›µ °µð9± ˜À€X€ ¨1]h›ÀÇ?ý@ºûÁ/,\¬Ø*ÿ©´ æˆ&`&Ða`n›f]'pÁkÞžžñ«oYØL‰( °…‘9¢ ˜À@ X€ ´a]-hš³_T‹Î‚)¾XÓ­ãüMÀºNÀ¬ë-dûL £˜ý’ ZtLñÙ/ë”vÙtŽo&`]$`ÖÅV±M&ÐqqöKÂh‘Y0ŵëxÛ<0Æ X€5ŽØ˜ÀðÄÙ/‰ªEfÁ×lx}Â52XŽ€Ør¼ÛFO 4û%a5oLñ¼lôÝÈL`ô,ÀFß À–#°ïÐM‰°8 ¦ó—]}ÃÌÌ,Àfâq  ˜ÀˆX€¨±]UØ4 ªEóU|Ï€-JÌñLÀ†JÀl¨-ëz™@ $¨-JñÙ/ë”vÙtŽo&`]$`ÖÅV±M&ÐËŠ"Å·ëIÛL0ÆX€5†Ö›Àð HPå5ý†§~wZgËóã¼®¬R\û™€ ˜@× X€u½…lŸ t˜@(š'¾X6+N©Êue•âÚÏLÀºNÀ¬ë-dûL ÃêD‘Ä•Âó=,÷ã\éJUVüR˜ýLÀL o,ÀúÖb¶×:D NIH)<ß[€u¨mŠ ˜ÀVX€m» 5a°Êk3O€)]¾Wºè0eE‘âûKønT›f&Ð  °V0»®8xð`:räÈÄ<ŽÏ:ë¬Û¾}û&qºpÛ¸{÷î”ÛÈùù矿’¹¤Ëó+e$AU +ù)¾X‰ŽýLÀÆDÀlL­íºî °[ò8zôhºð 疆“pü±‘ãèöïß?X¥AïØ±cU¹¤ÇÉVޱ#Š3ü(Wâ‚=å‘/ñJ3jU¦ÙÍheÞµ§ŠÏ~Y§´Ë¦['~d¨|JìÖô~QNÛÆ~IŸ Ïч6í¶ÉcÓuq~&Ð& °6i»¬F 4° h$b(LÂq‚CØ0É•*”:Ç F¸Êc`ãœrqˆ—8ƒÅ±BÅ%NŒ¯pÒ#|$Š$Òd aWuƒ^¬ùrŽcàŽõ–XÃ+oöÄvɆ|¿¬(Rü6u¤¨ÇâO}$vaëMýñÓ&>uìÉKÌëºâPùÐ>Ñüè[ôaò"Œ8Ë ôØÔf¹ùËÊÓƒI샤ÅâéRÝÄj•í½ ˜ÀNõ#Íθö1N``Ô Æž„ÁPÉø|P"/”|Óà«6æ %Å%ƒeà”wL‹“­øÇÁ/ÎZ1ø1HÊÅ2åÇ>Ö'·5² ò°Áåñò|ªH5$¨j‚wx+~›l–(ÎÅ'ç´!‚WbSÇ^ñ ¯èz P%žúéIKØ™Õ?ò¾F:õ½ØÈÿ_v¨œø`ûi‰KÞ:¦)qgñ¨ù ˜@‘€X‹=ûD€A’‚AÑÂ.ˆòzåá%‘ÓÌ5€’/vá‡+åÍ@¯4Øýrœ3ЩNœ× z±>¹­äÁ€ŽÃ.ÍxäñùT jþHPÕïðVü6áÃX‚ƒ`@ýp0Ññcg0øÇMmSbÛ* @ˆ.ãâ7K€ÍèÔ)ÚDZڛ|s;T>{X_"‘¸p•úEnsÌËÇ&`õÎ\ùõqb% Wk,04³š<.ç%‘+?o€³'1]]ÞØ§WŽy|Î%”ØGQô4pR\n+áØ§½ÊËãá*^i/AU +ù)þ¢ìî¿´)­Î?z²TÄ?„ü¨“ÄǸRÝc¥ð{¥™ŸrÚìµÅüâ1y®*ÐÉ[ä4Ã¥ë$W<íÕ/%g¥ËmVÞ›€ Ì&`6›C;N±¨Ð¡FƒOþªEšªÅ€gÖ`qV‚2˜9`ðÇ•ò–ƒƒ³fH£×? ˜Ñ僞Dõ‘‹eË•¼b< 7ØàÄT •¶´—(*…•üQö²«o˜ü‘Òj¿ïÐM¥"vøÅWoF‘£œmÌ Æ•Î^þyÞòñáÛWq´qñ“Rx¾¯è%E\‰}òÕ¾ÄSÙìåJùæ6+®÷&`³ X€ÍæãÐ@ô00ÐjÀŒƒ Ç„ƒX‘Ctà§A$Dø³)?å¯ôì•–c„ âFé°¢°Á?:E…ãÏqŒ£ œJ«üµ'Ù¨8+ÕM~äCêþb„ýly~1¾Ž%†t>o¯øìq_~ükEöÔ^–‹õ…/¬$º$>ÅÞ0Ó9\ˆ]Ì/ús<¯H(ëAí­óÄ•S:Ù‹-¹ÍŠë½ ˜ÀlÓ£Áì¸5Ø0sÎ9gJ€Ý}÷ÝÕÀ§bòsùwe/Aµ¨=Š¿¨#ßÒ,Ø¢³_¤G4Dq‰‰‚Q$¡J¼(<ÄEdÈ_b(î•ß<†=Ä‘=”r1³ª@ÇÙ«¶¡Ê•›eqáÄ—ØRºü%XÇ{0ù,Àæ3rŒ.8Ö=ð@J=;ÿ«ãÇÓ3žñŒôìg?;ÝõÁ¦ÏÝzkBtá>ýá§{n¾9½ï}ï;Õ]¨_Ö$¨2ïÚSÅ_F€å³`ËÌ~ÕÒ“„ ³Sr_ýêW§DT~®xÞ›€ tŸ€X÷ÛÈÎ"pî¹§Dâä¼óRòy³<²¶ Ê¼kOÑ5`Ê(΂-3û•.ºHY¤tù­gyø¨IDATå§úˆ|zpþ•§?=ÝvÛméu¯{]ºý¿ÿ÷tß·|KBtáî|ÞóÒ]ÿ䟤/~ñ‹§jÔ…úÜq‡èzo&0‡€Ø@î8„¢ ñűϛå‘u ªÌ»öTñ—`š[zöëc;Õ7'ˆ1Ÿ7Ë£¶å`&°Ë‰ø¼$¼d¹ÏO Ѧx(ß”& äƒ×ÌÃU™2 ¶Ôì—,AtÅ™0Ÿ7ËCܽ7˜IÀl&š€ Ì"€(b[ÔI€±_Ö1 ¶è>.›·ã›€ ˜@Û,ÀÚ&îòL`ÄÖ`#Ææª›€ €ØÕU2®°ëjËØ.0¶ X€µMÜå™Àˆ H€-»ÄÈ\u0°húZ&ÐE`]lÛd&° `Û î2M`¤,ÀFÚð®¶ ˜À`;ØÃL )`ìíLÀL`Ì,ÀÆÜú®» ¬A€ßÌop^v`ó9ÜL`,,ÀÆÒÒ®çà †øæüÇ’©8~ü¸²Üþýû«˜>v옼&çy>“ÙXħ&`&° °%`9ª t™‚謳ÎJ¬ÌäGœÏ>ûì¤tæX¡¶k×®IÜǧݻwWÁÊ‘Vr”QÚJqs?Í€ù¿ s2>7 °±µ¸ë;Xš¹ŠdÖ  Q¦c„Ú…^X3C¦x¥|ªHÙâ)MT{jV‹Æ&`##`6²wu‡K $œ¢H’c¶ áuâĉJ”A„Ù/‰³R>%j1ïRxÉoYÆì]œm+åi?0è# °>¶šm6’p’è"º^32Û¥×”/Žy)WÊGaq¿ŽCˆÙ™€ ˜À˜ X€¹õ]÷A@1[Ĭ.®SE Gliñ=i8G”É-*À™½fÀ,À–¡æ¸&`C$`6ÄVuFIáÄŒ³^çœsNõzQ3]«G-¶Ç‘†(ûèG?ª(Õº®Ÿø‰Ÿ˜œoòÀl“4— ˜@Ÿ X€õ¹õl» ˆÀÉ“éºë®«>CQy=ð€BNí×=?yr:¿Ï$Àü_+t20Á°LSº"£&pùåé¡W¾2Ý|óÍ)]~yJ眓Ò§lâœ<6àžñ«oIl`€é,LÀzMÀ¬×ÍgãM xîsSºà‚”.ºè”ç¦ÏCQëZ€­KÐéMÀúNÀ¬ï-hûM 8t(ž¥´éóéÜ}f&`&°" °Á9™ ˜€ ˜€ ˜€ ¬JÀlUrNg&`&`&`+°[œ“™€ ¬NÀkÀVgç”&`à `6Œvt-L W,ÀzÕ\6ÖL ` @u–&`³ X€ÍæãP0á°~»†&`&`&`#`Ö±±9&`&`&`Ã'`6ü6v MÀLÀLÀ:FÀ¬c bsL` ¼l ­ì:š€ Ì"`6‹ŽÃL`$Ž=š.¼ðÂtÖYgUÛîÝ»ÓÁƒ«}›ìرciÏž=éì³Ï®êÆžºRgܾ}û&õVýµ?ÿüócàŒMÀÆMÀlÜíïÚ›@:qâD%N%GŽ©¶ýû÷W¢q"‡‘h‘ߪû¶ö"¸”‡žÔºâO8MõF¨W盪煮œÎL`¸,À†Û¶®™ ,D±ÁŒB,º½{÷¦8Dâ¶í˜‰Ûµk×Jec?‚*¯u ,Ö?gî×v}]ž ˜À8X€£]K¨% Æ QÉ)\¯å¢# â?f”mÑ!f5øǬRþº3Î4åy’o~däGÙq–.–ÍÌqê^¥’gžÖ,ô± ˜@“,Àš¤ë¼M 'Jˆö¼~D¼äŽð(„JQà ¢˜mŠ"ŒüP¥E4ñªO³R㇓h’ ã< 0ÊŒçäÉyIdɾR]òºéÜL$¼7hš€XÓ„¿ ô„"&ÎL!ž$„¨B.Àˆ‹xŠN¢GâŠ<¢ #.~q "мqñXù_3UñXáu¢ 嫸óöuyÍKçp0X–€زÄßF@@¯ù43E•s¦™­ˆC3Xší* &Ä aF8³fJyú|Œ2‰›oä“;‰AÏ€åd|n&Ð`]hÛ`[$€Ø*½ÂÓl”ÄÔ" qãåL‚ †@"o•#¤‘ÐÊE^~®4¥½Ä\©nÄÇ?nž+‘´Ÿ ˜@,Àš êÅ,S.Žˆ£rXÄ/Q¥üȇ²(ƒ0Ù%±4¯ÌʰðQG9²=y*¿µ²5-Ã}l&`›"`¶)’ÎÇL`añ¿ c"„Q.ØG°IôÅø>60¾°ëkËÙnè1:†øâu!³Vr¼ndÖ*ÎÆ)Ì{0è+ °¾¶œí6¨`ˆ,^Qêu!3_u¯ {\}›n&`ÉÌÀLÀLÀLÀZ&`Ö2pg&`&`&``î&`&`&`&Ð2 °–»804õ[æa&`c$`6ÆVwM`ËêáoÙ,o&`­°k µ 2 0‘ðÞL`¬,ÀÆÚò®· ˜€ ˜€ ˜ÀÖX€m ½ 600+ °±¶¼ëm&`&`&°5`[Cï‚M`¼¼l¼mïš›€ œ"`æž`&Ð: °Ö‘»@0ްëXƒØ °1´²ëh&0‹€Ø,:3000X€5ÕYš€ ˜€ ˜€ ˜À,`³è8ÌLÀLÀLÀ `ÖTgi&0›€×€ÍæãP0á°~»†&0!pÖYg¥Ò¶k×®´gÏžtìØ±IÜ&,Àš¤ë¼MÀú@À¬­dM`C$¾Î?ÿü·³Ï>»fì=ºviGŽIûöí«t°ƒ®]Ž300¾°ëkËÙnX€X)é…^X‰0öë:Äe!ÄJŽ0  ˜€ Œ•€ØX[Þõ%Y ±´)ad6ÊîåJ›€ ,AÀl XŽj}'°ŽCTíÞ½»iäÃëÊ|ݘ„—ʉ{ØÅóxLºèƒš‘#žÊ:qâDŒV3“Fù°ž ¿Ã‡Wþu3z¼j%]]øŽ‚ìa&`$`¶A˜ÎʺN@¢'·a#!ƒpÉB‹´0D›ü<FZû¥¼ˆ£øä©cÖ€‘NçñU¥„¢kïÞ½Seá§²d£Ê’`ÃFÒá(»ó4„‡0¯EIïMÀÚ$`Ö&m—e[& †h‰† A”;þ3’tÄÏ]ˆ!ÒDaÓ"ÀJù!”dK.šJ䉨‹Ž|ðGlåÿ@ ;öïß“TÇħ,;0Ø °mPw™&°%•Y³H¹ˆá‘Sš)ÒlU.Ü$|–`ÊO3X9¦’h’+ÍÜI<2+^?æb.Æñ± ˜€ 4IÀ¬IºÎÛ:F@â+7 ¡Â,‘fŸr¦ø*„‹M¯!—`ØQš“pCªŒ¸×+Åø½2 °:±§W“±Nš¹‹~ª£÷&`&Ð °6(» è:&óê^ó!‚g¤G!zØ´(Ÿðè8'n(š'ÀdgÝ> §y¬4«FØìLÀL`[,À¶EÞåšÀHÐÔ`ÊÅ‘Ä3Iqæ‰<Ó¬ô:±ÎæyŒtˆ-­÷’ +­ «+Ãþ&`&°i`›&êüL Ãæ 0‰DœN¾(žpÅ_V€Õ-ÂW~ukÀôú3 AÙW7Û†‘ä¯×¦1ÕÕ{0h‹€X[¤]Ž t€À,† )½R¬8¼ÔkÉ:V7˄ӌTŽE³Uñ5#qâHÆ4uöÅ8Ôº3‹G¹ìíLÀL`›,À¶Iße›@Ë$À-q“ð"œã8Û¥ua#„›f‘´Ï≼;J«Š“ "<Î^IØ‘–™0ÂÙS>iò²`”­ÅøäAìLÀL`›,À¶Iße›@ËuB¦nÆ  Í !”êÖ€Q-DŽÒPft¼(ˆrQEÞˆ;Ê’½ØÇ+ÄÜ-*Àôz“<íLÀL`Û¦ïŠÛ¶Æå›€ ˜@C4“÷¡}¨¡œ­ ˜€ ,NÀlqVŽiý$pòdJœ±ýÒKGy~饗&¶¯^rÉtý/¿ü ™€ ˜@K,ÀZíbL`«žûÜS¢ñõò—§´åsÖ€U¢°a{¾ö’—¤ÿিõ[Ó‘Ÿú©tçþÏåúoµq\¸ ˜À X€±Õ]çq@t!¾ä¶x^ °Ê?þ“?9YCvÓ·{zâ—~Iµ?%B#3!>20Æ X€5ŽØ˜€ ä*–{úÜLÀFDÀlDíªš€ ˜€ ˜€ tƒ€X7ÚÁV˜€ ˜€ ˜€ Œˆ€؈ÛU500è °n´ƒ­0Qð°Q5·+k&P `V€b/0f X€5Ë×¹›€ tŸ€X÷ÛÈšÀàX€ ®I]!0% X€- ÌÑMÀLÀLÀL`]`ëtz000X’€Ø’ÀÝLÀLÀLÀÖ%`¶.A§7Xš€×€-Ì LÀFÀl` êê˜@X€õ¡•l£ ˜@“,Àš¤ë¼MÀŠ,ÀŠXìi&0"`#jlWÕLÀLÀL ,ÀºÑ¶ÂLÀLÀL`D,ÀFÔØ®ª ˜€ ˜€ ˜@7X€u£l… ŒŠ€×€ª¹]Y0 °{™€ 4KÀ¬Y¾ÎÝL û,ÀºßF¶ÐGÀlpMê ™€ ,IàÿºX¶ññ·ïIEND®B`‚pyenphase-2.3.1/docs/data.md000066400000000000000000000012671505013723300157010ustar00rootroot00000000000000# Data The pyenphase package collects [data](#pyenphase.EnvoyData) from a specific set of endpoints on the Envoy. The set is based on the home owner [authorization level](./usage_authentication.md#authorization-levels) as common denominator. Additional endpoints [can be obtained](./requests.md#requests), but require application logic. Firmware version, system serial-number and part-number are collected from `/info` endpoint. Other endpoints are: ```{include} ../src/pyenphase/const.py :start-line : 9 :end-before : LOCAL_TIMEOUT = :literal : ``` ```{toctree} :maxdepth: 3 :hidden: data_production data_consumption phase_data data_inverters data_ensemble data_ctmeter data_raw ``` pyenphase-2.3.1/docs/data_consumption.md000066400000000000000000000015431505013723300203340ustar00rootroot00000000000000# System_Consumption data This is the energy consumption by the house reported by the Envoy, class [EnvoySystemConsumption](#pyenphase.models.system_consumption.EnvoySystemConsumption). It is only available for metered Envoy with installed and configured consumption CT Meter. ```python data: EnvoyData = await envoy.update() if data.system_consumption: print(f'Watts: {data.system_consumption.watts_now}') print(f'TodaysEnergy: {data.system_consumption.watt_hours_today}') print(f'LifetimeEnergy {data.system_consumption.watt_hours_lifetime}') print(f'Last7DaysEnergy {data.system_consumption.watt_hours_last_7_days}') ``` For metered Envoy with installed and configured CT meter in `three` phase mode and more then 1 phase active, data for individual phases is also reported, see [Phase Data](./phase_data.md#phase-data) pyenphase-2.3.1/docs/data_ctmeter.md000066400000000000000000000155001505013723300174170ustar00rootroot00000000000000# Current Transformer Data This is the data for installed current transformers (CT) for an Envoy-metered. Class [EnvoyMeterData](#pyenphase.models.meters.EnvoyMeterData). Depending on how many and which CT are installed, data is available in: - [Envoy.data.ctmeter_production](#pyenphase.EnvoyData.ctmeter_production) - [Envoy.data.ctmeter_consumption](pyenphase.EnvoyData.ctmeter_consumption) - [Envoy.data.ctmeter_storage](pyenphase.EnvoyData.ctmeter_storage) - [Envoy.data.ctmeter_production_phases](pyenphase.EnvoyData.ctmeter_production_phases) - [Envoy.data.ctmeter_consumption_phases](pyenphase.EnvoyData.ctmeter_consumption_phases) - [Envoy.data.ctmeter_storage_phases](pyenphase.EnvoyData.ctmeter_storage_phases) There is one ct for production, one for consumption and one for battery storage. One, 2 or all of these can be installed and enabled. Data is only available if CT's are enabled. Consumption CT can either be `net-consumption` installed on grid boundary or `total-consumption` measuring house load, see [ct-model](#ct-model) below. ```python data: EnvoyData = await envoy.update() production_ct = data.ctmeter_production print(f'eid: {production_ct.eid}') print(f'timestamp: {production_ct.timestamp}') print(f'energy_delivered: {production_ct.energy_delivered}') print(f'energy_received: {production_ct.energy_received}') print(f'power_factor: {production_ct.power_factor}') print(f'active_power: {production_ct.active_power}') print(f'voltage: {production_ct.voltage}') print(f'current: {production_ct.current}') print(f'frequency: {production_ct.frequency}') print(f'state: {production_ct.state}') print(f'measurement_type: {production_ct.measurement_type}') print(f'metering_status: {production_ct.metering_status}') print(f'status_flags: {production_ct.status_flags}') ``` To detect how many CT are installed use Envoy property [ct_meter_count](#pyenphase.Envoy.ct_meter_count). One can identify which CT meters are available by testing the [envoy.production_meter_type](#pyenphase.Envoy.production_meter_type), [envoy.consumption_meter_type](pyenphase.Envoy.consumption_meter_type) or [envoy.storage_meter_type](pyenphase.Envoy.storage_meter_type) ```python how_many_ct = envoy.ct_meter_count consumption_ct = 'installed' if envoy.production_meter_type else 'not installed' procuction_ct = 'installed' if envoy.consumption_meter_type else 'not installed' storage_ct = 'installed' if envoy.storage_meter_type else 'not installed' print(f'This envoy has Production ct {procuction_ct}, Consumption CT {consumption_ct} and Storage CT {storage_ct}') ``` ## Consumption CT options The consumption CT can be installed in 1 of 2 configurations. Either `Solar + Load` or `Load only`. The property [Envoy.consumption_meter_type](#pyenphase.Envoy.consumption_meter_type) will show in [which mode](#pyenphase.models.meters.CtType) the CT is operating, either `net-consumption`or `total-consumption`. When in `net-consumption` mode, the [energy_delivered](#pyenphase.models.meters.EnvoyMeterData.energy_delivered) property reports net-energy _delivered to your site/received from the grid_ while [energy_received](#pyenphase.models.meters.EnvoyMeterData.energy_received) reports net-energy _recived from your site/send to the grid_ to the grid.[^1] [^2] When in `total-consumption` it only reports on the load (house) consumption. [Active_power](#pyenphase.models.meters.EnvoyMeterData.active_power) is the current power flow and will be positive or negative based on actual flow of energy. [^1]: Provided the CT is installed on the main grid entry. [^2]: Variations between firmware release may exist. ```python net_consumption = envoy.data.consumption_ct.energy_delivered net_production = envoy.data.consumption_ct.energy_received net_power = envoy.data.consumption_ct.active_power ``` ## Production CT Options The production CT is installed to measure solar production. The [energy_delivered](#pyenphase.models.meters.EnvoyMeterData.energy_delivered) property reports the energy generated by the solar while [energy_received](#pyenphase.models.meters.EnvoyMeterData.energy_received) reports energy consumed by the solar. The latter will be minimal and is the consumption by the inverters when it exceeds the solar production, typically only during dawn and dusk periods. [^2] ## Storage CT Options The storage CT is installed to measure battery charge and discharge. The [energy_delivered](#pyenphase.models.meters.EnvoyMeterData.energy_delivered) property reports the energy discharged from the battery while [energy_received](#pyenphase.models.meters.EnvoyMeterData.energy_received) reports energy charged to battery. [^2] ## Relation to System Production and Consumption An Envoy metered with CT installed, sources the production and consumption data from the CT meters. The [system_production](data_production.md#system_production-data) data is sourced from the production CT. The [system_consumption](data_consumption.md#system_consumption-data) is total consumption by the load/house and is either sourced from the consmption CT in `total-consumption` mode or calculated from both production and consumption CT when in consumption CT is in `net-consumption` mode. Net-consumption is reported in /production as an increasing/decreasing total of import and export, CT readings however provides these as 2 increasing properties. Production is reported in system_production as a single value as well. ## Multi phase Phase data is only populated if CT's are installed on more then 1 phase for production and/or consumption phases. If the configuration is in `split phase` mode, no phases are reported for production and consumption reports, but are for CT specific data. To detect if multiple phases are reporting use the Envoy property [phase_count](#pyenphase.Envoy.phase_count). ```python from pyenphase.const import PhaseNames data: EnvoyData = await envoy.update() if Envoy.phase_count > 1: for phase in data.ctmeter_production_phases: phase_data = data.ctmeter_production_phases[phase] for key in phase_data: print(f'{phase} {key}: [phase_data{key]} ``` ## CT Model Below a generic model for installed CT's. Each CT can be considered as facing the switch-board and reporting energy delivered to the switchboard in it's `energy_delivered` property and energy received from the switchboard in `energy_received`. Power is positive towards the switchboard and negative from the switchboard. ![ct-model showing optional CT configuration](ct-model.png) These properties have different meaning for each specific CT. For a net-consumption CT, delivered is import from the grid, for Solar production CT, it is solar production and for a battery CT it is battery discharge. A total-consumption CT typically has no delivery but only receives what is consumed by the house. pyenphase-2.3.1/docs/data_ensemble.md000066400000000000000000000072461505013723300175560ustar00rootroot00000000000000# Enphase Ensemble Enphase ensemble [^1] provides information on installed battery storage and how it is used for optional EV charging or power provision. [^1]: Older name, more recent name `Enphase Energy System`. ## Enphase Enpower data The Enphase Enpower [^2] connects the home to grid power, the Encharge storage system, and solar PV. Information on it can be obtained from the [EnvoyEnpower](#pyenphase.models.enpower.EnvoyEnpower). [^2]: Older Name, more recent name IQ System Controller The Envoy class provides the methods [Go_Off_Grid](#pyenphase.Envoy.go_off_grid) and [Go_On_Grid](#pyenphase.Envoy.go_on_grid) to control the grid connection. ```python status = await envoy.go_off_grid() if status["mains_admin_state"] != "open": #error clogoing off grid status = await envoy.go_off_grid() if status["mains_admin_state"] != "closed": #error clogoing off grid ``` [Open_dry_contact](#pyenphase.Envoy.open_dry_contact) and [close_dry_contact](#pyenphase.Envoy.close_dry_contact) allows to to control the dry contacts. ```python status = await envoy.close_dry_contact(id) print(f"{envoy.data.dry_contact_status[id].status}") status = await envoy.open_dry_contact(id) print(f"{envoy.data.dry_contact_status[id].status}") ``` Dry Contact information is available in the [EnvoyData.dry_contact_status](#pyenphase.EnvoyData.dry_contact_status) and [Envoy.dry_contact_settings](#pyenphase.EnvoyData.dry_contact_settings). [Envoy.update_dry_contact](#pyenphase.Envoy.update_dry_contact) can be used to update settings, use with care and only if fully aware of impact! ```python new_setting: dict[str, Any] = {} new_setting['id'] = id new_setting['load_name'] = load_name status = await envoy.update_dry_contact(new_setting) print (status) ``` ## Envoy Encharge data The Enphase Encharge controls battery charge and discharge. Information on it can be obtained from [EnvoyEncharge](#pyenphase.models.encharge.EnvoyEncharge) for individual batteries, [EnvoyEnchargePower](#pyenphase.models.encharge.EnvoyEnchargePower) and [EnvoyEnchargeAggregate](#pyenphase.models.encharge.EnvoyEnchargeAggregate) for all batteries aggregated. The Envoy class provides the methods [Envoy.enable_charge_from_grid](#pyenphase.Envoy.enable_charge_from_grid), [Envoy.disable_charge_from_grid](#pyenphase.Envoy.disable_charge_from_grid), [Envoy.set_storage_mode](#pyenphase.Envoy.set_storage_mode) and [set_reserve_soc](#pyenphase.Envoy.set_reserve_soc). ```python status = await envoy.enable_charge_from_grid(id) print(f"{envoy.data.tariff.storage_settings.charge_from_grid}") print (status) status = await envoy.disable_charge_from_grid(id) print(f"{envoy.data.dry_contact_status[id].status}") print (status) status = await envoy.set_storage_mode(mode: EnvoyStorageMode) print(f"{envoy.data.tariff.data.tariff.storage_settings.mode}") print (status) status = await envoy.set_reserve_soc(value: int) print(f"{envoy.data.tariff.storage_settings.reserved_soc}") print (status) ``` ## IQ Metered Collar data The Enphase IQ Meter Collar is a meter socket adapter with an integrated microgrid interconnection device (MID) and current sensors for energy consumption metering. The CT sensors in the collar provide the [net-consumption](./data_ctmeter.md#consumption-ct-options) data. The MID status is available in the [EnvoyCollar](#pyenphase.models.collar.EnvoyCollar) data object. ## C6 Combiner data The C6 Combiner status is available in the [EnvoyC6CC](#pyenphase.models.c6combiner.EnvoyC6CC) data object. pyenphase-2.3.1/docs/data_inverters.md000066400000000000000000000030141505013723300177720ustar00rootroot00000000000000# Inverter data Individual [inverter data](#pyenphase.models.inverter.EnvoyInverter), available for model as of firmware 3.9. are reported in `inverters: dict[str, EnvoyInverter]` attribute. ```python for inverter in data.inverters: print (f'{inverter} sn: {data.inverters[inverter].serial_number}') print (f'{inverter} watts: {data.inverters[inverter].last_report_watts}') print (f'{inverter} max watts: {data.inverters[inverter].max_report_watts}') print (f'{inverter} last report: {data.inverters[inverter].last_report_date}') ``` If the `/ivp/pdm/device_data` endpoint is supported, then extra data is available per inverter ::: note The fields (`dc_voltage`, `dc_current`, `ac_voltage`, `ac_current`, `ac_frequency`, `temperature`, `energy_produced`, `energy_today`, `lifetime_energy`) will be `None` if the endpoint is not supported. ::: ```python for inverter in data.inverters: print (f'{inverter} panel output: {data.inverters[inverter].dc_voltage}V @ {data.inverters[inverter].dc_current}A') print (f'{inverter} output: {data.inverters[inverter].ac_voltage}V @ {data.inverters[inverter].ac_current}A {data.inverters[inverter].ac_frequency}Hz') print (f'{inverter} temperature: {data.inverters[inverter].temperature}°C') print (f'{inverter} energy produced: {data.inverters[inverter].energy_produced} mWh') print (f'{inverter} energy produced today: {data.inverters[inverter].energy_today} Wh') print (f'{inverter} lifetime energy produced: {data.inverters[inverter].lifetime_energy} Wh') ``` pyenphase-2.3.1/docs/data_production.md000066400000000000000000000020221505013723300201350ustar00rootroot00000000000000# System_Production data This is the solar production data reported by the Envoy, class [EnvoySystemProduction](#pyenphase.models.system_production.EnvoySystemProduction). ```python data: EnvoyData = await envoy.update() print(f'Watts: {data.system_production.watts_now}') print(f'TodaysEnergy: {data.system_production.watt_hours_today}') print(f'LifetimeEnergy {data.system_production.watt_hours_lifetime}') print(f'Last7DaysEnergy {data.system_production.watt_hours_last_7_days}') ``` The source of the data differs by Envoy type and firmware level. For metered Envoy types with configured current transformer (CT) production meter data comes from the /production endpoint with CT meter data. For non-metered Envoy types data comes from the `/api/v1/production` endpoint as calculated by the Envoy from inverter data. For metered Envoy with installed and configured CT meter `three` phase mode and more then 1 phase active, data for individual phases is also reported, see [Phase Data](./phase_data.md#phase-data). pyenphase-2.3.1/docs/data_raw.md000066400000000000000000000021631505013723300165460ustar00rootroot00000000000000# Raw data All data for all endpoints is stored as received in the `raw: dict[str, Any]` attribute, keyed by the endpoint path.[^1] Raw can be used for quick check if anything changed between data collections. ```json { "/api/v1/production": { "wattHoursToday": 2900, "wattHoursSevenDays": 15195, "wattHoursLifetime": 8485676, "wattsNow": 887 }, "/api/v1/production/inverters": [{ "serialNumber": "122212345678", "lastReportDate": 1703592785, "devType": 1, "lastReportWatts": 31, "maxReportWatts": 98 }, { "serialNumber": "122212345679", "lastReportDate": 1703592815, "devType": 1, "lastReportWatts": 39, "maxReportWatts": 172 } } ``` [^1]: Example only showing 2 endpoints. Production data is provided in [EnvoySystemProduction](#EnvoySystemProduction) class, Inverter data in [EnvoyInverter](#EnvoyInverter) class. ```python previous_data: EnvoyData new_data: EnvoyData = envoy.update() if new_data != previous_data: production_data = new_data.raw["/api/v1/production"] previous_data = new_data ``` pyenphase-2.3.1/docs/documenting.md000066400000000000000000000160361505013723300173040ustar00rootroot00000000000000# Coding for documentation This documentation is build from written materials as well as from the source code. The written materials augment what is available in the source code and provide examples or how-to's. Using good commenting practices in the code greatly helps with improving this documentation as well. ## Autodoc The library is configured to use [Sphynx](https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html) to auto-document the source code and utilizes the [Napoleon](https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html) extension to parse Numpy and Google style docstrings. In your IDE use tools like autoDocstring for VSCode to generate sphinx-notype docstring skeletons. [^1] [^1]: Sphinx-notype seems a balance between effort and information provision. ### Docstring Example of a docstring generated with autoDoc and [included in this documentation](#pyenphase.models.system_production.EnvoySystemProduction.from_v1_api) and types automatically added: ```python @classmethod def from_v1_api(cls, data: dict[str, Any]) -> EnvoySystemProduction: """ Initialize from the V1 API. :param data: JSON reply from api/v1/production endpoint :return: Lifetime, last seven days, todays energy and current power for solar production """ ``` To add links to other modules from the docstring, use ":class:`path_to_some_class`" or ":any:`function_name`". This allows to refer to other modules to avoid repeating similar documentation. ```python def __init__( self, _client: aiohttp.ClientSession, host: str, ) -> None: """ Class for querying and determining the Envoy firmware version. :param client: aiohttp ClientSession not verifying SSL certificates, see :class:`pyenphase.ssl`. :param host: Envoy DNS name or IP address """ ``` ### Attributes Postfix attributes with a `#: Comment` to provide descriptions that are used in [generated documentation](#EnvoySystemProduction) ```python @dataclass(slots=True) class EnvoySystemProduction: """Model for the Envoy's production data.""" watt_hours_lifetime: int #: Lifetime Energy produced watt_hours_last_7_days: int #: Energy produced in previous 7 days (not including today) watt_hours_today: int #: Energy produced since start of day watts_now: int #: Current Power production ``` Similar for enumerations ```python class SupportedFeatures(enum.IntFlag): """ Flags for each feature supported :param enum: Feature Name """ INVERTERS = 1 #: Can report Inverters METERING = 2 #: Can report CT Meter data ``` These can also be placed on the line before the attribute and consist of multiple lines ```python #: Alias for :any:`create_no_verify_ssl_context` #: #: .. code-block:: python #: #: import aiohttp #: from pyenphase.ssl import NO_VERIFY_SSL_CONTEXT #: #: client = aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=NO_VERIFY_SSL_CONTEXT)) #: NO_VERIFY_SSL_CONTEXT = create_no_verify_ssl_context() ``` ### Classes Use the \_\_init\_\_ of a class to document the class parameters. ```python def __init__( self, self, host: str, host: str, cloud_username: str | None = None, cloud_username: str | None = None, cloud_password: str | None = None, cloud_password: str | None = None, envoy_serial: str | None = None, envoy_serial: str | None = None, token: str | None = None, token: str | None = None, ) -> None: """ Class to authenticate with Envoy using Tokens. Use with Envoy firmware 7.x and newer :param host: local Envoy DNS name or IP Address :param cloud_username: Enlighten Cloud username, required to obtain new token when token is not specified or expired, defaults to None :param cloud_password: Enlighten Cloud password, required to obtain new token when token is not specified or expired, defaults to None :param envoy_serial: Envoy serial number, required to obtain new token when token is not specified or expired, defaults to None :param token: Token to use with authentication, if not specified, one will be obtained from Enlighten cloud if username, password and serial are specified, defaults to None """ ``` ## Documentation structure ### index.md This is the documentation backbone, building the table of content and including all the individual documentation markdown files. As it's a markdown file itself, it is utilizing [sphynx directives](https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html) to achieve this. In the markdown file place the directive in a fenced block with the directive between {}. The syntax between the fences is now as described for the sphynx directives. Below example creates a main TOC entry for 'Installation & Usage' with 3 sub entries. The content of the 3 sub entries is read from the markdown files with the same names, these file must be present in same folder. Headers in the included files are relative to the caption and should start with a top level header. ```{toctree} :caption: Installation & Usage :maxdepth: 3 installation usage advanced ``` ### Auto-documenting from code The majority of the markdown files contain descriptive text. To generate documentation from the [Docstrings and comments](#autodoc) in the code files, use a fenced `{eval-rst}` using [Autodoc directives](https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#directives). Below example will auto-document the `EnvoyTokenAuth` class from the file auth.py. ```{eval-rst} .. autoclass:: pyenphase.auth.EnvoyTokenAuth :members: :undoc-members: :show-inheritance: :member-order: bysource :class-doc-from: init ``` The headers, order and Docstring in the specified classes, modules and functions will generate the documentation for classes, methods and properties. Include a section for each module or class to document. For `autoclass` directives make sure to add `:class-doc-from: init` in order for the Docstring of \_\_init\_\_ to be used in the documentation generation. #### model_autodoc.md This file generates the `Classes, methods and properties` section from the Docstrings. It is imported by index.md under the header 'Data & Reference'. In model_autodoc.md, include an entry for each module or class to be included in the documentation. ### conf.py This is the overall setup for the document generation. Any extension to use in document creation, should be added here. extensions = [ "myst_parser", "sphinx.ext.autodoc", "sphinx.ext.napoleon", "sphinx_autodoc_typehints", ] ## Build the docs locally To test build the docs, change the working directory to the /docs folder in your project working folder. In there use make clean make html The output is created in /docs/build/html. Open `index.html` in there to inspect the documentation locally. pyenphase-2.3.1/docs/index.md000066400000000000000000000005031505013723300160670ustar00rootroot00000000000000# Welcome to pyenphase documentation ```{toctree} :caption: Installation & Usage :maxdepth: 3 installation usage data ``` ```{toctree} :caption: Reference :maxdepth: 3 model_autodoc ``` ```{toctree} :caption: Project Info :maxdepth: 2 license changelog contributing documenting ``` ```{include} ../README.md ``` pyenphase-2.3.1/docs/installation.md000066400000000000000000000002601505013723300174610ustar00rootroot00000000000000# Installation The package is published on [PyPI](https://pypi.org/project/pyenphase/) and can be installed with `pip` (or any equivalent): ```bash pip install pyenphase ``` pyenphase-2.3.1/docs/license.md000066400000000000000000000000631505013723300164030ustar00rootroot00000000000000# License ```{include} ../LICENSE :literal : ``` pyenphase-2.3.1/docs/make.bat000066400000000000000000000013751505013723300160530ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build %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.https://www.sphinx-doc.org/ exit /b 1 ) if "%1" == "" goto help %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd pyenphase-2.3.1/docs/model_autodoc.md000066400000000000000000000145041505013723300176040ustar00rootroot00000000000000# Classes, methods and properties ```{eval-rst} .. autoclass:: pyenphase.Envoy :members: :undoc-members: :show-inheritance: :member-order: bysource :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.auth.EnvoyAuth :members: :undoc-members: :show-inheritance: :member-order: bysource :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.auth.EnvoyTokenAuth :members: :undoc-members: :show-inheritance: :member-order: bysource :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.auth.EnvoyLegacyAuth :members: :undoc-members: :show-inheritance: :member-order: bysource :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.firmware.EnvoyFirmware :members: :undoc-members: :show-inheritance: :member-order: bysource :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.EnvoyData :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ```{eval-rst} .. automodule:: pyenphase.const :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ```{eval-rst} .. automodule:: pyenphase.models.common :members: :undoc-members: :show-inheritance: :member-order: bysource ``` # Updaters ## Base class ```{eval-rst} .. automodule:: pyenphase.updaters.base :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## production ```{eval-rst} .. automodule:: pyenphase.updaters.production :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ```{eval-rst} .. automodule:: pyenphase.updaters.api_v1_production :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## Inverters ```{eval-rst} .. automodule:: pyenphase.updaters.api_v1_production_inverters :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyEnsemble ```{eval-rst} .. automodule:: pyenphase.updaters.ensemble :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyTariff ```{eval-rst} .. automodule:: pyenphase.updaters.tariff :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## Current Transformers ```{eval-rst} .. automodule:: pyenphase.updaters.meters :members: :undoc-members: :show-inheritance: :member-order: bysource ``` # Models ## EnvoySystemProduction ```{eval-rst} .. autoclass:: pyenphase.models.system_production.EnvoySystemProduction :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoySystemConsumption ```{eval-rst} .. autoclass:: pyenphase.models.system_consumption.EnvoySystemConsumption :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyInverter ```{eval-rst} .. autoclass:: pyenphase.models.inverter.EnvoyInverter :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyEncharge ```{eval-rst} .. autoclass:: pyenphase.models.encharge.EnvoyEncharge :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyEnchargeAggregate ```{eval-rst} .. autoclass:: pyenphase.models.encharge.EnvoyEnchargeAggregate :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyEnchargePower ```{eval-rst} .. autoclass:: pyenphase.models.encharge.EnvoyEnchargePower :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyEnpower ```{eval-rst} .. autoclass:: pyenphase.models.enpower.EnvoyEnpower :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## ACBPower ```{eval-rst} .. autoclass:: pyenphase.models.acb.EnvoyACBPower :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## Envoy Aggregate Battery SOC ```{eval-rst} .. autoclass:: pyenphase.models.acb.EnvoyBatteryAggregate :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyDryContactSettings ```{eval-rst} .. automodule:: pyenphase.models.dry_contacts :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyCollar ```{eval-rst} .. automodule:: pyenphase.models.collar :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## EnvoyC6CC ```{eval-rst} .. automodule:: pyenphase.models.c6combiner :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## CT Meters ```{eval-rst} .. automodule:: pyenphase.models.meters :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## Interface data ```{eval-rst} .. autoclass:: pyenphase.models.home.EnvoyInterfaceInformation :members: :undoc-members: :show-inheritance: :member-order: bysource ``` # Utilities ## Json Helper functions for JSON. ```{eval-rst} .. autoclass:: pyenphase.json.json_loads :members: :undoc-members: :show-inheritance: :member-order: bysource ``` ## SSL ```{eval-rst} .. automodule:: pyenphase.ssl :members: NO_VERIFY_SSL_CONTEXT, SSL_CONTEXT, create_no_verify_ssl_context, create_default_ssl_context :show-inheritance: ``` # Exceptions ```{eval-rst} .. automodule:: pyenphase.exceptions :members: :show-inheritance: :member-order: bysource ``` pyenphase-2.3.1/docs/phase_data.md000066400000000000000000000114771505013723300170650ustar00rootroot00000000000000# Phase data For metered Envoy with installed and configured current transformers (CT meters) in `three` phase mode and more then 1 phase active, data for individual phases is reported for solar [production](#pyenphase.EnvoyData.system_production_phases) and house [consumption](#pyenphase.EnvoyData.system_consumption_phases). Configurations in `split` mode do not report multiple phases in their production and consumption data. Upon completion of the [probe](usage_intro.md#data-collection) call, the phase setup is available. The [number of configured phases](#pyenphase.Envoy.phase_count), the [number of configured CT meters](#pyenphase.Envoy.ct_meter_count), the [phase mode configured](#pyenphase.Envoy.phase_mode) and [type of consumption CT](#pyenphase.Envoy.consumption_meter_type) are available from the envoy model. Phase names are enumerated as `L1`, `L2`, and `L3` by `pyenphase.const.PhaseNames`. Phase modes are enumerated as `single`, `split` and `three` by `pyenphase.models.meters.EnvoyPhaseMode`. The CT meter types are enumerated as `production`, ``storage`, `net-consumption` and `total-consumption` by `pyenphase.models.meters.CtType`. Be aware that `phase_count` and `phase_mode` applies for all configured CT's. The Envoy metered can however be configured with only 1, 2 or all 3 CT. In this case the not used CT data in `system_production_phases` or `system_consumption_phases` or `system_storage_phases` will be `None` The Envoy property [active_phase_count](#pyenphase.Envoy.active_phase_count) reports the number of phases reported in the production and consumption report. This will be 0 for `single` and `split` phase use and the actual used phases for `three` mode. ```python from pyenphase import Envoy from pyenphase.const import PhaseNames from pyenphase.models.meters import CtType, EnvoyPhaseMode envoy = Envoy(host_ip_or_name) await envoy.setup() print(f'Envoy {envoy.host} running {envoy.firmware}, sn: {envoy.serial_number}') await envoy.authenticate(username=username, password=password, token=token) await envoy.probe() print(f'Number of configured Phases: {envoy.phase_count}') print(f'Number of configured CT meters: {envoy.ct_meter_count}') print(f'Phases are configured in: {envoy.phase_mode} mode') print(f'Phases reported in production/consumption: {envoy.active_phase_count} mode') ``` ## Production Phase data Production phase data is available in Envoy data.[system_production_phases: dict[str,EnvoySystemProduction]](#pyenphase.EnvoyData.system_production_phases). ```python from pyenphase.const import PhaseNames data: EnvoyData = await envoy.update() # if more then 1 phase reported then get phase data if Envoy.actual_phase_count > 1 and data.system_production_phases: # Get data by looping over phase data for phase in data.system_production_phases: print(f'{phase} Watts: {data.system_production_phases[phase].watts_now}') print(f'{phase} TodaysEnergy: {data.system_production_phases[phase].watt_hours_today}') print(f'{phase} LifetimeEnergy {data.system_production_phases[phase].watt_hours_lifetime}') print(f'{phase} Last7DaysEnergy {data.system_production_phases[phase].watt_hours_last_7_days}') # report specific phase data by using PhaseNames (for phase 1) print( f'Value watt_hours_lifetime : {data.system_production_phases[PhaseNames.PHASE_1].watt_hours_lifetime}' ) # report specific phase data by using phase index 0-2 (for phase 1) print( f'Value watt_hours_lifetime : {data.system_production_phases[list(PhaseNames)[0]].watt_hours_lifetime}' ) ``` ## Consumption Phase data Consumption phase data is available in Envoy data.[system_consumption_phases: dict[str,EnvoySystemConsumption]](#pyenphase.EnvoyData.system_consumption_phases). ```python from pyenphase.const import PhaseNames data: EnvoyData = await envoy.update() if Envoy.phase_count > 1: for phase in data.system_consumption_phases and data.system_consumption_phases: print(f'{phase} Watts: {data.system_consumption_phases[phase].watts_now}') print(f'{phase} TodaysEnergy: {data.system_consumption_phases[phase].watt_hours_today}') print(f'{phase} LifetimeEnergy {system_consumption_phases.[phase].watt_hours_lifetime}') print(f'{phase} Last7DaysEnergy {system_consumption_phases.[phase].watt_hours_last_7_days}') # report specific phase data by using PhaseNames (for phase 1) print( f'Value watt_hours_lifetime : {data.system_consumption_phases[PhaseNames.PHASE_1].watt_hours_lifetime}' ) # report specific phase data by using phase index 0-2 (for phase 1) print( f'Value watt_hours_lifetime : {data.system_consumption_phases[list(PhaseNames)[0]].watt_hours_lifetime}' ) ``` pyenphase-2.3.1/docs/requests.md000066400000000000000000000034141505013723300166370ustar00rootroot00000000000000# Requests The pyenphase package can be used to send any request to the Envoy. Either to obtain data from endpoints not already collected, or send PUT or POST requests to the Envoy. Access to the used endpoints is enabled by the [Authorization level](./usage_authentication.md#authorization-levels) set during authentication. The request response is returned to the caller and not stored in the Envoy data model. ```python envoy = Envoy(host_ip_or_name) await envoy.setup() await envoy.authenticate(username=username, password=password, token=token) myresponse: aiohttp.ClientResponse = await envoy.request('/my/own/endpoint') status_code = myresponse.status_code myjson_data = await myresponse.json() ``` You can run the package using requests only (without calling probe and update), which provides an API into the Envoy without using the internally pre-configured data collections. ## V2 Request As of version 2, envoy.request returns an [aiohttp.ClientResponse](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse) as result. This is a breaking change from version 1 where an httpx.Response was returned. To access the response data use either [aiohttp.ClientResponse.read()](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse.read) to access the whole response body as bytes, [aiohttp.ClientResponse.text()](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse.text) to get response body as decoded `str` or [aiohttp.ClientResponse.json()](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse.json) to read the body as JSON. Note that the JSON method is the standard python decoder JSON.loads. To use another one use the read() method in combination with your favorite decoder. pyenphase-2.3.1/docs/usage.md000066400000000000000000000011001505013723300160560ustar00rootroot00000000000000# Usage The pyenphase package provides the [Envoy class](#pyenphase.Envoy) to collect data from [Enphase IQ Gateway](https://enphase.com/en-us/products-and-services/envoy-and-combiner). To use this package, import classes and modules from it: ```python from pyenphase import Envoy, EnvoyData envoy: Envoy = Envoy(host) await envoy.setup() await envoy.authenticate(username=username, password=password, token=token) data: EnvoyData = await envoy.update() await envoy.close() ``` ```{toctree} :maxdepth: 3 :hidden: usage_intro usage_authentication requests advanced ``` pyenphase-2.3.1/docs/usage_authentication.md000066400000000000000000000146661505013723300212020ustar00rootroot00000000000000# Authentication ## Introduction Before firmware 7, authentication was based on username/password using Digest. Either `Envoy` or `Installer` usernames with a blank password or a known username/password can be used. If the password is left blank, the authentication module will calculate the password for the 2 named accounts, based on the Envoy serial number. As of firmware 7, token based authentication is required. The authentication module can retrieve the token from the Enlighten website using the Envoy serial number, the Enlighten username and password, which all need to be specified. If a token is known, it can be specified and it will be used instead of obtaining one from the Enlighten website. Even if a token is known, it's best practice to also specify username and password to enable automatic refresh of an expired token. Based on the firmware version retrieved from the envoy in envoy.setup(), the [envoy.authenticate](#pyenphase.Envoy.authenticate) method will determine which of the 2 authentication methods to use. This example will work with both firmware <7 and >=7. In the first case specify the local Envoy username `envoy`, in the latter case specify the Enlighten cloud credentials and the required token will be obtained from the Enlighten cloud. ```python envoy = Envoy(host_ip_or_name) await envoy.setup() await envoy.authenticate(username=username, password=password) ``` For firmware >= 7 and a known token, specifying it will use it and skip reaching out to the Enlighten cloud. ```python envoy = Envoy(host_ip_or_name) await envoy.setup() await envoy.authenticate(username=username, password=password, token=token) ``` ## Obtain, reuse and renew token Upon completion of the authentication, the token can be requested and stored for later reuse in authentication. At a next application startup, pass the stored token to envoy.authenticate, in addition to the username and password. Until the token is expired it can be used with each authenticate request. If the token is expired while using it in authentication, an exception [EnvoyAuthenticationError](#pyenphase.exceptions.EnvoyAuthenticationError) is returned. In that case redo the authentication without specifying a token to force getting a new one. ```python from pyenphase import Envoy from pyenphase.auth import EnvoyTokenAuth token: str = "get token from some storage" envoy = Envoy(host_ip_or_name) await envoy.setup() try: await envoy.authenticate(username=username, password=password, token=token) except EnvoyAuthenticationError as exp: await envoy.authenticate(username=username, password=password) ``` The application should check for [token expiry](#pyenphase.auth.EnvoyTokenAuth.expire_timestamp) and request timely [renewal](#pyenphase.auth.EnvoyTokenAuth.refresh). Make sure to store a refreshed token again, access it using the [token property](#pyenphase.auth.EnvoyTokenAuth.token). ```python from pyenphase import Envoy from pyenphase.auth import EnvoyTokenAuth token: str = "get token from some storage" envoy = Envoy(host_ip_or_name) await envoy.setup() await envoy.authenticate(username=username, password=password, token=token) assert isinstance(envoy.auth, EnvoyTokenAuth) expire_time = envoy.auth.expire_timestamp if expire_time < (datetime.now() - timedelta(days=7)): await self.envoy.auth.refresh() token = envoy.auth.token # save token in some storage for later reuse ``` Enlighten user accounts can be type 'owner' or 'installer'. Token lifetime for an owner account is 1 year, while installer lifetime is 12 hours. ## Re-Authentication When authentication is omitted or data requests experience an authorization failure (HTTP status 401 or 403) an [EnvoyAuthenticationRequired](#pyenphase.exceptions.EnvoyAuthenticationRequired) error is returned. When this occurs, authentication should be repeated. ```python try: data: EnvoyData = await envoy.update() except EnvoyAuthenticationRequired: await envoy.authenticate(username=username, password=password,token=token) ``` ## Authentication over firmware update A special case is the firmware update. These get pushed by Enphase, not frequently and not always at an expected moment. It will cause an outage of the Envoy during the patching process and an authentication error when communication is restored. Re-authentication as described above may work with existing token or it may fail and a new token would be needed. If the firmware upgrade changes from <7 to >=7, Enlighten credentials need to replace the local Envoy username/password. Furthermore the firmware version has changed and it may have impact on behavior. The Firmware version is only obtained in the setup method of the Envoy, this needs a repeat as well in this case. ```python from pyenphase import Envoy, EnvoyData envoy = Envoy(host_ip_or_name) await envoy.setup() firmware=envoy.firmware await envoy.authenticate(username=username, password=password, token=token) while True: try: data: EnvoyData = await envoy.update() except EnvoyAuthenticationRequired: # is token expired. if so refresh expire_time = envoy.auth.expire_timestamp if expire_time < now.timestamp(): await self.envoy.auth.refresh() else: # potential outage, get firmware await envoy.setup() # if firmware changed on us force re-init of data updaters if firmware != envoy.firmware: # authenticate without token to get new one await envoy.authenticate(username=username, password=password) # re-init communication based on new firmware envoy.probe() ``` ## Authorization levels Enphase accounts are either home-owner or DIY/installer accounts. The Home owner account provides access to the data information endpoints. The DIY/installer accounts have in addition access to configuration and setup endpoints as well [^2]. The authentication class provides the property `token_type` to determine the nature of the account. This returns `owner` or `installer` based on the token type. ```python assert isinstance(envoy.auth, EnvoyTokenAuth) token = envoy.auth.token if envoy.auth.token_type == "user": ... else: ... ``` [^2]: Data provided by pyenphase is only sourced from endpoints that allow access by at least Home owner accounts. The Envoy [Request method](#pyenphase.Envoy.request) allows access to [additional endpoints](./requests.md#requests), provided the user account has the required authorization level. pyenphase-2.3.1/docs/usage_intro.md000066400000000000000000000064521505013723300173100ustar00rootroot00000000000000# Data collection ## Setup Access to the Envoy device requires specifying its IP address or DNS name when constructing the {py:class}`pyenphase.Envoy`. Next, the Envoy serial number and active firmware version should be obtained to identify which authentication method is required. Use {py:meth}`pyenphase.Envoy.setup`. Once the firmware version is known, [authentication](./usage_authentication.md#authentication) can take place using the required parameters for the firmware. The {py:meth}`pyenphase.Envoy.authenticate` method requires a username, password, and, in some cases, a JWT token—[depending on the active firmware](./usage_authentication.md#authentication). ```python from pyenphase import Envoy, EnvoyData envoy = Envoy(host_ip_or_name) await envoy.setup() print(f'Envoy {envoy.host} running {envoy.firmware}, sn: {envoy.serial_number}') await envoy.authenticate(username=username, password=password, token=token) ``` ## Close The Envoy class uses an [aiohttp client session](https://docs.aiohttp.org/en/stable/client_reference.html) for HTTP communication. The caller can optionally specify a client session when constructing the {py:class}`pyenphase.Envoy`. If no client session is specified, pyenphase will create one. The client session created by pyenphase must be closed at application exit. Use {py:meth}`pyenphase.Envoy.close` to close the created session. If you supplied your own aiohttp ClientSession, {py:meth}`pyenphase.Envoy.close` will not close it; you remain responsible for closing it. ```python from pyenphase import Envoy, EnvoyData envoy = Envoy(host_ip_or_name) await envoy.setup() print(f'Envoy {envoy.host} running {envoy.firmware}, sn: {envoy.serial_number}') await envoy.authenticate(username=username, password=password, token=token) data: EnvoyData = await envoy.update() await envoy.close() ``` ## Update Upon authentication completion, data can be collected (repeatedly) using {py:meth}`pyenphase.Envoy.update`. ```python while True: data: EnvoyData = await envoy.update() print(f'Watts: {data.system_production.watts_now}') print(f'TodaysEnergy: {data.system_production.watt_hours_today}') print(f'LifetimeEnergy: {data.system_production.watt_hours_lifetime}') print(f'Last7DaysEnergy: {data.system_production.watt_hours_last_7_days}') await asyncio.sleep(some_time) ``` For all available data refer to [Data](./data.md). ## Probe When data is first collected, the update method will perform a probe of the Envoy to determine what data is actually available. This may vary by model or running firmware version. This probing also provides the data for various envoy properties. If the need exists to inspect properties before first data collection, use the [probe method](#pyenphase.Envoy.probe). ```python from pyenphase import Envoy, EnvoyData envoy = Envoy(host_ip_or_name) await envoy.setup() print(f'Envoy {envoy.host} running {envoy.firmware}, sn: {envoy.serial_number}') await envoy.authenticate(username=username, password=password, token=token) await envoy.probe() print(f'Phases: {envoy.phase_count}') production_ct = 'installed' if envoy.production_meter_type else 'not installed' consumption_ct = 'installed' if envoy.consumption_meter_type else 'not installed' print(f'This envoy has Production CT {production_ct} and Consumption CT {consumption_ct}') ``` pyenphase-2.3.1/poetry.lock000066400000000000000000005701411505013723300157140ustar00rootroot00000000000000# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" version = "2.6.1" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, ] [[package]] name = "aiohttp" version = "3.12.15" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "aiohttp-3.12.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b6fc902bff74d9b1879ad55f5404153e2b33a82e72a95c89cec5eb6cc9e92fbc"}, {file = "aiohttp-3.12.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:098e92835b8119b54c693f2f88a1dec690e20798ca5f5fe5f0520245253ee0af"}, {file = "aiohttp-3.12.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:40b3fee496a47c3b4a39a731954c06f0bd9bd3e8258c059a4beb76ac23f8e421"}, {file = "aiohttp-3.12.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ce13fcfb0bb2f259fb42106cdc63fa5515fb85b7e87177267d89a771a660b79"}, {file = "aiohttp-3.12.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3beb14f053222b391bf9cf92ae82e0171067cc9c8f52453a0f1ec7c37df12a77"}, {file = "aiohttp-3.12.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c39e87afe48aa3e814cac5f535bc6199180a53e38d3f51c5e2530f5aa4ec58c"}, {file = "aiohttp-3.12.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5f1b4ce5bc528a6ee38dbf5f39bbf11dd127048726323b72b8e85769319ffc4"}, {file = "aiohttp-3.12.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1004e67962efabbaf3f03b11b4c43b834081c9e3f9b32b16a7d97d4708a9abe6"}, {file = "aiohttp-3.12.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8faa08fcc2e411f7ab91d1541d9d597d3a90e9004180edb2072238c085eac8c2"}, {file = "aiohttp-3.12.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fe086edf38b2222328cdf89af0dde2439ee173b8ad7cb659b4e4c6f385b2be3d"}, {file = "aiohttp-3.12.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:79b26fe467219add81d5e47b4a4ba0f2394e8b7c7c3198ed36609f9ba161aecb"}, {file = "aiohttp-3.12.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b761bac1192ef24e16706d761aefcb581438b34b13a2f069a6d343ec8fb693a5"}, {file = "aiohttp-3.12.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e153e8adacfe2af562861b72f8bc47f8a5c08e010ac94eebbe33dc21d677cd5b"}, {file = "aiohttp-3.12.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:fc49c4de44977aa8601a00edbf157e9a421f227aa7eb477d9e3df48343311065"}, {file = "aiohttp-3.12.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2776c7ec89c54a47029940177e75c8c07c29c66f73464784971d6a81904ce9d1"}, {file = "aiohttp-3.12.15-cp310-cp310-win32.whl", hash = "sha256:2c7d81a277fa78b2203ab626ced1487420e8c11a8e373707ab72d189fcdad20a"}, {file = "aiohttp-3.12.15-cp310-cp310-win_amd64.whl", hash = "sha256:83603f881e11f0f710f8e2327817c82e79431ec976448839f3cd05d7afe8f830"}, {file = "aiohttp-3.12.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d3ce17ce0220383a0f9ea07175eeaa6aa13ae5a41f30bc61d84df17f0e9b1117"}, {file = "aiohttp-3.12.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:010cc9bbd06db80fe234d9003f67e97a10fe003bfbedb40da7d71c1008eda0fe"}, {file = "aiohttp-3.12.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f9d7c55b41ed687b9d7165b17672340187f87a773c98236c987f08c858145a9"}, {file = "aiohttp-3.12.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc4fbc61bb3548d3b482f9ac7ddd0f18c67e4225aaa4e8552b9f1ac7e6bda9e5"}, {file = "aiohttp-3.12.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7fbc8a7c410bb3ad5d595bb7118147dfbb6449d862cc1125cf8867cb337e8728"}, {file = "aiohttp-3.12.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74dad41b3458dbb0511e760fb355bb0b6689e0630de8a22b1b62a98777136e16"}, {file = "aiohttp-3.12.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b6f0af863cf17e6222b1735a756d664159e58855da99cfe965134a3ff63b0b0"}, {file = "aiohttp-3.12.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5b7fe4972d48a4da367043b8e023fb70a04d1490aa7d68800e465d1b97e493b"}, {file = "aiohttp-3.12.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6443cca89553b7a5485331bc9bedb2342b08d073fa10b8c7d1c60579c4a7b9bd"}, {file = "aiohttp-3.12.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c5f40ec615e5264f44b4282ee27628cea221fcad52f27405b80abb346d9f3f8"}, {file = "aiohttp-3.12.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2abbb216a1d3a2fe86dbd2edce20cdc5e9ad0be6378455b05ec7f77361b3ab50"}, {file = "aiohttp-3.12.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:db71ce547012a5420a39c1b744d485cfb823564d01d5d20805977f5ea1345676"}, {file = "aiohttp-3.12.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ced339d7c9b5030abad5854aa5413a77565e5b6e6248ff927d3e174baf3badf7"}, {file = "aiohttp-3.12.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7c7dd29c7b5bda137464dc9bfc738d7ceea46ff70309859ffde8c022e9b08ba7"}, {file = "aiohttp-3.12.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:421da6fd326460517873274875c6c5a18ff225b40da2616083c5a34a7570b685"}, {file = "aiohttp-3.12.15-cp311-cp311-win32.whl", hash = "sha256:4420cf9d179ec8dfe4be10e7d0fe47d6d606485512ea2265b0d8c5113372771b"}, {file = "aiohttp-3.12.15-cp311-cp311-win_amd64.whl", hash = "sha256:edd533a07da85baa4b423ee8839e3e91681c7bfa19b04260a469ee94b778bf6d"}, {file = "aiohttp-3.12.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:802d3868f5776e28f7bf69d349c26fc0efadb81676d0afa88ed00d98a26340b7"}, {file = "aiohttp-3.12.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2800614cd560287be05e33a679638e586a2d7401f4ddf99e304d98878c29444"}, {file = "aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8466151554b593909d30a0a125d638b4e5f3836e5aecde85b66b80ded1cb5b0d"}, {file = "aiohttp-3.12.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e5a495cb1be69dae4b08f35a6c4579c539e9b5706f606632102c0f855bcba7c"}, {file = "aiohttp-3.12.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6404dfc8cdde35c69aaa489bb3542fb86ef215fc70277c892be8af540e5e21c0"}, {file = "aiohttp-3.12.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ead1c00f8521a5c9070fcb88f02967b1d8a0544e6d85c253f6968b785e1a2ab"}, {file = "aiohttp-3.12.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6990ef617f14450bc6b34941dba4f12d5613cbf4e33805932f853fbd1cf18bfb"}, {file = "aiohttp-3.12.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd736ed420f4db2b8148b52b46b88ed038d0354255f9a73196b7bbce3ea97545"}, {file = "aiohttp-3.12.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5092ce14361a73086b90c6efb3948ffa5be2f5b6fbcf52e8d8c8b8848bb97c"}, {file = "aiohttp-3.12.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aaa2234bb60c4dbf82893e934d8ee8dea30446f0647e024074237a56a08c01bd"}, {file = "aiohttp-3.12.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6d86a2fbdd14192e2f234a92d3b494dd4457e683ba07e5905a0b3ee25389ac9f"}, {file = "aiohttp-3.12.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a041e7e2612041a6ddf1c6a33b883be6a421247c7afd47e885969ee4cc58bd8d"}, {file = "aiohttp-3.12.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5015082477abeafad7203757ae44299a610e89ee82a1503e3d4184e6bafdd519"}, {file = "aiohttp-3.12.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56822ff5ddfd1b745534e658faba944012346184fbfe732e0d6134b744516eea"}, {file = "aiohttp-3.12.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2acbbfff69019d9014508c4ba0401822e8bae5a5fdc3b6814285b71231b60f3"}, {file = "aiohttp-3.12.15-cp312-cp312-win32.whl", hash = "sha256:d849b0901b50f2185874b9a232f38e26b9b3d4810095a7572eacea939132d4e1"}, {file = "aiohttp-3.12.15-cp312-cp312-win_amd64.whl", hash = "sha256:b390ef5f62bb508a9d67cb3bba9b8356e23b3996da7062f1a57ce1a79d2b3d34"}, {file = "aiohttp-3.12.15-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f922ffd05034d439dde1c77a20461cf4a1b0831e6caa26151fe7aa8aaebc315"}, {file = "aiohttp-3.12.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ee8a8ac39ce45f3e55663891d4b1d15598c157b4d494a4613e704c8b43112cd"}, {file = "aiohttp-3.12.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3eae49032c29d356b94eee45a3f39fdf4b0814b397638c2f718e96cfadf4c4e4"}, {file = "aiohttp-3.12.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97752ff12cc12f46a9b20327104448042fce5c33a624f88c18f66f9368091c7"}, {file = "aiohttp-3.12.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:894261472691d6fe76ebb7fcf2e5870a2ac284c7406ddc95823c8598a1390f0d"}, {file = "aiohttp-3.12.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fa5d9eb82ce98959fc1031c28198b431b4d9396894f385cb63f1e2f3f20ca6b"}, {file = "aiohttp-3.12.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fa751efb11a541f57db59c1dd821bec09031e01452b2b6217319b3a1f34f3d"}, {file = "aiohttp-3.12.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5346b93e62ab51ee2a9d68e8f73c7cf96ffb73568a23e683f931e52450e4148d"}, {file = "aiohttp-3.12.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:049ec0360f939cd164ecbfd2873eaa432613d5e77d6b04535e3d1fbae5a9e645"}, {file = "aiohttp-3.12.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b52dcf013b57464b6d1e51b627adfd69a8053e84b7103a7cd49c030f9ca44461"}, {file = "aiohttp-3.12.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9b2af240143dd2765e0fb661fd0361a1b469cab235039ea57663cda087250ea9"}, {file = "aiohttp-3.12.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac77f709a2cde2cc71257ab2d8c74dd157c67a0558a0d2799d5d571b4c63d44d"}, {file = "aiohttp-3.12.15-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:47f6b962246f0a774fbd3b6b7be25d59b06fdb2f164cf2513097998fc6a29693"}, {file = "aiohttp-3.12.15-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:760fb7db442f284996e39cf9915a94492e1896baac44f06ae551974907922b64"}, {file = "aiohttp-3.12.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad702e57dc385cae679c39d318def49aef754455f237499d5b99bea4ef582e51"}, {file = "aiohttp-3.12.15-cp313-cp313-win32.whl", hash = "sha256:f813c3e9032331024de2eb2e32a88d86afb69291fbc37a3a3ae81cc9917fb3d0"}, {file = "aiohttp-3.12.15-cp313-cp313-win_amd64.whl", hash = "sha256:1a649001580bdb37c6fdb1bebbd7e3bc688e8ec2b5c6f52edbb664662b17dc84"}, {file = "aiohttp-3.12.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:691d203c2bdf4f4637792efbbcdcd157ae11e55eaeb5e9c360c1206fb03d4d98"}, {file = "aiohttp-3.12.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e995e1abc4ed2a454c731385bf4082be06f875822adc4c6d9eaadf96e20d406"}, {file = "aiohttp-3.12.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bd44d5936ab3193c617bfd6c9a7d8d1085a8dc8c3f44d5f1dcf554d17d04cf7d"}, {file = "aiohttp-3.12.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46749be6e89cd78d6068cdf7da51dbcfa4321147ab8e4116ee6678d9a056a0cf"}, {file = "aiohttp-3.12.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0c643f4d75adea39e92c0f01b3fb83d57abdec8c9279b3078b68a3a52b3933b6"}, {file = "aiohttp-3.12.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a23918fedc05806966a2438489dcffccbdf83e921a1170773b6178d04ade142"}, {file = "aiohttp-3.12.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74bdd8c864b36c3673741023343565d95bfbd778ffe1eb4d412c135a28a8dc89"}, {file = "aiohttp-3.12.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a146708808c9b7a988a4af3821379e379e0f0e5e466ca31a73dbdd0325b0263"}, {file = "aiohttp-3.12.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7011a70b56facde58d6d26da4fec3280cc8e2a78c714c96b7a01a87930a9530"}, {file = "aiohttp-3.12.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3bdd6e17e16e1dbd3db74d7f989e8af29c4d2e025f9828e6ef45fbdee158ec75"}, {file = "aiohttp-3.12.15-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:57d16590a351dfc914670bd72530fd78344b885a00b250e992faea565b7fdc05"}, {file = "aiohttp-3.12.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:bc9a0f6569ff990e0bbd75506c8d8fe7214c8f6579cca32f0546e54372a3bb54"}, {file = "aiohttp-3.12.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:536ad7234747a37e50e7b6794ea868833d5220b49c92806ae2d7e8a9d6b5de02"}, {file = "aiohttp-3.12.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f0adb4177fa748072546fb650d9bd7398caaf0e15b370ed3317280b13f4083b0"}, {file = "aiohttp-3.12.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:14954a2988feae3987f1eb49c706bff39947605f4b6fa4027c1d75743723eb09"}, {file = "aiohttp-3.12.15-cp39-cp39-win32.whl", hash = "sha256:b784d6ed757f27574dca1c336f968f4e81130b27595e458e69457e6878251f5d"}, {file = "aiohttp-3.12.15-cp39-cp39-win_amd64.whl", hash = "sha256:86ceded4e78a992f835209e236617bffae649371c4a50d5e5a3987f237db84b8"}, {file = "aiohttp-3.12.15.tar.gz", hash = "sha256:4fc61385e9c98d72fcdf47e6dd81833f47b2f77c114c29cd64a361be57a763a2"}, ] [package.dependencies] aiohappyeyeballs = ">=2.5.0" aiosignal = ">=1.4.0" async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" propcache = ">=0.2.0" yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "brotlicffi ; platform_python_implementation != \"CPython\""] [[package]] name = "aioresponses" version = "0.7.8" description = "Mock out requests made by ClientSession from aiohttp package" optional = false python-versions = "*" groups = ["dev"] files = [ {file = "aioresponses-0.7.8-py2.py3-none-any.whl", hash = "sha256:b73bd4400d978855e55004b23a3a84cb0f018183bcf066a85ad392800b5b9a94"}, {file = "aioresponses-0.7.8.tar.gz", hash = "sha256:b861cdfe5dc58f3b8afac7b0a6973d5d7b2cb608dd0f6253d16b8ee8eaf6df11"}, ] [package.dependencies] aiohttp = ">=3.3.0,<4.0.0" packaging = ">=22.0" [[package]] name = "aiosignal" version = "1.4.0" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, ] [package.dependencies] frozenlist = ">=1.1.0" typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] [[package]] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" groups = ["main", "dev"] markers = "python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] [[package]] name = "attrs" version = "25.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" groups = ["main", "dev"] files = [ {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, ] [package.extras] benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] [[package]] name = "awesomeversion" version = "25.8.0" description = "One version package to rule them all, One version package to find them, One version package to bring them all, and in the darkness bind them." optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "awesomeversion-25.8.0-py3-none-any.whl", hash = "sha256:1c314683abfcc3e26c62af9e609b585bbcbf2ec19568df2f60ff1034fb1dae28"}, {file = "awesomeversion-25.8.0.tar.gz", hash = "sha256:e6cd08c90292a11f30b8de401863dcde7bc66a671d8173f9066ebd15d9310453"}, ] [package.extras] dev = ["black (>=25.1)", "isort (>=6.0.1)", "mypy (>=1.16)", "pylint (>=3.3.7)", "pytest (>=8.4.1)", "pytest-codspeed (>=3.2.0)", "pytest-cov (>=6.2.1)", "pytest-snapshot (>=0.9.0)", "pytest-timeout (>=2.4.0)"] [[package]] name = "babel" version = "2.14.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "backports-asyncio-runner" version = "1.2.0" description = "Backport of asyncio.Runner, a context manager that controls event loop life cycle." optional = false python-versions = "<3.11,>=3.8" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5"}, {file = "backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162"}, ] [[package]] name = "certifi" version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["docs"] files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" groups = ["docs"] files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev", "docs"] markers = "sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] name = "coverage" version = "7.6.12" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"}, {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"}, {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"}, {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"}, {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"}, {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"}, {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"}, {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"}, {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"}, {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"}, {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"}, {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"}, {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"}, {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"}, {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"}, {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"}, {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"}, {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"}, {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"}, {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"}, {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"}, {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"}, {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"}, {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"}, {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"}, {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"}, {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"}, {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"}, {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"}, {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"}, {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"}, {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"}, {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"}, {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"}, {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"}, {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"}, {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"}, {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"}, {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"}, {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"}, {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"}, {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"}, {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"}, {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"}, {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"}, {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"}, {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"}, {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"}, {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"}, {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"}, {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"}, {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"}, {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"}, {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"}, {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"}, {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"}, {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"}, {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"}, {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"}, {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"}, {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"}, {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"}, {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"}, ] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "docutils" version = "0.20.1" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] [[package]] name = "envoy-utils" version = "0.0.1" description = "Python utilities for the Enphase Envoy" optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "envoy_utils-0.0.1-py3-none-any.whl", hash = "sha256:42af6458241549a381d7897b18f74077224cf955b412fdb36088fc6c8e3f992a"}, {file = "envoy_utils-0.0.1.tar.gz", hash = "sha256:0cc435b2b9a8c2a664530c85bfd108e4bd7500079aa1bb93a69628314d03f68f"}, ] [package.dependencies] zeroconf = "*" [[package]] name = "exceptiongroup" version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] test = ["pytest (>=6)"] [[package]] name = "frozenlist" version = "1.6.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e"}, {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352"}, {file = "frozenlist-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b"}, {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc"}, {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869"}, {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106"}, {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24"}, {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd"}, {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8"}, {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c"}, {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75"}, {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249"}, {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769"}, {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02"}, {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3"}, {file = "frozenlist-1.6.0-cp310-cp310-win32.whl", hash = "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812"}, {file = "frozenlist-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1"}, {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d"}, {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0"}, {file = "frozenlist-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe"}, {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba"}, {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595"}, {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a"}, {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626"}, {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff"}, {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a"}, {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0"}, {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606"}, {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584"}, {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a"}, {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1"}, {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e"}, {file = "frozenlist-1.6.0-cp311-cp311-win32.whl", hash = "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860"}, {file = "frozenlist-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603"}, {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1"}, {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29"}, {file = "frozenlist-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25"}, {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576"}, {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8"}, {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9"}, {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e"}, {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590"}, {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103"}, {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c"}, {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821"}, {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70"}, {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f"}, {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046"}, {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770"}, {file = "frozenlist-1.6.0-cp312-cp312-win32.whl", hash = "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc"}, {file = "frozenlist-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878"}, {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e"}, {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117"}, {file = "frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4"}, {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3"}, {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1"}, {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c"}, {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45"}, {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f"}, {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85"}, {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8"}, {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f"}, {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f"}, {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6"}, {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188"}, {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e"}, {file = "frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4"}, {file = "frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd"}, {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64"}, {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91"}, {file = "frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd"}, {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2"}, {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506"}, {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0"}, {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0"}, {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e"}, {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c"}, {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b"}, {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad"}, {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215"}, {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2"}, {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911"}, {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497"}, {file = "frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f"}, {file = "frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348"}, {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0"}, {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70"}, {file = "frozenlist-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad"}, {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3"}, {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42"}, {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f"}, {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d"}, {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c"}, {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f"}, {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b"}, {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189"}, {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791"}, {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983"}, {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa"}, {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c"}, {file = "frozenlist-1.6.0-cp39-cp39-win32.whl", hash = "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530"}, {file = "frozenlist-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572"}, {file = "frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191"}, {file = "frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68"}, ] [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" groups = ["main", "dev", "docs"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "ifaddr" version = "0.2.0" description = "Cross-platform network interface and IP address enumeration library" optional = false python-versions = "*" groups = ["main"] files = [ {file = "ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748"}, {file = "ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4"}, ] [[package]] name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["docs"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] name = "jinja2" version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] [package.dependencies] MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] [[package]] name = "lxml" version = "6.0.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "lxml-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:35bc626eec405f745199200ccb5c6b36f202675d204aa29bb52e27ba2b71dea8"}, {file = "lxml-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:246b40f8a4aec341cbbf52617cad8ab7c888d944bfe12a6abd2b1f6cfb6f6082"}, {file = "lxml-6.0.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:2793a627e95d119e9f1e19720730472f5543a6d84c50ea33313ce328d870f2dd"}, {file = "lxml-6.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:46b9ed911f36bfeb6338e0b482e7fe7c27d362c52fde29f221fddbc9ee2227e7"}, {file = "lxml-6.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b4790b558bee331a933e08883c423f65bbcd07e278f91b2272489e31ab1e2b4"}, {file = "lxml-6.0.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2030956cf4886b10be9a0285c6802e078ec2391e1dd7ff3eb509c2c95a69b76"}, {file = "lxml-6.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d23854ecf381ab1facc8f353dcd9adeddef3652268ee75297c1164c987c11dc"}, {file = "lxml-6.0.0-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:43fe5af2d590bf4691531b1d9a2495d7aab2090547eaacd224a3afec95706d76"}, {file = "lxml-6.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74e748012f8c19b47f7d6321ac929a9a94ee92ef12bc4298c47e8b7219b26541"}, {file = "lxml-6.0.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:43cfbb7db02b30ad3926e8fceaef260ba2fb7df787e38fa2df890c1ca7966c3b"}, {file = "lxml-6.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34190a1ec4f1e84af256495436b2d196529c3f2094f0af80202947567fdbf2e7"}, {file = "lxml-6.0.0-cp310-cp310-win32.whl", hash = "sha256:5967fe415b1920a3877a4195e9a2b779249630ee49ece22021c690320ff07452"}, {file = "lxml-6.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f3389924581d9a770c6caa4df4e74b606180869043b9073e2cec324bad6e306e"}, {file = "lxml-6.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:522fe7abb41309e9543b0d9b8b434f2b630c5fdaf6482bee642b34c8c70079c8"}, {file = "lxml-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ee56288d0df919e4aac43b539dd0e34bb55d6a12a6562038e8d6f3ed07f9e36"}, {file = "lxml-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8dd6dd0e9c1992613ccda2bcb74fc9d49159dbe0f0ca4753f37527749885c25"}, {file = "lxml-6.0.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:d7ae472f74afcc47320238b5dbfd363aba111a525943c8a34a1b657c6be934c3"}, {file = "lxml-6.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5592401cdf3dc682194727c1ddaa8aa0f3ddc57ca64fd03226a430b955eab6f6"}, {file = "lxml-6.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58ffd35bd5425c3c3b9692d078bf7ab851441434531a7e517c4984d5634cd65b"}, {file = "lxml-6.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f720a14aa102a38907c6d5030e3d66b3b680c3e6f6bc95473931ea3c00c59967"}, {file = "lxml-6.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2a5e8d207311a0170aca0eb6b160af91adc29ec121832e4ac151a57743a1e1e"}, {file = "lxml-6.0.0-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:2dd1cc3ea7e60bfb31ff32cafe07e24839df573a5e7c2d33304082a5019bcd58"}, {file = "lxml-6.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cfcf84f1defed7e5798ef4f88aa25fcc52d279be731ce904789aa7ccfb7e8d2"}, {file = "lxml-6.0.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a52a4704811e2623b0324a18d41ad4b9fabf43ce5ff99b14e40a520e2190c851"}, {file = "lxml-6.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c16304bba98f48a28ae10e32a8e75c349dd742c45156f297e16eeb1ba9287a1f"}, {file = "lxml-6.0.0-cp311-cp311-win32.whl", hash = "sha256:f8d19565ae3eb956d84da3ef367aa7def14a2735d05bd275cd54c0301f0d0d6c"}, {file = "lxml-6.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b2d71cdefda9424adff9a3607ba5bbfc60ee972d73c21c7e3c19e71037574816"}, {file = "lxml-6.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:8a2e76efbf8772add72d002d67a4c3d0958638696f541734304c7f28217a9cab"}, {file = "lxml-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78718d8454a6e928470d511bf8ac93f469283a45c354995f7d19e77292f26108"}, {file = "lxml-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:84ef591495ffd3f9dcabffd6391db7bb70d7230b5c35ef5148354a134f56f2be"}, {file = "lxml-6.0.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:2930aa001a3776c3e2601cb8e0a15d21b8270528d89cc308be4843ade546b9ab"}, {file = "lxml-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:219e0431ea8006e15005767f0351e3f7f9143e793e58519dc97fe9e07fae5563"}, {file = "lxml-6.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bd5913b4972681ffc9718bc2d4c53cde39ef81415e1671ff93e9aa30b46595e7"}, {file = "lxml-6.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:390240baeb9f415a82eefc2e13285016f9c8b5ad71ec80574ae8fa9605093cd7"}, {file = "lxml-6.0.0-cp312-cp312-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d6e200909a119626744dd81bae409fc44134389e03fbf1d68ed2a55a2fb10991"}, {file = "lxml-6.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ca50bd612438258a91b5b3788c6621c1f05c8c478e7951899f492be42defc0da"}, {file = "lxml-6.0.0-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:c24b8efd9c0f62bad0439283c2c795ef916c5a6b75f03c17799775c7ae3c0c9e"}, {file = "lxml-6.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:afd27d8629ae94c5d863e32ab0e1d5590371d296b87dae0a751fb22bf3685741"}, {file = "lxml-6.0.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:54c4855eabd9fc29707d30141be99e5cd1102e7d2258d2892314cf4c110726c3"}, {file = "lxml-6.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c907516d49f77f6cd8ead1322198bdfd902003c3c330c77a1c5f3cc32a0e4d16"}, {file = "lxml-6.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36531f81c8214e293097cd2b7873f178997dae33d3667caaae8bdfb9666b76c0"}, {file = "lxml-6.0.0-cp312-cp312-win32.whl", hash = "sha256:690b20e3388a7ec98e899fd54c924e50ba6693874aa65ef9cb53de7f7de9d64a"}, {file = "lxml-6.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:310b719b695b3dd442cdfbbe64936b2f2e231bb91d998e99e6f0daf991a3eba3"}, {file = "lxml-6.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:8cb26f51c82d77483cdcd2b4a53cda55bbee29b3c2f3ddeb47182a2a9064e4eb"}, {file = "lxml-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6da7cd4f405fd7db56e51e96bff0865b9853ae70df0e6720624049da76bde2da"}, {file = "lxml-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b34339898bb556a2351a1830f88f751679f343eabf9cf05841c95b165152c9e7"}, {file = "lxml-6.0.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:51a5e4c61a4541bd1cd3ba74766d0c9b6c12d6a1a4964ef60026832aac8e79b3"}, {file = "lxml-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d18a25b19ca7307045581b18b3ec9ead2b1db5ccd8719c291f0cd0a5cec6cb81"}, {file = "lxml-6.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d4f0c66df4386b75d2ab1e20a489f30dc7fd9a06a896d64980541506086be1f1"}, {file = "lxml-6.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f4b481b6cc3a897adb4279216695150bbe7a44c03daba3c894f49d2037e0a24"}, {file = "lxml-6.0.0-cp313-cp313-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a78d6c9168f5bcb20971bf3329c2b83078611fbe1f807baadc64afc70523b3a"}, {file = "lxml-6.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae06fbab4f1bb7db4f7c8ca9897dc8db4447d1a2b9bee78474ad403437bcc29"}, {file = "lxml-6.0.0-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:1fa377b827ca2023244a06554c6e7dc6828a10aaf74ca41965c5d8a4925aebb4"}, {file = "lxml-6.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1676b56d48048a62ef77a250428d1f31f610763636e0784ba67a9740823988ca"}, {file = "lxml-6.0.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:0e32698462aacc5c1cf6bdfebc9c781821b7e74c79f13e5ffc8bfe27c42b1abf"}, {file = "lxml-6.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4d6036c3a296707357efb375cfc24bb64cd955b9ec731abf11ebb1e40063949f"}, {file = "lxml-6.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7488a43033c958637b1a08cddc9188eb06d3ad36582cebc7d4815980b47e27ef"}, {file = "lxml-6.0.0-cp313-cp313-win32.whl", hash = "sha256:5fcd7d3b1d8ecb91445bd71b9c88bdbeae528fefee4f379895becfc72298d181"}, {file = "lxml-6.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:2f34687222b78fff795feeb799a7d44eca2477c3d9d3a46ce17d51a4f383e32e"}, {file = "lxml-6.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:21db1ec5525780fd07251636eb5f7acb84003e9382c72c18c542a87c416ade03"}, {file = "lxml-6.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4eb114a0754fd00075c12648d991ec7a4357f9cb873042cc9a77bf3a7e30c9db"}, {file = "lxml-6.0.0-cp38-cp38-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:7da298e1659e45d151b4028ad5c7974917e108afb48731f4ed785d02b6818994"}, {file = "lxml-6.0.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7bf61bc4345c1895221357af8f3e89f8c103d93156ef326532d35c707e2fb19d"}, {file = "lxml-6.0.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63b634facdfbad421d4b61c90735688465d4ab3a8853ac22c76ccac2baf98d97"}, {file = "lxml-6.0.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e380e85b93f148ad28ac15f8117e2fd8e5437aa7732d65e260134f83ce67911b"}, {file = "lxml-6.0.0-cp38-cp38-win32.whl", hash = "sha256:185efc2fed89cdd97552585c624d3c908f0464090f4b91f7d92f8ed2f3b18f54"}, {file = "lxml-6.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:f97487996a39cb18278ca33f7be98198f278d0bc3c5d0fd4d7b3d63646ca3c8a"}, {file = "lxml-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:85b14a4689d5cff426c12eefe750738648706ea2753b20c2f973b2a000d3d261"}, {file = "lxml-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f64ccf593916e93b8d36ed55401bb7fe9c7d5de3180ce2e10b08f82a8f397316"}, {file = "lxml-6.0.0-cp39-cp39-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:b372d10d17a701b0945f67be58fae4664fd056b85e0ff0fbc1e6c951cdbc0512"}, {file = "lxml-6.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a674c0948789e9136d69065cc28009c1b1874c6ea340253db58be7622ce6398f"}, {file = "lxml-6.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:edf6e4c8fe14dfe316939711e3ece3f9a20760aabf686051b537a7562f4da91a"}, {file = "lxml-6.0.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:048a930eb4572829604982e39a0c7289ab5dc8abc7fc9f5aabd6fbc08c154e93"}, {file = "lxml-6.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0b5fa5eda84057a4f1bbb4bb77a8c28ff20ae7ce211588d698ae453e13c6281"}, {file = "lxml-6.0.0-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:c352fc8f36f7e9727db17adbf93f82499457b3d7e5511368569b4c5bd155a922"}, {file = "lxml-6.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8db5dc617cb937ae17ff3403c3a70a7de9df4852a046f93e71edaec678f721d0"}, {file = "lxml-6.0.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:2181e4b1d07dde53986023482673c0f1fba5178ef800f9ab95ad791e8bdded6a"}, {file = "lxml-6.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b3c98d5b24c6095e89e03d65d5c574705be3d49c0d8ca10c17a8a4b5201b72f5"}, {file = "lxml-6.0.0-cp39-cp39-win32.whl", hash = "sha256:04d67ceee6db4bcb92987ccb16e53bef6b42ced872509f333c04fb58a3315256"}, {file = "lxml-6.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e0b1520ef900e9ef62e392dd3d7ae4f5fa224d1dd62897a792cf353eb20b6cae"}, {file = "lxml-6.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:e35e8aaaf3981489f42884b59726693de32dabfc438ac10ef4eb3409961fd402"}, {file = "lxml-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:dbdd7679a6f4f08152818043dbb39491d1af3332128b3752c3ec5cebc0011a72"}, {file = "lxml-6.0.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:40442e2a4456e9910875ac12951476d36c0870dcb38a68719f8c4686609897c4"}, {file = "lxml-6.0.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db0efd6bae1c4730b9c863fc4f5f3c0fa3e8f05cae2c44ae141cb9dfc7d091dc"}, {file = "lxml-6.0.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ab542c91f5a47aaa58abdd8ea84b498e8e49fe4b883d67800017757a3eb78e8"}, {file = "lxml-6.0.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:013090383863b72c62a702d07678b658fa2567aa58d373d963cca245b017e065"}, {file = "lxml-6.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c86df1c9af35d903d2b52d22ea3e66db8058d21dc0f59842ca5deb0595921141"}, {file = "lxml-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4337e4aec93b7c011f7ee2e357b0d30562edd1955620fdd4aeab6aacd90d43c5"}, {file = "lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ae74f7c762270196d2dda56f8dd7309411f08a4084ff2dfcc0b095a218df2e06"}, {file = "lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:059c4cbf3973a621b62ea3132934ae737da2c132a788e6cfb9b08d63a0ef73f9"}, {file = "lxml-6.0.0-pp39-pypy39_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f090a9bc0ce8da51a5632092f98a7e7f84bca26f33d161a98b57f7fb0004ca"}, {file = "lxml-6.0.0-pp39-pypy39_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9da022c14baeec36edfcc8daf0e281e2f55b950249a455776f0d1adeeada4734"}, {file = "lxml-6.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a55da151d0b0c6ab176b4e761670ac0e2667817a1e0dadd04a01d0561a219349"}, {file = "lxml-6.0.0.tar.gz", hash = "sha256:032e65120339d44cdc3efc326c9f660f5f7205f3a535c1fdbf898b29ea01fb72"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html-clean = ["lxml_html_clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] [[package]] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] benchmarking = ["psutil", "pytest", "pytest-benchmark"] code-style = ["pre-commit (>=3.0,<4.0)"] compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "mdit-py-plugins" version = "0.4.2" description = "Collection of plugins for markdown-it-py" optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, ] [package.dependencies] markdown-it-py = ">=1.0.0,<4.0.0" [package.extras] code-style = ["pre-commit"] rtd = ["myst-parser", "sphinx-book-theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] [[package]] name = "multidict" version = "6.4.4" description = "multidict implementation" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "multidict-6.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8adee3ac041145ffe4488ea73fa0a622b464cc25340d98be76924d0cda8545ff"}, {file = "multidict-6.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b61e98c3e2a861035aaccd207da585bdcacef65fe01d7a0d07478efac005e028"}, {file = "multidict-6.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:75493f28dbadecdbb59130e74fe935288813301a8554dc32f0c631b6bdcdf8b0"}, {file = "multidict-6.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffc3c6a37e048b5395ee235e4a2a0d639c2349dffa32d9367a42fc20d399772"}, {file = "multidict-6.4.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:87cb72263946b301570b0f63855569a24ee8758aaae2cd182aae7d95fbc92ca7"}, {file = "multidict-6.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bbf7bd39822fd07e3609b6b4467af4c404dd2b88ee314837ad1830a7f4a8299"}, {file = "multidict-6.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1f7cbd4f1f44ddf5fd86a8675b7679176eae770f2fc88115d6dddb6cefb59bc"}, {file = "multidict-6.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb5ac9e5bfce0e6282e7f59ff7b7b9a74aa8e5c60d38186a4637f5aa764046ad"}, {file = "multidict-6.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4efc31dfef8c4eeb95b6b17d799eedad88c4902daba39ce637e23a17ea078915"}, {file = "multidict-6.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9fcad2945b1b91c29ef2b4050f590bfcb68d8ac8e0995a74e659aa57e8d78e01"}, {file = "multidict-6.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d877447e7368c7320832acb7159557e49b21ea10ffeb135c1077dbbc0816b598"}, {file = "multidict-6.4.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:33a12ebac9f380714c298cbfd3e5b9c0c4e89c75fe612ae496512ee51028915f"}, {file = "multidict-6.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0f14ea68d29b43a9bf37953881b1e3eb75b2739e896ba4a6aa4ad4c5b9ffa145"}, {file = "multidict-6.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0327ad2c747a6600e4797d115d3c38a220fdb28e54983abe8964fd17e95ae83c"}, {file = "multidict-6.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d1a20707492db9719a05fc62ee215fd2c29b22b47c1b1ba347f9abc831e26683"}, {file = "multidict-6.4.4-cp310-cp310-win32.whl", hash = "sha256:d83f18315b9fca5db2452d1881ef20f79593c4aa824095b62cb280019ef7aa3d"}, {file = "multidict-6.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:9c17341ee04545fd962ae07330cb5a39977294c883485c8d74634669b1f7fe04"}, {file = "multidict-6.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4f5f29794ac0e73d2a06ac03fd18870adc0135a9d384f4a306a951188ed02f95"}, {file = "multidict-6.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c04157266344158ebd57b7120d9b0b35812285d26d0e78193e17ef57bfe2979a"}, {file = "multidict-6.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb61ffd3ab8310d93427e460f565322c44ef12769f51f77277b4abad7b6f7223"}, {file = "multidict-6.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e0ba18a9afd495f17c351d08ebbc4284e9c9f7971d715f196b79636a4d0de44"}, {file = "multidict-6.4.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9faf1b1dcaadf9f900d23a0e6d6c8eadd6a95795a0e57fcca73acce0eb912065"}, {file = "multidict-6.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a4d1cb1327c6082c4fce4e2a438483390964c02213bc6b8d782cf782c9b1471f"}, {file = "multidict-6.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:941f1bec2f5dbd51feeb40aea654c2747f811ab01bdd3422a48a4e4576b7d76a"}, {file = "multidict-6.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5f8a146184da7ea12910a4cec51ef85e44f6268467fb489c3caf0cd512f29c2"}, {file = "multidict-6.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:232b7237e57ec3c09be97206bfb83a0aa1c5d7d377faa019c68a210fa35831f1"}, {file = "multidict-6.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:55ae0721c1513e5e3210bca4fc98456b980b0c2c016679d3d723119b6b202c42"}, {file = "multidict-6.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:51d662c072579f63137919d7bb8fc250655ce79f00c82ecf11cab678f335062e"}, {file = "multidict-6.4.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0e05c39962baa0bb19a6b210e9b1422c35c093b651d64246b6c2e1a7e242d9fd"}, {file = "multidict-6.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5b1cc3ab8c31d9ebf0faa6e3540fb91257590da330ffe6d2393d4208e638925"}, {file = "multidict-6.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:93ec84488a384cd7b8a29c2c7f467137d8a73f6fe38bb810ecf29d1ade011a7c"}, {file = "multidict-6.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b308402608493638763abc95f9dc0030bbd6ac6aff784512e8ac3da73a88af08"}, {file = "multidict-6.4.4-cp311-cp311-win32.whl", hash = "sha256:343892a27d1a04d6ae455ecece12904d242d299ada01633d94c4f431d68a8c49"}, {file = "multidict-6.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:73484a94f55359780c0f458bbd3c39cb9cf9c182552177d2136e828269dee529"}, {file = "multidict-6.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dc388f75a1c00000824bf28b7633e40854f4127ede80512b44c3cfeeea1839a2"}, {file = "multidict-6.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:98af87593a666f739d9dba5d0ae86e01b0e1a9cfcd2e30d2d361fbbbd1a9162d"}, {file = "multidict-6.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aff4cafea2d120327d55eadd6b7f1136a8e5a0ecf6fb3b6863e8aca32cd8e50a"}, {file = "multidict-6.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:169c4ba7858176b797fe551d6e99040c531c775d2d57b31bcf4de6d7a669847f"}, {file = "multidict-6.4.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b9eb4c59c54421a32b3273d4239865cb14ead53a606db066d7130ac80cc8ec93"}, {file = "multidict-6.4.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cf3bd54c56aa16fdb40028d545eaa8d051402b61533c21e84046e05513d5780"}, {file = "multidict-6.4.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f682c42003c7264134bfe886376299db4cc0c6cd06a3295b41b347044bcb5482"}, {file = "multidict-6.4.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920f9cf2abdf6e493c519492d892c362007f113c94da4c239ae88429835bad1"}, {file = "multidict-6.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:530d86827a2df6504526106b4c104ba19044594f8722d3e87714e847c74a0275"}, {file = "multidict-6.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ecde56ea2439b96ed8a8d826b50c57364612ddac0438c39e473fafad7ae1c23b"}, {file = "multidict-6.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:dc8c9736d8574b560634775ac0def6bdc1661fc63fa27ffdfc7264c565bcb4f2"}, {file = "multidict-6.4.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7f3d3b3c34867579ea47cbd6c1f2ce23fbfd20a273b6f9e3177e256584f1eacc"}, {file = "multidict-6.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:87a728af265e08f96b6318ebe3c0f68b9335131f461efab2fc64cc84a44aa6ed"}, {file = "multidict-6.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9f193eeda1857f8e8d3079a4abd258f42ef4a4bc87388452ed1e1c4d2b0c8740"}, {file = "multidict-6.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be06e73c06415199200e9a2324a11252a3d62030319919cde5e6950ffeccf72e"}, {file = "multidict-6.4.4-cp312-cp312-win32.whl", hash = "sha256:622f26ea6a7e19b7c48dd9228071f571b2fbbd57a8cd71c061e848f281550e6b"}, {file = "multidict-6.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:5e2bcda30d5009996ff439e02a9f2b5c3d64a20151d34898c000a6281faa3781"}, {file = "multidict-6.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:82ffabefc8d84c2742ad19c37f02cde5ec2a1ee172d19944d380f920a340e4b9"}, {file = "multidict-6.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6a2f58a66fe2c22615ad26156354005391e26a2f3721c3621504cd87c1ea87bf"}, {file = "multidict-6.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5883d6ee0fd9d8a48e9174df47540b7545909841ac82354c7ae4cbe9952603bd"}, {file = "multidict-6.4.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9abcf56a9511653fa1d052bfc55fbe53dbee8f34e68bd6a5a038731b0ca42d15"}, {file = "multidict-6.4.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6ed5ae5605d4ad5a049fad2a28bb7193400700ce2f4ae484ab702d1e3749c3f9"}, {file = "multidict-6.4.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbfcb60396f9bcfa63e017a180c3105b8c123a63e9d1428a36544e7d37ca9e20"}, {file = "multidict-6.4.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0f1987787f5f1e2076b59692352ab29a955b09ccc433c1f6b8e8e18666f608b"}, {file = "multidict-6.4.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0121ccce8c812047d8d43d691a1ad7641f72c4f730474878a5aeae1b8ead8c"}, {file = "multidict-6.4.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83ec4967114295b8afd120a8eec579920c882831a3e4c3331d591a8e5bfbbc0f"}, {file = "multidict-6.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:995f985e2e268deaf17867801b859a282e0448633f1310e3704b30616d269d69"}, {file = "multidict-6.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:d832c608f94b9f92a0ec8b7e949be7792a642b6e535fcf32f3e28fab69eeb046"}, {file = "multidict-6.4.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d21c1212171cf7da703c5b0b7a0e85be23b720818aef502ad187d627316d5645"}, {file = "multidict-6.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:cbebaa076aaecad3d4bb4c008ecc73b09274c952cf6a1b78ccfd689e51f5a5b0"}, {file = "multidict-6.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c93a6fb06cc8e5d3628b2b5fda215a5db01e8f08fc15fadd65662d9b857acbe4"}, {file = "multidict-6.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8cd8f81f1310182362fb0c7898145ea9c9b08a71081c5963b40ee3e3cac589b1"}, {file = "multidict-6.4.4-cp313-cp313-win32.whl", hash = "sha256:3e9f1cd61a0ab857154205fb0b1f3d3ace88d27ebd1409ab7af5096e409614cd"}, {file = "multidict-6.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:8ffb40b74400e4455785c2fa37eba434269149ec525fc8329858c862e4b35373"}, {file = "multidict-6.4.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:6a602151dbf177be2450ef38966f4be3467d41a86c6a845070d12e17c858a156"}, {file = "multidict-6.4.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d2b9712211b860d123815a80b859075d86a4d54787e247d7fbee9db6832cf1c"}, {file = "multidict-6.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d2fa86af59f8fc1972e121ade052145f6da22758f6996a197d69bb52f8204e7e"}, {file = "multidict-6.4.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50855d03e9e4d66eab6947ba688ffb714616f985838077bc4b490e769e48da51"}, {file = "multidict-6.4.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5bce06b83be23225be1905dcdb6b789064fae92499fbc458f59a8c0e68718601"}, {file = "multidict-6.4.4-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66ed0731f8e5dfd8369a883b6e564aca085fb9289aacabd9decd70568b9a30de"}, {file = "multidict-6.4.4-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:329ae97fc2f56f44d91bc47fe0972b1f52d21c4b7a2ac97040da02577e2daca2"}, {file = "multidict-6.4.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c27e5dcf520923d6474d98b96749e6805f7677e93aaaf62656005b8643f907ab"}, {file = "multidict-6.4.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:058cc59b9e9b143cc56715e59e22941a5d868c322242278d28123a5d09cdf6b0"}, {file = "multidict-6.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:69133376bc9a03f8c47343d33f91f74a99c339e8b58cea90433d8e24bb298031"}, {file = "multidict-6.4.4-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d6b15c55721b1b115c5ba178c77104123745b1417527ad9641a4c5e2047450f0"}, {file = "multidict-6.4.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a887b77f51d3d41e6e1a63cf3bc7ddf24de5939d9ff69441387dfefa58ac2e26"}, {file = "multidict-6.4.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:632a3bf8f1787f7ef7d3c2f68a7bde5be2f702906f8b5842ad6da9d974d0aab3"}, {file = "multidict-6.4.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a145c550900deb7540973c5cdb183b0d24bed6b80bf7bddf33ed8f569082535e"}, {file = "multidict-6.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cc5d83c6619ca5c9672cb78b39ed8542f1975a803dee2cda114ff73cbb076edd"}, {file = "multidict-6.4.4-cp313-cp313t-win32.whl", hash = "sha256:3312f63261b9df49be9d57aaa6abf53a6ad96d93b24f9cc16cf979956355ce6e"}, {file = "multidict-6.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:ba852168d814b2c73333073e1c7116d9395bea69575a01b0b3c89d2d5a87c8fb"}, {file = "multidict-6.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:603f39bd1cf85705c6c1ba59644b480dfe495e6ee2b877908de93322705ad7cf"}, {file = "multidict-6.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc60f91c02e11dfbe3ff4e1219c085695c339af72d1641800fe6075b91850c8f"}, {file = "multidict-6.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:496bcf01c76a70a31c3d746fd39383aad8d685ce6331e4c709e9af4ced5fa221"}, {file = "multidict-6.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4219390fb5bf8e548e77b428bb36a21d9382960db5321b74d9d9987148074d6b"}, {file = "multidict-6.4.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef4e9096ff86dfdcbd4a78253090ba13b1d183daa11b973e842465d94ae1772"}, {file = "multidict-6.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49a29d7133b1fc214e818bbe025a77cc6025ed9a4f407d2850373ddde07fd04a"}, {file = "multidict-6.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e32053d6d3a8b0dfe49fde05b496731a0e6099a4df92154641c00aa76786aef5"}, {file = "multidict-6.4.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cc403092a49509e8ef2d2fd636a8ecefc4698cc57bbe894606b14579bc2a955"}, {file = "multidict-6.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5363f9b2a7f3910e5c87d8b1855c478c05a2dc559ac57308117424dfaad6805c"}, {file = "multidict-6.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2e543a40e4946cf70a88a3be87837a3ae0aebd9058ba49e91cacb0b2cd631e2b"}, {file = "multidict-6.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:60d849912350da557fe7de20aa8cf394aada6980d0052cc829eeda4a0db1c1db"}, {file = "multidict-6.4.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:19d08b4f22eae45bb018b9f06e2838c1e4b853c67628ef8ae126d99de0da6395"}, {file = "multidict-6.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d693307856d1ef08041e8b6ff01d5b4618715007d288490ce2c7e29013c12b9a"}, {file = "multidict-6.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fad6daaed41021934917f4fb03ca2db8d8a4d79bf89b17ebe77228eb6710c003"}, {file = "multidict-6.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c10d17371bff801af0daf8b073c30b6cf14215784dc08cd5c43ab5b7b8029bbc"}, {file = "multidict-6.4.4-cp39-cp39-win32.whl", hash = "sha256:7e23f2f841fcb3ebd4724a40032d32e0892fbba4143e43d2a9e7695c5e50e6bd"}, {file = "multidict-6.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:4d7b50b673ffb4ff4366e7ab43cf1f0aef4bd3608735c5fbdf0bdb6f690da411"}, {file = "multidict-6.4.4-py3-none-any.whl", hash = "sha256:bd4557071b561a8b3b6075c3ce93cf9bfb6182cb241805c3d66ced3b75eff4ac"}, {file = "multidict-6.4.4.tar.gz", hash = "sha256:69ee9e6ba214b5245031b76233dd95408a0fd57fdb019ddcc1ead4790932a8e8"}, ] [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} [[package]] name = "myst-parser" version = "4.0.1" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," optional = false python-versions = ">=3.10" groups = ["docs"] files = [ {file = "myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d"}, {file = "myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4"}, ] [package.dependencies] docutils = ">=0.19,<0.22" jinja2 = "*" markdown-it-py = ">=3.0,<4.0" mdit-py-plugins = ">=0.4.1,<1.0" pyyaml = "*" sphinx = ">=7,<9" [package.extras] code-style = ["pre-commit (>=4.0,<5.0)"] linkify = ["linkify-it-py (>=2.0,<3.0)"] rtd = ["ipython", "sphinx (>=7)", "sphinx-autodoc2 (>=0.5.0,<0.6.0)", "sphinx-book-theme (>=1.1,<2.0)", "sphinx-copybutton", "sphinx-design", "sphinx-pyscript", "sphinx-tippy (>=0.4.3)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.9.0,<0.10.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] testing = ["beautifulsoup4", "coverage[toml]", "defusedxml", "pygments (<2.19)", "pytest (>=8,<9)", "pytest-cov", "pytest-param-files (>=0.6.0,<0.7.0)", "pytest-regressions", "sphinx-pytest"] testing-docutils = ["pygments", "pytest (>=8,<9)", "pytest-param-files (>=0.6.0,<0.7.0)"] [[package]] name = "orjson" version = "3.11.1" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "orjson-3.11.1-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:92d771c492b64119456afb50f2dff3e03a2db8b5af0eba32c5932d306f970532"}, {file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0085ef83a4141c2ed23bfec5fecbfdb1e95dd42fc8e8c76057bdeeec1608ea65"}, {file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5caf7f13f2e1b4e137060aed892d4541d07dabc3f29e6d891e2383c7ed483440"}, {file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f716bcc166524eddfcf9f13f8209ac19a7f27b05cf591e883419079d98c8c99d"}, {file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:507d6012fab05465d8bf21f5d7f4635ba4b6d60132874e349beff12fb51af7fe"}, {file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1545083b0931f754c80fd2422a73d83bea7a6d1b6de104a5f2c8dd3d64c291e"}, {file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e217ce3bad76351e1eb29ebe5ca630326f45cd2141f62620107a229909501a3"}, {file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06ef26e009304bda4df42e4afe518994cde6f89b4b04c0ff24021064f83f4fbb"}, {file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ba49683b87bea3ae1489a88e766e767d4f423a669a61270b6d6a7ead1c33bd65"}, {file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5072488fcc5cbcda2ece966d248e43ea1d222e19dd4c56d3f82747777f24d864"}, {file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f58ae2bcd119226fe4aa934b5880fe57b8e97b69e51d5d91c88a89477a307016"}, {file = "orjson-3.11.1-cp310-cp310-win32.whl", hash = "sha256:6723be919c07906781b9c63cc52dc7d2fb101336c99dd7e85d3531d73fb493f7"}, {file = "orjson-3.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:5fd44d69ddfdfb4e8d0d83f09d27a4db34930fba153fbf79f8d4ae8b47914e04"}, {file = "orjson-3.11.1-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:15e2a57ce3b57c1a36acffcc02e823afefceee0a532180c2568c62213c98e3ef"}, {file = "orjson-3.11.1-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:17040a83ecaa130474af05bbb59a13cfeb2157d76385556041f945da936b1afd"}, {file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a68f23f09e5626cc0867a96cf618f68b91acb4753d33a80bf16111fd7f9928c"}, {file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47e07528bb6ccbd6e32a55e330979048b59bfc5518b47c89bc7ab9e3de15174a"}, {file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3807cce72bf40a9d251d689cbec28d2efd27e0f6673709f948f971afd52cb09"}, {file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b2dc7e88da4ca201c940f5e6127998d9e89aa64264292334dad62854bc7fc27"}, {file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3091dad33ac9e67c0a550cfff8ad5be156e2614d6f5d2a9247df0627751a1495"}, {file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ed0fce2307843b79a0c83de49f65b86197f1e2310de07af9db2a1a77a61ce4c"}, {file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5a31e84782a18c30abd56774c0cfa7b9884589f4d37d9acabfa0504dad59bb9d"}, {file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:26b6c821abf1ae515fbb8e140a2406c9f9004f3e52acb780b3dee9bfffddbd84"}, {file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f857b3d134b36a8436f1e24dcb525b6b945108b30746c1b0b556200b5cb76d39"}, {file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df146f2a14116ce80f7da669785fcb411406d8e80136558b0ecda4c924b9ac55"}, {file = "orjson-3.11.1-cp311-cp311-win32.whl", hash = "sha256:d777c57c1f86855fe5492b973f1012be776e0398571f7cc3970e9a58ecf4dc17"}, {file = "orjson-3.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:e9a5fd589951f02ec2fcb8d69339258bbf74b41b104c556e6d4420ea5e059313"}, {file = "orjson-3.11.1-cp311-cp311-win_arm64.whl", hash = "sha256:4cddbe41ee04fddad35d75b9cf3e3736ad0b80588280766156b94783167777af"}, {file = "orjson-3.11.1-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2b7c8be96db3a977367250c6367793a3c5851a6ca4263f92f0b48d00702f9910"}, {file = "orjson-3.11.1-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:72e18088f567bd4a45db5e3196677d9ed1605e356e500c8e32dd6e303167a13d"}, {file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d346e2ae1ce17888f7040b65a5a4a0c9734cb20ffbd228728661e020b4c8b3a5"}, {file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4bda5426ebb02ceb806a7d7ec9ba9ee5e0c93fca62375151a7b1c00bc634d06b"}, {file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10506cebe908542c4f024861102673db534fd2e03eb9b95b30d94438fa220abf"}, {file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45202ee3f5494644e064c41abd1320497fb92fd31fc73af708708af664ac3b56"}, {file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5adaf01b92e0402a9ac5c3ebe04effe2bbb115f0914a0a53d34ea239a746289"}, {file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6162a1a757a1f1f4a94bc6ffac834a3602e04ad5db022dd8395a54ed9dd51c81"}, {file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:78404206977c9f946613d3f916727c189d43193e708d760ea5d4b2087d6b0968"}, {file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:db48f8e81072e26df6cdb0e9fff808c28597c6ac20a13d595756cf9ba1fed48a"}, {file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0c1e394e67ced6bb16fea7054d99fbdd99a539cf4d446d40378d4c06e0a8548d"}, {file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e7a840752c93d4eecd1378e9bb465c3703e127b58f675cd5c620f361b6cf57a4"}, {file = "orjson-3.11.1-cp312-cp312-win32.whl", hash = "sha256:4537b0e09f45d2b74cb69c7f39ca1e62c24c0488d6bf01cd24673c74cd9596bf"}, {file = "orjson-3.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:dbee6b050062540ae404530cacec1bf25e56e8d87d8d9b610b935afeb6725cae"}, {file = "orjson-3.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:f55e557d4248322d87c4673e085c7634039ff04b47bfc823b87149ae12bef60d"}, {file = "orjson-3.11.1-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53cfefe4af059e65aabe9683f76b9c88bf34b4341a77d329227c2424e0e59b0e"}, {file = "orjson-3.11.1-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:93d5abed5a6f9e1b6f9b5bf6ed4423c11932b5447c2f7281d3b64e0f26c6d064"}, {file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbf06642f3db2966df504944cdd0eb68ca2717f0353bb20b20acd78109374a6"}, {file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dddf4e78747fa7f2188273f84562017a3c4f0824485b78372513c1681ea7a894"}, {file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa3fe8653c9f57f0e16f008e43626485b6723b84b2f741f54d1258095b655912"}, {file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6334d2382aff975a61f6f4d1c3daf39368b887c7de08f7c16c58f485dcf7adb2"}, {file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3d0855b643f259ee0cb76fe3df4c04483354409a520a902b067c674842eb6b8"}, {file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0eacdfeefd0a79987926476eb16e0245546bedeb8febbbbcf4b653e79257a8e4"}, {file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0ed07faf9e4873518c60480325dcbc16d17c59a165532cccfb409b4cdbaeff24"}, {file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:d6d308dd578ae3658f62bb9eba54801533225823cd3248c902be1ebc79b5e014"}, {file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c4aa13ca959ba6b15c0a98d3d204b850f9dc36c08c9ce422ffb024eb30d6e058"}, {file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:be3d0653322abc9b68e5bcdaee6cfd58fcbe9973740ab222b87f4d687232ab1f"}, {file = "orjson-3.11.1-cp313-cp313-win32.whl", hash = "sha256:4dd34e7e2518de8d7834268846f8cab7204364f427c56fb2251e098da86f5092"}, {file = "orjson-3.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:d6895d32032b6362540e6d0694b19130bb4f2ad04694002dce7d8af588ca5f77"}, {file = "orjson-3.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:bb7c36d5d3570fcbb01d24fa447a21a7fe5a41141fd88e78f7994053cc4e28f4"}, {file = "orjson-3.11.1-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7b71ef394327b3d0b39f6ea7ade2ecda2731a56c6a7cbf0d6a7301203b92a89b"}, {file = "orjson-3.11.1-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:77c0fe28ed659b62273995244ae2aa430e432c71f86e4573ab16caa2f2e3ca5e"}, {file = "orjson-3.11.1-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:1495692f1f1ba2467df429343388a0ed259382835922e124c0cfdd56b3d1f727"}, {file = "orjson-3.11.1-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:08c6a762fca63ca4dc04f66c48ea5d2428db55839fec996890e1bfaf057b658c"}, {file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9e26794fe3976810b2c01fda29bd9ac7c91a3c1284b29cc9a383989f7b614037"}, {file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4b4b4f8f0b1d3ef8dc73e55363a0ffe012a42f4e2f1a140bf559698dca39b3fa"}, {file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:848be553ea35aa89bfefbed2e27c8a41244c862956ab8ba00dc0b27e84fd58de"}, {file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c964c29711a4b1df52f8d9966f015402a6cf87753a406c1c4405c407dd66fd45"}, {file = "orjson-3.11.1-cp314-cp314-win32.whl", hash = "sha256:33aada2e6b6bc9c540d396528b91e666cedb383740fee6e6a917f561b390ecb1"}, {file = "orjson-3.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:68e10fd804e44e36188b9952543e3fa22f5aa8394da1b5283ca2b423735c06e8"}, {file = "orjson-3.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:f3cf6c07f8b32127d836be8e1c55d4f34843f7df346536da768e9f73f22078a1"}, {file = "orjson-3.11.1-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3d593a9e0bccf2c7401ae53625b519a7ad7aa555b1c82c0042b322762dc8af4e"}, {file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baad413c498fc1eef568504f11ea46bc71f94b845c075e437da1e2b85b4fb86"}, {file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:22cf17ae1dae3f9b5f37bfcdba002ed22c98bbdb70306e42dc18d8cc9b50399a"}, {file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e855c1e97208133ce88b3ef6663c9a82ddf1d09390cd0856a1638deee0390c3c"}, {file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5861c5f7acff10599132854c70ab10abf72aebf7c627ae13575e5f20b1ab8fe"}, {file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1e6415c5b5ff3a616a6dafad7b6ec303a9fc625e9313c8e1268fb1370a63dcb"}, {file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:912579642f5d7a4a84d93c5eed8daf0aa34e1f2d3f4dc6571a8e418703f5701e"}, {file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2092e1d3b33f64e129ff8271642afddc43763c81f2c30823b4a4a4a5f2ea5b55"}, {file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:b8ac64caba1add2c04e9cd4782d4d0c4d6c554b7a3369bdec1eed7854c98db7b"}, {file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:23196b826ebc85c43f8e27bee0ab33c5fb13a29ea47fb4fcd6ebb1e660eb0252"}, {file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f2d3364cfad43003f1e3d564a069c8866237cca30f9c914b26ed2740b596ed00"}, {file = "orjson-3.11.1-cp39-cp39-win32.whl", hash = "sha256:20b0dca94ea4ebe4628330de50975b35817a3f52954c1efb6d5d0498a3bbe581"}, {file = "orjson-3.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:200c3ad7ed8b5d31d49143265dfebd33420c4b61934ead16833b5cd2c3d241be"}, {file = "orjson-3.11.1.tar.gz", hash = "sha256:48d82770a5fd88778063604c566f9c7c71820270c9cc9338d25147cbf34afd96"}, ] [[package]] name = "packaging" version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["dev", "docs"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] name = "propcache" version = "0.3.1" description = "Accelerated property cache" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, ] [[package]] name = "pygments" version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" groups = ["dev", "docs"] files = [ {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata ; python_version < \"3.8\""] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" version = "2.10.1" description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, ] [package.extras] crypto = ["cryptography (>=3.4.0)"] dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pytest" version = "8.4.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7"}, {file = "pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c"}, ] [package.dependencies] colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} iniconfig = ">=1" packaging = ">=20" pluggy = ">=1.5,<2" pygments = ">=2.7.2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" version = "1.1.0" description = "Pytest support for asyncio" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf"}, {file = "pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea"}, ] [package.dependencies] backports-asyncio-runner = {version = ">=1.1,<2", markers = "python_version < \"3.11\""} pytest = ">=8.2,<9" [package.extras] docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] [[package]] name = "pytest-cov" version = "6.2.1" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5"}, {file = "pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2"}, ] [package.dependencies] coverage = {version = ">=7.5", extras = ["toml"]} pluggy = ">=1.2" pytest = ">=6.2.5" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-timeout" version = "2.4.0" description = "pytest plugin to abort hanging tests" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ {file = "pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2"}, {file = "pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a"}, ] [package.dependencies] pytest = ">=7.0.0" [[package]] name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" groups = ["docs"] files = [ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] name = "requests" version = "2.32.4" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, ] [package.dependencies] certifi = ">=2017.4.17" charset_normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." optional = false python-versions = "*" groups = ["docs"] files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] [[package]] name = "sphinx" version = "8.1.3" description = "Python documentation generator" optional = false python-versions = ">=3.10" groups = ["docs"] files = [ {file = "sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"}, {file = "sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927"}, ] [package.dependencies] alabaster = ">=0.7.14" babel = ">=2.13" colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} docutils = ">=0.20,<0.22" imagesize = ">=1.3" Jinja2 = ">=3.1" packaging = ">=23.0" Pygments = ">=2.17" requests = ">=2.30.0" snowballstemmer = ">=2.2" sphinxcontrib-applehelp = ">=1.0.7" sphinxcontrib-devhelp = ">=1.0.6" sphinxcontrib-htmlhelp = ">=2.0.6" sphinxcontrib-jsmath = ">=1.0.1" sphinxcontrib-qthelp = ">=1.0.6" sphinxcontrib-serializinghtml = ">=1.1.9" tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=6.0)", "mypy (==1.11.1)", "pyright (==1.1.384)", "pytest (>=6.0)", "ruff (==0.6.9)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-Pillow (==10.2.0.20240822)", "types-Pygments (==2.18.0.20240506)", "types-colorama (==0.4.15.20240311)", "types-defusedxml (==0.7.0.20240218)", "types-docutils (==0.21.0.20241005)", "types-requests (==2.32.0.20240914)", "types-urllib3 (==1.26.25.14)"] test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] [[package]] name = "sphinx-autodoc-typehints" version = "3.0.1" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false python-versions = ">=3.10" groups = ["docs"] files = [ {file = "sphinx_autodoc_typehints-3.0.1-py3-none-any.whl", hash = "sha256:4b64b676a14b5b79cefb6628a6dc8070e320d4963e8ff640a2f3e9390ae9045a"}, {file = "sphinx_autodoc_typehints-3.0.1.tar.gz", hash = "sha256:b9b40dd15dee54f6f810c924f863f9cf1c54f9f3265c495140ea01be7f44fa55"}, ] [package.dependencies] sphinx = ">=8.1.3" [package.extras] docs = ["furo (>=2024.8.6)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "defusedxml (>=0.7.1)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "sphobjinv (>=2.3.1.2)", "typing-extensions (>=4.12.2)"] [[package]] name = "sphinx-rtd-theme" version = "3.0.2" description = "Read the Docs theme for Sphinx" optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", hash = "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13"}, {file = "sphinx_rtd_theme-3.0.2.tar.gz", hash = "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85"}, ] [package.dependencies] docutils = ">0.18,<0.22" sphinx = ">=6,<9" sphinxcontrib-jquery = ">=4,<5" [package.extras] dev = ["bump2version", "transifex-client", "twine", "wheel"] [[package]] name = "sphinxcontrib-applehelp" version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" version = "1.0.6" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, ] [package.extras] lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] [[package]] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" optional = false python-versions = ">=2.7" groups = ["docs"] files = [ {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, ] [package.dependencies] Sphinx = ">=1.8" [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = false python-versions = ">=3.5" groups = ["docs"] files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, ] [package.extras] test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" version = "1.0.7" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" version = "1.1.10" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "syrupy" version = "4.9.1" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.8.1" groups = ["dev"] files = [ {file = "syrupy-4.9.1-py3-none-any.whl", hash = "sha256:b94cc12ed0e5e75b448255430af642516842a2374a46936dd2650cfb6dd20eda"}, {file = "syrupy-4.9.1.tar.gz", hash = "sha256:b7d0fcadad80a7d2f6c4c71917918e8ebe2483e8c703dfc8d49cdbb01081f9a4"}, ] [package.dependencies] pytest = ">=7.0.0,<9.0.0" [[package]] name = "tenacity" version = "9.1.2" description = "Retry code until it succeeds" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, ] [package.extras] doc = ["reno", "sphinx"] test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.7" groups = ["dev", "docs"] files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] markers = {dev = "python_full_version <= \"3.11.0a6\"", docs = "python_version < \"3.11\""} [[package]] name = "types-orjson" version = "3.6.2" description = "Typing stubs for orjson" optional = false python-versions = "*" groups = ["dev"] files = [ {file = "types-orjson-3.6.2.tar.gz", hash = "sha256:cf9afcc79a86325c7aff251790338109ed6f6b1bab09d2d4262dd18c85a3c638"}, {file = "types_orjson-3.6.2-py3-none-any.whl", hash = "sha256:22ee9a79236b6b0bfb35a0684eded62ad930a88a56797fa3c449b026cf7dbfe4"}, ] [[package]] name = "typing-extensions" version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main", "dev"] markers = "python_version < \"3.13\"" files = [ {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] name = "urllib3" version = "2.5.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, ] [package.extras] brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "yarl" version = "1.20.0" description = "Yet another URL library" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22"}, {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62"}, {file = "yarl-1.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569"}, {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe"}, {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195"}, {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10"}, {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634"}, {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2"}, {file = "yarl-1.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a"}, {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867"}, {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995"}, {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487"}, {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2"}, {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61"}, {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19"}, {file = "yarl-1.20.0-cp310-cp310-win32.whl", hash = "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d"}, {file = "yarl-1.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076"}, {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3"}, {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a"}, {file = "yarl-1.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2"}, {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e"}, {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9"}, {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a"}, {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2"}, {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2"}, {file = "yarl-1.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8"}, {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902"}, {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791"}, {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f"}, {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da"}, {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4"}, {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5"}, {file = "yarl-1.20.0-cp311-cp311-win32.whl", hash = "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6"}, {file = "yarl-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb"}, {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f"}, {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e"}, {file = "yarl-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e"}, {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33"}, {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58"}, {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f"}, {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae"}, {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018"}, {file = "yarl-1.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672"}, {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8"}, {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7"}, {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594"}, {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6"}, {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1"}, {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b"}, {file = "yarl-1.20.0-cp312-cp312-win32.whl", hash = "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64"}, {file = "yarl-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c"}, {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f"}, {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3"}, {file = "yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d"}, {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0"}, {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501"}, {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc"}, {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d"}, {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0"}, {file = "yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a"}, {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2"}, {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9"}, {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5"}, {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877"}, {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e"}, {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384"}, {file = "yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62"}, {file = "yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c"}, {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051"}, {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d"}, {file = "yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229"}, {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1"}, {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb"}, {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00"}, {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de"}, {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5"}, {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a"}, {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9"}, {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145"}, {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda"}, {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f"}, {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd"}, {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f"}, {file = "yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac"}, {file = "yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe"}, {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914"}, {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc"}, {file = "yarl-1.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26"}, {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94"}, {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d"}, {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c"}, {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c"}, {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a"}, {file = "yarl-1.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656"}, {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c"}, {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64"}, {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20"}, {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa"}, {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5"}, {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0"}, {file = "yarl-1.20.0-cp39-cp39-win32.whl", hash = "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8"}, {file = "yarl-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7"}, {file = "yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124"}, {file = "yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" propcache = ">=0.2.1" [[package]] name = "zeroconf" version = "0.143.0" description = "A pure python implementation of multicast DNS service discovery" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] files = [ {file = "zeroconf-0.143.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3686974f2eaa4b4714bd7988e67dd5ab5f992ece4f297eb1be0ffbafe2dda880"}, {file = "zeroconf-0.143.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df859808309706a8bd89d854ed3d053f137a1df2d66621621c174e0c26d4ffea"}, {file = "zeroconf-0.143.0-cp310-cp310-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:e20f0bc0eb014aa94fa128875f75e870fab0b73b348faebc7abb049ed8c6be16"}, {file = "zeroconf-0.143.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:495e568ddcd0abdca9ebf086a622e16e4f626e8d6272d746de6e76e9dd8a90aa"}, {file = "zeroconf-0.143.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a1378eca4d9037e39c85ac78d0ff62830ef065bc018fd9eaf626081d45767990"}, {file = "zeroconf-0.143.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f45e2348692b8ee0ff62f2493c369201f492c5640fba1a47e1fcac472c85b66e"}, {file = "zeroconf-0.143.0-cp310-cp310-win32.whl", hash = "sha256:dca85bcb5b644e43e79dc7d7c2ef3d7c134103c1fce66f45bc43fdc3757e69c2"}, {file = "zeroconf-0.143.0-cp310-cp310-win_amd64.whl", hash = "sha256:74c809ec13ebf342687587a020741683b9778d0056089c033b6798cb987cee90"}, {file = "zeroconf-0.143.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:956aa37270770b473099d0a53824208daa272dfb76177676dc97b4f9237ff32e"}, {file = "zeroconf-0.143.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2ee0c45263290057aa9020d18bcb658bd1ac63aff4b35041d8485e4a274c96"}, {file = "zeroconf-0.143.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efef4537b80bf756920574a5d0a58855e86476d2a29ccef170bb66f6e5f44821"}, {file = "zeroconf-0.143.0-cp311-cp311-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:6860be131f0a519270821393f4643a7b9dd07bba6c8db3c248058eaa0ad11ccc"}, {file = "zeroconf-0.143.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61f462a2cf1a4fa1f14444863cc74378970f0620ee93e32ace3bbadf758e9c2c"}, {file = "zeroconf-0.143.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d0cfcdfa0e66a001a35c5f51ddc20495a77a640c9d40d66782a7078a6417a42c"}, {file = "zeroconf-0.143.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77439050ad191a2abee47877aebe696841eb9247e75a904961236a7effd7daa9"}, {file = "zeroconf-0.143.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:53fc5c133bae32e3da9b3a1065de17c7a303d7a9f2b9fdd02f707ecae9a49d67"}, {file = "zeroconf-0.143.0-cp311-cp311-win32.whl", hash = "sha256:9acae076a6142365d338d1e0a21834b40cddd62bdcea12974fb435bd33c147fd"}, {file = "zeroconf-0.143.0-cp311-cp311-win_amd64.whl", hash = "sha256:4b7410b6430bbe416cf363a6d6ab8faa1d161b341160626ddfb85bfdeec4c861"}, {file = "zeroconf-0.143.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd60ffffcc2db552fcee8700763b3be8bbe48315f233bb9514058f7354b99b04"}, {file = "zeroconf-0.143.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2297aab94ede5364c6b4e935400939a725372591f44a279b0c26b8cb59060842"}, {file = "zeroconf-0.143.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed6077c48bce99a6fc580579f8b5bc6e5ad5bc7618345a33de7a83423a75fd67"}, {file = "zeroconf-0.143.0-cp312-cp312-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:a55ff575a801005732933fc4b1114a663eddcc95022c8b1d550b8cb8daee5ce0"}, {file = "zeroconf-0.143.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:445fa7fb96df3b84ad8c793f0e08033fad83243ce69faec1d7ae36bfb905ae72"}, {file = "zeroconf-0.143.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e63168eb961983e21b30cf96917b635565d930bc84899a8eef90618b393bea3"}, {file = "zeroconf-0.143.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3d82088ed1e45f8b96a15a4bf9231ed71975ebdadb6e984a486d9fcfb7f9795f"}, {file = "zeroconf-0.143.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb4e83351565da6d62d53f888fee9487f32b03f177f81e6990d134af119ddf63"}, {file = "zeroconf-0.143.0-cp312-cp312-win32.whl", hash = "sha256:7ee8f919177b84f2fbbaec7156f128539eb9516999ce53d865dbf7bd4cb0f419"}, {file = "zeroconf-0.143.0-cp312-cp312-win_amd64.whl", hash = "sha256:82c6cbcb2574bc28b7bb9873b7827e77f778a51319b563b6337c4658f511527a"}, {file = "zeroconf-0.143.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae4a0c27f8b3bdb1915f16fc4f38fa895dec83db074468b0d3369378ae981a7e"}, {file = "zeroconf-0.143.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ac1eaf3b2ddfc307789bbcf3fe7374d6bf7ad305804804e96c4cdd765713ff95"}, {file = "zeroconf-0.143.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f95ef9e815ca0a9f61e5b6e6bbc39a4b0644bd2d057f21ddc1f9b7c580dd47e"}, {file = "zeroconf-0.143.0-cp313-cp313-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:a3ce0e9ca5dc7f30ecac26af89d1fc7be85dd91c5acd77de9472438ae1644729"}, {file = "zeroconf-0.143.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ddf622bd61e07fa375f7036b2e586089628791d1be5be4c3f064374e3394804"}, {file = "zeroconf-0.143.0-cp313-cp313-manylinux_2_36_x86_64.whl", hash = "sha256:c8eb493110ea026527379607eade000c48b43f00393f0b39b3a9a327d920079a"}, {file = "zeroconf-0.143.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:08dc6c9e83692243ea85ccc4f0561351b78f3cacd05ac4e772dab66af621ad90"}, {file = "zeroconf-0.143.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c2ae05bcc6d847625f343ec17614617c9a20adf158c091fb9d61b1a54d8b68a5"}, {file = "zeroconf-0.143.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:999f7c4a03a8858251a6c197ef633d32a1f6b4f9ac5cba0d68bdede24e8e49c4"}, {file = "zeroconf-0.143.0-cp313-cp313-win32.whl", hash = "sha256:225b9c763c2dfaf6d25426144c91da2464381b9b139e081bc735842236d1474c"}, {file = "zeroconf-0.143.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5ad3158f89394b26056fe09a526f31f76a0269f927868893d2f3e6c1819030f"}, {file = "zeroconf-0.143.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668f69f907a0c5721886594124af8e6841c13514ae76fe0151d1ce50b38d3b39"}, {file = "zeroconf-0.143.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3babde041aae4058a1a700636376183c7b148673655ac944ac5dafc736f383b6"}, {file = "zeroconf-0.143.0-cp39-cp39-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:031c92f0e769aa3f0a32ad9e7154663d97a9006fafdf00bc7cb444e26e1ebfff"}, {file = "zeroconf-0.143.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0deaf47efbc32a219d44182e36dc7f8c775bb18d81c7bd52515778fcebce81d"}, {file = "zeroconf-0.143.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2b1ac1ffd983b2527cd83fc197e7df0d1de303bc35a7df00cdee4fa5ce25d4d3"}, {file = "zeroconf-0.143.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6a06fcde2b151e84e8178770087cd74cff45333fa0e13f578ea6dde3c4e96741"}, {file = "zeroconf-0.143.0-cp39-cp39-win32.whl", hash = "sha256:56be12208dfb52f5f403f7015ed8591afc2b17ea067f81fbb841b9ad8e7cade1"}, {file = "zeroconf-0.143.0-cp39-cp39-win_amd64.whl", hash = "sha256:b02f4d98c6dab9515b248c1356e56c42a7f4ed03dea6bd4498d600e0f4f92241"}, {file = "zeroconf-0.143.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ce71a83059ecadf69a4be5c2f0d1fff08ac831712ecced3ae635f55d4d0a71d4"}, {file = "zeroconf-0.143.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:e8f58ba2f19bf862bbea16933c1ea36c207c627b9291161a4700e4d0d90b5cc2"}, {file = "zeroconf-0.143.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:85f0c4c017e35a482cc619423d5000a1caf5e1aa1e26462570ca4021d29b0051"}, {file = "zeroconf-0.143.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84d90d7f3611e4cb7affa5f2eedaff8583cf19a10e98e8e7fc6ade3a31ccd450"}, {file = "zeroconf-0.143.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c934e34263dafe48f69cf0509716191ada6cf51a94fa4d1079094ca15e1a86b8"}, {file = "zeroconf-0.143.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fccbc58d9d85bcded01be89dbacb6ed6d9d6481ed807bbc24768f3bd086b7ceb"}, {file = "zeroconf-0.143.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a1c5835fa3f6ea2fc5d5bb81f018de58b9e3b2dc507397c888e4dfd396ce3c2d"}, {file = "zeroconf-0.143.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:97b0d3c1cb725880e4f2150fca3c0d11c9c648451503d26bd16ea68867ca0827"}, {file = "zeroconf-0.143.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da0362d38e4a710ca776b0ba1ed0fe28da14259923e5cff3560867e42bf86df"}, {file = "zeroconf-0.143.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:73f71384d42b670ece298ad2a7cf09f8cccadd808afe59ee9736d18dd218140a"}, {file = "zeroconf-0.143.0.tar.gz", hash = "sha256:35f9390e4b862789f2d62da864bbf6ac26ad1d6dc8cf1e64a4d3554c85a05002"}, ] [package.dependencies] ifaddr = ">=0.1.7" [metadata] lock-version = "2.1" python-versions = "^3.10" content-hash = "1b7e148135ba6a378b193cea5e90908a1b72d4efc7d1b63dbbbbf1556d47f082" pyenphase-2.3.1/pyproject.toml000066400000000000000000000113251505013723300164260ustar00rootroot00000000000000[project] name = "pyenphase" version = "2.3.1" description = "Library to control enphase envoy" authors = [{ name = "pyenphase", email = "cgarwood@gmail.com" }] license = "MIT" readme = "README.md" requires-python = ">=3.10" dynamic = ["classifiers", "dependencies"] [tool.poetry] name = "pyenphase" version = "2.3.1" description = "Library to control enphase envoy" authors = ["pyenphase "] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", "Topic :: Software Development :: Libraries", ] packages = [ { include = "pyenphase", from = "src" }, ] [project.urls] "Documentation" = "https://pyenphase.readthedocs.io" "Repository" = "https://github.com/pyenphase/pyenphase" "Bug Tracker" = "https://github.com/pyenphase/pyenphase/issues" "Changelog" = "https://github.com/pyenphase/pyenphase/blob/main/CHANGELOG.md" [tool.poetry.dependencies] python = "^3.10" aiohttp = ">=3.12.8" lxml = ">=4.9.2" pyjwt = ">=2.7.0" awesomeversion = ">=22.9.0" tenacity = ">=8.2.2,<10.0.0" envoy-utils = ">=0.0.1" orjson = ">=3.10" [tool.poetry.group.dev.dependencies] pytest = ">=7,<9" pytest-cov = ">=5,<7" types-orjson = "^3.6.2" aioresponses = ">=0.7.6" pytest-asyncio = ">=0.21.1,<1.2.0" syrupy = "^4.5.0" pytest-timeout = "^2.4.0" [tool.poetry.group.docs] optional = true [tool.poetry.group.docs.dependencies] myst-parser = ">=0.16" sphinx = ">=4.0" sphinx-rtd-theme = ">=1.0" sphinx-autodoc-typehints = ">=1.25.2,<4.0.0" [tool.semantic_release] branch = "main" version_toml = ["pyproject.toml:project.version", "pyproject.toml:tool.poetry.version"] version_variables = ["src/pyenphase/__init__.py:__version__"] build_command = "pip install poetry && poetry build" [tool.semantic_release.changelog] mode = "init" [tool.pytest.ini_options] addopts = "-v -Wdefault --cov=pyenphase --cov-report=term-missing:skip-covered --timeout=5" pythonpath = ["src"] timeout = 5 timeout_method = "thread" [tool.coverage.run] branch = true [tool.coverage.report] exclude_lines = [ "pragma: no cover", "@overload", "if TYPE_CHECKING", "raise NotImplementedError", 'if __name__ == "__main__":', ] [tool.ruff] target-version = "py310" line-length = 88 [tool.ruff.lint] ignore = [ "S101", # use of assert "D203", # 1 blank line required before class docstring "D212", # Multi-line docstring summary should start at the first line "D100", # Missing docstring in public module "D101", # Missing docstring in public module "D102", # Missing docstring in public method "D103", # Missing docstring in public module "D104", # Missing docstring in public package "D105", # Missing docstring in magic method "D107", # Missing docstring in `__init__` "D400", # First line should end with a period "D401", # First line of docstring should be in imperative mood "D205", # 1 blank line required between summary line and description "D415", # First line should end with a period, question mark, or exclamation point "D417", # Missing argument descriptions in the docstring "E501", # Line too long "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar` "B008", # Do not perform function call "S110", # `try`-`except`-`pass` detected, consider logging the exception "D106", # Missing docstring in public nested class "UP007", # typer needs Optional syntax "UP038", # Use `X | Y` in `isinstance` is slower "S603", # check for execution of untrusted input "S105", # possible hard coded creds ] select = [ "B", # flake8-bugbear "D", # flake8-docstrings "C4", # flake8-comprehensions "S", # flake8-bandit "F", # pyflake "E", # pycodestyle "W", # pycodestyle "UP", # pyupgrade "I", # isort "RUF", # ruff specific "SIM", # flake8-simplify "PERF", # perflint "FURB", # refurb "RET", # flake8-return ] [tool.ruff.lint.per-file-ignores] "tests/**/*" = [ "D100", "D101", "D102", "D103", "D104", "S101", ] "setup.py" = ["D100"] "conftest.py" = ["D100"] "docs/conf.py" = ["D100"] [tool.ruff.lint.isort] known-first-party = ["pyenphase", "tests"] [tool.mypy] check_untyped_defs = true disallow_any_generics = true disallow_incomplete_defs = true disallow_untyped_defs = true mypy_path = "src/" no_implicit_optional = true show_error_codes = true warn_unreachable = true warn_unused_ignores = true exclude = [ 'docs/.*', 'setup.py', ] [[tool.mypy.overrides]] module = "tests.*" allow_untyped_defs = true [[tool.mypy.overrides]] module = "docs.*" ignore_errors = true [build-system] requires = ["poetry-core>=2.0.0"] build-backend = "poetry.core.masonry.api" pyenphase-2.3.1/renovate.json000066400000000000000000000001011505013723300162160ustar00rootroot00000000000000{ "extends": ["github>browniebroke/renovate-configs:python"] } pyenphase-2.3.1/script/000077500000000000000000000000001505013723300150145ustar00rootroot00000000000000pyenphase-2.3.1/script/setup000077500000000000000000000002011505013723300160730ustar00rootroot00000000000000#!/bin/sh set -e # Install all dependencies: pip3 install poetry poetry install # Install pre-commit hooks: pre-commit install pyenphase-2.3.1/setup.py000066400000000000000000000003571505013723300152270ustar00rootroot00000000000000#!/usr/bin/env python # This is a shim to allow GitHub to detect the package, build is done with poetry # Taken from https://github.com/Textualize/rich import setuptools if __name__ == "__main__": setuptools.setup(name="pyenphase") pyenphase-2.3.1/src/000077500000000000000000000000001505013723300142775ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/000077500000000000000000000000001505013723300162735ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/__init__.py000066400000000000000000000031271505013723300204070ustar00rootroot00000000000000"""Python wrapper for Enphase Envoy API.""" from .auth import EnvoyTokenAuth from .envoy import AUTH_TOKEN_MIN_VERSION, Envoy, register_updater from .exceptions import ( EnvoyAuthenticationError, EnvoyAuthenticationRequired, EnvoyCommunicationError, EnvoyError, EnvoyFirmwareCheckError, EnvoyFirmwareFatalCheckError, EnvoyProbeFailed, ) from .models.acb import EnvoyACBPower, EnvoyBatteryAggregate from .models.c6combiner import EnvoyC6CC from .models.collar import EnvoyCollar from .models.dry_contacts import EnvoyDryContactSettings, EnvoyDryContactStatus from .models.encharge import EnvoyEncharge, EnvoyEnchargeAggregate, EnvoyEnchargePower from .models.enpower import EnvoyEnpower from .models.envoy import EnvoyData from .models.inverter import EnvoyInverter from .models.system_consumption import EnvoySystemConsumption from .models.system_production import EnvoySystemProduction from .models.tariff import EnvoyTariff __all__ = ( AUTH_TOKEN_MIN_VERSION, "register_updater", "Envoy", "EnvoyData", "EnvoyTokenAuth", "EnvoyError", "EnvoyCommunicationError", "EnvoyFirmwareCheckError", "EnvoyFirmwareFatalCheckError", "EnvoyAuthenticationError", "EnvoyAuthenticationRequired", "EnvoyProbeFailed", "EnvoyInverter", "EnvoySystemConsumption", "EnvoySystemProduction", "EnvoyEncharge", "EnvoyEnchargeAggregate", "EnvoyEnchargePower", "EnvoyEnpower", "EnvoyACBPower", "EnvoyBatteryAggregate", "EnvoyDryContactSettings", "EnvoyDryContactStatus", "EnvoyCollar", "EnvoyC6CC", "EnvoyTariff", ) pyenphase-2.3.1/src/pyenphase/auth.py000066400000000000000000000365171505013723300176220ustar00rootroot00000000000000"""Envoy authentication methods.""" from abc import abstractmethod, abstractproperty from typing import Any, cast import aiohttp import jwt import orjson from tenacity import retry, retry_if_exception_type, wait_random_exponential from .const import LOCAL_TIMEOUT, URL_AUTH_CHECK_JWT from .exceptions import EnvoyAuthenticationError, EnvoyAuthenticationRequired from .ssl import SSL_CONTEXT class EnvoyAuth: """Base class for local Envoy authentication.""" def __init__(self, host: str) -> None: """ Base class for local Envoy authentication. :param host: local Envoy DNS name or IP Address """ @abstractmethod async def setup(self, client: aiohttp.ClientSession) -> None: """ Setup token based authentication with the local Envoy. Required for Envoy firmware >= 7.0 :param client: an aiohttp ClientSession to communicate with the local Envoy, """ @abstractproperty def cookies(self) -> dict[str, str]: """Return the Envoy cookie.""" @abstractproperty def auth(self) -> aiohttp.DigestAuthMiddleware | None: """ Setup Digest authentication for local Envoy. Required for Envoy firmware < 7.0 """ @abstractproperty def headers(self) -> dict[str, str]: """Return the auth headers for Envoy communication.""" @abstractmethod def get_endpoint_url(self, endpoint: str) -> str: """ Return the URL for the endpoint. :param endpoint: Envoy Endpoint to access, start with leading / :return: formatted full URL string """ class EnvoyTokenAuth(EnvoyAuth): """Class to authenticate with Envoy using Tokens.""" # autodoc docstring is supplied from __init__ JSON_LOGIN_URL = "https://enlighten.enphaseenergy.com/login/login.json?" TOKEN_URL = "https://entrez.enphaseenergy.com/tokens" # nosec def __init__( self, host: str, cloud_username: str | None = None, cloud_password: str | None = None, envoy_serial: str | None = None, token: str | None = None, ) -> None: """ Class to authenticate with Envoy using Tokens. Use with Envoy firmware 7.x and newer :param host: local Envoy DNS name or IP Address :param cloud_username: Enligthen Cloud username, required to obtain new token when token is not specified or expired, defaults to None :param cloud_password: Enligthen Cloud password, required to obtain new token when token is not specified or expired, defaults to None :param envoy_serial: Envoy serial number, required to obtain new token when token is not specified or expired, defaults to None :param token: Token to use with authentication, if not specified, one will be obtained from Enlighten cloud if username, password and serial are specified, defaults to None """ self.host = host self.cloud_username = cloud_username self.cloud_password = cloud_password self.envoy_serial = envoy_serial self._token = token self._is_consumer: bool = False self._manager_token: str = "" self._cookies: dict[str, str] = {} async def setup(self, client: aiohttp.ClientSession) -> None: """ Setup token based authentication with the local Envoy If no token is specified, a token is obtained from Enlighten Cloud using specified username, password and serialnumber. With the specified or obtained token, validates the token with the local Envoy. New or updated token can be accessed using the token property. Token is not stored persistent, caller should store and specify token over restarts. :param client: an aiohttp ClientSession to communicate with the local Envoy, :raises EnvoyAuthenticationError: Authentication failed with the local Envoy or no token could be obtained from Enlighten cloud due to error or missing parameters, """ if not self._token: self._token = await self._obtain_token() # Verify we have adequate credentials if not self._token: raise EnvoyAuthenticationError( "Unable to obtain token for Envoy authentication." ) await self._check_jwt(client) @retry( retry=retry_if_exception_type(aiohttp.ClientError), wait=wait_random_exponential(multiplier=2, max=3), ) async def _check_jwt(self, client: aiohttp.ClientSession) -> None: """Check the JWT token for Envoy authentication.""" async with client.get( f"https://{self.host}{URL_AUTH_CHECK_JWT}", headers={"Authorization": f"Bearer {self.token}"}, timeout=LOCAL_TIMEOUT, ) as resp: if resp.status == 200: self._cookies = {k: v.value for k, v in resp.cookies.items()} return raise EnvoyAuthenticationError( "Unable to verify token for Envoy authentication." ) async def _obtain_token(self) -> str: """Obtain the token for Envoy authentication.""" # Raise if we don't have cloud credentials if not self.cloud_username or not self.cloud_password: raise EnvoyAuthenticationError( "Your firmware requires token authentication, " " but no cloud credentials were provided to obtain the token." ) # Raise if we are missing the envoy serial number if not self.envoy_serial: raise EnvoyAuthenticationError( "Your firmware requires token authentication, " "but no envoy serial number was provided to obtain the token." ) # We require a new client that checks SSL certs timeout = aiohttp.ClientTimeout(total=10) async with aiohttp.ClientSession( connector=aiohttp.TCPConnector(ssl=SSL_CONTEXT), timeout=timeout ) as cloud_client: # Login to Enlighten to obtain a session ID response = await self._post_json_with_cloud_client( cloud_client, self.JSON_LOGIN_URL, data={ "user[email]": self.cloud_username, "user[password]": self.cloud_password, }, ) if response.status != 200: text = await response.text() raise EnvoyAuthenticationError( "Unable to login to Enlighten to obtain session ID from " f"{self.JSON_LOGIN_URL}: " f"{response.status}: {text}" ) try: response_json = orjson.loads(await response.text()) except orjson.JSONDecodeError as err: text = await response.text() raise EnvoyAuthenticationError( "Unable to decode response from Enlighten: " f"{response.status}: {text}" ) from err self._is_consumer = response_json["is_consumer"] self._manager_token = response_json["manager_token"] # Obtain the token response = await self._post_json_with_cloud_client( cloud_client, self.TOKEN_URL, json={ "session_id": response_json["session_id"], "serial_num": self.envoy_serial, "username": self.cloud_username, }, ) if response.status != 200: text = await response.text() raise EnvoyAuthenticationError( "Unable to obtain token for Envoy authentication from " f"{self.TOKEN_URL}: " f"{response.status}: {text}" ) return await response.text() async def refresh(self) -> None: """ Refresh the token for Envoy authentication. Retrieves a new token from the Enlighten cloud using specified username, password and Envoy serial number of the class object. Updated token can be accessed using the token property. Token is not stored persistent, caller should store it after refresh and specify token over restarts. """ self._token = await self._obtain_token() @property def expire_timestamp(self) -> int: """ Return the expiration time for the token. Owner useraccount type tokens are valid for a year while installer tokens are only valid for 12 hours. :return: epoch expiration time """ jwt_payload = jwt.decode(self.token, options={"verify_signature": False}) return cast(int, jwt_payload["exp"]) @property def token_type(self) -> str: """ Return the enphase user type for the token. Enlighten user accounts can be type 'owner' or 'installer'. Both have access to the envoy base data. Installer has access to more data and configuration setup. :raises: EnvoyAuthenticationRequired if no prior authentication was done :return: 'owner' or 'installer' """ if not self._token: raise EnvoyAuthenticationRequired( "You must authenticate to the Envoy before inspecting token." ) jwt_payload = jwt.decode(self.token, options={"verify_signature": False}) return jwt_payload["enphaseUser"] @retry( retry=retry_if_exception_type(aiohttp.ClientError), wait=wait_random_exponential(multiplier=2, max=3), ) async def _post_json_with_cloud_client( self, cloud_client: aiohttp.ClientSession, url: str, data: dict[str, Any] | None = None, json: dict[str, Any] | None = None, ) -> aiohttp.ClientResponse: """Post to the Envoy API with the cloud client.""" return await cloud_client.post(url, json=json, data=data) @property def token(self) -> str: """ Return token used with the Envoy. Returns the current token, either the original specified token, or the token obtained from the Enlighten cloud if not specified or the refreshed token at expiration. Will assert if no token was ever specified or obtained. :return: jwt token string """ assert self._token is not None # nosec return self._token @property def manager_token(self) -> str: """ Return manager token returned in enligthen login json. This property is only available if a token has been requested from the Enlighten cloud. This is only the case if no token was specified, or a token refresh was requested. If a valid token with a future expiration time was specified this method will assert. :return: token string """ assert self._manager_token is not None # nosec return self._manager_token @property def cookies(self) -> dict[str, str]: """ Return cookies returned during setup of the envoy. Cookies received from the local Envoy during setup and local jwt check are stored in the class, this method returns these. :return: cookies dict """ return self._cookies @property def is_consumer(self) -> bool: """ Return is_consumer state returned in enligthen login json This property is only available if a token has been requested from the Enlighten cloud. This is only the case if no token was specified, or a token refresh was requested. If a valid token with a future expiration time was specified no login was attempted and this method will return the default false. If an installer account was used it will return false as well. :return: true if enlighten login was performed and used credentials are for consumer account, otherwise false """ return self._is_consumer @property def auth(self) -> None: """ Digest authentication for local Envoy. Not used with token authentication. Placeholder for EnvoyAuth abstractproperty :return: None """ return None @property def headers(self) -> dict[str, str]: """ Return the authentication headers for Envoy communication. Token authorization with Envoy requires an Authorization header in Bearer format with token. :return: token authorization header """ return {"Authorization": f"Bearer {self.token}"} def get_endpoint_url(self, endpoint: str) -> str: """ Return the URL for the endpoint. :param endpoint: Envoy Endpoint to access, start with leading / :return: formatted https URL string """ return f"https://{self.host}{endpoint}" class EnvoyLegacyAuth(EnvoyAuth): """Class to authenticate with legacy Envoy using digest.""" def __init__(self, host: str, username: str, password: str) -> None: """ Class to authenticate with legacy Envoy using digest. Use with Envoy firmware before 7.0 :param host: local Envoy DNS name or IP Address :param local_username: Username to access Envoy :param local_password: Password to access Envoy """ self.host = host self.local_username = username self.local_password = password self._auth_middleware: aiohttp.DigestAuthMiddleware | None = None @property def auth(self) -> aiohttp.DigestAuthMiddleware | None: """ Digest authentication for local Envoy. Creates DigestAuthMiddleware based on username and password. :return: DigestAuthMiddleware for local Envoy or None if username and/or password are not specified """ if not self.local_username or not self.local_password: return None if self._auth_middleware is None: self._auth_middleware = aiohttp.DigestAuthMiddleware( self.local_username, self.local_password ) return self._auth_middleware async def setup(self, client: aiohttp.ClientSession) -> None: """ Setup authentication with the local Envoy DigestAuth does not use additional setup, placeholder for EnvoyAuth abstractpropery. :param client: ClientSession to communicate with local Envoy """ # No setup required for legacy authentication @property def headers(self) -> dict[str, str]: """ Return the headers needed for Envoy authentication. DigestAuth does not use authorization header. Placeholder for EnvoyAuth abstractproperty. :return: empty dict """ return {} def get_endpoint_url(self, endpoint: str) -> str: """ Return the URL for the endpoint. :param endpoint: Envoy Endpoint to access, start with leading / :return: formatted http URL string """ return f"http://{self.host}{endpoint}" @property def cookies(self) -> dict[str, str]: """ Return cookies returned during setup of the envoy. DigestAuth does not use cookies. Placeholder for EnvoyAuth abstractproperty. :return: empty dict """ return {} pyenphase-2.3.1/src/pyenphase/const.py000066400000000000000000000077651505013723300200120ustar00rootroot00000000000000"""pyenphase constant definitions""" import enum import aiohttp from awesomeversion import AwesomeVersion # Versions LEGACY_ENVOY_VERSION = AwesomeVersion("3.9.0") ENSEMBLE_MIN_VERSION = AwesomeVersion("5.0.0") AUTH_TOKEN_MIN_VERSION = AwesomeVersion("7.0.0") METERED_NOCT_FALLBACK_TO_INVERTERS = AwesomeVersion("8.2.4264") # System Production URL_PRODUCTION_INVERTERS = "/api/v1/production/inverters" URL_DEVICE_DATA = "/ivp/pdm/device_data" URL_PRODUCTION_V1 = "/api/v1/production" URL_PRODUCTION_JSON = "/production.json?details=1" URL_PRODUCTION = "/production" # Authentication URL_AUTH_CHECK_JWT = "/auth/check_jwt" # Battery and Enpower Status URL_DRY_CONTACT_STATUS = "/ivp/ensemble/dry_contacts" URL_DRY_CONTACT_SETTINGS = "/ivp/ss/dry_contact_settings" URL_ENSEMBLE_INVENTORY = "/ivp/ensemble/inventory" URL_ENSEMBLE_STATUS = "/ivp/ensemble/status" URL_ENSEMBLE_SECCTRL = "/ivp/ensemble/secctrl" URL_ENCHARGE_BATTERY = "/ivp/ensemble/power" URL_GRID_RELAY = "/ivp/ensemble/relay" URL_POWER_EXPORT = "/uvp/ss/pel_settings" URL_TARIFF = "/admin/lib/tariff" # Generator Configuration URL_GEN_CONFIG = "/ivp/ss/gen_config" URL_GEN_MODE = "/ivp/ss/gen_mode" URL_GEN_SCHEDULE = "/ivp/ss/gen_schedule" # Meters data ENDPOINT_URL_METERS = "/ivp/meters" ENDPOINT_URL_METERS_READINGS = "/ivp/meters/readings" # Interface configuration ENDPOINT_URL_HOME = "/home" LOCAL_TIMEOUT = aiohttp.ClientTimeout( # The envoy can be slow to respond but fast to connect to we # need to set a long timeout for the read and a short timeout # for the connect total=45.0, connect=10.0, sock_read=45.0, ) # Requests should no longer retry after max delay (sec) or times since first try MAX_REQUEST_DELAY = 50 MAX_REQUEST_ATTEMPTS = 4 class SupportedFeatures(enum.IntFlag): """ Features available from Envoy Each supported feature maps to a specific data set or information that can be provided by an Envoy. Depending on actual make, firmware and installed components an Envoy may provide 1 or more features. All Envoy should at least report solar production, marked as PRODUCTION. Class :any:`EnvoyUpdater` updaters will set these features flags during the :any:`Envoy.probe` phase. During data collection by :any:`Envoy.update` each updater with set features will be used to collect the specific data. .. code-block:: python from pyenphase.const import SupportedFeatures # set METERING flag features |= SupportedFeatures.METERING # test features if features.PRODUCTION in supported_features: pass if features & SupportedFeatures.DUALPHASE: pass """ INVERTERS = 1 #: Envoy reports solar panel inverters METERING = 2 #: Envoy reports active production meter TOTAL_CONSUMPTION = 4 #: Envoy reports total consumption NET_CONSUMPTION = 8 #: Envoy reports net consumption ENCHARGE = 16 #: Envoy reports encharge data ENPOWER = 32 #: Envoy reports Enpower data PRODUCTION = 64 #: Envoy reports solar production data TARIFF = 128 #: Envoy reports tariff information DUALPHASE = 256 #: Envoy metered is configured in split phase mode THREEPHASE = 512 #: Envoy metered is configured in three phase mode CTMETERS = 1024 #: Envoy has enabled CT meter(s) GENERATOR = 2048 #: Envoy reports generator data ACB = 4096 #: Envoy reports ACB Battery data DETAILED_INVERTERS = 8192 #: Detailed inverter data is reported COLLAR = 0x4000 #: Envoy reports a Collar C6CC = 0x8000 #: Envoy reports a C6 Combiner controller class PhaseNames(enum.StrEnum): """Electricity grid phase names.""" PHASE_1 = "L1" #: first phase (1, A, ..) PHASE_2 = "L2" #: second phase (2, B, ..) PHASE_3 = "L3" #: third phase (3, C, ..) #: list to access :any:`PhaseNames` by numerical index. #: #: .. code-block:: python #: #: phase_count = 2 #: for phase in range(phase_count): #: print(production[PHASENAMES[phase]]) #: PHASENAMES: list[str] = list(PhaseNames) pyenphase-2.3.1/src/pyenphase/envoy.py000066400000000000000000001247401505013723300200150ustar00rootroot00000000000000"""Enphase Envoy class""" import asyncio import logging import time from collections.abc import Awaitable, Callable from dataclasses import replace from functools import cached_property, partial from http import HTTPStatus from typing import TYPE_CHECKING, Any import aiohttp import orjson from awesomeversion import AwesomeVersion from envoy_utils.envoy_utils import EnvoyUtils from tenacity import ( retry, retry_if_exception_type, stop_after_attempt, stop_after_delay, wait_random_exponential, ) from pyenphase.models.dry_contacts import DryContactStatus from pyenphase.models.home import EnvoyInterfaceInformation from .auth import ( EnvoyAuth, EnvoyLegacyAuth, EnvoyTokenAuth, ) from .const import ( AUTH_TOKEN_MIN_VERSION, ENDPOINT_URL_HOME, LOCAL_TIMEOUT, MAX_REQUEST_ATTEMPTS, MAX_REQUEST_DELAY, URL_DRY_CONTACT_SETTINGS, URL_DRY_CONTACT_STATUS, URL_GRID_RELAY, URL_TARIFF, SupportedFeatures, ) from .exceptions import ( EnvoyAuthenticationRequired, EnvoyCommunicationError, EnvoyError, EnvoyFeatureNotAvailable, EnvoyHTTPStatusError, EnvoyPoorDataQuality, EnvoyProbeFailed, ) from .firmware import EnvoyFirmware from .json import json_loads from .models.common import CommonProperties from .models.envoy import EnvoyData from .models.meters import CtType, EnvoyPhaseMode from .models.tariff import EnvoyStorageMode from .ssl import NO_VERIFY_SSL_CONTEXT from .updaters.api_v1_production import EnvoyApiV1ProductionUpdater from .updaters.api_v1_production_inverters import EnvoyApiV1ProductionInvertersUpdater from .updaters.base import EnvoyUpdater from .updaters.device_data_inverters import EnvoyDeviceDataInvertersUpdater from .updaters.ensemble import EnvoyEnembleUpdater from .updaters.generator import EnvoyGeneratorUpdater from .updaters.meters import EnvoyMetersUpdater from .updaters.production import ( EnvoyProductionJsonFallbackUpdater, EnvoyProductionJsonUpdater, EnvoyProductionUpdater, ) from .updaters.tariff import EnvoyTariffUpdater _LOGGER = logging.getLogger(__name__) DEFAULT_HEADERS = { "Accept": "application/json", } UPDATERS: list[type["EnvoyUpdater"]] = [ EnvoyMetersUpdater, EnvoyProductionJsonUpdater, EnvoyProductionUpdater, EnvoyApiV1ProductionUpdater, EnvoyProductionJsonFallbackUpdater, EnvoyDeviceDataInvertersUpdater, EnvoyApiV1ProductionInvertersUpdater, EnvoyEnembleUpdater, EnvoyTariffUpdater, EnvoyGeneratorUpdater, ] #: Ordered list of standard updaters for Envoy data collection def register_updater(updater: type[EnvoyUpdater]) -> Callable[[], None]: """ Register an updater in the updaters list. Registers a callable updater at the end of the updaters list. Probe method of the registered updater will be called during Envoy.probe(). Use the returned callable to remove the registered updater again. After registering or removing an updater, use Envoy.probe() to make the change effective. :param updater: callable of (sub-) class EnvoyUpdater :return: callable to remove the updater from the registration list """ UPDATERS.append(updater) def _remove_updater() -> None: """Callable to remove a prior registered updater.""" UPDATERS.remove(updater) return _remove_updater def get_updaters() -> list[type[EnvoyUpdater]]: """ Return list of registered updaters. Returns current list of registered updaters. Changes to the list will not be in effect until Envoy.probe() is used. :return: list of callable updaters """ return UPDATERS class Envoy: """Class for communicating with an envoy.""" def __init__( self, host: str, client: aiohttp.ClientSession | None = None, timeout: float | aiohttp.ClientTimeout | None = None, ) -> None: """ Class for communicating with an envoy. Collects solar production data for all Envoy models as of firmware 3.9. Depending on model and installed components can collect power/energy consumption, battery charge, discharge and settings. Supports communication with both pre- and post V7 Envoy firmware. .. code-block:: python envoy = Envoy(host_ip_or_name) await envoy.setup() await envoy.authenticate( username=username, password=password, token=token ) await envoy.update() # ... await envoy.close() :param host: Envoy DNS name or IP address :param client: aiohttp ClientSession not verifying SSL certificates, if not specified one will be created. :param timeout: aiohttp ClientTimeout to use, if not specified 10 sec connection and 45 sec read timeouts will be used. """ # We use our own aiohttp client session so we can disable SSL verification (Envoys use self-signed SSL certs) self._timeout = timeout or LOCAL_TIMEOUT connector = aiohttp.TCPConnector(ssl=NO_VERIFY_SSL_CONTEXT) self._client = client or aiohttp.ClientSession(connector=connector) # nosec self._user_client = client is not None self.auth: EnvoyAuth | None = None self._host = host self._firmware = EnvoyFirmware(self._client, self._host) self._supported_features: SupportedFeatures | None = None self._updaters: list[EnvoyUpdater] = [] self._endpoint_cache: dict[str, aiohttp.ClientResponse] = {} self.data: EnvoyData | None = None self._common_properties: CommonProperties = CommonProperties() self._interface_settings: EnvoyInterfaceInformation | None = None async def setup(self) -> None: """ Initiate Envoy communication by obtaining firmware version. Read /info on Envoy, accessible without authentication. Instantiates EnvoyFirmware class object. Required to decide what authentication to use for sub-sequent Envoy communication. Use this method as first step after class instantiation Will retry up to 4 times or 50 sec elapsed at next try, which ever comes first. :raises EnvoyFirmwareFatalCheckError: if connection or timeout failure occurs :raises EnvoyFirmwareCheckError: on http errors or any HTTP status other then 200 """ await self._firmware.setup() # force refetch of interface data next time requested self._interface_settings = None async def close(self) -> None: """ Close or clean anything opened or created on behalf of the caller. Should be called when ending application, if: - no aiohttp ClientSession was specified for the Envoy: - the pyenphase-created ClientSession will be closed. - an aiohttp ClientSession was provided by the caller: - Envoy will not close the provided session; the caller remains responsible. :return: None """ if not self._user_client and not self._client.closed: await self._client.close() async def authenticate( self, username: str | None = None, password: str | None = None, token: str | None = None, ) -> None: """ Authenticate to the Envoy based on firmware version. If firmware version retrieved in Envoy.setup is < 7 then create DigestAuth using passed username and password. Use 'envoy' or 'installer' username and blank password. If Firmware is >= 7 create JWT Token based authorization. If token is passed, use it for authorization. If no token is passed, username and password should be Enlighten Cloud credentials to obtain a token. Validate the token with the local Envoy. :param username: Enligthen Cloud username or local Envoy username, defaults to None :param password: Enligthen Cloud password or local Envoy password, defaults to None :param token: Token to use with authentication, defaults to None :raises EnvoyAuthenticationRequired: Authentication failed with the local Envoy, provided token is expired or no token could be obtained from Enlighten cloud due to error or missing parameters. """ if self._firmware.version < AUTH_TOKEN_MIN_VERSION: # Envoy firmware using old envoy/installer authentication _LOGGER.debug( "FW: %s, Authenticating to Envoy using envoy/installer authentication", self._firmware.version, ) full_serial = self._firmware.serial if not username or username == "installer": username = "installer" password = EnvoyUtils.get_password(full_serial, username) elif username == "envoy" and not password: # The default password for the envoy user is the last 6 digits of the serial number assert full_serial is not None, "Serial must be set" # nosec password = full_serial[-6:] if username and password: self.auth = EnvoyLegacyAuth(self.host, username, password) else: # Envoy firmware using new token authentication _LOGGER.debug( "FW: %s, Authenticating to Envoy using token authentication", self._firmware.version, ) if token or (username and password): # Always pass all the data to the token auth class, even if some of it is None # so that we can refresh the token if needed self.auth = EnvoyTokenAuth( self.host, cloud_username=username, cloud_password=password, envoy_serial=self._firmware.serial, token=token, ) if not self.auth: _LOGGER.error( "You must include username/password or token to authenticate to the Envoy." ) raise EnvoyAuthenticationRequired("Could not setup authentication object.") await self.auth.setup(self._client) @retry( retry=retry_if_exception_type( ( aiohttp.ClientError, asyncio.TimeoutError, ) ), wait=wait_random_exponential(multiplier=2, max=5), stop=stop_after_delay(MAX_REQUEST_DELAY) | stop_after_attempt(MAX_REQUEST_ATTEMPTS), reraise=True, ) async def probe_request(self, endpoint: str) -> aiohttp.ClientResponse: """ Make a probe request to the Envoy. Probe requests are intended for use by updates during initial search of available features in the Envoy. They are not retried on connection errors, timeouts or bad JSON responses. For regular data retrieval, use the request method. Sends GET request to endpoint on Envoy and returns the response. :param endpoint: Envoy Endpoint to access, start with leading /. :raises EnvoyAuthenticationRequired: if no prior authentication was completed or HTTP status 401 or 404 is returned. :return: request response. """ return await self._request(endpoint) @retry( retry=retry_if_exception_type( ( aiohttp.ClientError, asyncio.TimeoutError, ) ), wait=wait_random_exponential(multiplier=2, max=5), stop=stop_after_delay(MAX_REQUEST_DELAY) | stop_after_attempt(MAX_REQUEST_ATTEMPTS), reraise=True, ) async def request( self, endpoint: str, data: dict[str, Any] | None = None, method: str | None = None, ) -> aiohttp.ClientResponse: """ Make a request to the Envoy. Send GET or POST request to Envoy. Defaults to GET, specify data dictionary to perform a POST. Only specify the endpoint path in the Envoy, HTTP type and Envoy address is prepended to form full URL based on authentication method. Request retries on client connection issues or timeouts. Will retry up to 4 times or 50 sec elapsed at next try, which ever comes first. :param endpoint: Envoy Endpoint to access, start with leading / :param data: optional data dictionary to send to the Envoy Defaults to none, if none a GET request is issued. :param method: HTTP method to use when sending data dictionary, if none and data is specified POST is default :raises EnvoyAuthenticationRequired: if no prior authentication was completed or HTTP status 401 or 404 is returned. :raises: Any communication errors when retries are exceeded :return: request response. """ return await self._request(endpoint, data, method) async def _request( self, endpoint: str, data: dict[str, Any] | None = None, method: str | None = None, ) -> aiohttp.ClientResponse: """ Make a request to the Envoy. If data is specified use POST or specified method to send data dictionary as json string to the endpoint. If no data is specified use GET request. Return the response. :param endpoint: Envoy Endpoint to access, start with leading / :param data: data dictionary to send to the Envoy, defaults to None :param method: method to use to send data dictionary, POST if none, only used for data send :raises EnvoyAuthenticationRequired: if no prior authentication was completed or HTTP status 401 or 404 is returned :return: request response """ if self.auth is None: raise EnvoyAuthenticationRequired( "You must authenticate to the Envoy before making requests." ) url = self.auth.get_endpoint_url(endpoint) debugon = _LOGGER.isEnabledFor(logging.DEBUG) if debugon: request_start = time.monotonic() # Set up middleware from auth middlewares = (self.auth.auth,) if self.auth.auth else None # not using redirects to avoid following 301s to error pages on missing # end points and lots of extra requests if data: if debugon: _LOGGER.debug( "Sending POST to %s with data %s", url, orjson.dumps(data) ) response = await self._client.request( method if method else "POST", url, headers={**DEFAULT_HEADERS, **self.auth.headers}, timeout=self._timeout, data=orjson.dumps(data), middlewares=middlewares, allow_redirects=False, ) else: _LOGGER.debug("Requesting %s with timeout %s", url, self._timeout) response = await self._client.get( url, headers={**DEFAULT_HEADERS, **self.auth.headers}, timeout=self._timeout, middlewares=middlewares, allow_redirects=False, ) status_code = response.status if status_code in (HTTPStatus.UNAUTHORIZED, HTTPStatus.FORBIDDEN): content = await response.read() _LOGGER.debug( "Authentication failed for %s with status %s: %s", url, status_code, content[:500] if content else "No content", ) raise EnvoyAuthenticationRequired( f"Authentication failed for {url} with status {status_code}, " "please check your username/password or token." ) # show all responses centrally when in debug if debugon: request_end = time.monotonic() content_type = response.headers.get("content-type") _LOGGER.debug( "Request reply in %s sec from %s status %s: %s %s", round(request_end - request_start, 1), url, status_code, content_type, await response.read(), # Use the actual content bytes ) return response async def interface_settings(self) -> EnvoyInterfaceInformation | None: """ Returns Envoy active interface information. Returned data includes interface mac, interface type, software build date, configured timezone and DHCP settings This data is sourced from the /home endpoint which is a slower responding endpoint with some potential overhead on the Envoy. For this reason, as well as the fact that the data is static, it will only be fetched one time when called first time and cached internally. Subsequent calls will be fulfilled from the cache. A call to envoy.setup() will invalidate the cached data and result in a one-time read from Envoy upon next call. :return: Interface details or None if error """ if not self._interface_settings: try: home_json = await self._json_request( end_point=ENDPOINT_URL_HOME, data=None ) self._interface_settings = EnvoyInterfaceInformation.from_api(home_json) except EnvoyError as exc: _LOGGER.debug("Failure getting interface information %s", exc) return self._interface_settings @property def host(self) -> str: """Return the Envoy host specified at initialization.""" return self._host @property def firmware(self) -> AwesomeVersion: """Return the Envoy firmware version as read from the Envoy.""" return self._firmware.version @property def part_number(self) -> str | None: """Return the Envoy part number as read from the Envoy.""" return self._firmware.part_number @property def serial_number(self) -> str | None: """Return the Envoy serial number as read from the Envoy.""" return self._firmware.serial @property def is_metered(self) -> bool: """Return the Envoy imetered info as read from the Envoy.""" return self._firmware.is_metered @property def supported_features(self) -> SupportedFeatures: """Return the mask of Envoy supported features as established during Probe.""" assert self._supported_features is not None, "Call setup() first" # nosec return self._supported_features @property def phase_count(self) -> int: """Return the number of configured phases for CT meters as read from the Envoy.""" assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.phase_count @property def active_phase_count(self) -> int: """Return the number of actual reported phases in Envoy production/consumption report.""" assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.active_phase_count @property def ct_meter_count(self) -> int: """Return the number of configured current transformers (CT) as read from the Envoy""" assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.ct_meter_count @property def consumption_meter_type(self) -> CtType | None: """ Return the type of consumption ct meter installed (total or net-consumption or None) as read from the Envoy. """ assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.consumption_meter_type @property def production_meter_type(self) -> CtType | None: """ Return the type of production ct meter installed (Production or None) as read from the Envoy. """ assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.production_meter_type @property def storage_meter_type(self) -> CtType | None: """Return the type of storage ct meter installed (Storage or None) as read from the Envoy.""" assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.storage_meter_type @property def phase_mode(self) -> EnvoyPhaseMode | None: """Return the phase mode configured for the CT meters (single, split or three) as read from the Envoy.""" assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.phase_mode @property def acb_count(self) -> int: """Return the number of reported ACB batteries in Production storage report section.""" assert self._common_properties is not None, "Call setup() first" # nosec return self._common_properties.acb_batteries_reported @cached_property def envoy_model(self) -> str: """ Return Envoy model description. Describes the Envoy model based on properties found. - if 2 or more phases found or at least 1 ct is found: - - phase count - - phase mode - if consumption CT found, type of consumption CT - presence of production and/or storage ct Example: "Envoy, phases: 2, phase mode: split, net-consumption CT, production CT" :return: String describing the Envoy model and features. """ model = "Envoy" # if CT and more then 1 phase add phase count to model ct_count = self.ct_meter_count phase_count = self.phase_count if phase_count > 1 or ct_count > 0: model = f"{model}, phases: {phase_count}" # Add phase mode to model phase_mode = self.phase_mode model = f"{model}, phase mode: {phase_mode}" # if consumption CT type is known add to model if ct_consumption_meter := self.consumption_meter_type: model = f"{model}, {ct_consumption_meter} CT" # if production CT is found add to model. if ct_production_meter := self.production_meter_type: model = f"{model}, {ct_production_meter} CT" # if storage CT is found add to model. if ct_storage_meter := self.storage_meter_type: model = f"{model}, {ct_storage_meter} CT" return model async def _make_cached_request( self, request_func: Callable[[str], Awaitable[aiohttp.ClientResponse]], endpoint: str, ) -> aiohttp.ClientResponse: """Make a cached request.""" if cached_response := self._endpoint_cache.get(endpoint): return cached_response response = await request_func(endpoint) if response.status == 200: self._endpoint_cache[endpoint] = response return response async def probe(self) -> None: """ Probe for Envoy model and supported features. For each updater in the list of updaters returned by get_updaters, execute the probe() method. Build and store a list of updaters to use, containing updaters for which the probe() method does return at least 1 supported feature. Store the map of all returned supported features. An updaters probe method should determine if the data for the specific updater scope is available or not. If so, the updaters update() method will be used during data collection. Probe should be used only once, after setup and authorization at the start of the communication. The update() method will call probe if not done prior. :raises EnvoyProbeFailed: if no solar production data can be found on the Envoy. Solar production data is available in all Envoy models. """ supported_features = SupportedFeatures(0) updaters: list[EnvoyUpdater] = [] version = self._firmware.version metered = self.is_metered self._endpoint_cache.clear() cached_probe = partial(self._make_cached_request, self.probe_request) cached_request = partial(self._make_cached_request, self.request) self._common_properties.reset_probe_properties(is_metered=metered) for updater in get_updaters(): klass = updater( version, cached_probe, cached_request, self._common_properties ) if updater_features := await klass.probe(supported_features): supported_features |= updater_features updaters.append(klass) if not supported_features & SupportedFeatures.PRODUCTION: raise EnvoyProbeFailed("Unable to determine production endpoint") self._updaters = updaters self._supported_features = supported_features def _validate_update(self, data: EnvoyData) -> None: """ Perform some overall validation checks and raise for issues. Envoy data returned can be impacted by the state of the Envoy. This validates searches for known cases and rules the data as invalid. INtention is to avoid false data reported and have it rather signalled as poor quality. - Envoy firmware v3 starts communicating before all data is established and sends zero values for solar production during first minutes after startup. Signal poor data quality as long as all values are 0. :param data: Envoy data :raises EnvoyPoorDataQuality: data was deemed invalid based on specific quality tests """ if self._firmware.version.major == "3" and data.system_production: # FW R3.x will return status 200 with all zeros right after startup # where never versions return status 503 to signal not ready yet # raise error to avoid inserting zero's in historical series. production = data.system_production if ( production.watts_now + production.watt_hours_today + production.watt_hours_last_7_days + production.watt_hours_lifetime ) == 0: raise EnvoyPoorDataQuality( "Data rejected on rule: " f"FW 3.x production all zero at startup ({self._firmware.version})." ) async def update(self) -> EnvoyData: """ Read data from Envoy. For each updater in the list of established updaters during probe(), execute the update() method to collect current data from the Envoy. If probe was never executed, use probe method first. An updaters update() method should obtain the data for the specific updater scope and save to the Envoy data set. :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :return: Collected Envoy data """ # Some of the updaters user the same endpoint # so we cache the 200 responses for each update # cycle to not make duplicate requests self._endpoint_cache.clear() if not self._supported_features: await self.probe() data = EnvoyData() for updater in self._updaters: try: await updater.update(data) except aiohttp.ClientError as err: # noqa: PERF203 raise EnvoyCommunicationError(f"aiohttp ClientError {err!s}") from err except asyncio.TimeoutError as err: raise EnvoyCommunicationError(f"Timeout {err!s}") from err self._validate_update(data) self.data = data return data async def _json_request( self, end_point: str, data: dict[str, Any] | None, method: str | None = None ) -> Any: """ Make a request to the Envoy and return the JSON response. Uses _request() to obtain response and returns response content as formatted JSON. :param endpoint: Envoy Endpoint to access, start with leading / :param data: data dictionary to send to the Envoy, defaults to None :param method: method to use to send data dictionary, POST if none, only used for data send :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :return: response content as JSON """ try: response = await self._request(end_point, data, method) except aiohttp.ClientError as err: _LOGGER.debug("Request to %s failed with ClientError: %s", end_point, err) raise EnvoyCommunicationError(f"aiohttp ClientError {err!s}") from err except asyncio.TimeoutError as err: _LOGGER.debug("Request to %s timed out: %s", end_point, err) raise EnvoyCommunicationError(f"Timeout {err!s}") from err if not (200 <= response.status < 300): content = await response.read() _LOGGER.debug( "Request to %s failed with status %s: %s", end_point, response.status, content[:500] if content else "No content", ) raise EnvoyHTTPStatusError(response.status, str(response.url)) return json_loads(end_point, await response.read()) async def go_on_grid(self) -> dict[str, Any]: """ Make a request to the Envoy to go on grid. POST {"mains_admin_state": "closed"} to /ivp/ensemble/relay directing to connect to the grid. Requires ENPOWER installed. :raises EnvoyFeatureNotAvailable: If ENPOWER feature is not available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :return: JSON returned by Envoy """ if not self.supported_features & SupportedFeatures.ENPOWER: raise EnvoyFeatureNotAvailable( "This feature is not available on this Envoy." ) return await self._json_request(URL_GRID_RELAY, {"mains_admin_state": "closed"}) async def go_off_grid(self) -> dict[str, Any]: """ Make a request to the Envoy to go off grid. POST {"mains_admin_state": "open"} to /ivp/ensemble/relay directing to disconnect from the grid. Requires ENPOWER installed. :raises EnvoyFeatureNotAvailable: If ENPOWER feature is not available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :return: JSON returned by Envoy """ if not self.supported_features & SupportedFeatures.ENPOWER: raise EnvoyFeatureNotAvailable( "This feature is not available on this Envoy." ) return await self._json_request(URL_GRID_RELAY, {"mains_admin_state": "open"}) async def update_dry_contact(self, new_data: dict[str, Any]) -> dict[str, Any]: """ Update settings for an Enpower dry contact relay. POST updated dry contact settings to /ivp/ss/dry_contact_settings in the Envoy. New_data dict can contain one or more of below items to set. The key/value for "id" is required to identify the relay. Only include key/values to change. .. code-block:: json { "id": "", "grid_action": "value", "micro_grid_action": "value", "gen_action": "value", "override": "value", "load_name": "value", "mode": "value", "soc_low": "value", "soc_high": "value", }, Settings specified in the data dict are updated in the internally stored dry_contact_settings and send as a whole to update the Envoy. :param new_data: dict of settings to change, "id" key/value required :raises EnvoyFeatureNotAvailable: If ENPOWER feature is not available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :raises ValueError: If update was attempted before first data was requested from Envoy :raises ValueError: If no "id" key is present in data dict to send. :return: dry_contact_settings JSON returned by Envoy """ # All settings for the relay must be sent in the POST or it may crash the Envoy if not self.supported_features & SupportedFeatures.ENPOWER: raise EnvoyFeatureNotAvailable( "This feature is not available on this Envoy." ) if not (id_ := new_data.get("id")): raise ValueError("You must specify the dry contact ID in the data object.") # Get the current settings for the relay from EnvoyData and merge with the new settings if not (current_data := self.data): raise ValueError( "Tried to set dry contact settings before the Envoy was queried." ) current_model = current_data.dry_contact_settings[id_] new_model = replace(current_model, **new_data) return await self._json_request( URL_DRY_CONTACT_SETTINGS, {"dry_contacts": new_model.to_api()} ) async def open_dry_contact(self, id: str) -> dict[str, Any]: """ Open a dry contact relay. POST {"dry_contacts": {"id": id, "status": "open"}} to Envoy to open dry contact with specified id. Upon successful POST, update dry contact status in internal data as Envoy needs some time to implement the change and have status updated. :param id: relay id of dry contact relay to open :raises EnvoyFeatureNotAvailable: If ENPOWER feature is not available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :return: JSON response of Envoy """ if not self.supported_features & SupportedFeatures.ENPOWER: raise EnvoyFeatureNotAvailable( "This feature is not available on this Envoy." ) result = await self._json_request( URL_DRY_CONTACT_STATUS, {"dry_contacts": {"id": id, "status": "open"}} ) # The Envoy takes a few seconds before it will reflect the new state of the relay # so we preemptively update it if TYPE_CHECKING: assert self.data is not None # nosec self.data.dry_contact_status[id].status = DryContactStatus.OPEN return result async def close_dry_contact(self, id: str) -> dict[str, Any]: """ Close a dry contact relay. POST {"dry_contacts": {"id": id, "status": "closed"}} to Envoy to close dry contact with specified id. Upon successful POST, update dry contact status in internal data as Envoy needs some time to implement the change and have status updated. :param id: relay id of dry contact relay to open :raises EnvoyFeatureNotAvailable: If ENPOWER feature is not available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :return: JSON response of Envoy """ if not self.supported_features & SupportedFeatures.ENPOWER: raise EnvoyFeatureNotAvailable( "This feature is not available on this Envoy." ) result = await self._json_request( URL_DRY_CONTACT_STATUS, {"dry_contacts": {"id": id, "status": "closed"}} ) # The Envoy takes a few seconds before it will reflect the new state of the relay # so we preemptively update it if TYPE_CHECKING: assert self.data is not None # nosec self.data.dry_contact_status[id].status = DryContactStatus.CLOSED return result async def enable_charge_from_grid(self) -> dict[str, Any]: """ Enable charge from grid for Encharge batteries. Set charge_from_grid true in internal stored tariff data and send updated tariff data to Envoy using PUT. This will update the charge from grid setting to true in the Envoy. :raises EnvoyFeatureNotAvailable: If no Encharge or IQ batteries are available :raises EnvoyFeatureNotAvailable: If no TARIFF data is available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :raises ValueError: If update was attempted before first data was requested from Envoy :return: JSON response of Envoy """ self._verify_tariff_storage_or_raise() if TYPE_CHECKING: assert self.data is not None # nosec assert self.data.tariff is not None # nosec assert self.data.tariff.storage_settings is not None # nosec self.data.tariff.storage_settings.charge_from_grid = True return await self._json_request( URL_TARIFF, {"tariff": self.data.tariff.to_api()}, method="PUT" ) async def disable_charge_from_grid(self) -> dict[str, Any]: """ Disable charge from grid for Encharge batteries. Set charge_from_grid false in internal stored tariff data and send updated tariff data to Envoy using PUT. This will update the charge from grid setting to false in the Envoy. :raises EnvoyFeatureNotAvailable: If no Encharge or IQ batteries are available :raises EnvoyFeatureNotAvailable: If no TARIFF data is available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :raises ValueError: If update was attempted before first data was requested from Envoy :return: JSON response of Envoy """ self._verify_tariff_storage_or_raise() if TYPE_CHECKING: assert self.data is not None # nosec assert self.data.tariff is not None # nosec assert self.data.tariff.storage_settings is not None # nosec self.data.tariff.storage_settings.charge_from_grid = False return await self._json_request( URL_TARIFF, {"tariff": self.data.tariff.to_api()}, method="PUT" ) async def set_storage_mode(self, mode: EnvoyStorageMode) -> dict[str, Any]: """ Set the Encharge storage mode. Set storage_mode in internal stored tariff data to specified mode and send updated tariff data to /admin/lib/tariff in Envoy using PUT. This will update the storage mode setting in the Envoy. :param mode: storage mode to set :raises EnvoyFeatureNotAvailable: If no Encharge or IQ batteries are available :raises EnvoyFeatureNotAvailable: If no TARIFF data is available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :raises ValueError: If update was attempted before first data was requested from Envoy :return: JSON response of Envoy """ self._verify_tariff_storage_or_raise() if TYPE_CHECKING: assert self.data is not None # nosec assert self.data.tariff is not None # nosec assert self.data.tariff.storage_settings is not None # nosec if type(mode) is not EnvoyStorageMode: raise TypeError("Mode must be of type EnvoyStorageMode") self.data.tariff.storage_settings.mode = mode return await self._json_request( URL_TARIFF, {"tariff": self.data.tariff.to_api()}, method="PUT" ) async def set_reserve_soc(self, value: int) -> dict[str, Any]: """ Set the Encharge reserve state of charge. Set reserved_soc in internal stored tariff data to specified value and send updated tariff data to /admin/lib/tariff in Envoy using PUT. This will update the reserve soc setting in the Envoy. :param value: reserve soc to set :raises EnvoyFeatureNotAvailable: If no Encharge or IQ batteries are available :raises EnvoyFeatureNotAvailable: If no TARIFF data is available in Envoy :raises EnvoyCommunicationError: when aiohttp network or communication error occurs. :raises EnvoyHTTPStatusError: when HTTP status is not 2xx. :raises ValueError: If update was attempted before first data was requested from Envoy :return: JSON response of Envoy """ self._verify_tariff_storage_or_raise() if TYPE_CHECKING: assert self.data is not None # nosec assert self.data.tariff is not None # nosec assert self.data.tariff.storage_settings is not None # nosec self.data.tariff.storage_settings.reserved_soc = round(float(value), 1) return await self._json_request( URL_TARIFF, {"tariff": self.data.tariff.to_api()}, method="PUT" ) def _verify_tariff_storage_or_raise(self) -> None: """ Verify Encharge or IQ batteries and tariff data are available in Envoy :raises EnvoyFeatureNotAvailable: If no Encharge or IQ batteries are available :raises EnvoyFeatureNotAvailable: If no TARIFF data is available in Envoy :raises ValueError: If update was attempted before first data was requested from Envoy """ if not self.supported_features & SupportedFeatures.ENCHARGE: raise EnvoyFeatureNotAvailable( "This feature requires Enphase Encharge or IQ Batteries." ) if not self.supported_features & SupportedFeatures.TARIFF: raise EnvoyFeatureNotAvailable( "This feature is not available on this Envoy." ) if not self.data: raise ValueError("Tried access envoy data before Envoy was queried.") if TYPE_CHECKING: assert self.data is not None # nosec if not self.data.tariff: raise ValueError( "Tried to configure charge from grid before the Envoy was queried." ) if TYPE_CHECKING: assert self.data.tariff is not None # nosec if not self.data.tariff.storage_settings: raise EnvoyFeatureNotAvailable( "This feature requires Enphase Encharge or IQ Batteries." ) pyenphase-2.3.1/src/pyenphase/exceptions.py000066400000000000000000000063231505013723300210320ustar00rootroot00000000000000"""Enphase Envoy exceptions.""" import json import aiohttp class EnvoyError(Exception): """Base class for Envoy exceptions.""" class EnvoyFirmwareCheckError(EnvoyError): """ Exception raised when unable to query the Envoy firmware version. - http error when sending request to Envoy - Any http status code other then 200 received :param status_code: http status code :param status: Error status description """ def __init__(self, status_code: int, status: str) -> None: self.status_code = status_code self.status = status class EnvoyFirmwareFatalCheckError(EnvoyError): """ Exception raised when we should not retry getting the Envoy firmware version. - aiohttp timeout or connection error when sending request to Envoy :param status_code: http status code :param status: Error status description """ def __init__(self, status_code: int, status: str) -> None: self.status_code = status_code self.status = status class EnvoyAuthenticationError(EnvoyError): """ Exception raised when Envoy Authentication fails. - When a jwt token authentication failure occurs with the local Envoy. - When using token authentication and no cloud credentials or envoy serial are specified - When a failure occurs during obtaining a token from the Enlighten cloud :param status: Error status description """ def __init__(self, status: str) -> None: self.status = status class EnvoyAuthenticationRequired(EnvoyError): """ Exception raised when authentication hasn't been setup. - When communication with Envoy was attempted without setting up authentication. - When neither token nor username and/or password are specified during authentication. :param status: Error status description """ def __init__(self, status: str) -> None: self.status = status class EnvoyHTTPStatusError(EnvoyError): """ Exception raised when unable to query the Envoy. - HTTP Status of request not in 200 range. :param status_code: http status code :param status: Error status description :param url: failing url """ def __init__(self, status_code: int, url: str) -> None: self.status_code = status_code self.url = url super().__init__(f"HTTP status error {url} {status_code}") class EnvoyProbeFailed(EnvoyError): """Exception raised when the Envoy probe fails.""" class EnvoyCommunicationError(EnvoyError): """ Exception raised when the Envoy communication fails. - aiohttp.ClientError error occurs. - asyncio.TimeoutError error occurs """ class EnvoyFeatureNotAvailable(EnvoyError): """ Exception raised when the Envoy feature is not available. - When using go on/off grid and ENPOWER feature is not available in Envoy """ class EnvoyPoorDataQuality(EnvoyError): """ Exception raised when data identifies known issues. - FW 3.x production values all zero at startup :param status: Error status description """ def __init__(self, status: str) -> None: self.status = status ENDPOINT_PROBE_EXCEPTIONS = ( json.JSONDecodeError, aiohttp.ClientError, EnvoyHTTPStatusError, ) pyenphase-2.3.1/src/pyenphase/firmware.py000066400000000000000000000156271505013723300204740ustar00rootroot00000000000000"""Envoy Firmware detection""" import asyncio import logging import time import aiohttp from awesomeversion import AwesomeVersion from lxml import etree # nosec from tenacity import ( retry, retry_if_exception_type, stop_after_attempt, stop_after_delay, wait_random_exponential, ) from .const import LOCAL_TIMEOUT, MAX_REQUEST_ATTEMPTS, MAX_REQUEST_DELAY from .exceptions import EnvoyFirmwareCheckError, EnvoyFirmwareFatalCheckError _LOGGER = logging.getLogger(__name__) class EnvoyFirmware: """Class for querying and determining the Envoy firmware version.""" __slots__ = ( "_client", "_firmware_version", "_host", "_metered", "_part_number", "_serial_number", "_url", ) def __init__( self, _client: aiohttp.ClientSession, host: str, ) -> None: """ Class for querying and determining the Envoy firmware version. :param client: aiohttp ClientSession not verifying SSL certificates, see :class:`pyenphase.ssl`. :param host: Envoy DNS name or IP address """ self._client = _client self._host = host self._firmware_version: str | None = None self._serial_number: str | None = None self._part_number: str | None = None self._url: str = "" self._metered: bool = False @retry( retry=retry_if_exception_type(aiohttp.ClientError), wait=wait_random_exponential(multiplier=2, max=5), stop=stop_after_delay(MAX_REQUEST_DELAY) | stop_after_attempt(MAX_REQUEST_ATTEMPTS), reraise=True, ) async def _get_info(self) -> tuple[int, bytes]: """ Perform GET request to /info endpoint on envoy. Try GET request to https:///info to read info endpoint. If connection error or timeout, retry on http:///info. Will retry up to 4 times or 50 sec elapsed at next try, which ever comes first on network or remote protocol errors. HTTP status is not verified. :return: tuple of (status_code, content) """ self._url = f"https://{self._host}/info" _LOGGER.debug("Requesting %s with timeout %s", self._url, LOCAL_TIMEOUT) try: resp = await self._client.get(self._url, timeout=LOCAL_TIMEOUT) return resp.status, await resp.read() except (aiohttp.ClientConnectorError, asyncio.TimeoutError): # Firmware < 7.0.0 does not support HTTPS so we need to try HTTP # as a fallback, worse sometimes http will redirect to https://localhost # which is not helpful self._url = f"http://{self._host}/info" _LOGGER.debug("Retrying to %s with timeout %s", self._url, LOCAL_TIMEOUT) resp = await self._client.get(self._url, timeout=LOCAL_TIMEOUT) return resp.status, await resp.read() async def setup(self) -> None: """ Obtain the firmware version, serial-number and part-number from Envoy. Read /info on Envoy, accessible without authentication. Store firmware version, serial-number and part-number properties from xml response. Reads first on HTTPS, if that fails on HTTP for firmware < 7. Will retry up to 4 times or 50 sec elapsed at next try, which ever comes first. .. code-block:: python connector = aiohttp.TCPConnector(ssl=create_no_verify_ssl_context()) client = aiohttp.ClientSession(connector=connector) firmware = EnvoyFirmware(client,host) await firmware.setup() print(firmware.version) :raises EnvoyFirmwareFatalCheckError: if connection or timeout failure occurs :raises EnvoyFirmwareCheckError: on http errors or any HTTP status other then 200 """ # /info will return XML with the firmware version debugon = _LOGGER.isEnabledFor(logging.DEBUG) if debugon: request_start = time.monotonic() try: status_code, content = await self._get_info() except asyncio.TimeoutError as ex: raise EnvoyFirmwareFatalCheckError( 500, "Timeout connecting to Envoy" ) from ex except aiohttp.ClientConnectorError as ex: raise EnvoyFirmwareFatalCheckError( 500, "Unable to connect to Envoy" ) from ex except aiohttp.ClientError as ex: raise EnvoyFirmwareCheckError( 500, "Unable to query firmware version" ) from ex if status_code == 200: if debugon: request_end = time.monotonic() _LOGGER.debug( "Request reply in %s sec from %s status %s: %s", round(request_end - request_start, 1), self._url, status_code, content, ) xml = etree.fromstring(content) # nosec if (device_tag := xml.find("device")) is not None: if (software_tag := device_tag.find("software")) is not None: self._firmware_version = AwesomeVersion( software_tag.text[1:] ) # need to strip off the leading 'R' or 'D' if (sn_tag := device_tag.find("sn")) is not None: self._serial_number = sn_tag.text if (pn_tag := device_tag.find("pn")) is not None: self._part_number = pn_tag.text if (imeter_tag := device_tag.find("imeter")) is not None: self._metered = imeter_tag.text == "true" return else: # If we get a different status code, raise an exception raise EnvoyFirmwareCheckError(status_code, content.decode()) @property def version(self) -> AwesomeVersion: """ Return firmware version as read from Envoy. :return: Envoy firmware version or None if :class:`pyenphase.firmware.EnvoyFirmware.setup` was not used """ return self._firmware_version @property def serial(self) -> str | None: """ Return serial number as read from Envoy. :return: Envoy serial number or None if :class:`pyenphase.firmware.EnvoyFirmware.setup` was not used """ return self._serial_number @property def part_number(self) -> str | None: """ Return part number as read from Envoy. :return: Envoy part number or None if :class:`pyenphase.firmware.EnvoyFirmware.setup` was not used """ return self._part_number @property def is_metered(self) -> bool: """ Return imetered setting as read from Envoy. :return: Envoy info imetered setting. Only True if read and set in info """ return self._metered pyenphase-2.3.1/src/pyenphase/json.py000066400000000000000000000014701505013723300176200ustar00rootroot00000000000000"""JSON utilities for pyenphase.""" import logging from typing import Any import orjson _LOGGER = logging.getLogger(__name__) def json_loads(end_point: str, json_source: bytes | str) -> Any: """ Deserialize a JSON string into a Python object :param end_point: source for json, used for debug log, typically endpoint on Envoy. :param json_source: json string, typically from request response content to Envoy. :return: deserialized JSON """ try: return orjson.loads(json_source) except orjson.JSONDecodeError as e: _LOGGER.debug( "Unable to decode response from Envoy endpoint %s: %s\nResponse content: %s", end_point, e, json_source[:500] if isinstance(json_source, (bytes, str)) else json_source, ) raise pyenphase-2.3.1/src/pyenphase/models/000077500000000000000000000000001505013723300175565ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/models/__init__.py000066400000000000000000000000001505013723300216550ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/models/acb.py000066400000000000000000000065341505013723300206650ustar00rootroot00000000000000"""Model for the ACB Battery.""" # Data Source: URL_ENSEMBLE_SECCTRL (primary) & URL_PRODUCTION_JSON from __future__ import annotations from dataclasses import dataclass from typing import Any @dataclass(slots=True) class EnvoyBatteryAggregate: """Model for combined Encharge and ACB batteries aggregate data.""" #: Sum of Encharge aggregate and ACB aggregate current battery energy content #: from ENC_agg_avail_energy and ACB_agg_energy. available_energy: int #: Combined State of charge for all Encharge and ACB batteries from agg_soc. state_of_charge: int #: Combined total maximum capacity for all Encharge and ACB batteries from Max_energy. max_available_capacity: int @classmethod def from_api(cls, data: dict[str, Any]) -> EnvoyBatteryAggregate: """ Fill Aggregated battery data from Envoy data format. Source data parts of URL_ENSEMBLE_SECCTRL .. code-block:: json { "agg_soc": 39, "Max_energy": 7220, "ENC_agg_avail_energy": 350, "Enc_max_available_capacity": 3500, "ACB_agg_soc": 25, "ACB_agg_energy": 930, } Args: data (dict[str, Any]): JSON returned from URL_ENSEMBLE_SECCTRL Returns: EnvoyBatteryAggregate: Aggregated Battery data for all Encharge and ACB batteries """ return cls( available_energy=data["ENC_agg_avail_energy"] + data["ACB_agg_energy"], max_available_capacity=data["Max_energy"], state_of_charge=data["agg_soc"], ) @dataclass(slots=True) class EnvoyACBPower: """Model for the ACB battery power.""" #: Current discharge/charge power for ACB batteries from wNow. power: int #: Current available capacity in Wh for ACB batteries from whNow charge_wh: int #: Current SOC in percentage for ACB batteries from percentFull state_of_charge: int #: Current state for ACB batteries (discharging/idle/charging) from state state: str #: Number of reported ACB batteries from activeCount batteries: int @classmethod def from_production( cls, data: dict[str, Any], acb_segment: int = 0 ) -> EnvoyACBPower: """ Fill ACB battery power data from Envoy data format. Source data URL_PRODUCTION_JSON["storage"] .. code-block:: json "storage": [{ "type": "acb", "activeCount": 3, "readingTime": 1731943992, "wNow": 260, "whNow": 930, "state": "discharging", "percentFull": 25 }] Args: data (dict[str, Any]): JSON returned from URL_PRODUCTION_JSON acb_segment (int): segment to process from storage list, default is 0 Returns: EnvoyACBPower: ACB battery current power out/in and energy content and status """ storage_data = data["storage"][acb_segment] return cls( power=storage_data["wNow"], charge_wh=storage_data["whNow"], state_of_charge=storage_data["percentFull"], state=storage_data["state"], batteries=storage_data["activeCount"], ) pyenphase-2.3.1/src/pyenphase/models/c6combiner.py000066400000000000000000000032431505013723300221610ustar00rootroot00000000000000"""Model for the Enphase C6 Combiner.""" # Data Source: URL_ENSEMBLE_INVENTORY from __future__ import annotations from dataclasses import dataclass from typing import Any # Required keys for C6 Combiner Controller inventories C6CC_REQUIRED_KEYS: frozenset[str] = frozenset( { "admin_state", "admin_state_str", "communicating", "img_load_date", "installed", "last_rpt_date", "part_num", "serial_num", "dmir_version", "fw_version", } ) @dataclass(slots=True) class EnvoyC6CC: """Model for the Enphase C6 Combiner.""" admin_state: int admin_state_str: str firmware_loaded_date: int firmware_version: str installed_date: int last_report_date: int communicating: bool part_number: str serial_number: str dmir_version: str @classmethod def from_api(cls, inventory: dict[str, Any]) -> EnvoyC6CC | None: """Initialize from the API. Returns None if required keys are missing.""" missing_keys = C6CC_REQUIRED_KEYS - set(inventory) if missing_keys: return None return cls( admin_state=inventory["admin_state"], admin_state_str=inventory["admin_state_str"], communicating=inventory["communicating"], firmware_loaded_date=inventory["img_load_date"], firmware_version=inventory["fw_version"], installed_date=inventory["installed"], last_report_date=inventory["last_rpt_date"], part_number=inventory["part_num"], serial_number=inventory["serial_num"], dmir_version=inventory["dmir_version"], ) pyenphase-2.3.1/src/pyenphase/models/collar.py000066400000000000000000000041401505013723300214030ustar00rootroot00000000000000"""Model for the IQ Meter Collar.""" # Data Source: URL_ENSEMBLE_INVENTORY from __future__ import annotations from dataclasses import dataclass from typing import Any # Required keys for IQ Meter Collar inventories COLLAR_REQUIRED_KEYS: frozenset[str] = frozenset( { "admin_state", "admin_state_str", "communicating", "img_load_date", "img_pnum_running", "installed", "last_rpt_date", "part_num", "serial_num", "temperature", "mid_state", "grid_state", "control_error", "collar_state", } ) @dataclass(slots=True) class EnvoyCollar: """Model for the Enphase IQ Meter Collar.""" admin_state: int admin_state_str: str firmware_loaded_date: int firmware_version: str installed_date: int last_report_date: int communicating: bool mid_state: str grid_state: str part_number: str serial_number: str temperature: int temperature_unit: str control_error: int collar_state: str @classmethod def from_api(cls, inventory: dict[str, Any]) -> EnvoyCollar | None: """Initialize from the API. Returns None if required keys are missing.""" missing_keys = COLLAR_REQUIRED_KEYS - set(inventory) if missing_keys: return None return cls( admin_state=inventory["admin_state"], admin_state_str=inventory["admin_state_str"], communicating=inventory["communicating"], firmware_loaded_date=inventory["img_load_date"], firmware_version=inventory["img_pnum_running"], installed_date=inventory["installed"], last_report_date=inventory["last_rpt_date"], part_number=inventory["part_num"], serial_number=inventory["serial_num"], temperature=inventory["temperature"], temperature_unit="C", mid_state=inventory["mid_state"], grid_state=inventory["grid_state"], control_error=inventory["control_error"], collar_state=inventory["collar_state"], ) pyenphase-2.3.1/src/pyenphase/models/common.py000066400000000000000000000060151505013723300214220ustar00rootroot00000000000000"""Model for common properties of an envoy.""" from dataclasses import dataclass, field from ..models.meters import CtType, EnvoyPhaseMode @dataclass(slots=True) class CommonProperties: """ Model for common properties of an envoy shared amongst all updaters. One set are properties set during probe to share amongst updaters and with clients. These should be reset at each probe run. More properties can be added, originators should handle reset as needed by adding to reset_probe_properties to reset at probe or in a different way or leave existing all lifetime. """ # probe properties here, also add to reset_probe_properties # shared amongst production updaters, needs reset before probe production_fallback_list: list[str] = field( default_factory=list[str] ) #: Fallback production endpoints for Metered without CT #: ACB batteries report current power in production and in ensemble secctl #: Ensemble updater should only report combined ACB en Encharge if production report has data acb_batteries_reported: int = 0 #: imeter flag from /info. If true envoy is metered type #: used to detect metered without actual CT installed to enable picking correct data imeter_info: bool = False # other properties from here, reset by originator # controlled by meters updater phase_count: int = 0 #: number of phases configured in envoy ct_meter_count: int = 0 #: number of active ct meters phase_mode: EnvoyPhaseMode | None = None #: phase mode configured in the CT meters consumption_meter_type: CtType | None = ( None #: What type of consumption meter is installed, if installed ) production_meter_type: CtType | None = ( None #: What type of production meter is installed, if installed ) storage_meter_type: CtType | None = ( None #: What type of storage meter is installed, if installed ) # controlled by production updater active_phase_count: int = 0 #: number of phases actually reporting phase data # controlled by # none_probe_property: str = "hello world" #: test def reset_probe_properties(self, is_metered: bool = False) -> None: """ Reset common properties that are initialized during probe. probe properties are reset at each probe to avoid sticking memories. This should exclude common properties set outside of probe or controlled by a specific updater, these should be reset at different moments by different method by updaters or owner reset properties: production_fallback_list shared amongst production updaters ACB_batteries_reported shared between production and Ensemble imeter_info setting from /info indicating envoy is metered type """ # shared amongst production updaters self.production_fallback_list = [] self.imeter_info = is_metered # shared between production and ensemble self.acb_batteries_reported = 0 # shared by pyenphase-2.3.1/src/pyenphase/models/dry_contacts.py000066400000000000000000000075401505013723300226320ustar00rootroot00000000000000"""Model for the Enpower dry contact relays.""" # Data Source: URL_DRY_CONTACT_SETTINGS (primary) & URL_DRY_CONTACT_STATUS from __future__ import annotations from dataclasses import dataclass from enum import StrEnum from typing import Any class DryContactStatus(StrEnum): OPEN = "open" CLOSED = "closed" class DryContactAction(StrEnum): APPLY = "apply" SHED = "shed" SCHEDULE = "schedule" NONE = "none" class DryContactType(StrEnum): NONE = "NONE" PV = "PV" LOAD = "LOAD" THIRD_PARTY_PV = "3RD-PV" class DryContactMode(StrEnum): MANUAL = "manual" STATE_OF_CHARGE = "soc" @dataclass(slots=True) class EnvoyDryContactStatus: """Model for the Enpower dry contact relay status.""" id: str status: str @classmethod def from_api(cls, relay: dict[str, Any]) -> EnvoyDryContactStatus: """Initialize from the API.""" return cls( id=relay["id"], status=DryContactStatus(relay["status"]), ) @dataclass(slots=True) class EnvoyDryContactSettings: """Model for the Enpower dry contact relay settings.""" id: str black_start: float | None essential_end_time: float | None essential_start_time: float | None generator_action: DryContactAction grid_action: DryContactAction load_name: str manual_override: bool | None micro_grid_action: DryContactAction mode: DryContactMode override: bool priority: float | None pv_serial_nb: list[Any] soc_high: float soc_low: float type: DryContactType @classmethod def from_api(cls, relay: dict[str, Any]) -> EnvoyDryContactSettings: """Initialize from the API.""" return cls( id=relay["id"], black_start=relay.get("black_s_start"), essential_end_time=relay.get("essential_end_time"), essential_start_time=relay.get("essential_start_time"), generator_action=DryContactAction(relay["gen_action"]), grid_action=DryContactAction(relay["grid_action"]), load_name=relay["load_name"], manual_override=( relay["manual_override"] == "true" if relay.get("manual_override") else None ), micro_grid_action=DryContactAction(relay["micro_grid_action"]), mode=DryContactMode(relay["mode"]), override=relay["override"] == "true", priority=relay.get("priority"), pv_serial_nb=relay["pv_serial_nb"], soc_high=relay["soc_high"], soc_low=relay["soc_low"], type=DryContactType(relay["type"]), ) def to_api(self) -> dict[str, Any]: """Convert to API format.""" retval = { "id": self.id, "gen_action": self.generator_action, "grid_action": self.grid_action, "load_name": self.load_name, # boolean values must be passed to the API as a lowercase string "manual_override": str(self.manual_override).lower(), "micro_grid_action": self.micro_grid_action, "mode": self.mode, "override": str(self.override).lower(), "pv_serial_nb": self.pv_serial_nb, "soc_high": self.soc_high, "soc_low": self.soc_low, "type": self.type, } if self.black_start is not None: retval["black_s_start"] = self.black_start if self.essential_start_time is not None: retval["essential_start_time"] = self.essential_start_time if self.essential_end_time is not None: retval["essential_end_time"] = self.essential_end_time if self.priority is not None: retval["priority"] = self.priority if self.manual_override is not None: retval["manual_override"] = self.manual_override return retval pyenphase-2.3.1/src/pyenphase/models/encharge.py000066400000000000000000000070511505013723300217070ustar00rootroot00000000000000"""Model for the Encharge/IQ Battery.""" # Data Source: URL_ENSEMBLE_INVENTORY (primary) & URL_ENCHARGE_BATTERY from __future__ import annotations from dataclasses import dataclass from typing import Any @dataclass(slots=True) class EnvoyEnchargeAggregate: """Model for Encharge aggregate data.""" available_energy: int backup_reserve: int state_of_charge: int reserve_state_of_charge: int configured_reserve_state_of_charge: int max_available_capacity: int @classmethod def from_api(cls, data: dict[str, Any]) -> EnvoyEnchargeAggregate: """Initialize from the API.""" return cls( available_energy=data["ENC_agg_avail_energy"], backup_reserve=data["ENC_agg_backup_energy"], state_of_charge=data["ENC_agg_soc"], reserve_state_of_charge=data["adjusted_backup_soc"], configured_reserve_state_of_charge=data["configured_backup_soc"], max_available_capacity=data["Enc_max_available_capacity"], ) @dataclass(slots=True) class EnvoyEnchargePower: """Model for the Encharge/IQ battery power.""" apparent_power_mva: int real_power_mw: int soc: int @classmethod def from_api(cls, power: dict[str, Any]) -> EnvoyEnchargePower: """Initialize from the API.""" return cls( apparent_power_mva=power["apparent_power_mva"], real_power_mw=power["real_power_mw"], soc=power["soc"], ) @dataclass(slots=True) class EnvoyEncharge: """Model for the Encharge/IQ battery.""" admin_state: int admin_state_str: str bmu_firmware_version: str comm_level_2_4_ghz: int comm_level_sub_ghz: int communicating: bool dc_switch_off: bool encharge_capacity: int encharge_revision: int firmware_loaded_date: int firmware_version: str installed_date: int last_report_date: int led_status: int max_cell_temp: int operating: bool | None part_number: str percent_full: int serial_number: str temperature: int temperature_unit: str zigbee_dongle_fw_version: str | None @classmethod def from_api(cls, inventory: dict[str, Any]) -> EnvoyEncharge: """Initialize from the API.""" return cls( admin_state=inventory["admin_state"], admin_state_str=inventory["admin_state_str"], bmu_firmware_version=inventory["bmu_fw_version"], comm_level_2_4_ghz=inventory["comm_level_2_4_ghz"], comm_level_sub_ghz=inventory["comm_level_sub_ghz"], communicating=inventory["communicating"], dc_switch_off=inventory["dc_switch_off"], encharge_capacity=inventory["encharge_capacity"], encharge_revision=inventory["encharge_rev"], firmware_loaded_date=inventory["img_load_date"], firmware_version=inventory["img_pnum_running"], installed_date=inventory["installed"], last_report_date=inventory["last_rpt_date"], led_status=inventory["led_status"], max_cell_temp=inventory["maxCellTemp"], operating=inventory.get("operating"), # Firmware 8+ does not have this key part_number=inventory["part_num"], percent_full=inventory["percentFull"], serial_number=inventory["serial_num"], temperature=inventory["temperature"], temperature_unit="C", zigbee_dongle_fw_version=inventory.get( "zigbee_dongle_fw_version" ), # Firmware 8+ does not have this key ) pyenphase-2.3.1/src/pyenphase/models/enpower.py000066400000000000000000000037201505013723300216110ustar00rootroot00000000000000"""Model for the Enpower/IQ System Controller.""" # Data Source: URL_ENSEMBLE_INVENTORY from __future__ import annotations from dataclasses import dataclass from typing import Any @dataclass(slots=True) class EnvoyEnpower: """Model for the Enpower/IQ System Controller.""" grid_mode: str admin_state: int admin_state_str: str comm_level_2_4_ghz: int comm_level_sub_ghz: int communicating: bool firmware_loaded_date: int firmware_version: str installed_date: int last_report_date: int mains_admin_state: str mains_oper_state: str operating: bool | None part_number: str serial_number: str temperature: int temperature_unit: str zigbee_dongle_fw_version: str | None @classmethod def from_api( cls, enpower: dict[str, Any], ) -> EnvoyEnpower: """Initialize from the API.""" return cls( grid_mode=enpower["Enpwr_grid_mode"], admin_state=enpower["admin_state"], admin_state_str=enpower["admin_state_str"], comm_level_2_4_ghz=enpower["comm_level_2_4_ghz"], comm_level_sub_ghz=enpower["comm_level_sub_ghz"], communicating=enpower["communicating"], firmware_loaded_date=enpower["img_load_date"], firmware_version=enpower["img_pnum_running"], installed_date=enpower["installed"], last_report_date=enpower["last_rpt_date"], mains_admin_state=enpower["mains_admin_state"], mains_oper_state=enpower["mains_oper_state"], operating=enpower.get("operating"), # Firmware 8+ does not have this field part_number=enpower["part_num"], serial_number=enpower["serial_num"], temperature=enpower["temperature"], temperature_unit="F", zigbee_dongle_fw_version=enpower.get( "zigbee_dongle_fw_version" ), # Firmware 8+ does not have this field ) pyenphase-2.3.1/src/pyenphase/models/envoy.py000066400000000000000000000115341505013723300212740ustar00rootroot00000000000000"""Model for an envoy.""" from dataclasses import dataclass, field from typing import Any from .acb import EnvoyACBPower, EnvoyBatteryAggregate from .c6combiner import EnvoyC6CC from .collar import EnvoyCollar from .dry_contacts import EnvoyDryContactSettings, EnvoyDryContactStatus from .encharge import EnvoyEncharge, EnvoyEnchargeAggregate, EnvoyEnchargePower from .enpower import EnvoyEnpower from .inverter import EnvoyInverter from .meters import EnvoyMeterData from .system_consumption import EnvoySystemConsumption from .system_production import EnvoySystemProduction from .tariff import EnvoyTariff @dataclass(slots=True) class EnvoyData: """ Data Model for an envoy. Data is extract from raw data requested from Envoy. All raw data is also available as-received in :any:`raw`. For details on data models refer to the individual model descriptions. """ #: dict of found Encharge device information, keyed by Encharge serial number. encharge_inventory: dict[str, EnvoyEncharge] | None = None #: dict of Enpower device power and charge state, keyed by Enpower serial number. encharge_power: dict[str, EnvoyEnchargePower] | None = None #: Aggregated data for all Encharge devices encharge_aggregate: EnvoyEnchargeAggregate | None = None #: EnchargePower device information enpower: EnvoyEnpower | None = None #: Power and soc for aggregated ACB batteries acb_power: EnvoyACBPower | None = None #: aggregated Enphase and ACB battery SOC and total capacity battery_aggregate: EnvoyBatteryAggregate | None = None #: IQ Meter collar, only for Envoy with IQ Meter Collar integrated consumption metering installed collar: EnvoyCollar | None = None #: Envoy C6 Combiner controller c6cc: EnvoyC6CC | None = None #: Consumption power & energy values, only for Envoy metered with CT installed system_consumption: EnvoySystemConsumption | None = None #: Solar Production power & energy values system_production: EnvoySystemProduction | None = None #: Individual phase consumption power & energy values, keyed by :any:`PhaseNames`, #: only for Envoy metered with CT installed system_consumption_phases: dict[str, EnvoySystemConsumption | None] | None = None #: Individual phase solar production power & energy values, keyed by :any:`PhaseNames`, #: only for Envoy metered with CT installed system_production_phases: dict[str, EnvoySystemProduction | None] | None = None #: Net consumption power & energy values, a.k.a. grid import/export, #: only for Envoy metered with CT installed system_net_consumption: EnvoySystemConsumption | None = None #: Individual phase Net consumption power & energy values, keyed by :any:`PhaseNames`, #: only for Envoy metered with CT installed system_net_consumption_phases: dict[str, EnvoySystemConsumption | None] | None = ( None ) #: Production CT power & energy values , only for Envoy metered with production CT installed ctmeter_production: EnvoyMeterData | None = None #: Production CT Meter data #: Consumption CT power & energy values , only for Envoy metered with consumption CT installed ctmeter_consumption: EnvoyMeterData | None = None #: Consumption CT Meter data #: Storage CT power & energy values , only for Envoy metered with storage CT installed ctmeter_storage: EnvoyMeterData | None = None #: Storage CT Meter data #: Individual phase production ct power & energy values, keyed by :any:`PhaseNames`, #: only for Envoy metered with production CT installed ctmeter_production_phases: dict[str, EnvoyMeterData] | None = None #: Individual phase consumption ct power & energy values, keyed by :any:`PhaseNames`, #: only for Envoy metered with consumption installed ctmeter_consumption_phases: dict[str, EnvoyMeterData] | None = None #: Individual phase storage ct power & energy values, keyed by :any:`PhaseNames`, #: only for Envoy metered with storage CT installed ctmeter_storage_phases: dict[str, EnvoyMeterData] | None = None #: dict of Dry contact relay status, keyed by relay ID dry_contact_status: dict[str, EnvoyDryContactStatus] = field(default_factory=dict) #: dict of Dry contact relay settings, keyed by relay ID dry_contact_settings: dict[str, EnvoyDryContactSettings] = field( default_factory=dict ) #: dict of Solar inverter data, keyed by inverter serial-number inverters: dict[str, EnvoyInverter] = field(default_factory=dict) #: Tariff information from Envoy tariff: EnvoyTariff | None = None # Raw data is exposed so we can __eq__ the data to see if # anything has changed and consumers of the library can # avoid dispatching data if nothing has changed. #: All request responses received from Envoy in last :any:`Envoy.update`, keyed by endpoint raw: dict[str, Any] = field(default_factory=dict) pyenphase-2.3.1/src/pyenphase/models/home.py000066400000000000000000000076421505013723300210710ustar00rootroot00000000000000"""Model for ENphase Envoy home data""" from __future__ import annotations from dataclasses import dataclass from typing import Any def _find_active_interface( interfaces: list[dict[str, Any]], name: str ) -> dict[str, Any] | None: """Find an interface by interface name.""" if interfaces: for interface in interfaces: if interface.get("interface") == name: return interface return None @dataclass(slots=True) class EnvoyInterfaceInformation: """Envoy Interface information data model.""" primary_interface: str #: name of primary (active) interface mac: str #: mac of primary interface, "unknown" if missing interface_type: str #: primary interface type, "unknown" if missing dhcp: bool #: interfaces uses DHCP, False if missing software_build_epoch: int #: envoy software build time, 0 if missing timezone: str #: Timezone set in Envoy, "unknown" if missing @classmethod def from_api(cls, data: dict[str, Any]) -> EnvoyInterfaceInformation | None: """ Return active interface information configured in Envoy Parses the received JSON into EnvoyInterfaceInformation model data Source data must be sourced from URL_HOME. software_build_epoch, timezone are returned as is. network.primary_interface is returned as is, and used to find interface data in network.interfaces from which type, mac and dhcp are returned. Not all Envoy firmware version may return all data. Defaults for str members is unknown, int 0 and bool False Example json returned from /home endpoint: .. code-block:: json { "software_build_epoch": 1719503966, "timezone": "Europe/Amsterdam", "current_date": "04/24/2025", "current_time": "14:53", "network": { "web_comm": true, "ever_reported_to_enlighten": true, "last_enlighten_report_time": 1745499043, "primary_interface": "eth0", "interfaces": [ { "type": "ethernet", "interface": "eth0", "mac": "00:1D:C0:7F:B6:3B", "dhcp": true, "ip": "192.168.3.112", "signal_strength": 1, "signal_strength_max": 1, "carrier": true }, { "signal_strength": 0, "signal_strength_max": 0, "type": "wifi", "interface": "wlan0", "mac": "60:E8:5B:AB:9D:64", "dhcp": true, "ip": null, "carrier": false, "supported": true, "present": true, "configured": false, "status": "connecting" } ] } :param data: json returned by /home endpoint :return: Envoy interface configuration information """ # not sure if all firmware versions have all the needed information if not (network := data.get("network")): return None if not ( interface := _find_active_interface( network.get("interfaces"), (name := network.get("primary_interface")) ) ): return None return cls( primary_interface=name, mac=interface.get("mac", "unknown"), interface_type=interface.get("type", "unknown"), dhcp=interface.get("dhcp", False), software_build_epoch=data.get("software_build_epoch", 0), timezone=data.get("timezone", "unknown"), ) pyenphase-2.3.1/src/pyenphase/models/inverter.py000066400000000000000000000063531505013723300217750ustar00rootroot00000000000000"""Model for an Enphase microinverter.""" from __future__ import annotations from dataclasses import dataclass from typing import Any @dataclass(slots=True) class EnvoyInverter: """Model for an Enphase microinverter.""" serial_number: str last_report_date: int last_report_watts: int max_report_watts: int dc_voltage: float | None = None dc_current: float | None = None ac_voltage: float | None = None ac_current: float | None = None ac_frequency: float | None = None temperature: float | None = None lifetime_energy: int | None = None energy_produced: float | None = None energy_today: int | None = None last_report_duration: int | None = None @classmethod def from_v1_api(cls, data: dict[str, Any]) -> EnvoyInverter: """Initialize from the V1 API.""" return cls( serial_number=data["serialNumber"], last_report_date=data["lastReportDate"], last_report_watts=data["lastReportWatts"], max_report_watts=data["maxReportWatts"], ) @classmethod def from_device_data(cls, data: dict[str, Any]) -> EnvoyInverter: """Initialize from device data.""" def safe_convert_milli(value: float | None) -> float | None: return value / 1000.0 if value is not None else None # if these don't exist they raise KeyError to not use this model but use from_v1_api channel = data["channels"][0] last_reading = channel["lastReading"] # these four are minimal data set, if one fails keyerror will raise serial_number = data["sn"] last_report_date = last_reading["endDate"] last_report_watts = channel["watts"]["now"] max_report_watts = channel["watts"]["max"] # get data to avoid divide errors if None duration = last_reading.get("duration") period_joules_produced = last_reading.get("joulesProduced") lifetime = channel.get("lifetime") lifetime_joulesProduced = lifetime.get("joulesProduced") if lifetime else None watthours = channel.get("wattHours") return cls( serial_number=serial_number, last_report_date=last_report_date, last_report_watts=last_report_watts, max_report_watts=max_report_watts, # next ones may return none as they didn't exist before in the model dc_voltage=safe_convert_milli(last_reading.get("dcVoltageINmV")), dc_current=safe_convert_milli(last_reading.get("dcCurrentINmA")), ac_voltage=safe_convert_milli(last_reading.get("acVoltageINmV")), ac_current=safe_convert_milli(last_reading.get("acCurrentInmA")), ac_frequency=safe_convert_milli(last_reading.get("acFrequencyINmHz")), temperature=last_reading.get("channelTemp"), lifetime_energy=round(lifetime_joulesProduced / 3600.0) if lifetime_joulesProduced is not None else None, energy_produced=round(period_joules_produced / duration / 3.6, 3) if period_joules_produced is not None and duration is not None else None, energy_today=watthours.get("today") if watthours else None, last_report_duration=duration, ) pyenphase-2.3.1/src/pyenphase/models/meters.py000066400000000000000000000065261505013723300214400ustar00rootroot00000000000000"""Model for the Envoy's CT Meters.""" from __future__ import annotations from dataclasses import dataclass from enum import StrEnum from typing import Any, TypedDict class EnvoyPhaseMode(StrEnum): SPLIT = "split" THREE = "three" SINGLE = "single" class CtType(StrEnum): PRODUCTION = "production" NET_CONSUMPTION = "net-consumption" TOTAL_CONSUMPTION = "total-consumption" STORAGE = "storage" class CtState(StrEnum): ENABLED = "enabled" DISABLED = "disabled" class CtMeterStatus(StrEnum): NORMAL = "normal" NOT_METERING = "not-metering" CHECK_WIRING = "check-wiring" class CtStatusFlags(StrEnum): PODUCTION_IMBALANCE = "production-imbalance" NEGATIVE_PRODUCTION = "negative-production" POWER_ON_UNUSED_PHASE = "power-on-unused-phase" NEGATIVE_TOTAL_CONSUMPTION = "negative-total-consumption" class CtMeterData(TypedDict): eid: str state: CtState measurementType: CtType phaseMode: EnvoyPhaseMode phaseCount: int meteringStatus: CtMeterStatus statusFlags: list[CtStatusFlags] @dataclass(slots=True) class EnvoyMeterData: """Model for the Envoy's CT meter data.""" eid: str #: CT meter identifier timestamp: int #: Time of measurement energy_delivered: int #: Lifetime Energy delivered through CT energy_received: int #: Lifetime Energy received through CT active_power: int #: Current power exchang through CT, positive is delivering, negative is receiving power_factor: float #: Power factor reported for CT measurement voltage: float #: Voltage on circuit, when multiphase sum of voltage of individual phases current: float #: current measured by CT frequency: float #: frequency measured by CT state: CtState | None #: Actual State of CT measurement_type: CtType | None #: Measurement type configured for CT metering_status: CtMeterStatus | None #: CT Measurement status status_flags: list[CtStatusFlags] | None #: CT status flags. @classmethod def from_api( cls, data: dict[str, Any], meter_status: CtMeterData ) -> EnvoyMeterData: """Return CT meter data from /ivp/meters and ivp/meters/reading json.""" return cls( eid=data["eid"], timestamp=data["timestamp"], energy_delivered=round(data["actEnergyDlvd"]), energy_received=round(data["actEnergyRcvd"]), active_power=round(data["activePower"]), power_factor=data["pwrFactor"], voltage=data["voltage"], current=data["current"], frequency=data["freq"], state=meter_status["state"], measurement_type=meter_status["measurementType"], metering_status=meter_status["meteringStatus"], # statusFlags are not present in older firmware versions status_flags=meter_status.get("statusFlags"), ) @classmethod def from_phase( cls, data: dict[str, Any], meter_status: CtMeterData, phase: int ) -> EnvoyMeterData | None: """Return CT meter phase data from /ivp/meters and ivp/meters/reading json.""" if "channels" not in data: return None # phase data is in channels list channels = data["channels"] if len(channels) <= phase: return None return cls.from_api(channels[phase], meter_status) pyenphase-2.3.1/src/pyenphase/models/storage_settings.py000066400000000000000000000000001505013723300235020ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/models/system_consumption.py000066400000000000000000000046471505013723300241250ustar00rootroot00000000000000"""Model for the Envoy's consumption data.""" # Data Source: URL_PRODUCTION from __future__ import annotations from dataclasses import dataclass from typing import Any @dataclass(slots=True) class EnvoySystemConsumption: """Model for the Envoy's (total, house) consumption data.""" watt_hours_lifetime: int #: Lifetime Energy consumed (total-consumption, house) watt_hours_last_7_days: ( int #: Energy consumed in previous 7 days (not including today) ) watt_hours_today: ( int #: Energy consumption since start of day (total-consumption, house) ) watts_now: int #: Current Power consumption (total-consumption, house) @classmethod def from_production( cls, data: dict[str, Any], consumption_segment: int = 0 ) -> EnvoySystemConsumption: """ Initialize from the production API. :param data: JSON reply from /production endpoint :return: Lifetime, last 7 days, todays energy and current power for total-consumption """ consumption = data["consumption"][consumption_segment] return cls( watt_hours_lifetime=round(consumption["whLifetime"]), watt_hours_last_7_days=round(consumption["whLastSevenDays"]), watt_hours_today=round(consumption["whToday"]), watts_now=round(consumption["wNow"]), ) @classmethod def from_production_phase( cls, data: dict[str, Any], phase: int, consumption_segment: int = 0 ) -> EnvoySystemConsumption | None: """ Initialize from the production API phase data. :param data: JSON reply from /production endpoint :param phase: Index (0-2) in [lines] segment for which to return data :return: Lifetime, last 7 days, todays energy and current power for total-consumption phase """ # get first consumtpion section which is the total-consumption one. consumption = data["consumption"][consumption_segment] phases = consumption.get("lines") # Only return data if phase is present. if not phases or phase >= len(phases): return None phase_data = phases[phase] return cls( watt_hours_lifetime=round(phase_data["whLifetime"]), watt_hours_last_7_days=round(phase_data["whLastSevenDays"]), watt_hours_today=round(phase_data["whToday"]), watts_now=round(phase_data["wNow"]), ) pyenphase-2.3.1/src/pyenphase/models/system_production.py000066400000000000000000000070241505013723300237250ustar00rootroot00000000000000"""Model for the Envoy's production data.""" # Data Source: URL_PRODUCTION from __future__ import annotations from dataclasses import dataclass from typing import Any def find_dict_by_key(all_production: list[dict[str, Any]], key: str) -> dict[str, Any]: """Find a dict by key.""" for production in all_production: if production.get("type") == key: return production raise ValueError(f"{key} is missing") @dataclass(slots=True) class EnvoySystemProduction: """Model for the Envoy's production data.""" watt_hours_lifetime: int #: Lifetime Energy produced watt_hours_last_7_days: ( int #: Energy produced in previous 7 days (not including today) ) watt_hours_today: int #: Energy produced since start of day watts_now: int #: Current Power production @classmethod def from_v1_api(cls, data: dict[str, Any]) -> EnvoySystemProduction: """ Initialize from the V1 API. :param data: JSON reply from api/v1/production endpoint :return: Lifetime, last seven days, todays energy and current power for solar production """ return cls( watt_hours_lifetime=data["wattHoursLifetime"], watt_hours_last_7_days=data["wattHoursSevenDays"], watt_hours_today=data["wattHoursToday"], watts_now=data["wattsNow"], ) @classmethod def from_production(cls, data: dict[str, Any]) -> EnvoySystemProduction: """ Initialize from the production API. :param data: JSON reply from /production endpoint :return: Lifetime, last seven days, todays energy and current power for solar production """ all_production = data["production"] eim = find_dict_by_key(all_production, "eim") inverters = find_dict_by_key(all_production, "inverters") # This is backwards compatible with envoy_reader # envoy metered without configured CT has whLifetime and wNow in inverters # whLastSevenDays and whToday are incorrect for both so either can be used now_source = eim if eim["activeCount"] else inverters return cls( watt_hours_lifetime=round(now_source["whLifetime"]), watt_hours_last_7_days=round( eim.get("whLastSevenDays") or inverters.get("whLastSevenDays") or 0 ), watt_hours_today=round(eim.get("whToday") or inverters.get("whToday") or 0), watts_now=round(now_source["wNow"]), ) @classmethod def from_production_phase( cls, data: dict[str, Any], phase: int ) -> EnvoySystemProduction | None: """ Initialize from the production API phase data. :param data: JSON reply from /production endpoint :param phase: Index (0-2) in [lines] segment for which to return data :return: Lifetime, last seven days, todays energy and current power for production phase """ all_production = data["production"] eim = find_dict_by_key(all_production, "eim") # if {production[type=eim]{Lines[]} or phase is missing return None phases = eim.get("lines") if not phases or phase >= len(phases): return None phase_data = phases[phase] return cls( watt_hours_lifetime=round(phase_data.get("whLifetime") or 0), watt_hours_last_7_days=round(phase_data.get("whLastSevenDays") or 0), watt_hours_today=round(phase_data.get("whToday") or 0), watts_now=round(phase_data.get("wNow") or 0), ) pyenphase-2.3.1/src/pyenphase/models/tariff.py000066400000000000000000000073101505013723300214040ustar00rootroot00000000000000"""Model for the Envoy tariff data.""" from __future__ import annotations from dataclasses import dataclass from enum import StrEnum from typing import Any class EnvoyStorageMode(StrEnum): BACKUP = "backup" SELF_CONSUMPTION = "self-consumption" SAVINGS = "economy" LEGACY_SAVINGS = "savings-mode" @dataclass class EnvoyTariff: """Model for the Envoy tariff data.""" currency: dict[str, Any] logger: str | None date: str | None storage_settings: EnvoyStorageSettings | None single_rate: dict[str, Any] seasons: list[Any] seasons_sell: list[Any] | None @classmethod def from_api(cls, data: dict[str, Any]) -> EnvoyTariff: """Initialize from the API.""" return cls( currency=data["currency"], logger=data.get("logger"), date=data.get("date"), storage_settings=( EnvoyStorageSettings.from_api(data["storage_settings"]) if data.get("storage_settings") else None ), single_rate=data["single_rate"], seasons=data["seasons"], seasons_sell=data.get("seasons_sell"), ) def to_api(self) -> dict[str, Any]: """Convert to API format.""" retval = { "currency": self.currency, "single_rate": self.single_rate, "seasons": self.seasons, } if self.logger: retval["logger"] = self.logger if self.date: retval["date"] = self.date if self.seasons_sell: retval["seasons_sell"] = self.seasons_sell if self.storage_settings: retval["storage_settings"] = self.storage_settings.to_api() return retval @dataclass class EnvoyStorageSettings: """Model for the Envoy storage settings.""" mode: EnvoyStorageMode | None operation_mode_sub_type: str reserved_soc: float very_low_soc: int charge_from_grid: bool date: str | None opt_schedules: bool | None @classmethod def from_api(cls, data: dict[str, Any]) -> EnvoyStorageSettings: """Initialize from the API.""" return cls( # It appears a `mode` value of `economy` and `savings-mode` is interchangeable # However, the Enlighten app is using the `economy` value, so we will convert # `savings-mode` to `economy` # some fw return None in storage_settings["data"] mode=( EnvoyStorageMode.SAVINGS if data["mode"] == EnvoyStorageMode.LEGACY_SAVINGS.value else EnvoyStorageMode(data["mode"]) if data.get("mode") else None ), operation_mode_sub_type=data["operation_mode_sub_type"], reserved_soc=data["reserved_soc"], very_low_soc=data["very_low_soc"], charge_from_grid=data["charge_from_grid"], # Some firmware versions don't return date date=data.get("date"), # opt_schedules was added in 8.2.42xx opt_schedules=data.get("opt_schedules"), ) def to_api(self) -> dict[str, Any]: """Convert to API format.""" retval = { "mode": self.mode.value if self.mode else None, "operation_mode_sub_type": self.operation_mode_sub_type, "reserved_soc": self.reserved_soc, "very_low_soc": self.very_low_soc, "charge_from_grid": self.charge_from_grid, } if self.date is not None: retval["date"] = self.date # opt_schedules was added in 8.2.42xx if self.opt_schedules is not None: retval["opt_schedules"] = self.opt_schedules return retval pyenphase-2.3.1/src/pyenphase/py.typed000066400000000000000000000000001505013723300177600ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/ssl.py000066400000000000000000000034451505013723300174540ustar00rootroot00000000000000"""Pyenphase SSL helper""" import contextlib import ssl def create_no_verify_ssl_context() -> ssl.SSLContext: """ Return an SSL context that does not verify the server certificate. This is a copy of aiohttp's create_default_context() function, with the ssl verify turned off and old SSL versions enabled. https://github.com/aio-libs/aiohttp/blob/33953f110e97eecc707e1402daa8d543f38a189b/aiohttp/connector.py#L911 :return: SSLcontext with ssl verify turned off. """ sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) sslcontext.check_hostname = False sslcontext.verify_mode = ssl.CERT_NONE # Allow all ciphers rather than only Python 3.10 default sslcontext.set_ciphers("DEFAULT") with contextlib.suppress(AttributeError): # This only works for OpenSSL >= 1.0.0 sslcontext.options |= ssl.OP_NO_COMPRESSION sslcontext.set_default_verify_paths() return sslcontext #: Alias for :any:`create_no_verify_ssl_context` #: #: .. code-block:: python #: #: import aiohttp #: from pyenphase.ssl import NO_VERIFY_SSL_CONTEXT #: #: connector = aiohttp.TCPConnector(ssl=NO_VERIFY_SSL_CONTEXT) #: client = aiohttp.ClientSession(connector=connector) NO_VERIFY_SSL_CONTEXT = create_no_verify_ssl_context() def create_default_ssl_context() -> ssl.SSLContext: """Create aiohttp client with default SSL context.""" return ssl.create_default_context() #: Alias for :any:`create_default_ssl_context` #: #: .. code-block:: python #: #: import aiohttp #: from pyenphase.ssl import SSL_CONTEXT #: #: connector = aiohttp.TCPConnector(ssl=SSL_CONTEXT) #: async with aiohttp.ClientSession(connector=connector) as client: #: response = await client.post(url, json=json, data=data) #: SSL_CONTEXT = create_default_ssl_context() pyenphase-2.3.1/src/pyenphase/updaters/000077500000000000000000000000001505013723300201225ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/updaters/__init__.py000066400000000000000000000000001505013723300222210ustar00rootroot00000000000000pyenphase-2.3.1/src/pyenphase/updaters/api_v1_production.py000066400000000000000000000057521505013723300241320ustar00rootroot00000000000000import logging from typing import Any from ..const import ( METERED_NOCT_FALLBACK_TO_INVERTERS, URL_PRODUCTION_V1, SupportedFeatures, ) from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS from ..models.envoy import EnvoyData from ..models.system_production import EnvoySystemProduction from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyApiV1ProductionUpdater(EnvoyUpdater): """Class to handle updates for production data.""" async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this updater and return SupportedFeatures.""" if SupportedFeatures.PRODUCTION in discovered_features: # Already discovered from another updater return None try: response: dict[str, Any] = await self._json_probe_request(URL_PRODUCTION_V1) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug( "Production endpoint not found at %s: %s", URL_PRODUCTION_V1, e ) return None # Envoy metered without configured CT returns zero's in V1 Production Endpoint # sometimes wNow has a value. When Watthours Today, last 7 days and lifetime # are all 3 zero is an indication envoy is not reporting summed values in V1 production # return None to fallback to inverters section in production endpoint. if all( value == 0 for key, value in response.items() if key.startswith("wattHours") ): _LOGGER.debug( "Detected broken production endpoint bug at %s: %s", URL_PRODUCTION_V1, response, ) return None # Envoy metered without configured CT in firmware 8.2.8.2.4264 and newer returns # stalled values in V1 Production Endpoint. When /info is_meter is set, no configured # CT are found and firmware is 8.2.4264 or newer, it is an indication envoy is not reporting proper # summed values in V1 production. Return None to fallback to inverters section in production endpoint. if ( self._common_properties.imeter_info and self._envoy_version >= METERED_NOCT_FALLBACK_TO_INVERTERS and not self._common_properties.ct_meter_count ): _LOGGER.debug( "Detected metered Envoy without connected CT will fallback to using inverter values from /production. fw %s", self._envoy_version, ) return None self._supported_features |= SupportedFeatures.PRODUCTION return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this updater.""" production_data = await self._json_request(URL_PRODUCTION_V1) envoy_data.raw[URL_PRODUCTION_V1] = production_data envoy_data.system_production = EnvoySystemProduction.from_v1_api( production_data ) pyenphase-2.3.1/src/pyenphase/updaters/api_v1_production_inverters.py000066400000000000000000000036001505013723300262210ustar00rootroot00000000000000import logging from typing import Any from ..const import URL_PRODUCTION_INVERTERS, SupportedFeatures from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS, EnvoyAuthenticationRequired from ..models.envoy import EnvoyData from ..models.inverter import EnvoyInverter from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyApiV1ProductionInvertersUpdater(EnvoyUpdater): """Class to handle updates for inverter production data.""" async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this updater and return SupportedFeatures.""" if SupportedFeatures.INVERTERS in discovered_features: # Already discovered from another updater return None try: await self._json_probe_request(URL_PRODUCTION_INVERTERS) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug( "Production endpoint not found at %s: %s", URL_PRODUCTION_INVERTERS, e ) return None except EnvoyAuthenticationRequired as e: _LOGGER.debug( "Disabling inverters production endpoint as user does" " not have access to %s: %s", URL_PRODUCTION_INVERTERS, e, ) return None self._supported_features |= SupportedFeatures.INVERTERS return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this updater.""" inverters_data: list[dict[str, Any]] = await self._json_request( URL_PRODUCTION_INVERTERS ) envoy_data.raw[URL_PRODUCTION_INVERTERS] = inverters_data envoy_data.inverters = { inverter["serialNumber"]: EnvoyInverter.from_v1_api(inverter) for inverter in inverters_data } pyenphase-2.3.1/src/pyenphase/updaters/base.py000066400000000000000000000040011505013723300214010ustar00rootroot00000000000000from abc import abstractmethod from collections.abc import Awaitable, Callable from typing import Any import aiohttp from awesomeversion import AwesomeVersion from ..const import SupportedFeatures from ..exceptions import EnvoyHTTPStatusError from ..json import json_loads from ..models.common import CommonProperties from ..models.envoy import EnvoyData class EnvoyUpdater: """Base class for Envoy updaters.""" def __init__( self, envoy_version: AwesomeVersion, probe_request: Callable[[str], Awaitable[aiohttp.ClientResponse]], request: Callable[[str], Awaitable[aiohttp.ClientResponse]], common_properties: CommonProperties, ) -> None: """Initialize the Envoy endpoint.""" self._envoy_version = envoy_version self._probe_request = probe_request self._request = request self._supported_features = SupportedFeatures(0) self._common_properties = common_properties async def _json_request(self, end_point: str) -> Any: """Make a request to the Envoy and return the JSON response.""" response = await self._request(end_point) if not (200 <= response.status < 300): raise EnvoyHTTPStatusError(response.status, str(response.url)) return json_loads(end_point, await response.read()) async def _json_probe_request(self, end_point: str) -> Any: """Make a probe request to the Envoy and return the JSON response.""" response = await self._probe_request(end_point) if not (200 <= response.status < 300): raise EnvoyHTTPStatusError(response.status, str(response.url)) return json_loads(end_point, await response.read()) @abstractmethod async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this updater and return SupportedFeatures.""" @abstractmethod async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this updater.""" pyenphase-2.3.1/src/pyenphase/updaters/device_data_inverters.py000066400000000000000000000077111505013723300250330ustar00rootroot00000000000000import logging from typing import Any from ..const import URL_DEVICE_DATA, SupportedFeatures from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS, EnvoyAuthenticationRequired from ..models.envoy import EnvoyData from ..models.inverter import EnvoyInverter from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyDeviceDataInvertersUpdater(EnvoyUpdater): """Class to handle updates for inverter device data.""" def _filter_inverters(self, inverters_data: dict[str, Any]) -> dict[str, Any]: """Filter and return only PCU inverter devices.""" return { inverter["sn"]: inverter for id, inverter in inverters_data.items() if id not in ("deviceCount", "deviceDataLimit") and inverter["devName"] == "pcu" } async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this updater and return SupportedFeatures.""" if SupportedFeatures.INVERTERS in discovered_features: # Already discovered from another updater return None try: inverters_data = await self._json_probe_request(URL_DEVICE_DATA) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug( "Device data endpoint not found at %s: %s", URL_DEVICE_DATA, e ) return None except EnvoyAuthenticationRequired as e: _LOGGER.debug( "Disabling inverters device data endpoint as user does" " not have access to %s: %s", URL_DEVICE_DATA, e, ) return None # make sure deviceCount did not reach deviceDataLimit, # if more inverters are actually installed they will not be included # if so fall back to inverter production page try: if inverters_data["deviceCount"] >= inverters_data["deviceDataLimit"]: _LOGGER.debug( "Disabling inverters device data endpoint " " as deviceCount reached deviceDataLimit %s: %s - %s", URL_DEVICE_DATA, inverters_data["deviceCount"], inverters_data["deviceDataLimit"], ) return None except KeyError as e: # if doesn't have these keys, fall back to inverter production _LOGGER.debug( "Disabling inverters device data endpoint " " as not all data fields are present %s: %s", URL_DEVICE_DATA, e, ) return None # verify minimal data set to replace inverter production data is present try: filtered_inverters = self._filter_inverters(inverters_data) _ = { sn: EnvoyInverter.from_device_data(inverter) for sn, inverter in filtered_inverters.items() } except KeyError as e: # if any inverter returned None there's something messed by json format, fall back to production _LOGGER.debug( "Disabling inverters device data endpoint " " as not all data fields are present %s: %s", URL_DEVICE_DATA, e, ) return None self._supported_features |= ( SupportedFeatures.INVERTERS | SupportedFeatures.DETAILED_INVERTERS ) return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this updater.""" inverters_data: dict[str, Any] = await self._json_request(URL_DEVICE_DATA) envoy_data.raw[URL_DEVICE_DATA] = inverters_data filtered_inverters = self._filter_inverters(inverters_data) envoy_data.inverters = { sn: EnvoyInverter.from_device_data(inverter) for sn, inverter in filtered_inverters.items() } pyenphase-2.3.1/src/pyenphase/updaters/ensemble.py000066400000000000000000000150151505013723300222700ustar00rootroot00000000000000"""Pyenphase Ensemble updater class.""" import logging from typing import Any from ..const import ( ENSEMBLE_MIN_VERSION, URL_DRY_CONTACT_SETTINGS, URL_DRY_CONTACT_STATUS, URL_ENCHARGE_BATTERY, URL_ENSEMBLE_INVENTORY, URL_ENSEMBLE_SECCTRL, SupportedFeatures, ) from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS from ..models.acb import EnvoyBatteryAggregate from ..models.c6combiner import EnvoyC6CC from ..models.collar import EnvoyCollar from ..models.dry_contacts import EnvoyDryContactSettings, EnvoyDryContactStatus from ..models.encharge import EnvoyEncharge, EnvoyEnchargeAggregate, EnvoyEnchargePower from ..models.enpower import EnvoyEnpower from ..models.envoy import EnvoyData from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyEnembleUpdater(EnvoyUpdater): """Class to handle updates for Ensemble devices.""" async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this updater and return SupportedFeatures.""" if self._envoy_version < ENSEMBLE_MIN_VERSION: _LOGGER.debug("Firmware too old for Ensemble support") return None # Check for various Ensemble support # The Ensemble Inventory endpoint will tell us if we have Enpower or Encharge support try: result = await self._json_probe_request(URL_ENSEMBLE_INVENTORY) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug("Ensemble Inventory endpoint not found: %s", e) else: if not result or "error" in result: # Newer firmware with no Ensemble devices returns an empty list _LOGGER.debug("No Ensemble devices found") return None for item in result: if item["type"] == "ENPOWER": self._supported_features |= SupportedFeatures.ENPOWER if item["type"] == "ENCHARGE": self._supported_features |= SupportedFeatures.ENCHARGE if item["type"] == "COLLAR": self._supported_features |= SupportedFeatures.COLLAR if item["type"] == "C6 COMBINER CONTROLLER": self._supported_features |= SupportedFeatures.C6CC return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this updater.""" # Update Enpower and Encharge data if supported supported_features = self._supported_features ensemble_inventory_data: list[dict[str, Any]] = await self._json_request( URL_ENSEMBLE_INVENTORY ) envoy_data.raw[URL_ENSEMBLE_INVENTORY] = ensemble_inventory_data ensemble_secctrl_data: dict[str, Any] = await self._json_request( URL_ENSEMBLE_SECCTRL ) envoy_data.raw[URL_ENSEMBLE_SECCTRL] = await self._json_request( URL_ENSEMBLE_SECCTRL ) if supported_features & SupportedFeatures.ENCHARGE: encharge_power_data: dict[str, Any] = await self._json_request( URL_ENCHARGE_BATTERY ) envoy_data.raw[URL_ENCHARGE_BATTERY] = encharge_power_data power: dict[str, Any] = { device["serial_num"]: device for device in encharge_power_data["devices:"] } inventory: dict[str, Any] = {} for item in ensemble_inventory_data: if item["type"] != "ENCHARGE": continue inventory = {device["serial_num"]: device for device in item["devices"]} envoy_data.encharge_inventory = { serial: EnvoyEncharge.from_api(inventory[serial]) for serial in inventory } envoy_data.encharge_power = { serial: EnvoyEnchargePower.from_api(power[serial]) for serial in power } envoy_data.encharge_aggregate = EnvoyEnchargeAggregate.from_api( ensemble_secctrl_data ) if supported_features & SupportedFeatures.ENPOWER: # Update Enpower data for item in ensemble_inventory_data: if item["type"] != "ENPOWER": continue enpower_data = item["devices"][0] envoy_data.enpower = EnvoyEnpower.from_api(enpower_data) # Update dry contact data dry_contact_status_data: dict[str, Any] = await self._json_request( URL_DRY_CONTACT_STATUS ) envoy_data.raw[URL_DRY_CONTACT_STATUS] = dry_contact_status_data dry_contact_settings_data: dict[str, Any] = await self._json_request( URL_DRY_CONTACT_SETTINGS ) envoy_data.raw[URL_DRY_CONTACT_SETTINGS] = dry_contact_settings_data envoy_data.dry_contact_status = { relay["id"]: EnvoyDryContactStatus.from_api(relay) for relay in dry_contact_status_data["dry_contacts"] } envoy_data.dry_contact_settings = { relay["id"]: EnvoyDryContactSettings.from_api(relay) for relay in dry_contact_settings_data["dry_contacts"] } # production updater will set common_properties.ACB_batteries_reported # to count of ACB batteries. Check if production report found # acb batteries and if so report combined soc and max capacity # for Encharge and ACB batteries if self._common_properties.acb_batteries_reported: envoy_data.battery_aggregate = EnvoyBatteryAggregate.from_api( ensemble_secctrl_data ) # IQ Meter collar seems like a single instance only if supported_features & SupportedFeatures.COLLAR: # Update Collar data for item in ensemble_inventory_data: if item["type"] != "COLLAR": continue if item.get("devices"): collar_data = item["devices"][0] envoy_data.collar = EnvoyCollar.from_api(collar_data) # C6 Combiner seems like a single instance only if supported_features & SupportedFeatures.C6CC: # Update C6CC data for item in ensemble_inventory_data: if item["type"] != "C6 COMBINER CONTROLLER": continue if item.get("devices"): c6cc_data = item["devices"][0] envoy_data.c6cc = EnvoyC6CC.from_api(c6cc_data) pyenphase-2.3.1/src/pyenphase/updaters/generator.py000066400000000000000000000033501505013723300224630ustar00rootroot00000000000000import logging from typing import Any from ..const import ENSEMBLE_MIN_VERSION, URL_GEN_CONFIG, SupportedFeatures from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS from ..models.envoy import EnvoyData from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyGeneratorUpdater(EnvoyUpdater): """Class to handle updates for Generator information.""" async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this updater and return SupportedFeatures.""" if self._envoy_version < ENSEMBLE_MIN_VERSION: _LOGGER.debug("Firmware too old for Ensemble support") return None # If there's no Enpower smart switch, we can skip the generator probe if SupportedFeatures.ENPOWER not in discovered_features: return None # Check for generator support try: result = await self._json_probe_request(URL_GEN_CONFIG) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug("Generator config endpoint not found: %s", e) else: if not result or "error" in result or "err" in result: # Newer firmware with no generator configured returns an empty dict _LOGGER.debug("No generator found") return None self._supported_features |= SupportedFeatures.GENERATOR return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the generator data if supported.""" generator_config_data: list[dict[str, Any]] = await self._json_request( URL_GEN_CONFIG ) envoy_data.raw[URL_GEN_CONFIG] = generator_config_data pyenphase-2.3.1/src/pyenphase/updaters/meters.py000066400000000000000000000243741505013723300220050ustar00rootroot00000000000000"""Envoy CT Meter updater""" import logging from typing import Any from ..const import ( ENDPOINT_URL_METERS, ENDPOINT_URL_METERS_READINGS, PHASENAMES, SupportedFeatures, ) from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS, EnvoyAuthenticationRequired from ..models.envoy import EnvoyData from ..models.meters import CtMeterData, CtState, CtType, EnvoyMeterData, EnvoyPhaseMode from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyMetersUpdater(EnvoyUpdater): """Class to handle updates for Envoy CT Meters.""" end_point = ENDPOINT_URL_METERS #: endpoint in envoy to read CT meter configuration data_end_point = ( ENDPOINT_URL_METERS_READINGS #: endpoint in Envoy to read CT meter data ) production_meter_type: CtType | None = None #: Production CT type consumption_meter_type: CtType | None = None #: Consumpion CT type (net or total) storage_meter_type: CtType | None = None #: Storage CT type phase_mode: EnvoyPhaseMode | None = ( None #: Phase mode configured (Single, Dual or Three) ) phase_count: int = 0 #: Number of phases configured and measured in the Envoy ct_meters_count: int = ( 0 #: Number of installed current transformers (Envoy metered Only) ) production_meter_eid: str | None = None #: Production CT identifier consumption_meter_eid: str | None = None #: Consumption CT identifier storage_meter_eid: str | None = None #: Storage CT identifier def _set_common_properties(self) -> None: """Set Envoy common properties we own and control""" self._common_properties.phase_count = self.phase_count self._common_properties.phase_mode = self.phase_mode self._common_properties.consumption_meter_type = self.consumption_meter_type self._common_properties.production_meter_type = self.production_meter_type self._common_properties.storage_meter_type = self.storage_meter_type self._common_properties.ct_meter_count = self.ct_meters_count async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """ Probe the Envoy meter setup and return CT and multiphase details in SupportedFeatures. Get CT configuration info from ivp/meters in the Envoy and determine any multi-phase setup. Set Threephase or Dualphase supported feature if Envoy is in one of these setups. Set common property information in envoy data for phase_count, ct_meter_count, phase_mode and ct_consumption_meter type to default or found values. These 4 are owned by this updater. :param discovered_features: Features discovered by other updaters for this updater to skip :return: features discovered by this updater """ if SupportedFeatures.CTMETERS in discovered_features: # Already discovered from another updater return None # set defaults for common properties we own and will set self.phase_count = 1 # Default to 1 phase which is overall numbers only self.ct_meters_count = ( 0 # default no CT, are pnly available on Envoy metered if configured ) self.phase_mode = ( None # Phase mode only if ct meters are installed and configured ) self.production_meter_type = None # Type of production CT If installed self.consumption_meter_type = None # Type of consumption ct if installed. self.storage_meter_type = None # Type of storage CT If installed # set the defaults in global common properties in case we exit early self._set_common_properties() # set local defaults not shared in common properties self.production_meter_eid = None self.consumption_meter_eid = None self.storage_meter_eid = None try: meters_json: list[CtMeterData] | None = await self._json_probe_request( self.end_point ) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug("Meters endpoint not found at %s: %s", self.end_point, e) return None except EnvoyAuthenticationRequired as e: # For D3.18.10 (f0855e) systems return 401 even if the user has access # to the endpoint so we must skip it. _LOGGER.debug( "Skipping meters endpoint as user does not have access to %s: %s", self.end_point, e, ) return None else: # The endpoint can return valid json on error # in the form of {"error": "message"} if not meters_json or "error" in meters_json: # Non metered Envoy return empty list _LOGGER.debug("No CT Meters found") return None # Set multiphase features so other providers/models can return phase data self.phase_count = 1 for meter in meters_json: if meter["state"] == CtState.ENABLED: # remember what mode meter is installed if meter["measurementType"] == CtType.PRODUCTION: self.production_meter_type = meter["measurementType"] # save meter identifier for link between /ivp/meters and /ivp/meters/readings self.production_meter_eid = meter["eid"] if meter["measurementType"] in ( CtType.NET_CONSUMPTION, CtType.TOTAL_CONSUMPTION, ): self.consumption_meter_type = meter["measurementType"] # save meter identifier for link between /ivp/meters and /ivp/meters/readings self.consumption_meter_eid = meter["eid"] if meter["measurementType"] == CtType.STORAGE: self.storage_meter_type = meter["measurementType"] self.storage_meter_eid = meter["eid"] self.ct_meters_count += 1 self.phase_mode = meter["phaseMode"] self.phase_count = max(self.phase_count, meter["phaseCount"]) # report phase configuration in envoy common property self._set_common_properties() # report DUAL or THREE PHASE feature for use by next updaters probe if self.phase_count > 2: self._supported_features |= SupportedFeatures.THREEPHASE elif self.phase_count > 1: self._supported_features |= SupportedFeatures.DUALPHASE # Signal CTMETERS feature back so update will get used if we found ctmeters if self.ct_meters_count > 0: self._supported_features |= SupportedFeatures.CTMETERS return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """ Update the Envoy data from the meters endpoints. Get CT configuration from ivp/meters and CT readings from ivp/meters/readings. Store data as EnvoyMeterData in ctmeter_production, ctmeter_consumption if either meter is found enabled during probe. If more then 1 phase is active, store phase data in ctmeter_production_phases and ctmeter_consumption_phases. Match data in ivp/meters and ivp/meters/reading using the eid field in both datasets. :param envoy_data: EnvoyData structure to store data to """ # get the meter status and readings from the envoy meters_status: list[CtMeterData] = await self._json_request(self.end_point) meters_readings: list[dict[str, Any]] = await self._json_request( self.data_end_point ) envoy_data.raw[self.end_point] = meters_status envoy_data.raw[self.data_end_point] = meters_readings phase_range = self.phase_count if self.phase_count > 1 else 0 # no longer assume 2 lists are the same order and size. Size differs in fw 8.3.5025 for meter in meters_readings: eid = meter["eid"] if not ( ct_data := next((ct for ct in meters_status if ct["eid"] == eid), None) ): # fw 8.3.5025 also has a 3rd entry for storage ct even if not configured # and it has all zeros values. Ignore data if eid not in meter status continue # match meter identifier to one found during probe to identify production or consumption if eid == self.production_meter_eid and self.production_meter_type: # if production meter was enabled (type known) store ctmeter production data envoy_data.ctmeter_production = EnvoyMeterData.from_api(meter, ct_data) # if more then 1 phase configured store ctmeter phase data if phase_data := _meter_data_for_phases(phase_range, meter, ct_data): envoy_data.ctmeter_production_phases = phase_data # match meter identifier to one found during probe to identify production or consumption elif eid == self.consumption_meter_eid and self.consumption_meter_type: # if consumption meter was enabled (type known) store ctmeter consumption data envoy_data.ctmeter_consumption = EnvoyMeterData.from_api(meter, ct_data) # if more then 1 phase configured store ctmeter phase data if phase_data := _meter_data_for_phases(phase_range, meter, ct_data): envoy_data.ctmeter_consumption_phases = phase_data # match meter identifier to storage meter found during probe elif eid == self.storage_meter_eid and self.storage_meter_type: # if storage meter was enabled (type known) store ctmeter storage data envoy_data.ctmeter_storage = EnvoyMeterData.from_api(meter, ct_data) if phase_data := _meter_data_for_phases(phase_range, meter, ct_data): envoy_data.ctmeter_storage_phases = phase_data def _meter_data_for_phases( phase_range: int, meter: dict[str, Any], ct_data: CtMeterData ) -> dict[str, EnvoyMeterData]: """Build a dictionary of phase data for multi-phase setups.""" meter_data_by_phase: dict[str, EnvoyMeterData] = { PHASENAMES[phase_idx]: data for phase_idx in range(phase_range) if (data := EnvoyMeterData.from_phase(meter, ct_data, phase_idx)) } return meter_data_by_phase pyenphase-2.3.1/src/pyenphase/updaters/production.py000066400000000000000000000236171505013723300226730ustar00rootroot00000000000000"""Envoy production data updater""" import logging from typing import Any from ..const import PHASENAMES, URL_PRODUCTION, URL_PRODUCTION_JSON, SupportedFeatures from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS, EnvoyAuthenticationRequired from ..models.acb import EnvoyACBPower from ..models.envoy import EnvoyData from ..models.system_consumption import EnvoySystemConsumption from ..models.system_production import EnvoySystemProduction from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyProductionUpdater(EnvoyUpdater): """Class to handle updates for production data.""" end_point = URL_PRODUCTION allow_inverters_fallback = False async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this endpoint and return SupportedFeatures.""" discovered_total_consumption = ( SupportedFeatures.TOTAL_CONSUMPTION in discovered_features ) discovered_net_consumption = ( SupportedFeatures.NET_CONSUMPTION in discovered_features ) discovered_production = SupportedFeatures.PRODUCTION in discovered_features # check if prior updaters reported supporting ACB discovered_acb_storage = SupportedFeatures.ACB in discovered_features # obtain any registered production endpoints that replied back from the common list # when in allow_inverters_fallback mode we can use the first one that worked working_endpoints: list[str] = self._common_properties.production_fallback_list if ( discovered_total_consumption and discovered_net_consumption and discovered_production ): # Already discovered from another updater return None # when active allow_inverters_fallback use first successful endpoint registered in the list if self.allow_inverters_fallback and working_endpoints: self.end_point = working_endpoints[0] try: production_json: dict[str, Any] = await self._json_probe_request( self.end_point ) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug("Production endpoint not found at %s: %s", self.end_point, e) return None except EnvoyAuthenticationRequired as e: # For URL_PRODUCTION some systems return 401 even if the user has access # to the endpoint. For URL_PRODUCTION_JSON some early non-metered V7 versions # return 401 when using aiohttp. Non-metered fallback to v1 production anyway. # if there's really no-auth the v1/production will catch it. if self.end_point in (URL_PRODUCTION, URL_PRODUCTION_JSON): _LOGGER.debug( "Skipping production endpoint as user does" " not have access to %s: %s", self.end_point, e, ) return None _LOGGER.debug( # pragma: no cover "Authentication required for %s, re-raising exception: %s", self.end_point, e, ) raise # pragma: no cover active_phase_count = 0 phase_count = self._common_properties.phase_count # if endpoint is not in the list of successful endpoints yet, add it. if ( self.end_point not in working_endpoints and not self.allow_inverters_fallback ): working_endpoints.append(self.end_point) if not discovered_production: production: list[dict[str, Any]] | None = production_json.get("production") if production: for type_ in production: if type_["type"] == "eim" and type_["activeCount"]: self._supported_features |= SupportedFeatures.METERING self._supported_features |= SupportedFeatures.PRODUCTION if lines := type_.get("lines"): active_phase_count = len(lines) break if ( self.allow_inverters_fallback and type_["type"] == "inverters" and type_["activeCount"] ): self._supported_features |= SupportedFeatures.PRODUCTION break consumption: list[dict[str, Any]] | None = production_json.get("consumption") if consumption: for meter in consumption: # first test activecount >0 before trying measurementType if not meter.get("activeCount"): continue meter_type = meter["measurementType"] if ( not discovered_total_consumption and meter_type == "total-consumption" ): self._supported_features |= SupportedFeatures.TOTAL_CONSUMPTION if not discovered_net_consumption and meter_type == "net-consumption": self._supported_features |= SupportedFeatures.NET_CONSUMPTION if lines := meter.get("lines"): active_phase_count = len(lines) acb_storage: list[dict[str, Any]] | None = production_json.get("storage") # if storage segment is present and activeCount > 0 then signal as detected # only report we support ACB if no prior updater did # only report first list element as that's where ACB data is if ( acb_storage and not discovered_acb_storage and (acb_count := acb_storage[0].get("activeCount")) ): # signal we can provide ACB data self._supported_features |= SupportedFeatures.ACB # save acb batt count in common properties so Ensemble can report combined soc self._common_properties.acb_batteries_reported = acb_count # register the updated fallback endpoints to the common list self._common_properties.production_fallback_list = working_endpoints self._common_properties.active_phase_count = active_phase_count if active_phase_count != phase_count and phase_count > 1: _LOGGER.debug( "Expected Production report Phase values not available, %s of %s", active_phase_count, phase_count, ) return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this endpoint.""" production_data = await self._json_request(self.end_point) envoy_data.raw[self.end_point] = production_data # get phase count from Envoy common features phase_count = self._common_properties.phase_count if self._supported_features & SupportedFeatures.PRODUCTION: envoy_data.system_production = EnvoySystemProduction.from_production( production_data ) # get production phase data if more then 1 phase is found phase_production: dict[str, EnvoySystemProduction | None] = {} for phase in range(phase_count if phase_count > 1 else 0): production: EnvoySystemProduction | None = ( EnvoySystemProduction.from_production_phase(production_data, phase) ) # exclude None phases that are expected but not actually in production report if production: phase_production[PHASENAMES[phase]] = production if len(phase_production) > 0: envoy_data.system_production_phases = phase_production if ( self._supported_features & SupportedFeatures.NET_CONSUMPTION or self._supported_features & SupportedFeatures.TOTAL_CONSUMPTION ): envoy_data.system_consumption = EnvoySystemConsumption.from_production( production_data ) envoy_data.system_net_consumption = EnvoySystemConsumption.from_production( production_data, consumption_segment=1 ) # get consumption phase data if more then 1 phase is found phase_consumption: dict[str, EnvoySystemConsumption | None] = {} phase_net_consumption: dict[str, EnvoySystemConsumption | None] = {} for phase in range(phase_count if phase_count > 1 else 0): consumption: EnvoySystemConsumption | None = ( EnvoySystemConsumption.from_production_phase(production_data, phase) ) # exclude None phases that are expected but not actually in production report if consumption: phase_consumption[PHASENAMES[phase]] = consumption if net_consumption := ( EnvoySystemConsumption.from_production_phase( production_data, phase, consumption_segment=1 ) ): phase_net_consumption[PHASENAMES[phase]] = net_consumption if len(phase_consumption) > 0: envoy_data.system_consumption_phases = phase_consumption if len(phase_net_consumption) > 0: envoy_data.system_net_consumption_phases = phase_net_consumption if self._supported_features & SupportedFeatures.ACB: envoy_data.acb_power = EnvoyACBPower.from_production(production_data) class EnvoyProductionJsonUpdater(EnvoyProductionUpdater): """Class to handle updates for production data from the production.json endpoint.""" end_point = URL_PRODUCTION_JSON class EnvoyProductionJsonFallbackUpdater(EnvoyProductionJsonUpdater): """ Class to handle updates for production data from the production.json endpoint. This class will accept the production endpoint even if activeCount is 0 """ allow_inverters_fallback = True pyenphase-2.3.1/src/pyenphase/updaters/tariff.py000066400000000000000000000030221505013723300217440ustar00rootroot00000000000000import logging from ..const import URL_TARIFF, SupportedFeatures from ..exceptions import ENDPOINT_PROBE_EXCEPTIONS, EnvoyAuthenticationRequired from ..models.envoy import EnvoyData from ..models.tariff import EnvoyTariff from .base import EnvoyUpdater _LOGGER = logging.getLogger(__name__) class EnvoyTariffUpdater(EnvoyUpdater): """Class to handle updates for the Envoy tariff data.""" async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: try: result = await self._json_probe_request(URL_TARIFF) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug("Tariff endpoint not found: %s", e) return None except EnvoyAuthenticationRequired as e: # For some systems (Firmware: 3.9.36) return 401 for # this endpoint even if the user is authenticated. _LOGGER.debug( "Skipping tariff endpoint as user does not have access to %s: %s", URL_TARIFF, e, ) return None else: if not result or "error" in result: _LOGGER.debug("No tariff data found") return None self._supported_features |= SupportedFeatures.TARIFF return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: raw = await self._json_request(URL_TARIFF) envoy_data.raw[URL_TARIFF] = raw envoy_data.tariff = EnvoyTariff.from_api(raw["tariff"]) pyenphase-2.3.1/tests/000077500000000000000000000000001505013723300146525ustar00rootroot00000000000000pyenphase-2.3.1/tests/__init__.py000066400000000000000000000000001505013723300167510ustar00rootroot00000000000000pyenphase-2.3.1/tests/__snapshots__/000077500000000000000000000000001505013723300174705ustar00rootroot00000000000000pyenphase-2.3.1/tests/__snapshots__/test_acb.ambr000066400000000000000000017222301505013723300221260ustar00rootroot00000000000000# serializer version: 1 # name: test_with_7_x_firmware[4.10.35] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 567, 'current': 8.389, 'eid': 704643584, 'energy_delivered': 16908209, 'energy_received': 17357690, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.5, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.736, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 394, 'current': 5.208, 'eid': 1778385425, 'energy_delivered': 10220652, 'energy_received': 8001772, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.549, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.867, }), : dict({ 'active_power': 173, 'current': 3.181, 'eid': 1778385426, 'energy_delivered': 6687557, 'energy_received': 9355918, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.426, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.869, }), }), 'ctmeter_production': dict({ 'active_power': 166, 'current': 3.692, 'eid': 704643328, 'energy_delivered': 26785327, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.394, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.659, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 83, 'current': 1.844, 'eid': 1778385169, 'energy_delivered': 13398798, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.4, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.824, }), : dict({ 'active_power': 84, 'current': 1.848, 'eid': 1778385170, 'energy_delivered': 13386530, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.387, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.836, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122002010484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301305, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002010484', 'temperature': None, }), '122002010488': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301325, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010488', 'temperature': None, }), '122002010489': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301317, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002010489', 'temperature': None, }), '122002010577': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301322, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010577', 'temperature': None, }), '122002011248': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 227, 'serial_number': '122002011248', 'temperature': None, }), '122002017614': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301321, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 294, 'serial_number': '122002017614', 'temperature': None, }), '122002017669': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002017669', 'temperature': None, }), '122002021078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301323, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002021078', 'temperature': None, }), '122002021258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021258', 'temperature': None, }), '122002021381': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301308, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021381', 'temperature': None, }), '122002026181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301309, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 287, 'serial_number': '122002026181', 'temperature': None, }), '122002026190': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301313, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122002026190', 'temperature': None, }), '122002027876': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301332, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002027876', 'temperature': None, }), '122002040286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '122002040286', 'temperature': None, }), '122002041618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301318, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '122002041618', 'temperature': None, }), '122002041621': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301310, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 197, 'serial_number': '122002041621', 'temperature': None, }), '122002041626': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002041626', 'temperature': None, }), '122002041636': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301319, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002041636', 'temperature': None, }), '122002041638': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122002041638', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'date': '2023-05-11 19:46:56 UTC', 'source': 'Tariff', 'version': '00.00.01', }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'single_rate': dict({ 'rate': 0.21835, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695301309, 'lastReportWatts': 13, 'maxReportWatts': 287, 'serialNumber': '122002026181', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 299, 'serialNumber': '122002040286', }), dict({ 'devType': 1, 'lastReportDate': 1695301305, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002010484', }), dict({ 'devType': 1, 'lastReportDate': 1695301313, 'lastReportWatts': 13, 'maxReportWatts': 289, 'serialNumber': '122002026190', }), dict({ 'devType': 1, 'lastReportDate': 1695301318, 'lastReportWatts': 13, 'maxReportWatts': 292, 'serialNumber': '122002041618', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021258', }), dict({ 'devType': 1, 'lastReportDate': 1695301325, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010488', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002041626', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 12, 'maxReportWatts': 305, 'serialNumber': '122002017669', }), dict({ 'devType': 1, 'lastReportDate': 1695301321, 'lastReportWatts': 13, 'maxReportWatts': 294, 'serialNumber': '122002017614', }), dict({ 'devType': 1, 'lastReportDate': 1695301332, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002027876', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 227, 'serialNumber': '122002011248', }), dict({ 'devType': 1, 'lastReportDate': 1695301323, 'lastReportWatts': 12, 'maxReportWatts': 306, 'serialNumber': '122002021078', }), dict({ 'devType': 1, 'lastReportDate': 1695301308, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021381', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122002041638', }), dict({ 'devType': 1, 'lastReportDate': 1695301319, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002041636', }), dict({ 'devType': 1, 'lastReportDate': 1695301310, 'lastReportWatts': 13, 'maxReportWatts': 197, 'serialNumber': '122002041621', }), dict({ 'devType': 1, 'lastReportDate': 1695301317, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002010489', }), dict({ 'devType': 1, 'lastReportDate': 1695301322, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010577', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 26785327.449, 'actEnergyRcvd': 0.001, 'activePower': 166.489, 'apparentEnergy': 33655488.016, 'apparentPower': 457.211, 'channels': list([ dict({ 'actEnergyDlvd': 13398797.544, 'actEnergyRcvd': 0.001, 'activePower': 82.913, 'apparentEnergy': 16836537.224, 'apparentPower': 228.406, 'current': 1.844, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 82.913, 'pwrFactor': 0.4, 'reactEnergyLagg': 5169167.875, 'reactEnergyLead': 0.0, 'reactivePower': 191.751, 'timestamp': 1695301419, 'voltage': 123.824, }), dict({ 'actEnergyDlvd': 13386529.904, 'actEnergyRcvd': 0.0, 'activePower': 83.576, 'apparentEnergy': 16818950.792, 'apparentPower': 228.804, 'current': 1.848, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 83.576, 'pwrFactor': 0.387, 'reactEnergyLagg': 5122825.568, 'reactEnergyLead': 0.001, 'reactivePower': 191.574, 'timestamp': 1695301419, 'voltage': 123.836, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 3.692, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 166.489, 'pwrFactor': 0.394, 'reactEnergyLagg': 10291993.443, 'reactEnergyLead': 0.001, 'reactivePower': 383.325, 'timestamp': 1695301419, 'voltage': 247.659, }), dict({ 'actEnergyDlvd': 16908208.78, 'actEnergyRcvd': 17357690.272, 'activePower': 566.864, 'apparentEnergy': 41943778.605, 'apparentPower': 1063.035, 'channels': list([ dict({ 'actEnergyDlvd': 10220652.219, 'actEnergyRcvd': 8001771.78, 'activePower': 393.965, 'apparentEnergy': 22610499.739, 'apparentPower': 668.739, 'current': 5.208, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 393.965, 'pwrFactor': 0.549, 'reactEnergyLagg': 87750.153, 'reactEnergyLead': 7841689.25, 'reactivePower': -337.072, 'timestamp': 1695301419, 'voltage': 123.867, }), dict({ 'actEnergyDlvd': 6687556.561, 'actEnergyRcvd': 9355918.492, 'activePower': 172.899, 'apparentEnergy': 19333278.866, 'apparentPower': 394.296, 'current': 3.181, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 172.899, 'pwrFactor': 0.426, 'reactEnergyLagg': 455469.296, 'reactEnergyLead': 5687697.556, 'reactivePower': -243.946, 'timestamp': 1695301419, 'voltage': 123.869, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 8.389, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 566.864, 'pwrFactor': 0.5, 'reactEnergyLagg': 543219.449, 'reactEnergyLead': 13529386.807, 'reactivePower': -581.018, 'timestamp': 1695301419, 'voltage': 247.736, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3189.788, 'measurementType': 'total-consumption', 'pwrFactor': 0.25, 'reactPwr': -959.115, 'readingTime': 1695301418, 'rmsCurrent': 12.88, 'rmsVoltage': 247.663, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 9709.997, 'varhLagLifetime': 10835212.67, 'varhLagToday': 3120.67, 'varhLeadLifetime': 13529386.465, 'varhLeadToday': 4281.465, 'wNow': 806.405, 'whLastSevenDays': 163075.411, 'whLifetime': 26335790.411, 'whToday': 7412.411, }), dict({ 'activeCount': 1, 'apprntPwr': 1155.626, 'measurementType': 'net-consumption', 'pwrFactor': 0.53, 'reactPwr': -577.46, 'readingTime': 1695301418, 'rmsCurrent': 9.195, 'rmsVoltage': 247.696, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 0, 'varhLagLifetime': 543219.449, 'varhLagToday': 0, 'varhLeadLifetime': 13529386.464, 'varhLeadToday': 0, 'wNow': 640.874, 'whLastSevenDays': 0, 'whLifetime': 16908208.46, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 19, 'readingTime': 1695301333, 'type': 'inverters', 'wNow': 246, 'whLifetime': 26890410, }), dict({ 'activeCount': 1, 'apprntPwr': 457.492, 'measurementType': 'production', 'pwrFactor': 0.35, 'reactPwr': 381.654, 'readingTime': 1695301418, 'rmsCurrent': 3.685, 'rmsVoltage': 247.631, 'type': 'eim', 'vahLifetime': 33655487.75, 'vahToday': 3288.75, 'varhLagLifetime': 10291993.22, 'varhLagToday': 3108.22, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 165.53, 'whLastSevenDays': 179155.351, 'whLifetime': 26785327.351, 'whToday': 139.351, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 163075, 'watt_hours_lifetime': 26335790, 'watt_hours_today': 7412, 'watts_now': 806, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 16908208, 'watt_hours_today': 0, 'watts_now': 641, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 179155, 'watt_hours_lifetime': 26785327, 'watt_hours_today': 139, 'watts_now': 166, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': None, 'logger': None, 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'seasons_sell': None, 'single_rate': dict({ 'rate': 0.21835, }), 'storage_settings': None, }), }) # --- # name: test_with_7_x_firmware[7.3.130] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202218023114': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342554, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218023114', 'temperature': None, }), '202218024705': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342553, 'last_report_duration': None, 'last_report_watts': 8, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218024705', 'temperature': None, }), '202218025399': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342465, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 350, 'serial_number': '202218025399', 'temperature': None, }), '202218026521': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342464, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218026521', 'temperature': None, }), '202218028926': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342462, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218028926', 'temperature': None, }), '202218029586': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342643, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218029586', 'temperature': None, }), '202218031593': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342674, 'last_report_duration': None, 'last_report_watts': 20, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218031593', 'temperature': None, }), '202218034002': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342555, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218034002', 'temperature': None, }), '202218035988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342613, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218035988', 'temperature': None, }), '202218036214': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342432, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218036214', 'temperature': None, }), '202218036386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342584, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218036386', 'temperature': None, }), '202218037990': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342525, 'last_report_duration': None, 'last_report_watts': 16, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218037990', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691342432, 'lastReportWatts': 13, 'maxReportWatts': 347, 'serialNumber': '202218036214', }), dict({ 'devType': 1, 'lastReportDate': 1691342462, 'lastReportWatts': 17, 'maxReportWatts': 346, 'serialNumber': '202218028926', }), dict({ 'devType': 1, 'lastReportDate': 1691342643, 'lastReportWatts': 12, 'maxReportWatts': 347, 'serialNumber': '202218029586', }), dict({ 'devType': 1, 'lastReportDate': 1691342613, 'lastReportWatts': 17, 'maxReportWatts': 348, 'serialNumber': '202218035988', }), dict({ 'devType': 1, 'lastReportDate': 1691342553, 'lastReportWatts': 8, 'maxReportWatts': 345, 'serialNumber': '202218024705', }), dict({ 'devType': 1, 'lastReportDate': 1691342554, 'lastReportWatts': 14, 'maxReportWatts': 346, 'serialNumber': '202218023114', }), dict({ 'devType': 1, 'lastReportDate': 1691342525, 'lastReportWatts': 16, 'maxReportWatts': 348, 'serialNumber': '202218037990', }), dict({ 'devType': 1, 'lastReportDate': 1691342555, 'lastReportWatts': 14, 'maxReportWatts': 345, 'serialNumber': '202218034002', }), dict({ 'devType': 1, 'lastReportDate': 1691342464, 'lastReportWatts': 9, 'maxReportWatts': 347, 'serialNumber': '202218026521', }), dict({ 'devType': 1, 'lastReportDate': 1691342465, 'lastReportWatts': 10, 'maxReportWatts': 350, 'serialNumber': '202218025399', }), dict({ 'devType': 1, 'lastReportDate': 1691342584, 'lastReportWatts': 9, 'maxReportWatts': 346, 'serialNumber': '202218036386', }), dict({ 'devType': 1, 'lastReportDate': 1691342674, 'lastReportWatts': 20, 'maxReportWatts': 348, 'serialNumber': '202218031593', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5108.445, 'measurementType': 'total-consumption', 'pwrFactor': 0.27, 'reactPwr': -1565.844, 'readingTime': 1691342712, 'rmsCurrent': 21.153, 'rmsVoltage': 241.499, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 22482.589, 'varhLagLifetime': 998203.693, 'varhLagToday': 1456.693, 'varhLeadLifetime': 10691664.429, 'varhLeadToday': 13981.429, 'wNow': 1393.191, 'whLastSevenDays': 365473.825, 'whLifetime': 10154380.825, 'whToday': 15177.825, }), dict({ 'activeCount': 1, 'apprntPwr': 2118.15, 'measurementType': 'net-consumption', 'pwrFactor': 0.59, 'reactPwr': -1596.082, 'readingTime': 1691342712, 'rmsCurrent': 17.572, 'rmsVoltage': 241.437, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 0, 'varhLagLifetime': 258967.196, 'varhLagToday': 0, 'varhLeadLifetime': 10652517.939, 'varhLeadToday': 0, 'wNow': 1214.696, 'whLastSevenDays': 0, 'whLifetime': 7116675.502, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 12, 'readingTime': 1691342674, 'type': 'inverters', 'wNow': 158, 'whLifetime': 142373, }), dict({ 'activeCount': 1, 'apprntPwr': 432.848, 'measurementType': 'production', 'pwrFactor': 0.41, 'reactPwr': -30.238, 'readingTime': 1691342712, 'rmsCurrent': 3.581, 'rmsVoltage': 241.56, 'type': 'eim', 'vahLifetime': 4846260.619, 'vahToday': 1977.619, 'varhLagLifetime': 739236.497, 'varhLagToday': 1457.497, 'varhLeadLifetime': 39146.49, 'varhLeadToday': 40.49, 'wNow': 178.495, 'whLastSevenDays': 149972.105, 'whLifetime': 3659506.105, 'whToday': 86.105, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 365474, 'watt_hours_lifetime': 10154381, 'watt_hours_today': 15178, 'watts_now': 1393, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7116676, 'watt_hours_today': 0, 'watts_now': 1215, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 149972, 'watt_hours_lifetime': 3659506, 'watt_hours_today': 86, 'watts_now': 178, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.3.130_no_consumption] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 3625, 'current': 30.223, 'eid': 704643328, 'energy_delivered': 4545930, 'energy_received': 1, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 241.696, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1811, 'current': 15.11, 'eid': 1778385169, 'energy_delivered': 2271794, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.749, }), : dict({ 'active_power': 1814, 'current': 15.113, 'eid': 1778385170, 'energy_delivered': 2274136, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.946, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202302072076': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549623, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302072076', 'temperature': None, }), '202302073177': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549622, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '202302073177', 'temperature': None, }), '202302073203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549592, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302073203', 'temperature': None, }), '202302073606': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549655, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302073606', 'temperature': None, }), '202302074252': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549653, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302074252', 'temperature': None, }), '202302075515': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549531, 'last_report_duration': None, 'last_report_watts': 284, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302075515', 'temperature': None, }), '202302076392': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549625, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302076392', 'temperature': None, }), '202302076838': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549652, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302076838', 'temperature': None, }), '202302077015': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549626, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077015', 'temperature': None, }), '202302077415': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549654, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077415', 'temperature': None, }), '202302077506': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549561, 'last_report_duration': None, 'last_report_watts': 283, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077506', 'temperature': None, }), '202302077890': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549594, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077890', 'temperature': None, }), '482236040239': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549628, 'last_report_duration': None, 'last_report_watts': 272, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040239', 'temperature': None, }), '482236040258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549627, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040258', 'temperature': None, }), '482236040746': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549624, 'last_report_duration': None, 'last_report_watts': 270, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040746', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-07-09 22:07:02 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694549622, 'lastReportWatts': 271, 'maxReportWatts': 299, 'serialNumber': '202302073177', }), dict({ 'devType': 1, 'lastReportDate': 1694549623, 'lastReportWatts': 271, 'maxReportWatts': 300, 'serialNumber': '202302072076', }), dict({ 'devType': 1, 'lastReportDate': 1694549592, 'lastReportWatts': 276, 'maxReportWatts': 301, 'serialNumber': '202302073203', }), dict({ 'devType': 1, 'lastReportDate': 1694549531, 'lastReportWatts': 284, 'maxReportWatts': 300, 'serialNumber': '202302075515', }), dict({ 'devType': 1, 'lastReportDate': 1694549624, 'lastReportWatts': 270, 'maxReportWatts': 300, 'serialNumber': '482236040746', }), dict({ 'devType': 1, 'lastReportDate': 1694549625, 'lastReportWatts': 271, 'maxReportWatts': 301, 'serialNumber': '202302076392', }), dict({ 'devType': 1, 'lastReportDate': 1694549561, 'lastReportWatts': 283, 'maxReportWatts': 300, 'serialNumber': '202302077506', }), dict({ 'devType': 1, 'lastReportDate': 1694549626, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302077015', }), dict({ 'devType': 1, 'lastReportDate': 1694549652, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302076838', }), dict({ 'devType': 1, 'lastReportDate': 1694549627, 'lastReportWatts': 273, 'maxReportWatts': 300, 'serialNumber': '482236040258', }), dict({ 'devType': 1, 'lastReportDate': 1694549594, 'lastReportWatts': 276, 'maxReportWatts': 300, 'serialNumber': '202302077890', }), dict({ 'devType': 1, 'lastReportDate': 1694549653, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302074252', }), dict({ 'devType': 1, 'lastReportDate': 1694549654, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302077415', }), dict({ 'devType': 1, 'lastReportDate': 1694549628, 'lastReportWatts': 272, 'maxReportWatts': 300, 'serialNumber': '482236040239', }), dict({ 'devType': 1, 'lastReportDate': 1694549655, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302073606', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'disabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 4545929.53, 'actEnergyRcvd': 0.637, 'activePower': 3624.573, 'apparentEnergy': 5375938.331, 'apparentPower': 3675.535, 'channels': list([ dict({ 'actEnergyDlvd': 2271793.63, 'actEnergyRcvd': 0.3, 'activePower': 1810.773, 'apparentEnergy': 2685521.244, 'apparentPower': 1836.021, 'current': 15.11, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1810.773, 'pwrFactor': 0.988, 'reactEnergyLagg': 365648.234, 'reactEnergyLead': 7490.926, 'reactivePower': 13.171, 'timestamp': 1694549733, 'voltage': 120.749, }), dict({ 'actEnergyDlvd': 2274135.9, 'actEnergyRcvd': 0.337, 'activePower': 1813.8, 'apparentEnergy': 2690417.087, 'apparentPower': 1839.514, 'current': 15.113, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1813.8, 'pwrFactor': 0.988, 'reactEnergyLagg': 364353.682, 'reactEnergyLead': 8559.662, 'reactivePower': 12.373, 'timestamp': 1694549733, 'voltage': 120.946, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 30.223, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 3624.573, 'pwrFactor': 0.988, 'reactEnergyLagg': 730001.916, 'reactEnergyLead': 16050.589, 'reactivePower': 25.544, 'timestamp': 1694549733, 'voltage': 241.696, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.021, 'apparentPower': 34.651, 'channels': list([ dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.009, 'apparentPower': 15.201, 'current': 0.126, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.773, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.012, 'apparentPower': 19.45, 'current': 0.16, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.945, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 0.287, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 241.718, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 7698.231, 'measurementType': 'total-consumption', 'pwrFactor': 0.49, 'reactPwr': -29.295, 'readingTime': 1694549731, 'rmsCurrent': 31.831, 'rmsVoltage': 241.85, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0.021, 'varhLagLifetime': 730001.895, 'varhLagToday': 730001.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 16050.589, 'wNow': 3780.646, 'whLastSevenDays': 4545909.217, 'whLifetime': 4545909.217, 'whToday': 4545909.217, }), dict({ 'activeCount': 0, 'apprntPwr': 35.041, 'measurementType': 'net-consumption', 'pwrFactor': 0.0, 'reactPwr': 0.909, 'readingTime': 1694549731, 'rmsCurrent': 0.29, 'rmsVoltage': 241.9, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': 0.0, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 15, 'readingTime': 1694549655, 'type': 'inverters', 'wNow': 4085, 'whLifetime': 943236, }), dict({ 'activeCount': 1, 'apprntPwr': 3826.518, 'measurementType': 'production', 'pwrFactor': 0.99, 'reactPwr': 30.203, 'readingTime': 1694549731, 'rmsCurrent': 31.541, 'rmsVoltage': 241.801, 'type': 'eim', 'vahLifetime': 5375935.161, 'vahToday': 17699.161, 'varhLagLifetime': 730001.895, 'varhLagToday': 2831.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 14.589, 'wNow': 3780.646, 'whLastSevenDays': 186010.403, 'whLifetime': 4545926.403, 'whToday': 14848.403, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 186010, 'watt_hours_lifetime': 4545926, 'watt_hours_today': 14848, 'watts_now': 3781, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.466_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121212121201': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121212121201', 'temperature': None, }), '121212121202': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121212121202', 'temperature': None, }), '121212121203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121203', 'temperature': None, }), '121212121204': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121204', 'temperature': None, }), '121212121205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121205', 'temperature': None, }), '121212121206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121206', 'temperature': None, }), '121212121207': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121207', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121212121201', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121212121202', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '121212121203', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '121212121204', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '121212121205', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '121212121206', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '121212121207', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'backup', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_legacy_savings_mode] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'savings-mode', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_system_2] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 23, 'current': 2.985, 'eid': 704643584, 'energy_delivered': 4873881, 'energy_received': 7554062, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.031, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 245.008, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -17, 'current': 1.18, 'eid': 1778385425, 'energy_delivered': 3374056, 'energy_received': 3340639, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.154, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.634, }), : dict({ 'active_power': 41, 'current': 1.806, 'eid': 1778385426, 'energy_delivered': 1499825, 'energy_received': 4213423, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.15, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.375, }), }), 'ctmeter_production': dict({ 'active_power': 2660, 'current': 21.736, 'eid': 704643328, 'energy_delivered': 18442497, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 244.845, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1331, 'current': 10.865, 'eid': 1778385169, 'energy_delivered': 9224605, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.565, }), : dict({ 'active_power': 1329, 'current': 10.871, 'eid': 1778385170, 'energy_delivered': 9217892, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.28, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9710, 'backup_reserve': 2016, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 10080, 'reserve_state_of_charge': 20, 'state_of_charge': 96, }), 'encharge_inventory': dict({ '122031000212': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693554929, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693554929, 'last_report_date': 1694553651, 'led_status': 12, 'max_cell_temp': 25, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031000212', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031000215': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693576648, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693576648, 'last_report_date': 1694553547, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 97, 'serial_number': '122031000215', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031023943': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1694098472, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1694098472, 'last_report_date': 1694553574, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031023943', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122031000212': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), '122031000215': dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'soc': 97, }), '122031023943': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'firmware_loaded_date': 1688303357, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1688303357, 'last_report_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r33', 'serial_number': '122036058363', 'temperature': 78, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '122004027913': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553576, 'last_report_duration': None, 'last_report_watts': 230, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004027913', 'temperature': None, }), '122004028091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553426, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028091', 'temperature': None, }), '122004028206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553697, 'last_report_duration': None, 'last_report_watts': 129, 'lifetime_energy': None, 'max_report_watts': 295, 'serial_number': '122004028206', 'temperature': None, }), '122004028286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553702, 'last_report_duration': None, 'last_report_watts': 229, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028286', 'temperature': None, }), '122004028288': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553606, 'last_report_duration': None, 'last_report_watts': 263, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028288', 'temperature': None, }), '122004028400': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553427, 'last_report_duration': None, 'last_report_watts': 177, 'lifetime_energy': None, 'max_report_watts': 286, 'serial_number': '122004028400', 'temperature': None, }), '122004028989': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553456, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028989', 'temperature': None, }), '122004028991': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553699, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004028991', 'temperature': None, }), '122004028996': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553546, 'last_report_duration': None, 'last_report_watts': 232, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028996', 'temperature': None, }), '122004031655': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553607, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004031655', 'temperature': None, }), '122004032100': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553549, 'last_report_duration': None, 'last_report_watts': 170, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '122004032100', 'temperature': None, }), '122004032124': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553457, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004032124', 'temperature': None, }), '122004039060': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553698, 'last_report_duration': None, 'last_report_watts': 231, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004039060', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-08-31 06:04:08 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694553546, 'lastReportWatts': 232, 'maxReportWatts': 296, 'serialNumber': '122004028996', }), dict({ 'devType': 1, 'lastReportDate': 1694553576, 'lastReportWatts': 230, 'maxReportWatts': 296, 'serialNumber': '122004027913', }), dict({ 'devType': 1, 'lastReportDate': 1694553697, 'lastReportWatts': 129, 'maxReportWatts': 295, 'serialNumber': '122004028206', }), dict({ 'devType': 1, 'lastReportDate': 1694553698, 'lastReportWatts': 231, 'maxReportWatts': 296, 'serialNumber': '122004039060', }), dict({ 'devType': 1, 'lastReportDate': 1694553606, 'lastReportWatts': 263, 'maxReportWatts': 296, 'serialNumber': '122004028288', }), dict({ 'devType': 1, 'lastReportDate': 1694553699, 'lastReportWatts': 268, 'maxReportWatts': 297, 'serialNumber': '122004028991', }), dict({ 'devType': 1, 'lastReportDate': 1694553702, 'lastReportWatts': 229, 'maxReportWatts': 296, 'serialNumber': '122004028286', }), dict({ 'devType': 1, 'lastReportDate': 1694553426, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122004028091', }), dict({ 'devType': 1, 'lastReportDate': 1694553549, 'lastReportWatts': 170, 'maxReportWatts': 244, 'serialNumber': '122004032100', }), dict({ 'devType': 1, 'lastReportDate': 1694553427, 'lastReportWatts': 177, 'maxReportWatts': 286, 'serialNumber': '122004028400', }), dict({ 'devType': 1, 'lastReportDate': 1694553456, 'lastReportWatts': 266, 'maxReportWatts': 296, 'serialNumber': '122004028989', }), dict({ 'devType': 1, 'lastReportDate': 1694553607, 'lastReportWatts': 268, 'maxReportWatts': 296, 'serialNumber': '122004031655', }), dict({ 'devType': 1, 'lastReportDate': 1694553457, 'lastReportWatts': 199, 'maxReportWatts': 297, 'serialNumber': '122004032124', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'open', }), dict({ 'id': 'NC2', 'status': 'open', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693554929, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693554929, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693554929, 'last_rpt_date': 1694553651, 'led_status': 12, 'maxCellTemp': 25, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031000212', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693576648, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693576648, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693576648, 'last_rpt_date': 1694553547, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 97, 'serial_num': '122031000215', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1694098472, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1694098472, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1694098472, 'last_rpt_date': 1694553574, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031023943', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 304, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1688303357, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1688303357, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1688303357, 'last_rpt_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r33', 'serial_num': '122036058363', 'temperature': 78, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031000212', 'soc': 96, }), dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'serial_num': '122031000215', 'soc': 97, }), dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031023943', 'soc': 96, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 9710, 'ENC_agg_backup_energy': 2016, 'ENC_agg_soc': 96, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 20, 'agg_soc': 96, 'configured_backup_soc': 20, 'freq_bias_hz': -0.6863999962806702, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -1104, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -8.319999694824219, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -266, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 18442496.933, 'actEnergyRcvd': 0.069, 'activePower': 2659.845, 'apparentEnergy': 21988447.961, 'apparentPower': 2661.49, 'channels': list([ dict({ 'actEnergyDlvd': 9224604.961, 'actEnergyRcvd': 0.018, 'activePower': 1330.866, 'apparentEnergy': 10992997.506, 'apparentPower': 1331.981, 'current': 10.865, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1330.866, 'pwrFactor': 1.0, 'reactEnergyLagg': 1823613.307, 'reactEnergyLead': 113311.01, 'reactivePower': 8.891, 'timestamp': 1694553765, 'voltage': 122.565, }), dict({ 'actEnergyDlvd': 9217891.972, 'actEnergyRcvd': 0.051, 'activePower': 1328.979, 'apparentEnergy': 10995450.455, 'apparentPower': 1329.509, 'current': 10.871, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1328.979, 'pwrFactor': 1.0, 'reactEnergyLagg': 1817923.688, 'reactEnergyLead': 122718.31, 'reactivePower': 7.776, 'timestamp': 1694553765, 'voltage': 122.28, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 21.736, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 2659.845, 'pwrFactor': 1.0, 'reactEnergyLagg': 3641536.995, 'reactEnergyLead': 236029.32, 'reactivePower': 16.667, 'timestamp': 1694553765, 'voltage': 244.845, }), dict({ 'actEnergyDlvd': 4873881.221, 'actEnergyRcvd': 7554062.483, 'activePower': 23.172, 'apparentEnergy': 18779628.396, 'apparentPower': 364.999, 'channels': list([ dict({ 'actEnergyDlvd': 3374056.076, 'actEnergyRcvd': 3340639.336, 'activePower': -17.438, 'apparentEnergy': 9863909.676, 'apparentPower': 143.478, 'current': 1.18, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -17.438, 'pwrFactor': -0.154, 'reactEnergyLagg': 50177.337, 'reactEnergyLead': 4264141.719, 'reactivePower': -95.235, 'timestamp': 1694553765, 'voltage': 122.634, }), dict({ 'actEnergyDlvd': 1499825.145, 'actEnergyRcvd': 4213423.147, 'activePower': 40.61, 'apparentEnergy': 8915718.719, 'apparentPower': 221.521, 'current': 1.806, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 40.61, 'pwrFactor': 0.15, 'reactEnergyLagg': 449728.699, 'reactEnergyLead': 3365454.56, 'reactivePower': -144.988, 'timestamp': 1694553765, 'voltage': 122.375, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 2.985, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 23.172, 'pwrFactor': 0.031, 'reactEnergyLagg': 499906.036, 'reactEnergyLead': 7629596.279, 'reactivePower': -240.223, 'timestamp': 1694553765, 'voltage': 245.008, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2748.29, 'measurementType': 'total-consumption', 'pwrFactor': 0.99, 'reactPwr': -221.854, 'readingTime': 1694553763, 'rmsCurrent': 22.422, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 7275.073, 'varhLagLifetime': -3141630.945, 'varhLagToday': 0.0, 'varhLeadLifetime': 7393566.746, 'varhLeadToday': 5177.746, 'wNow': 2712.776, 'whLastSevenDays': 348.638, 'whLifetime': 15745050.638, 'whToday': 12901.638, }), dict({ 'activeCount': 1, 'apprntPwr': 83.613, 'measurementType': 'net-consumption', 'pwrFactor': 0.56, 'reactPwr': -240.621, 'readingTime': 1694553763, 'rmsCurrent': 0.686, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 0, 'varhLagLifetime': 499906.036, 'varhLagToday': 0, 'varhLeadLifetime': 7629596.066, 'varhLeadToday': 0, 'wNow': 49.701, 'whLastSevenDays': 0, 'whLifetime': -2662918.637, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 13, 'readingTime': 1694553761, 'type': 'inverters', 'wNow': 2675, 'whLifetime': 640883, }), dict({ 'activeCount': 1, 'apprntPwr': 2664.473, 'measurementType': 'production', 'pwrFactor': 1.0, 'reactPwr': 18.766, 'readingTime': 1694553763, 'rmsCurrent': 21.736, 'rmsVoltage': 245.138, 'type': 'eim', 'vahLifetime': 21988445.596, 'vahToday': 13609.596, 'varhLagLifetime': 3641536.981, 'varhLagToday': 2248.981, 'varhLeadLifetime': 236029.32, 'varhLeadToday': 0.32, 'wNow': 2663.075, 'whLastSevenDays': 18431345.567, 'whLifetime': 18442494.567, 'whToday': 11494.567, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 349, 'watt_hours_lifetime': 15745051, 'watt_hours_today': 12902, 'watts_now': 2713, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': -2662919, 'watt_hours_today': 0, 'watts_now': 50, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 18431346, 'watt_hours_lifetime': 18442495, 'watt_hours_today': 11495, 'watts_now': 2663, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': -144.999, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': -456.848, 'readingTime': 1693745129, 'rmsCurrent': -0.615, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 22904.009, 'varhLagLifetime': -591341.987, 'varhLagToday': 0.0, 'varhLeadLifetime': 3174026.446, 'varhLeadToday': 9602.446, 'wNow': 476.686, 'whLastSevenDays': 4.621, 'whLifetime': 5145153.621, 'whToday': 19903.621, }), dict({ 'activeCount': 1, 'apprntPwr': -654.785, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -572.697, 'readingTime': 1693745129, 'rmsCurrent': -2.778, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 0, 'varhLagLifetime': 251.885, 'varhLagToday': 0, 'varhLeadLifetime': 3174026.466, 'varhLeadToday': 0, 'wNow': -11.468, 'whLastSevenDays': 0, 'whLifetime': 1961512.786, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 1693745066, 'type': 'inverters', 'wNow': 751, 'whLifetime': 702919, }), dict({ 'activeCount': 1, 'apprntPwr': 509.902, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 115.849, 'readingTime': 1693745129, 'rmsCurrent': 2.162, 'rmsVoltage': 235.777, 'type': 'eim', 'vahLifetime': 3576166.777, 'vahToday': 5461.777, 'varhLagLifetime': 591593.872, 'varhLagToday': 1483.872, 'varhLeadLifetime': 0.021, 'varhLeadToday': 0.021, 'wNow': 488.154, 'whLastSevenDays': 111093.303, 'whLifetime': 3183793.303, 'whToday': 4425.303, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 5, 'watt_hours_lifetime': 5145154, 'watt_hours_today': 19904, 'watts_now': 477, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1961513, 'watt_hours_today': 0, 'watts_now': -11, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 111093, 'watt_hours_lifetime': 3183793, 'watt_hours_today': 4425, 'watts_now': 488, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.185_with_cts_and_battery_3t] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 522, 'current': 3.138, 'eid': 704643584, 'energy_delivered': 2404339, 'energy_received': 1125590, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.706, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.282, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': -1, 'current': 0.386, 'eid': 704643328, 'energy_delivered': 2432970, 'energy_received': 1795, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.524, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': dict({ 'available_energy': 525, 'backup_reserve': 525, 'configured_reserve_state_of_charge': 15, 'max_available_capacity': 3500, 'reserve_state_of_charge': 15, 'state_of_charge': 15, }), 'encharge_inventory': dict({ '122249097612': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3500, 'encharge_revision': 2, 'firmware_loaded_date': 1695330323, 'firmware_version': '2.6.5973_rel/22.11', 'installed_date': 1695330323, 'last_report_date': 1695769447, 'led_status': 17, 'max_cell_temp': 30, 'operating': True, 'part_number': '830-01760-r37', 'percent_full': 15, 'serial_number': '122249097612', 'temperature': 29, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100F', }), }), 'encharge_power': dict({ '122249097612': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 15, }), }), 'enpower': None, 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': True, 'date': '2023-09-26 16:03:40 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 15.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Mon': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sat': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sun': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Thu': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Tue': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Wed': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1695330323, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3500, 'encharge_rev': 2, 'img_load_date': 1695330323, 'img_pnum_running': '2.6.5973_rel/22.11', 'installed': 1695330323, 'last_rpt_date': 1695769447, 'led_status': 17, 'maxCellTemp': 30, 'operating': True, 'part_num': '830-01760-r37', 'percentFull': 15, 'serial_num': '122249097612', 'sleep_enabled': False, 'temperature': 29, 'zigbee_dongle_fw_version': '100F', }), ]), 'type': 'ENCHARGE', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122249097612', 'soc': 15, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 525, 'ENC_agg_backup_energy': 525, 'ENC_agg_soc': 15, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 3500, 'Enc_max_available_capacity': 3500, 'Max_energy': 3500, 'adjusted_backup_soc': 15, 'agg_soc': 15, 'configured_backup_soc': 15, 'freq_bias_hz': 1.3899999856948853, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 2235, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': 16.899999618530273, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 540, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'channels': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'current': 0.386, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 8248.228, 'activePower': -0.0, 'apparentEnergy': 140.353, 'apparentPower': -0.0, 'current': -0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 355.453, 'reactEnergyLead': 1.715, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 7.648, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 12408.486, 'activePower': -0.077, 'apparentEnergy': 898.304, 'apparentPower': 0.178, 'current': 0.152, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -0.077, 'pwrFactor': -1.0, 'reactEnergyLagg': 419.396, 'reactEnergyLead': 0.0, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 1.176, }), ]), 'current': 0.386, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'channels': list([ dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'current': 3.138, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1099.941, 'activePower': 0.0, 'apparentEnergy': 54.285, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 356.336, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695769632, 'voltage': 3.447, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5670.302, 'activePower': -0.351, 'apparentEnergy': 8802.177, 'apparentPower': 1.761, 'current': 0.197, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.351, 'pwrFactor': 0.0, 'reactEnergyLagg': 361.519, 'reactEnergyLead': 0.367, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 8.942, }), ]), 'current': 3.138, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 837.87, 'measurementType': 'total-consumption', 'pwrFactor': 0.62, 'reactPwr': -374.915, 'readingTime': 1695769629, 'rmsCurrent': 3.513, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 88.766, 'varhLagLifetime': -369573.576, 'varhLagToday': 0.0, 'varhLeadLifetime': 1935707.431, 'varhLeadToday': 54.431, 'wNow': 523.579, 'whLastSevenDays': 19.155, 'whLifetime': 3711429.155, 'whToday': 63.155, }), dict({ 'activeCount': 1, 'apprntPwr': 745.663, 'measurementType': 'net-consumption', 'pwrFactor': 0.7, 'reactPwr': -458.436, 'readingTime': 1695769629, 'rmsCurrent': 3.126, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 0, 'varhLagLifetime': 22501.684, 'varhLagToday': 0, 'varhLeadLifetime': 1935714.697, 'varhLeadToday': 0, 'wNow': 524.536, 'whLastSevenDays': 0, 'whLifetime': 1279037.969, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 5, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 45349, }), dict({ 'activeCount': 1, 'apprntPwr': 92.383, 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 83.521, 'readingTime': 1695769629, 'rmsCurrent': 0.387, 'rmsVoltage': 238.522, 'type': 'eim', 'vahLifetime': 2709025.274, 'vahToday': 11.274, 'varhLagLifetime': 392075.259, 'varhLagToday': 10.259, 'varhLeadLifetime': 7.266, 'varhLeadToday': 0.266, 'wNow': -0.957, 'whLastSevenDays': 73002.956, 'whLifetime': 2432969.956, 'whToday': 0.956, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 19, 'watt_hours_lifetime': 3711429, 'watt_hours_today': 63, 'watts_now': 524, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1279038, 'watt_hours_today': 0, 'watts_now': 525, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 73003, 'watt_hours_lifetime': 2432970, 'watt_hours_today': 1, 'watts_now': -1, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[8.1.41] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'AC', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9176, 'backup_reserve': 2976, 'configured_reserve_state_of_charge': 30, 'max_available_capacity': 9920, 'reserve_state_of_charge': 30, 'state_of_charge': 92, }), 'encharge_inventory': dict({ '492319002585': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560591, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560591, 'last_report_date': 1692385816, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 100, 'serial_number': '492319002585', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492319002593': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560590, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560590, 'last_report_date': 1692386075, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 85, 'serial_number': '492319002593', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492319002585': dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'soc': 100, }), '492319002593': dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'soc': 85, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1691648499, 'firmware_version': '3.0.5177_rel/31.07', 'grid_mode': 'multimode-ongrid', 'installed_date': 1691648499, 'last_report_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00377-r28', 'serial_number': '482326083757', 'temperature': 113, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '202314050286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385966, 'last_report_duration': None, 'last_report_watts': 312, 'lifetime_energy': None, 'max_report_watts': 327, 'serial_number': '202314050286', 'temperature': None, }), '202314055790': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314055790', 'temperature': None, }), '202314058203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385784, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314058203', 'temperature': None, }), '202314059855': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385973, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314059855', 'temperature': None, }), '202314060891': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385785, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314060891', 'temperature': None, }), '202314061330': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385997, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314061330', 'temperature': None, }), '202314062224': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385974, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314062224', 'temperature': None, }), '202314062558': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314062558', 'temperature': None, }), '202314062880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386026, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314062880', 'temperature': None, }), '202314063524': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385998, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314063524', 'temperature': None, }), '202314064007': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 325, 'serial_number': '202314064007', 'temperature': None, }), '202314065032': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314065032', 'temperature': None, }), '202314065062': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314065062', 'temperature': None, }), '202314065647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314065647', 'temperature': None, }), '202314066216': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385965, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314066216', 'temperature': None, }), '202314067482': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385977, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314067482', 'temperature': None, }), '202314068272': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385786, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068272', 'temperature': None, }), '202314068438': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385979, 'last_report_duration': None, 'last_report_watts': 293, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068438', 'temperature': None, }), '202314068868': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385904, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314068868', 'temperature': None, }), '202314069065': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385847, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314069065', 'temperature': None, }), '202314069086': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385968, 'last_report_duration': None, 'last_report_watts': 313, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314069086', 'temperature': None, }), '202314069092': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385980, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314069092', 'temperature': None, }), '202314069944': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385814, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314069944', 'temperature': None, }), '202314070107': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314070107', 'temperature': None, }), '202314070295': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386032, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314070295', 'temperature': None, }), '202314070321': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386030, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '202314070321', 'temperature': None, }), '202314070523': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314070523', 'temperature': None, }), '202314070647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385939, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314070647', 'temperature': None, }), '202314070713': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385936, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 326, 'serial_number': '202314070713', 'temperature': None, }), '202314070988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386027, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314070988', 'temperature': None, }), '202314071516': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386025, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314071516', 'temperature': None, }), '202314071599': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314071599', 'temperature': None, }), '202314071660': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385995, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314071660', 'temperature': None, }), '202314071753': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385996, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314071753', 'temperature': None, }), '202314071845': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385846, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314071845', 'temperature': None, }), '202314072420': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385967, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314072420', 'temperature': None, }), '202314072546': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385844, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314072546', 'temperature': None, }), '202314073012': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385787, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073012', 'temperature': None, }), '202314073205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385938, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314073205', 'temperature': None, }), '202314073251': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385937, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073251', 'temperature': None, }), '202314073257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385907, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314073257', 'temperature': None, }), '202314073428': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385942, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314073428', 'temperature': None, }), '202314075069': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385999, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314075069', 'temperature': None, }), '202314077078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314077078', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692385844, 'lastReportWatts': 307, 'maxReportWatts': 319, 'serialNumber': '202314072546', }), dict({ 'devType': 1, 'lastReportDate': 1692386025, 'lastReportWatts': 308, 'maxReportWatts': 321, 'serialNumber': '202314071516', }), dict({ 'devType': 1, 'lastReportDate': 1692385784, 'lastReportWatts': 310, 'maxReportWatts': 321, 'serialNumber': '202314058203', }), dict({ 'devType': 1, 'lastReportDate': 1692385785, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314060891', }), dict({ 'devType': 1, 'lastReportDate': 1692385786, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314068272', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 302, 'maxReportWatts': 317, 'serialNumber': '202314077078', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 277, 'maxReportWatts': 334, 'serialNumber': '202314065062', }), dict({ 'devType': 1, 'lastReportDate': 1692385787, 'lastReportWatts': 308, 'maxReportWatts': 323, 'serialNumber': '202314073012', }), dict({ 'devType': 1, 'lastReportDate': 1692385936, 'lastReportWatts': 309, 'maxReportWatts': 326, 'serialNumber': '202314070713', }), dict({ 'devType': 1, 'lastReportDate': 1692385846, 'lastReportWatts': 308, 'maxReportWatts': 324, 'serialNumber': '202314071845', }), dict({ 'devType': 1, 'lastReportDate': 1692385847, 'lastReportWatts': 303, 'maxReportWatts': 320, 'serialNumber': '202314069065', }), dict({ 'devType': 1, 'lastReportDate': 1692385904, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314068868', }), dict({ 'devType': 1, 'lastReportDate': 1692385965, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314066216', }), dict({ 'devType': 1, 'lastReportDate': 1692385937, 'lastReportWatts': 307, 'maxReportWatts': 323, 'serialNumber': '202314073251', }), dict({ 'devType': 1, 'lastReportDate': 1692385938, 'lastReportWatts': 304, 'maxReportWatts': 321, 'serialNumber': '202314073205', }), dict({ 'devType': 1, 'lastReportDate': 1692385966, 'lastReportWatts': 312, 'maxReportWatts': 327, 'serialNumber': '202314050286', }), dict({ 'devType': 1, 'lastReportDate': 1692385967, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314072420', }), dict({ 'devType': 1, 'lastReportDate': 1692385907, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314073257', }), dict({ 'devType': 1, 'lastReportDate': 1692385939, 'lastReportWatts': 301, 'maxReportWatts': 319, 'serialNumber': '202314070647', }), dict({ 'devType': 1, 'lastReportDate': 1692385995, 'lastReportWatts': 310, 'maxReportWatts': 322, 'serialNumber': '202314071660', }), dict({ 'devType': 1, 'lastReportDate': 1692385968, 'lastReportWatts': 313, 'maxReportWatts': 323, 'serialNumber': '202314069086', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314055790', }), dict({ 'devType': 1, 'lastReportDate': 1692385996, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314071753', }), dict({ 'devType': 1, 'lastReportDate': 1692385997, 'lastReportWatts': 269, 'maxReportWatts': 336, 'serialNumber': '202314061330', }), dict({ 'devType': 1, 'lastReportDate': 1692385942, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314073428', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 303, 'maxReportWatts': 319, 'serialNumber': '202314065647', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 301, 'maxReportWatts': 322, 'serialNumber': '202314062558', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 308, 'maxReportWatts': 317, 'serialNumber': '202314070107', }), dict({ 'devType': 1, 'lastReportDate': 1692385973, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314059855', }), dict({ 'devType': 1, 'lastReportDate': 1692385998, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314063524', }), dict({ 'devType': 1, 'lastReportDate': 1692386026, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314062880', }), dict({ 'devType': 1, 'lastReportDate': 1692386027, 'lastReportWatts': 275, 'maxReportWatts': 334, 'serialNumber': '202314070988', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 273, 'maxReportWatts': 336, 'serialNumber': '202314065032', }), dict({ 'devType': 1, 'lastReportDate': 1692385974, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314062224', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 307, 'maxReportWatts': 325, 'serialNumber': '202314064007', }), dict({ 'devType': 1, 'lastReportDate': 1692385977, 'lastReportWatts': 302, 'maxReportWatts': 318, 'serialNumber': '202314067482', }), dict({ 'devType': 1, 'lastReportDate': 1692386030, 'lastReportWatts': 271, 'maxReportWatts': 329, 'serialNumber': '202314070321', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 305, 'maxReportWatts': 320, 'serialNumber': '202314070523', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 307, 'maxReportWatts': 317, 'serialNumber': '202314071599', }), dict({ 'devType': 1, 'lastReportDate': 1692385979, 'lastReportWatts': 293, 'maxReportWatts': 324, 'serialNumber': '202314068438', }), dict({ 'devType': 1, 'lastReportDate': 1692385814, 'lastReportWatts': 277, 'maxReportWatts': 336, 'serialNumber': '202314069944', }), dict({ 'devType': 1, 'lastReportDate': 1692385999, 'lastReportWatts': 308, 'maxReportWatts': 319, 'serialNumber': '202314075069', }), dict({ 'devType': 1, 'lastReportDate': 1692386032, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314070295', }), dict({ 'devType': 1, 'lastReportDate': 1692385980, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314069092', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560591, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560591, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560591, 'last_rpt_date': 1692385816, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 100, 'phase': 'ph-a', 'serial_num': '492319002585', 'sleep_enabled': False, 'temperature': 42, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560590, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560590, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560590, 'last_rpt_date': 1692386075, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 85, 'phase': 'ph-a', 'serial_num': '492319002593', 'sleep_enabled': False, 'temperature': 42, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 3568, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691648499, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1691648499, 'img_pnum_running': '3.0.5177_rel/31.07', 'installed': 1691648499, 'last_rpt_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00377-r28', 'serial_num': '482326083757', 'temperature': 113, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'serial_num': '492319002585', 'soc': 100, }), dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'serial_num': '492319002593', 'soc': 85, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 9176, 'ENC_agg_backup_energy': 2976, 'ENC_agg_soc': 92, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 9920, 'Enc_max_available_capacity': 9920, 'Max_energy': 9920, 'Recovery_threshold_soc': 13, 'VLS_Limit': 10, 'adjusted_backup_soc': 30, 'agg_soc': 92, 'configured_backup_soc': 30, 'freq_bias_hz': -1.348230004310608, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2168, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.190109252929688, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -518, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'AC', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5007.246, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 1407.058, 'readingTime': 1692386083, 'rmsCurrent': 40.571, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 1190799.036, 'varhLagLifetime': 29677.693, 'varhLagToday': 17206.693, 'varhLeadLifetime': 108784.489, 'varhLeadToday': 104827.489, 'wNow': 5216.083, 'whLastSevenDays': 0.0, 'whLifetime': 1757943.133, 'whToday': 0.0, }), dict({ 'activeCount': 1, 'apprntPwr': -8358.792, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 1329.256, 'readingTime': 1692386083, 'rmsCurrent': -67.703, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 0, 'varhLagLifetime': 234428.764, 'varhLagToday': 0, 'varhLeadLifetime': 109642.368, 'varhLeadToday': 0, 'wNow': -7812.457, 'whLastSevenDays': 0, 'whLifetime': 247929.658, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 44, 'readingTime': 1692386032, 'type': 'inverters', 'wNow': 13163, 'whLifetime': 348363, }), dict({ 'activeCount': 1, 'apprntPwr': 13367.009, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 77.802, 'readingTime': 1692386083, 'rmsCurrent': 108.274, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1746683.744, 'vahToday': 64277.744, 'varhLagLifetime': 204751.071, 'varhLagToday': 8551.071, 'varhLeadLifetime': 857.879, 'varhLeadToday': 33.879, 'wNow': 13028.54, 'whLastSevenDays': 1456156.655, 'whLifetime': 1510198.655, 'whToday': 55037.655, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1757943, 'watt_hours_today': 0, 'watts_now': 5216, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 247930, 'watt_hours_today': 0, 'watts_now': -7812, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 1456157, 'watt_hours_lifetime': 1510199, 'watt_hours_today': 55038, 'watts_now': 13029, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[8.2.127_with_3cts_and_battery_split] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 129, 'current': 21.241, 'eid': 704643584, 'energy_delivered': 4998252, 'energy_received': 253961, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.034, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.553, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -201, 'current': 9.316, 'eid': 1778385425, 'energy_delivered': 2631217, 'energy_received': 93777, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': 331, 'current': 11.925, 'eid': 1778385426, 'energy_delivered': 2367035, 'energy_received': 160184, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.212, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.219, }), }), 'ctmeter_production': dict({ 'active_power': 1714, 'current': 17.326, 'eid': 704643328, 'energy_delivered': 3165834, 'energy_received': 76, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.817, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.367, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 856, 'current': 8.658, 'eid': 1778385169, 'energy_delivered': 1581746, 'energy_received': 46, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.822, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.224, }), : dict({ 'active_power': 858, 'current': 8.668, 'eid': 1778385170, 'energy_delivered': 1584088, 'energy_received': 30, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.812, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.143, }), }), 'ctmeter_storage': dict({ 'active_power': -2580, 'current': 14.575, 'eid': 704643840, 'energy_delivered': 2274359, 'energy_received': 2971414, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.582, }), 'ctmeter_storage_phases': dict({ : dict({ 'active_power': -2115, 'current': 9.316, 'eid': 1778385681, 'energy_delivered': 1136860, 'energy_received': 1485292, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': -465, 'current': 5.259, 'eid': 1778385682, 'energy_delivered': 1137499, 'energy_received': 1486122, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.713, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.248, }), }), 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NC2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 5250, 'backup_reserve': 5000, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 25000, 'reserve_state_of_charge': 20, 'state_of_charge': 21, }), 'encharge_inventory': dict({ '12345678901002': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707197622, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707197622, 'last_report_date': 1709829328, 'led_status': 12, 'max_cell_temp': 13, 'operating': None, 'part_number': '836-01826-r81', 'percent_full': 21, 'serial_number': '12345678901002', 'temperature': 13, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901003': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1706749292, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1706749292, 'last_report_date': 1709829288, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901003', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901004': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707622567, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707622567, 'last_report_date': 1709829437, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901004', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901005': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709410199, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709410199, 'last_report_date': 1709829256, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901005', 'temperature': 11, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901006': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709749530, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709749530, 'last_report_date': 1709829434, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901006', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '12345678901002': dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'soc': 21, }), '12345678901003': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901004': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901005': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901006': dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'soc': 21, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1709657837, 'firmware_version': '3.0.5654_rel/31.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1709657837, 'last_report_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00378-r27', 'serial_number': '12345678901001', 'temperature': 72, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-03-06 22:58:46 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': 'prioritize-energy', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': 'self-consumption', 'operation_mode_sub_type': 'prioritize-energy', 'reserved_soc': 20, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709749530, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709749530, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709749530, 'last_rpt_date': 1709829434, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901006', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709410199, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709410199, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709410199, 'last_rpt_date': 1709829256, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901005', 'sleep_enabled': False, 'temperature': 11, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707622567, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707622567, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707622567, 'last_rpt_date': 1709829437, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901004', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1706749292, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1706749292, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1706749292, 'last_rpt_date': 1709829288, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901003', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707197622, 'dc_switch_off': False, 'der_index': 3, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707197622, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707197622, 'last_rpt_date': 1709829328, 'led_status': 12, 'maxCellTemp': 13, 'part_num': '836-01826-r81', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901002', 'sleep_enabled': False, 'temperature': 13, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15868, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709657837, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1709657837, 'img_pnum_running': '3.0.5654_rel/31.13', 'installed': 1709657837, 'last_rpt_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00378-r27', 'serial_num': '12345678901001', 'temperature': 72, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'serial_num': '12345678901006', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901005', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901004', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901003', 'soc': 21, }), dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'serial_num': '12345678901002', 'soc': 21, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 5250, 'ENC_agg_backup_energy': 5000, 'ENC_agg_soc': 21, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 25000, 'Enc_max_available_capacity': 25000, 'Max_energy': 25000, 'VLS_Limit': 10, 'adjusted_backup_soc': 20, 'agg_soc': 21, 'configured_backup_soc': 20, 'freq_bias_hz': -0.06000090762972832, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -96, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 2, 'soc_recovery_exit': 10, 'voltage_bias_v': -0.7205159664154053, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -23, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643840, 'measurementType': 'storage', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3165834.272, 'actEnergyRcvd': 75.689, 'activePower': 1714.424, 'apparentEnergy': 5529628.28, 'apparentPower': 2100.04, 'channels': list([ dict({ 'actEnergyDlvd': 1581746.293, 'actEnergyRcvd': 45.89, 'activePower': 856.031, 'apparentEnergy': 2763520.42, 'apparentPower': 1049.732, 'current': 8.658, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 856.031, 'pwrFactor': 0.822, 'reactEnergyLagg': 803725.479, 'reactEnergyLead': 33935.538, 'reactivePower': 8.366, 'timestamp': 1709829517, 'voltage': 121.224, }), dict({ 'actEnergyDlvd': 1584087.979, 'actEnergyRcvd': 29.799, 'activePower': 858.394, 'apparentEnergy': 2766107.86, 'apparentPower': 1050.307, 'current': 8.668, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 858.394, 'pwrFactor': 0.812, 'reactEnergyLagg': 803599.733, 'reactEnergyLead': 34616.443, 'reactivePower': 12.499, 'timestamp': 1709829517, 'voltage': 121.143, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 17.326, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 1714.424, 'pwrFactor': 0.817, 'reactEnergyLagg': 1607325.212, 'reactEnergyLead': 68551.981, 'reactivePower': 20.865, 'timestamp': 1709829517, 'voltage': 242.367, }), dict({ 'actEnergyDlvd': 4998251.825, 'actEnergyRcvd': 253960.783, 'activePower': 129.407, 'apparentEnergy': 12810156.532, 'apparentPower': 2578.068, 'channels': list([ dict({ 'actEnergyDlvd': 2631217.196, 'actEnergyRcvd': 93777.056, 'activePower': -201.39, 'apparentEnergy': 6787276.689, 'apparentPower': 1130.056, 'current': 9.316, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -201.39, 'pwrFactor': -0.193, 'reactEnergyLagg': 79.572, 'reactEnergyLead': 5042497.945, 'reactivePower': -935.571, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 2367034.629, 'actEnergyRcvd': 160183.727, 'activePower': 330.797, 'apparentEnergy': 6022879.843, 'apparentPower': 1448.012, 'current': 11.925, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 330.797, 'pwrFactor': 0.212, 'reactEnergyLagg': 105.465, 'reactEnergyLead': 4128101.723, 'reactivePower': -1295.012, 'timestamp': 1709829517, 'voltage': 121.219, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), ]), 'current': 21.241, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 129.407, 'pwrFactor': 0.034, 'reactEnergyLagg': 185.037, 'reactEnergyLead': 9170599.668, 'reactivePower': -2230.583, 'timestamp': 1709829517, 'voltage': 242.553, }), dict({ 'actEnergyDlvd': 2274358.602, 'actEnergyRcvd': 2971414.344, 'activePower': -2579.823, 'apparentEnergy': 7881024.906, 'apparentPower': 461.253, 'channels': list([ dict({ 'actEnergyDlvd': 1136859.658, 'actEnergyRcvd': 1485292.441, 'activePower': -2114.856, 'apparentEnergy': 3945551.951, 'apparentPower': -179.488, 'current': 9.316, 'eid': 1778385681, 'freq': 60.0, 'instantaneousDemand': -2114.856, 'pwrFactor': -0.193, 'reactEnergyLagg': 1358495.518, 'reactEnergyLead': 31391.267, 'reactivePower': 299.583, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385682, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385683, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 14.575, 'eid': 704643840, 'freq': 60.0, 'instantaneousDemand': -2579.823, 'pwrFactor': -1.0, 'reactEnergyLagg': 2713630.41, 'reactEnergyLead': 62717.621, 'reactivePower': 676.781, 'timestamp': 1709829517, 'voltage': 242.582, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2416.339, 'measurementType': 'total-consumption', 'pwrFactor': 0.75, 'reactPwr': -2209.719, 'readingTime': 1709829518, 'rmsCurrent': 19.934, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 4946716.532, 'varhLagLifetime': -1607140.175, 'varhLagToday': 9360.0, 'varhLeadLifetime': 9102047.686, 'varhLeadToday': 9039334.686, 'wNow': 1843.831, 'whLastSevenDays': 0.0, 'whLifetime': 7909866.491, 'whToday': 7596.0, }), dict({ 'activeCount': 1, 'apprntPwr': 315.151, 'measurementType': 'net-consumption', 'pwrFactor': 0.28, 'reactPwr': -2230.583, 'readingTime': 1709829518, 'rmsCurrent': 2.609, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 0, 'varhLagLifetime': 185.037, 'varhLagToday': 0, 'varhLeadLifetime': 9170599.668, 'varhLeadToday': 0, 'wNow': 129.407, 'whLastSevenDays': 0, 'whLifetime': 4744549.864, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 35, 'readingTime': 1709829490, 'type': 'inverters', 'wNow': 1592, 'whLifetime': 821819, }), dict({ 'activeCount': 1, 'apprntPwr': 2100.04, 'measurementType': 'production', 'pwrFactor': 0.82, 'reactPwr': 20.865, 'readingTime': 1709829518, 'rmsCurrent': 17.326, 'rmsVoltage': 242.367, 'type': 'eim', 'vahLifetime': 5529628.28, 'vahToday': 8010.28, 'varhLagLifetime': 1607325.212, 'varhLagToday': 5202.212, 'varhLeadLifetime': 68551.981, 'varhLeadToday': 0.981, 'wNow': 1714.424, 'whLastSevenDays': 3164458.272, 'whLifetime': 3165834.272, 'whToday': 1475.272, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7909866, 'watt_hours_today': 7596, 'watts_now': 1844, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 4744550, 'watt_hours_today': 0, 'watts_now': 129, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 3164458, 'watt_hours_lifetime': 3165834, 'watt_hours_today': 1475, 'watts_now': 1714, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': , 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': None, 'reserved_soc': 20, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.127_with_generator_running] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 196, 'current': 9.098, 'eid': 704643584, 'energy_delivered': 13632727, 'energy_received': 6336017, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.398, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 243.047, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 268, 'current': 4.859, 'eid': 1778385425, 'energy_delivered': 7037859, 'energy_received': 2542489, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.637, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.856, }), : dict({ 'active_power': -72, 'current': 4.239, 'eid': 1778385426, 'energy_delivered': 6594868, 'energy_received': 3793528, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.081, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.192, }), }), 'ctmeter_production': dict({ 'active_power': 2336, 'current': 21.222, 'eid': 704643328, 'energy_delivered': 15097305, 'energy_received': 15, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.88, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 242.887, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1173, 'current': 10.607, 'eid': 1778385169, 'energy_delivered': 7551632, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.883, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.774, }), : dict({ 'active_power': 1163, 'current': 10.615, 'eid': 1778385170, 'energy_delivered': 7545672, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.877, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.113, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 3292, 'backup_reserve': 1680, 'configured_reserve_state_of_charge': 50, 'max_available_capacity': 3360, 'reserve_state_of_charge': 50, 'state_of_charge': 98, }), 'encharge_inventory': dict({ '492234001350': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 2, 'firmware_loaded_date': 1718210586, 'firmware_version': '2.0.6727_rel/22.15', 'installed_date': 1718210586, 'last_report_date': 1718213052, 'led_status': 12, 'max_cell_temp': 27, 'operating': None, 'part_number': '836-00750-r32', 'percent_full': 98, 'serial_number': '492234001350', 'temperature': 27, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492234001350': dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'soc': 98, }), }), 'enpower': dict({ 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1718209911, 'firmware_version': '2.0.5729_rel/22.15', 'grid_mode': 'multimode-ongrid', 'installed_date': 1718209911, 'last_report_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'operating': None, 'part_number': '860-00376-r37', 'serial_number': '122210043898', 'temperature': 91, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482218039091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213113, 'last_report_duration': None, 'last_report_watts': 67, 'lifetime_energy': None, 'max_report_watts': 122, 'serial_number': '482218039091', 'temperature': None, }), '482218039209': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213114, 'last_report_duration': None, 'last_report_watts': 61, 'lifetime_energy': None, 'max_report_watts': 115, 'serial_number': '482218039209', 'temperature': None, }), '482218039304': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213115, 'last_report_duration': None, 'last_report_watts': 69, 'lifetime_energy': None, 'max_report_watts': 132, 'serial_number': '482218039304', 'temperature': None, }), '482218039386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213116, 'last_report_duration': None, 'last_report_watts': 64, 'lifetime_energy': None, 'max_report_watts': 112, 'serial_number': '482218039386', 'temperature': None, }), '482218039390': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213117, 'last_report_duration': None, 'last_report_watts': 63, 'lifetime_energy': None, 'max_report_watts': 123, 'serial_number': '482218039390', 'temperature': None, }), '482218039529': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213143, 'last_report_duration': None, 'last_report_watts': 75, 'lifetime_energy': None, 'max_report_watts': 120, 'serial_number': '482218039529', 'temperature': None, }), '482218039700': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213203, 'last_report_duration': None, 'last_report_watts': 89, 'lifetime_energy': None, 'max_report_watts': 135, 'serial_number': '482218039700', 'temperature': None, }), '482218039736': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213204, 'last_report_duration': None, 'last_report_watts': 84, 'lifetime_energy': None, 'max_report_watts': 118, 'serial_number': '482218039736', 'temperature': None, }), '482218039788': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213234, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 100, 'serial_number': '482218039788', 'temperature': None, }), '482218039880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213235, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 134, 'serial_number': '482218039880', 'temperature': None, }), '482218039911': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213236, 'last_report_duration': None, 'last_report_watts': 97, 'lifetime_energy': None, 'max_report_watts': 133, 'serial_number': '482218039911', 'temperature': None, }), '482218039918': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 99, 'lifetime_energy': None, 'max_report_watts': 136, 'serial_number': '482218039918', 'temperature': None, }), '482218042609': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218042609', 'temperature': None, }), '482218042662': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213239, 'last_report_duration': None, 'last_report_watts': 90, 'lifetime_energy': None, 'max_report_watts': 116, 'serial_number': '482218042662', 'temperature': None, }), '482218042737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213240, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 130, 'serial_number': '482218042737', 'temperature': None, }), '482218042901': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 103, 'serial_number': '482218042901', 'temperature': None, }), '482218043030': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 102, 'serial_number': '482218043030', 'temperature': None, }), '482218043257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213243, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 137, 'serial_number': '482218043257', 'temperature': None, }), '482218043590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213245, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 108, 'serial_number': '482218043590', 'temperature': None, }), '482218043592': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213264, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 106, 'serial_number': '482218043592', 'temperature': None, }), '482218043652': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213265, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218043652', 'temperature': None, }), '482218043981': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213266, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 121, 'serial_number': '482218043981', 'temperature': None, }), '482218047061': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213267, 'last_report_duration': None, 'last_report_watts': 100, 'lifetime_energy': None, 'max_report_watts': 125, 'serial_number': '482218047061', 'temperature': None, }), '482218047087': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213268, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 101, 'serial_number': '482218047087', 'temperature': None, }), '482218047088': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213269, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 104, 'serial_number': '482218047088', 'temperature': None, }), '482218047099': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718212938, 'last_report_duration': None, 'last_report_watts': 74, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218047099', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-05-27 10:06:36 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 50, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 50, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1718213113, 'lastReportWatts': 67, 'maxReportWatts': 122, 'serialNumber': '482218039091', }), dict({ 'devType': 1, 'lastReportDate': 1718213114, 'lastReportWatts': 61, 'maxReportWatts': 115, 'serialNumber': '482218039209', }), dict({ 'devType': 1, 'lastReportDate': 1718213115, 'lastReportWatts': 69, 'maxReportWatts': 132, 'serialNumber': '482218039304', }), dict({ 'devType': 1, 'lastReportDate': 1718213116, 'lastReportWatts': 64, 'maxReportWatts': 112, 'serialNumber': '482218039386', }), dict({ 'devType': 1, 'lastReportDate': 1718213117, 'lastReportWatts': 63, 'maxReportWatts': 123, 'serialNumber': '482218039390', }), dict({ 'devType': 1, 'lastReportDate': 1718213143, 'lastReportWatts': 75, 'maxReportWatts': 120, 'serialNumber': '482218039529', }), dict({ 'devType': 1, 'lastReportDate': 1718213203, 'lastReportWatts': 89, 'maxReportWatts': 135, 'serialNumber': '482218039700', }), dict({ 'devType': 1, 'lastReportDate': 1718213204, 'lastReportWatts': 84, 'maxReportWatts': 118, 'serialNumber': '482218039736', }), dict({ 'devType': 1, 'lastReportDate': 1718213234, 'lastReportWatts': 95, 'maxReportWatts': 100, 'serialNumber': '482218039788', }), dict({ 'devType': 1, 'lastReportDate': 1718213235, 'lastReportWatts': 96, 'maxReportWatts': 134, 'serialNumber': '482218039880', }), dict({ 'devType': 1, 'lastReportDate': 1718213236, 'lastReportWatts': 97, 'maxReportWatts': 133, 'serialNumber': '482218039911', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 99, 'maxReportWatts': 136, 'serialNumber': '482218039918', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 95, 'maxReportWatts': 107, 'serialNumber': '482218042609', }), dict({ 'devType': 1, 'lastReportDate': 1718213239, 'lastReportWatts': 90, 'maxReportWatts': 116, 'serialNumber': '482218042662', }), dict({ 'devType': 1, 'lastReportDate': 1718213240, 'lastReportWatts': 96, 'maxReportWatts': 130, 'serialNumber': '482218042737', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 96, 'maxReportWatts': 103, 'serialNumber': '482218042901', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 95, 'maxReportWatts': 102, 'serialNumber': '482218043030', }), dict({ 'devType': 1, 'lastReportDate': 1718213243, 'lastReportWatts': 98, 'maxReportWatts': 137, 'serialNumber': '482218043257', }), dict({ 'devType': 1, 'lastReportDate': 1718213245, 'lastReportWatts': 95, 'maxReportWatts': 108, 'serialNumber': '482218043590', }), dict({ 'devType': 1, 'lastReportDate': 1718213264, 'lastReportWatts': 98, 'maxReportWatts': 106, 'serialNumber': '482218043592', }), dict({ 'devType': 1, 'lastReportDate': 1718213265, 'lastReportWatts': 101, 'maxReportWatts': 107, 'serialNumber': '482218043652', }), dict({ 'devType': 1, 'lastReportDate': 1718213266, 'lastReportWatts': 96, 'maxReportWatts': 121, 'serialNumber': '482218043981', }), dict({ 'devType': 1, 'lastReportDate': 1718213267, 'lastReportWatts': 100, 'maxReportWatts': 125, 'serialNumber': '482218047061', }), dict({ 'devType': 1, 'lastReportDate': 1718213268, 'lastReportWatts': 101, 'maxReportWatts': 101, 'serialNumber': '482218047087', }), dict({ 'devType': 1, 'lastReportDate': 1718213269, 'lastReportWatts': 98, 'maxReportWatts': 104, 'serialNumber': '482218047088', }), dict({ 'devType': 1, 'lastReportDate': 1718212938, 'lastReportWatts': 74, 'maxReportWatts': 107, 'serialNumber': '482218047099', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1718210586, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 2, 'img_load_date': 1718210586, 'img_pnum_running': '2.0.6727_rel/22.15', 'installed': 1718210586, 'last_rpt_date': 1718213052, 'led_status': 12, 'maxCellTemp': 27, 'part_num': '836-00750-r32', 'percentFull': 98, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492234001350', 'sleep_enabled': False, 'temperature': 27, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-generator', 'Enpwr_curr_state_id': 128, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 16124, 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1718209911, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1718209911, 'img_pnum_running': '2.0.5729_rel/22.15', 'installed': 1718209911, 'last_rpt_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'part_num': '860-00376-r37', 'serial_num': '122210043898', 'temperature': 91, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'serial_num': '492234001350', 'soc': 98, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 3292, 'ENC_agg_backup_energy': 1680, 'ENC_agg_soc': 98, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 3360, 'Enc_max_available_capacity': 3360, 'Max_energy': 3360, 'VLS_Limit': 10, 'adjusted_backup_soc': 50, 'agg_soc': 98, 'configured_backup_soc': 50, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': -15.69999885559082, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -502, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 15097304.67, 'actEnergyRcvd': 15.392, 'activePower': 2336.093, 'apparentEnergy': 18631234.536, 'apparentPower': 2643.758, 'channels': list([ dict({ 'actEnergyDlvd': 7551632.356, 'actEnergyRcvd': 7.79, 'activePower': 1172.624, 'apparentEnergy': 9315712.558, 'apparentPower': 1324.867, 'current': 10.607, 'eid': 1778385169, 'freq': 60.062, 'instantaneousDemand': 1172.624, 'pwrFactor': 0.883, 'reactEnergyLagg': 2061239.812, 'reactEnergyLead': 2910.699, 'reactivePower': -557.096, 'timestamp': 1718213332, 'voltage': 121.774, }), dict({ 'actEnergyDlvd': 7545672.313, 'actEnergyRcvd': 7.603, 'activePower': 1163.469, 'apparentEnergy': 9315521.977, 'apparentPower': 1318.892, 'current': 10.615, 'eid': 1778385170, 'freq': 60.062, 'instantaneousDemand': 1163.469, 'pwrFactor': 0.877, 'reactEnergyLagg': 2054781.564, 'reactEnergyLead': 4234.214, 'reactivePower': -554.743, 'timestamp': 1718213332, 'voltage': 121.113, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 21.222, 'eid': 704643328, 'freq': 60.062, 'instantaneousDemand': 2336.093, 'pwrFactor': 0.88, 'reactEnergyLagg': 4116021.375, 'reactEnergyLead': 7144.913, 'reactivePower': -1111.839, 'timestamp': 1718213332, 'voltage': 242.887, }), dict({ 'actEnergyDlvd': 13632727.119, 'actEnergyRcvd': 6336017.38, 'activePower': 195.575, 'apparentEnergy': 23220664.459, 'apparentPower': 1088.544, 'channels': list([ dict({ 'actEnergyDlvd': 7037858.755, 'actEnergyRcvd': 2542489.025, 'activePower': 267.695, 'apparentEnergy': 11417171.695, 'apparentPower': 574.709, 'current': 4.859, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 267.695, 'pwrFactor': 0.637, 'reactEnergyLagg': 417029.372, 'reactEnergyLead': 4242565.474, 'reactivePower': 474.518, 'timestamp': 1718213332, 'voltage': 121.856, }), dict({ 'actEnergyDlvd': 6594868.364, 'actEnergyRcvd': 3793528.355, 'activePower': -72.12, 'apparentEnergy': 11803492.765, 'apparentPower': 513.834, 'current': 4.239, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': -72.12, 'pwrFactor': 0.081, 'reactEnergyLagg': 68699.07, 'reactEnergyLead': 3480803.913, 'reactivePower': 464.057, 'timestamp': 1718213332, 'voltage': 121.192, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 9.098, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 195.575, 'pwrFactor': 0.398, 'reactEnergyLagg': 485728.442, 'reactEnergyLead': 7723369.387, 'reactivePower': 938.575, 'timestamp': 1718213332, 'voltage': 243.047, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/ivp/ss/gen_config': dict({ 'charge_from_generator': True, 'cool_down_mins': 0, 'gen_type': 'Standby', 'generator_id': '', 'last_updated_by': 'ITK', 'manufacturer': 'Generac', 'max_cont_gen_amps': 58.3, 'max_gen_efficiency_perc': 100, 'min_gen_loading_perc': 5, 'model': 'G007223-0, G007224-0, G007225-0 (14kW)', 'name_plate_rating_wat': 14.0, 'start_method': 'Auto', 'warm_up_mins': 0, }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2775.526, 'measurementType': 'total-consumption', 'pwrFactor': 0.92, 'reactPwr': -197.689, 'readingTime': 1718213330, 'rmsCurrent': 22.811, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 1585.814, 'varhLagLifetime': -3630293.476, 'varhLagToday': 598.0, 'varhLeadLifetime': 7716225.126, 'varhLeadToday': 0.0, 'wNow': 2670.058, 'whLastSevenDays': 882.448, 'whLifetime': 22392008.448, 'whToday': 3333.448, }), dict({ 'activeCount': 1, 'apprntPwr': 54.157, 'measurementType': 'net-consumption', 'pwrFactor': 1.0, 'reactPwr': 892.549, 'readingTime': 1718213330, 'rmsCurrent': 0.422, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 0, 'varhLagLifetime': 485727.899, 'varhLagToday': 0, 'varhLeadLifetime': 7723369.387, 'varhLeadToday': 0, 'wNow': 240.397, 'whLastSevenDays': 0, 'whLifetime': 7298714.07, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 26, 'readingTime': 1718213270, 'type': 'inverters', 'wNow': 2317, 'whLifetime': 1107526, }), dict({ 'activeCount': 1, 'apprntPwr': 2707.323, 'measurementType': 'production', 'pwrFactor': 0.92, 'reactPwr': -1090.238, 'readingTime': 1718213330, 'rmsCurrent': 22.389, 'rmsVoltage': 242.897, 'type': 'eim', 'vahLifetime': 18631233.018, 'vahToday': 2965.018, 'varhLagLifetime': 4116021.375, 'varhLagToday': 3.375, 'varhLeadLifetime': 7144.262, 'varhLeadToday': 959.262, 'wNow': 2429.661, 'whLastSevenDays': 360056.35, 'whLifetime': 15097303.35, 'whToday': 2645.35, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 882, 'watt_hours_lifetime': 22392008, 'watt_hours_today': 3333, 'watts_now': 2670, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7298714, 'watt_hours_today': 0, 'watts_now': 240, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 360056, 'watt_hours_lifetime': 15097303, 'watt_hours_today': 2645, 'watts_now': 2430, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 50, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4382_ACB] dict({ 'acb_power': dict({ 'batteries': 3, 'charge_wh': 930, 'power': 260, 'state': 'discharging', 'state_of_charge': 25, }), 'battery_aggregate': dict({ 'available_energy': 2820, 'max_available_capacity': 7220, 'state_of_charge': 39, }), 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 23, 'current': 1.477, 'eid': 704643584, 'energy_delivered': 14153292, 'energy_received': 6665131, 'frequency': 50.125, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.066, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1732092964, 'voltage': 228.575, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 308, 'current': 1.466, 'eid': 704643328, 'energy_delivered': 19213421, 'energy_received': 7337, 'frequency': 50.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.918, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1732092964, 'voltage': 228.561, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': dict({ 'available_energy': 1890, 'backup_reserve': 0, 'configured_reserve_state_of_charge': 0, 'max_available_capacity': 3500, 'reserve_state_of_charge': 0, 'state_of_charge': 54, }), 'encharge_inventory': dict({ '122311091641': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.38', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3500, 'encharge_revision': 2, 'firmware_loaded_date': 1731789415, 'firmware_version': '2.6.7854_rel/22.33', 'installed_date': 1731789415, 'last_report_date': 1732092823, 'led_status': 17, 'max_cell_temp': 11, 'operating': None, 'part_number': '830-01760-r42', 'percent_full': 10, 'serial_number': '122311091641', 'temperature': 11, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '122311091641': dict({ 'apparent_power_mva': 105000, 'real_power_mw': 105000, 'soc': 54, }), }), 'enpower': None, 'inverters': dict({ '122050064150': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092152, 'last_report_duration': None, 'last_report_watts': 11, 'lifetime_energy': None, 'max_report_watts': 110, 'serial_number': '122050064150', 'temperature': None, }), '122050064569': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092241, 'last_report_duration': None, 'last_report_watts': 11, 'lifetime_energy': None, 'max_report_watts': 113, 'serial_number': '122050064569', 'temperature': None, }), '122050068829': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091943, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 89, 'serial_number': '122050068829', 'temperature': None, }), '122050068987': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091912, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 78, 'serial_number': '122050068987', 'temperature': None, }), '122050070266': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092212, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 114, 'serial_number': '122050070266', 'temperature': None, }), '122050070482': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091852, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 169, 'serial_number': '122050070482', 'temperature': None, }), '122050070641': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091822, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 167, 'serial_number': '122050070641', 'temperature': None, }), '122050070693': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091821, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 136, 'serial_number': '122050070693', 'temperature': None, }), '122050070701': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091881, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 166, 'serial_number': '122050070701', 'temperature': None, }), '122050070741': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091853, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 169, 'serial_number': '122050070741', 'temperature': None, }), '122050070798': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091882, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 165, 'serial_number': '122050070798', 'temperature': None, }), '122050070849': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092032, 'last_report_duration': None, 'last_report_watts': 11, 'lifetime_energy': None, 'max_report_watts': 162, 'serial_number': '122050070849', 'temperature': None, }), '122050070908': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092032, 'last_report_duration': None, 'last_report_watts': 11, 'lifetime_energy': None, 'max_report_watts': 166, 'serial_number': '122050070908', 'temperature': None, }), '122050070958': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732091854, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 165, 'serial_number': '122050070958', 'temperature': None, }), '122105018115': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092121, 'last_report_duration': None, 'last_report_watts': 11, 'lifetime_energy': None, 'max_report_watts': 164, 'serial_number': '122105018115', 'temperature': None, }), '122122013808': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732089577, 'last_report_duration': None, 'last_report_watts': 1, 'lifetime_energy': None, 'max_report_watts': 149, 'serial_number': '122122013808', 'temperature': None, }), '122122013879': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732089577, 'last_report_duration': None, 'last_report_watts': 2, 'lifetime_energy': None, 'max_report_watts': 149, 'serial_number': '122122013879', 'temperature': None, }), '122122014120': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732089607, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 149, 'serial_number': '122122014120', 'temperature': None, }), '122307116607': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092092, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 189, 'serial_number': '122307116607', 'temperature': None, }), '122308004151': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1732092062, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 120, 'serial_number': '122308004151', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-11-20 08:56:04 UTC', 'filename': '', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), }), 'source': '', 'version': '', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1701165193', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.20000000298023224, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1725861428', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'opt_schedules': True, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1732092212, 'lastReportWatts': 12, 'maxReportWatts': 114, 'serialNumber': '122050070266', }), dict({ 'devType': 1, 'lastReportDate': 1732092241, 'lastReportWatts': 11, 'maxReportWatts': 113, 'serialNumber': '122050064569', }), dict({ 'devType': 1, 'lastReportDate': 1732092152, 'lastReportWatts': 11, 'maxReportWatts': 110, 'serialNumber': '122050064150', }), dict({ 'devType': 1, 'lastReportDate': 1732091943, 'lastReportWatts': 9, 'maxReportWatts': 89, 'serialNumber': '122050068829', }), dict({ 'devType': 1, 'lastReportDate': 1732091912, 'lastReportWatts': 9, 'maxReportWatts': 78, 'serialNumber': '122050068987', }), dict({ 'devType': 1, 'lastReportDate': 1732091821, 'lastReportWatts': 9, 'maxReportWatts': 136, 'serialNumber': '122050070693', }), dict({ 'devType': 1, 'lastReportDate': 1732092121, 'lastReportWatts': 11, 'maxReportWatts': 164, 'serialNumber': '122105018115', }), dict({ 'devType': 1, 'lastReportDate': 1732091881, 'lastReportWatts': 10, 'maxReportWatts': 166, 'serialNumber': '122050070701', }), dict({ 'devType': 1, 'lastReportDate': 1732091822, 'lastReportWatts': 10, 'maxReportWatts': 167, 'serialNumber': '122050070641', }), dict({ 'devType': 1, 'lastReportDate': 1732091852, 'lastReportWatts': 10, 'maxReportWatts': 169, 'serialNumber': '122050070482', }), dict({ 'devType': 1, 'lastReportDate': 1732091853, 'lastReportWatts': 10, 'maxReportWatts': 169, 'serialNumber': '122050070741', }), dict({ 'devType': 1, 'lastReportDate': 1732092032, 'lastReportWatts': 11, 'maxReportWatts': 166, 'serialNumber': '122050070908', }), dict({ 'devType': 1, 'lastReportDate': 1732092032, 'lastReportWatts': 11, 'maxReportWatts': 162, 'serialNumber': '122050070849', }), dict({ 'devType': 1, 'lastReportDate': 1732091854, 'lastReportWatts': 10, 'maxReportWatts': 165, 'serialNumber': '122050070958', }), dict({ 'devType': 1, 'lastReportDate': 1732091882, 'lastReportWatts': 10, 'maxReportWatts': 165, 'serialNumber': '122050070798', }), dict({ 'devType': 1, 'lastReportDate': 1732092092, 'lastReportWatts': 14, 'maxReportWatts': 189, 'serialNumber': '122307116607', }), dict({ 'devType': 1, 'lastReportDate': 1732092062, 'lastReportWatts': 12, 'maxReportWatts': 120, 'serialNumber': '122308004151', }), dict({ 'devType': 11, 'lastReportDate': 1732089577, 'lastReportWatts': 2, 'maxReportWatts': 149, 'serialNumber': '122122013879', }), dict({ 'devType': 11, 'lastReportDate': 1732089577, 'lastReportWatts': 1, 'maxReportWatts': 149, 'serialNumber': '122122013808', }), dict({ 'devType': 11, 'lastReportDate': 1732089607, 'lastReportWatts': 0, 'maxReportWatts': 149, 'serialNumber': '122122014120', }), ]), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.38', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1731789415, 'dc_switch_off': False, 'der_index': 1, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3500, 'encharge_rev': 2, 'img_load_date': 1731789415, 'img_pnum_running': '2.6.7854_rel/22.33', 'installed': 1731789415, 'last_rpt_date': 1732092823, 'led_status': 17, 'maxCellTemp': 11, 'part_num': '830-01760-r42', 'percentFull': 10, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '122311091641', 'sleep_enabled': False, 'temperature': 11, }), ]), 'type': 'ENCHARGE', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 105000, 'real_power_mw': 105000, 'serial_num': '122311091641', 'soc': 54, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 930, 'ACB_agg_soc': 25, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 1890, 'ENC_agg_backup_energy': 0, 'ENC_agg_soc': 54, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 3500, 'Enc_max_available_capacity': 3500, 'Max_energy': 7220, 'VLS_Limit': 5, 'adjusted_backup_soc': 0, 'agg_soc': 39, 'configured_backup_soc': 0, 'freq_bias_hz': -0.04687688872218132, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -75, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': True, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': -0.5658036470413208, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -18, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 19213421.296, 'actEnergyRcvd': 7336.656, 'activePower': 308.373, 'apparentEnergy': 24081174.822, 'apparentPower': 335.318, 'channels': list([ dict({ 'actEnergyDlvd': 19213421.296, 'actEnergyRcvd': 7336.656, 'activePower': 308.373, 'apparentEnergy': 24081174.822, 'apparentPower': 335.318, 'current': 1.466, 'eid': 1778385169, 'freq': 50.062, 'instantaneousDemand': 308.373, 'pwrFactor': 0.918, 'reactEnergyLagg': 5814149.758, 'reactEnergyLead': 2217810.322, 'reactivePower': -113.954, 'timestamp': 1732092964, 'voltage': 228.561, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1944.575, 'activePower': 0.0, 'apparentEnergy': 21790.483, 'apparentPower': 0.792, 'current': 0.173, 'eid': 1778385170, 'freq': 50.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 2031.758, 'reactEnergyLead': 0.0, 'reactivePower': 0.081, 'timestamp': 1732092964, 'voltage': 4.605, }), dict({ 'actEnergyDlvd': 0.093, 'actEnergyRcvd': 36877.093, 'activePower': -0.0, 'apparentEnergy': 1682.645, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 50.062, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 2037.521, 'reactEnergyLead': 9.126, 'reactivePower': -0.0, 'timestamp': 1732092964, 'voltage': 7.8, }), ]), 'current': 1.466, 'eid': 704643328, 'freq': 50.062, 'instantaneousDemand': 308.373, 'pwrFactor': 0.918, 'reactEnergyLagg': 5814149.758, 'reactEnergyLead': 2217810.322, 'reactivePower': -113.954, 'timestamp': 1732092964, 'voltage': 228.561, }), dict({ 'actEnergyDlvd': 14153292.251, 'actEnergyRcvd': 6665130.717, 'activePower': 22.54, 'apparentEnergy': 31487330.807, 'apparentPower': 337.439, 'channels': list([ dict({ 'actEnergyDlvd': 14153292.251, 'actEnergyRcvd': 6665130.717, 'activePower': 22.54, 'apparentEnergy': 31487330.807, 'apparentPower': 337.439, 'current': 1.477, 'eid': 1778385425, 'freq': 50.125, 'instantaneousDemand': 22.54, 'pwrFactor': 0.066, 'reactEnergyLagg': 1706094.54, 'reactEnergyLead': 13403122.193, 'reactivePower': -280.396, 'timestamp': 1732092964, 'voltage': 228.575, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 56876.766, 'activePower': -0.131, 'apparentEnergy': 9882.922, 'apparentPower': 0.353, 'current': 0.212, 'eid': 1778385426, 'freq': 50.125, 'instantaneousDemand': -0.131, 'pwrFactor': 0.0, 'reactEnergyLagg': 1852.119, 'reactEnergyLead': 0.903, 'reactivePower': 0.0, 'timestamp': 1732092964, 'voltage': 1.666, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 80195.369, 'activePower': 0.0, 'apparentEnergy': 1778.597, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 50.125, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 1854.391, 'reactEnergyLead': 0.0, 'reactivePower': -0.0, 'timestamp': 1732092964, 'voltage': 6.87, }), ]), 'current': 1.477, 'eid': 704643584, 'freq': 50.125, 'instantaneousDemand': 22.54, 'pwrFactor': 0.066, 'reactEnergyLagg': 1706094.54, 'reactEnergyLead': 13403122.193, 'reactivePower': -280.396, 'timestamp': 1732092964, 'voltage': 228.575, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 679.518, 'lines': list([ dict({ 'apprntPwr': 679.518, 'pwrFactor': 0.49, 'reactPwr': -399.219, 'rmsCurrent': 2.949, 'rmsVoltage': 230.415, 'vahLifetime': 31487330.236, 'vahToday': 10065.236, 'varhLagLifetime': -4108055.218, 'varhLagToday': 0.0, 'varhLeadLifetime': 11185311.588, 'varhLeadToday': 6102.588, 'wNow': 330.26, 'whLastSevenDays': 76.925, 'whLifetime': 26700500.925, 'whToday': 6553.925, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.49, 'reactPwr': -399.219, 'readingTime': 1732092958, 'rmsCurrent': 2.949, 'rmsVoltage': 230.415, 'type': 'eim', 'vahLifetime': 31487330.236, 'vahToday': 10065.236, 'varhLagLifetime': -4108055.218, 'varhLagToday': 0.0, 'varhLeadLifetime': 11185311.588, 'varhLeadToday': 6102.588, 'wNow': 330.26, 'whLastSevenDays': 76.925, 'whLifetime': 26700500.925, 'whToday': 6553.925, }), dict({ 'activeCount': 1, 'apprntPwr': 341.016, 'lines': list([ dict({ 'apprntPwr': 341.016, 'pwrFactor': 0.06, 'reactPwr': -285.622, 'rmsCurrent': 1.48, 'rmsVoltage': 230.415, 'vahLifetime': 31487330.236, 'vahToday': 0, 'varhLagLifetime': 1706094.54, 'varhLagToday': 0, 'varhLeadLifetime': 13403121.717, 'varhLeadToday': 0, 'wNow': 19.141, 'whLastSevenDays': 0, 'whLifetime': 7489242.849, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.06, 'reactPwr': -285.622, 'readingTime': 1732092958, 'rmsCurrent': 1.48, 'rmsVoltage': 230.415, 'type': 'eim', 'vahLifetime': 31487330.236, 'vahToday': 0, 'varhLagLifetime': 1706094.54, 'varhLagToday': 0, 'varhLeadLifetime': 13403121.717, 'varhLeadToday': 0, 'wNow': 19.141, 'whLastSevenDays': 0, 'whLifetime': 7489242.849, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 17, 'readingTime': 1732092241, 'type': 'inverters', 'wNow': 179, 'whLifetime': 7417207, }), dict({ 'activeCount': 1, 'apprntPwr': 338.784, 'lines': list([ dict({ 'apprntPwr': 338.784, 'pwrFactor': 0.92, 'reactPwr': -113.597, 'rmsCurrent': 1.469, 'rmsVoltage': 230.306, 'vahLifetime': 24081174.253, 'vahToday': 2681.253, 'varhLagLifetime': 5814149.758, 'varhLagToday': 2300.758, 'varhLeadLifetime': 2217810.13, 'varhLeadToday': 100.13, 'wNow': 311.12, 'whLastSevenDays': 41260.774, 'whLifetime': 19213420.774, 'whToday': 296.774, }), ]), 'measurementType': 'production', 'pwrFactor': 0.92, 'reactPwr': -113.597, 'readingTime': 1732092958, 'rmsCurrent': 1.469, 'rmsVoltage': 230.306, 'type': 'eim', 'vahLifetime': 24081174.253, 'vahToday': 2681.253, 'varhLagLifetime': 5814149.758, 'varhLagToday': 2300.758, 'varhLeadLifetime': 2217810.13, 'varhLeadToday': 100.13, 'wNow': 311.12, 'whLastSevenDays': 41260.774, 'whLifetime': 19213420.774, 'whToday': 296.774, }), ]), 'storage': list([ dict({ 'activeCount': 3, 'percentFull': 25, 'readingTime': 1731943992, 'state': 'discharging', 'type': 'acb', 'wNow': 260, 'whNow': 930, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 77, 'watt_hours_lifetime': 26700501, 'watt_hours_today': 6554, 'watts_now': 330, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7489243, 'watt_hours_today': 0, 'watts_now': 19, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 41261, 'watt_hours_lifetime': 19213421, 'watt_hours_today': 297, 'watts_now': 311, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1701165193', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.20000000298023224, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1725861428', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': True, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- pyenphase-2.3.1/tests/__snapshots__/test_endpoints.ambr000066400000000000000000026175671505013723300234250ustar00rootroot00000000000000# serializer version: 1 # name: test_with_7_x_firmware[4.10.35] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 567, 'current': 8.389, 'eid': 704643584, 'energy_delivered': 16908209, 'energy_received': 17357690, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.5, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.736, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 394, 'current': 5.208, 'eid': 1778385425, 'energy_delivered': 10220652, 'energy_received': 8001772, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.549, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.867, }), : dict({ 'active_power': 173, 'current': 3.181, 'eid': 1778385426, 'energy_delivered': 6687557, 'energy_received': 9355918, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.426, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.869, }), }), 'ctmeter_production': dict({ 'active_power': 166, 'current': 3.692, 'eid': 704643328, 'energy_delivered': 26785327, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.394, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.659, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 83, 'current': 1.844, 'eid': 1778385169, 'energy_delivered': 13398798, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.4, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.824, }), : dict({ 'active_power': 84, 'current': 1.848, 'eid': 1778385170, 'energy_delivered': 13386530, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.387, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.836, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122002010484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301305, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002010484', 'temperature': None, }), '122002010488': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301325, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010488', 'temperature': None, }), '122002010489': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301317, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002010489', 'temperature': None, }), '122002010577': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301322, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010577', 'temperature': None, }), '122002011248': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 227, 'serial_number': '122002011248', 'temperature': None, }), '122002017614': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301321, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 294, 'serial_number': '122002017614', 'temperature': None, }), '122002017669': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002017669', 'temperature': None, }), '122002021078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301323, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002021078', 'temperature': None, }), '122002021258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021258', 'temperature': None, }), '122002021381': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301308, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021381', 'temperature': None, }), '122002026181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301309, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 287, 'serial_number': '122002026181', 'temperature': None, }), '122002026190': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301313, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122002026190', 'temperature': None, }), '122002027876': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301332, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002027876', 'temperature': None, }), '122002040286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '122002040286', 'temperature': None, }), '122002041618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301318, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '122002041618', 'temperature': None, }), '122002041621': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301310, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 197, 'serial_number': '122002041621', 'temperature': None, }), '122002041626': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002041626', 'temperature': None, }), '122002041636': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301319, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002041636', 'temperature': None, }), '122002041638': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122002041638', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'date': '2023-05-11 19:46:56 UTC', 'source': 'Tariff', 'version': '00.00.01', }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'single_rate': dict({ 'rate': 0.21835, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695301309, 'lastReportWatts': 13, 'maxReportWatts': 287, 'serialNumber': '122002026181', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 299, 'serialNumber': '122002040286', }), dict({ 'devType': 1, 'lastReportDate': 1695301305, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002010484', }), dict({ 'devType': 1, 'lastReportDate': 1695301313, 'lastReportWatts': 13, 'maxReportWatts': 289, 'serialNumber': '122002026190', }), dict({ 'devType': 1, 'lastReportDate': 1695301318, 'lastReportWatts': 13, 'maxReportWatts': 292, 'serialNumber': '122002041618', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021258', }), dict({ 'devType': 1, 'lastReportDate': 1695301325, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010488', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002041626', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 12, 'maxReportWatts': 305, 'serialNumber': '122002017669', }), dict({ 'devType': 1, 'lastReportDate': 1695301321, 'lastReportWatts': 13, 'maxReportWatts': 294, 'serialNumber': '122002017614', }), dict({ 'devType': 1, 'lastReportDate': 1695301332, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002027876', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 227, 'serialNumber': '122002011248', }), dict({ 'devType': 1, 'lastReportDate': 1695301323, 'lastReportWatts': 12, 'maxReportWatts': 306, 'serialNumber': '122002021078', }), dict({ 'devType': 1, 'lastReportDate': 1695301308, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021381', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122002041638', }), dict({ 'devType': 1, 'lastReportDate': 1695301319, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002041636', }), dict({ 'devType': 1, 'lastReportDate': 1695301310, 'lastReportWatts': 13, 'maxReportWatts': 197, 'serialNumber': '122002041621', }), dict({ 'devType': 1, 'lastReportDate': 1695301317, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002010489', }), dict({ 'devType': 1, 'lastReportDate': 1695301322, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010577', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 26785327.449, 'actEnergyRcvd': 0.001, 'activePower': 166.489, 'apparentEnergy': 33655488.016, 'apparentPower': 457.211, 'channels': list([ dict({ 'actEnergyDlvd': 13398797.544, 'actEnergyRcvd': 0.001, 'activePower': 82.913, 'apparentEnergy': 16836537.224, 'apparentPower': 228.406, 'current': 1.844, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 82.913, 'pwrFactor': 0.4, 'reactEnergyLagg': 5169167.875, 'reactEnergyLead': 0.0, 'reactivePower': 191.751, 'timestamp': 1695301419, 'voltage': 123.824, }), dict({ 'actEnergyDlvd': 13386529.904, 'actEnergyRcvd': 0.0, 'activePower': 83.576, 'apparentEnergy': 16818950.792, 'apparentPower': 228.804, 'current': 1.848, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 83.576, 'pwrFactor': 0.387, 'reactEnergyLagg': 5122825.568, 'reactEnergyLead': 0.001, 'reactivePower': 191.574, 'timestamp': 1695301419, 'voltage': 123.836, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 3.692, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 166.489, 'pwrFactor': 0.394, 'reactEnergyLagg': 10291993.443, 'reactEnergyLead': 0.001, 'reactivePower': 383.325, 'timestamp': 1695301419, 'voltage': 247.659, }), dict({ 'actEnergyDlvd': 16908208.78, 'actEnergyRcvd': 17357690.272, 'activePower': 566.864, 'apparentEnergy': 41943778.605, 'apparentPower': 1063.035, 'channels': list([ dict({ 'actEnergyDlvd': 10220652.219, 'actEnergyRcvd': 8001771.78, 'activePower': 393.965, 'apparentEnergy': 22610499.739, 'apparentPower': 668.739, 'current': 5.208, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 393.965, 'pwrFactor': 0.549, 'reactEnergyLagg': 87750.153, 'reactEnergyLead': 7841689.25, 'reactivePower': -337.072, 'timestamp': 1695301419, 'voltage': 123.867, }), dict({ 'actEnergyDlvd': 6687556.561, 'actEnergyRcvd': 9355918.492, 'activePower': 172.899, 'apparentEnergy': 19333278.866, 'apparentPower': 394.296, 'current': 3.181, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 172.899, 'pwrFactor': 0.426, 'reactEnergyLagg': 455469.296, 'reactEnergyLead': 5687697.556, 'reactivePower': -243.946, 'timestamp': 1695301419, 'voltage': 123.869, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 8.389, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 566.864, 'pwrFactor': 0.5, 'reactEnergyLagg': 543219.449, 'reactEnergyLead': 13529386.807, 'reactivePower': -581.018, 'timestamp': 1695301419, 'voltage': 247.736, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3189.788, 'measurementType': 'total-consumption', 'pwrFactor': 0.25, 'reactPwr': -959.115, 'readingTime': 1695301418, 'rmsCurrent': 12.88, 'rmsVoltage': 247.663, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 9709.997, 'varhLagLifetime': 10835212.67, 'varhLagToday': 3120.67, 'varhLeadLifetime': 13529386.465, 'varhLeadToday': 4281.465, 'wNow': 806.405, 'whLastSevenDays': 163075.411, 'whLifetime': 26335790.411, 'whToday': 7412.411, }), dict({ 'activeCount': 1, 'apprntPwr': 1155.626, 'measurementType': 'net-consumption', 'pwrFactor': 0.53, 'reactPwr': -577.46, 'readingTime': 1695301418, 'rmsCurrent': 9.195, 'rmsVoltage': 247.696, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 0, 'varhLagLifetime': 543219.449, 'varhLagToday': 0, 'varhLeadLifetime': 13529386.464, 'varhLeadToday': 0, 'wNow': 640.874, 'whLastSevenDays': 0, 'whLifetime': 16908208.46, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 19, 'readingTime': 1695301333, 'type': 'inverters', 'wNow': 246, 'whLifetime': 26890410, }), dict({ 'activeCount': 1, 'apprntPwr': 457.492, 'measurementType': 'production', 'pwrFactor': 0.35, 'reactPwr': 381.654, 'readingTime': 1695301418, 'rmsCurrent': 3.685, 'rmsVoltage': 247.631, 'type': 'eim', 'vahLifetime': 33655487.75, 'vahToday': 3288.75, 'varhLagLifetime': 10291993.22, 'varhLagToday': 3108.22, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 165.53, 'whLastSevenDays': 179155.351, 'whLifetime': 26785327.351, 'whToday': 139.351, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 163075, 'watt_hours_lifetime': 26335790, 'watt_hours_today': 7412, 'watts_now': 806, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 16908208, 'watt_hours_today': 0, 'watts_now': 641, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 179155, 'watt_hours_lifetime': 26785327, 'watt_hours_today': 139, 'watts_now': 166, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': None, 'logger': None, 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'seasons_sell': None, 'single_rate': dict({ 'rate': 0.21835, }), 'storage_settings': None, }), }) # --- # name: test_with_7_x_firmware[5.0.62] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121547055830': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554884, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547055830', 'temperature': None, }), '121547059008': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554837, 'last_report_duration': None, 'last_report_watts': 203, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059008', 'temperature': None, }), '121547059079': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554838, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059079', 'temperature': None, }), '121547059102': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554873, 'last_report_duration': None, 'last_report_watts': 159, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059102', 'temperature': None, }), '121547059107': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554863, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059107', 'temperature': None, }), '121547059108': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554865, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059108', 'temperature': None, }), '121547059112': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554890, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059112', 'temperature': None, }), '121547059128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554858, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059128', 'temperature': None, }), '121547059193': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554845, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547059193', 'temperature': None, }), '121547059202': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554848, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '121547059202', 'temperature': None, }), '121547059217': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554886, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059217', 'temperature': None, }), '121547059253': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554896, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059253', 'temperature': None, }), '121547059333': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554877, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059333', 'temperature': None, }), '121547059354': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554892, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 250, 'serial_number': '121547059354', 'temperature': None, }), '121547059355': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554861, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059355', 'temperature': None, }), '121547059357': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554850, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547059357', 'temperature': None, }), '121547059359': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554843, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059359', 'temperature': None, }), '121547059360': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554839, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059360', 'temperature': None, }), '121547059363': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554852, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547059363', 'temperature': None, }), '121547059381': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554856, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059381', 'temperature': None, }), '121547059889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554862, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059889', 'temperature': None, }), '121547060383': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554853, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547060383', 'temperature': None, }), '121547060384': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554845, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060384', 'temperature': None, }), '121547060392': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554895, 'last_report_duration': None, 'last_report_watts': 208, 'lifetime_energy': None, 'max_report_watts': 250, 'serial_number': '121547060392', 'temperature': None, }), '121547060396': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554867, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060396', 'temperature': None, }), '121547060412': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554855, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 220, 'serial_number': '121547060412', 'temperature': None, }), '121547060415': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554866, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060415', 'temperature': None, }), '121547060590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554881, 'last_report_duration': None, 'last_report_watts': 180, 'lifetime_energy': None, 'max_report_watts': 234, 'serial_number': '121547060590', 'temperature': None, }), '121547060592': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554881, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547060592', 'temperature': None, }), '121547060593': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554871, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060593', 'temperature': None, }), '121547060643': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554888, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060643', 'temperature': None, }), '121547060647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554890, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060647', 'temperature': None, }), '121547060650': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554848, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547060650', 'temperature': None, }), '121547060670': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554870, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '121547060670', 'temperature': None, }), '121547060671': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554887, 'last_report_duration': None, 'last_report_watts': 60, 'lifetime_energy': None, 'max_report_watts': 224, 'serial_number': '121547060671', 'temperature': None, }), '121547060727': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554877, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060727', 'temperature': None, }), '121547060758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554874, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 240, 'serial_number': '121547060758', 'temperature': None, }), '121547060761': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554857, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547060761', 'temperature': None, }), '121547060766': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554837, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547060766', 'temperature': None, }), '121547060773': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554841, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547060773', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'date': '2023-08-10 17:59:03 UTC', 'source': 'Tariff', 'version': '00.00.02', }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), }), }), '/api/v1/production': dict({ 'wattHoursLifetime': 133798553, 'wattHoursSevenDays': 366671, 'wattHoursToday': 20161, 'wattsNow': 7907, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694554838, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547059079', }), dict({ 'devType': 1, 'lastReportDate': 1694554845, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '121547059193', }), dict({ 'devType': 1, 'lastReportDate': 1694554839, 'lastReportWatts': 204, 'maxReportWatts': 246, 'serialNumber': '121547059360', }), dict({ 'devType': 1, 'lastReportDate': 1694554845, 'lastReportWatts': 206, 'maxReportWatts': 248, 'serialNumber': '121547060384', }), dict({ 'devType': 1, 'lastReportDate': 1694554852, 'lastReportWatts': 198, 'maxReportWatts': 242, 'serialNumber': '121547059363', }), dict({ 'devType': 1, 'lastReportDate': 1694554848, 'lastReportWatts': 199, 'maxReportWatts': 242, 'serialNumber': '121547060650', }), dict({ 'devType': 1, 'lastReportDate': 1694554858, 'lastReportWatts': 204, 'maxReportWatts': 248, 'serialNumber': '121547059128', }), dict({ 'devType': 1, 'lastReportDate': 1694554865, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547059108', }), dict({ 'devType': 1, 'lastReportDate': 1694554871, 'lastReportWatts': 206, 'maxReportWatts': 248, 'serialNumber': '121547060593', }), dict({ 'devType': 1, 'lastReportDate': 1694554873, 'lastReportWatts': 159, 'maxReportWatts': 247, 'serialNumber': '121547059102', }), dict({ 'devType': 1, 'lastReportDate': 1694554881, 'lastReportWatts': 180, 'maxReportWatts': 234, 'serialNumber': '121547060590', }), dict({ 'devType': 1, 'lastReportDate': 1694554887, 'lastReportWatts': 60, 'maxReportWatts': 224, 'serialNumber': '121547060671', }), dict({ 'devType': 1, 'lastReportDate': 1694554892, 'lastReportWatts': 206, 'maxReportWatts': 250, 'serialNumber': '121547059354', }), dict({ 'devType': 1, 'lastReportDate': 1694554896, 'lastReportWatts': 202, 'maxReportWatts': 249, 'serialNumber': '121547059253', }), dict({ 'devType': 1, 'lastReportDate': 1694554895, 'lastReportWatts': 208, 'maxReportWatts': 250, 'serialNumber': '121547060392', }), dict({ 'devType': 1, 'lastReportDate': 1694554890, 'lastReportWatts': 200, 'maxReportWatts': 248, 'serialNumber': '121547059112', }), dict({ 'devType': 1, 'lastReportDate': 1694554890, 'lastReportWatts': 207, 'maxReportWatts': 249, 'serialNumber': '121547060647', }), dict({ 'devType': 1, 'lastReportDate': 1694554888, 'lastReportWatts': 200, 'maxReportWatts': 248, 'serialNumber': '121547060643', }), dict({ 'devType': 1, 'lastReportDate': 1694554886, 'lastReportWatts': 210, 'maxReportWatts': 249, 'serialNumber': '121547059217', }), dict({ 'devType': 1, 'lastReportDate': 1694554884, 'lastReportWatts': 201, 'maxReportWatts': 247, 'serialNumber': '121547055830', }), dict({ 'devType': 1, 'lastReportDate': 1694554881, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547060592', }), dict({ 'devType': 1, 'lastReportDate': 1694554874, 'lastReportWatts': 197, 'maxReportWatts': 240, 'serialNumber': '121547060758', }), dict({ 'devType': 1, 'lastReportDate': 1694554877, 'lastReportWatts': 202, 'maxReportWatts': 248, 'serialNumber': '121547059333', }), dict({ 'devType': 1, 'lastReportDate': 1694554877, 'lastReportWatts': 204, 'maxReportWatts': 249, 'serialNumber': '121547060727', }), dict({ 'devType': 1, 'lastReportDate': 1694554837, 'lastReportWatts': 203, 'maxReportWatts': 247, 'serialNumber': '121547059008', }), dict({ 'devType': 1, 'lastReportDate': 1694554841, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547060773', }), dict({ 'devType': 1, 'lastReportDate': 1694554848, 'lastReportWatts': 200, 'maxReportWatts': 243, 'serialNumber': '121547059202', }), dict({ 'devType': 1, 'lastReportDate': 1694554857, 'lastReportWatts': 202, 'maxReportWatts': 244, 'serialNumber': '121547060761', }), dict({ 'devType': 1, 'lastReportDate': 1694554855, 'lastReportWatts': 197, 'maxReportWatts': 220, 'serialNumber': '121547060412', }), dict({ 'devType': 1, 'lastReportDate': 1694554861, 'lastReportWatts': 207, 'maxReportWatts': 249, 'serialNumber': '121547059355', }), dict({ 'devType': 1, 'lastReportDate': 1694554866, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547060415', }), dict({ 'devType': 1, 'lastReportDate': 1694554870, 'lastReportWatts': 199, 'maxReportWatts': 243, 'serialNumber': '121547060670', }), dict({ 'devType': 1, 'lastReportDate': 1694554867, 'lastReportWatts': 205, 'maxReportWatts': 248, 'serialNumber': '121547060396', }), dict({ 'devType': 1, 'lastReportDate': 1694554863, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547059107', }), dict({ 'devType': 1, 'lastReportDate': 1694554862, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547059889', }), dict({ 'devType': 1, 'lastReportDate': 1694554853, 'lastReportWatts': 204, 'maxReportWatts': 246, 'serialNumber': '121547060383', }), dict({ 'devType': 1, 'lastReportDate': 1694554837, 'lastReportWatts': 202, 'maxReportWatts': 244, 'serialNumber': '121547060766', }), dict({ 'devType': 1, 'lastReportDate': 1694554843, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547059359', }), dict({ 'devType': 1, 'lastReportDate': 1694554850, 'lastReportWatts': 201, 'maxReportWatts': 242, 'serialNumber': '121547059357', }), dict({ 'devType': 1, 'lastReportDate': 1694554856, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547059381', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 366671, 'watt_hours_lifetime': 133798553, 'watt_hours_today': 20161, 'watts_now': 7907, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': None, 'logger': None, 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': None, }), }) # --- # name: test_with_7_x_firmware[7.3.130] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202218023114': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342554, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218023114', 'temperature': None, }), '202218024705': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342553, 'last_report_duration': None, 'last_report_watts': 8, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218024705', 'temperature': None, }), '202218025399': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342465, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 350, 'serial_number': '202218025399', 'temperature': None, }), '202218026521': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342464, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218026521', 'temperature': None, }), '202218028926': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342462, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218028926', 'temperature': None, }), '202218029586': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342643, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218029586', 'temperature': None, }), '202218031593': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342674, 'last_report_duration': None, 'last_report_watts': 20, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218031593', 'temperature': None, }), '202218034002': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342555, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218034002', 'temperature': None, }), '202218035988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342613, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218035988', 'temperature': None, }), '202218036214': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342432, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218036214', 'temperature': None, }), '202218036386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342584, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218036386', 'temperature': None, }), '202218037990': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342525, 'last_report_duration': None, 'last_report_watts': 16, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218037990', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691342432, 'lastReportWatts': 13, 'maxReportWatts': 347, 'serialNumber': '202218036214', }), dict({ 'devType': 1, 'lastReportDate': 1691342462, 'lastReportWatts': 17, 'maxReportWatts': 346, 'serialNumber': '202218028926', }), dict({ 'devType': 1, 'lastReportDate': 1691342643, 'lastReportWatts': 12, 'maxReportWatts': 347, 'serialNumber': '202218029586', }), dict({ 'devType': 1, 'lastReportDate': 1691342613, 'lastReportWatts': 17, 'maxReportWatts': 348, 'serialNumber': '202218035988', }), dict({ 'devType': 1, 'lastReportDate': 1691342553, 'lastReportWatts': 8, 'maxReportWatts': 345, 'serialNumber': '202218024705', }), dict({ 'devType': 1, 'lastReportDate': 1691342554, 'lastReportWatts': 14, 'maxReportWatts': 346, 'serialNumber': '202218023114', }), dict({ 'devType': 1, 'lastReportDate': 1691342525, 'lastReportWatts': 16, 'maxReportWatts': 348, 'serialNumber': '202218037990', }), dict({ 'devType': 1, 'lastReportDate': 1691342555, 'lastReportWatts': 14, 'maxReportWatts': 345, 'serialNumber': '202218034002', }), dict({ 'devType': 1, 'lastReportDate': 1691342464, 'lastReportWatts': 9, 'maxReportWatts': 347, 'serialNumber': '202218026521', }), dict({ 'devType': 1, 'lastReportDate': 1691342465, 'lastReportWatts': 10, 'maxReportWatts': 350, 'serialNumber': '202218025399', }), dict({ 'devType': 1, 'lastReportDate': 1691342584, 'lastReportWatts': 9, 'maxReportWatts': 346, 'serialNumber': '202218036386', }), dict({ 'devType': 1, 'lastReportDate': 1691342674, 'lastReportWatts': 20, 'maxReportWatts': 348, 'serialNumber': '202218031593', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5108.445, 'measurementType': 'total-consumption', 'pwrFactor': 0.27, 'reactPwr': -1565.844, 'readingTime': 1691342712, 'rmsCurrent': 21.153, 'rmsVoltage': 241.499, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 22482.589, 'varhLagLifetime': 998203.693, 'varhLagToday': 1456.693, 'varhLeadLifetime': 10691664.429, 'varhLeadToday': 13981.429, 'wNow': 1393.191, 'whLastSevenDays': 365473.825, 'whLifetime': 10154380.825, 'whToday': 15177.825, }), dict({ 'activeCount': 1, 'apprntPwr': 2118.15, 'measurementType': 'net-consumption', 'pwrFactor': 0.59, 'reactPwr': -1596.082, 'readingTime': 1691342712, 'rmsCurrent': 17.572, 'rmsVoltage': 241.437, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 0, 'varhLagLifetime': 258967.196, 'varhLagToday': 0, 'varhLeadLifetime': 10652517.939, 'varhLeadToday': 0, 'wNow': 1214.696, 'whLastSevenDays': 0, 'whLifetime': 7116675.502, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 12, 'readingTime': 1691342674, 'type': 'inverters', 'wNow': 158, 'whLifetime': 142373, }), dict({ 'activeCount': 1, 'apprntPwr': 432.848, 'measurementType': 'production', 'pwrFactor': 0.41, 'reactPwr': -30.238, 'readingTime': 1691342712, 'rmsCurrent': 3.581, 'rmsVoltage': 241.56, 'type': 'eim', 'vahLifetime': 4846260.619, 'vahToday': 1977.619, 'varhLagLifetime': 739236.497, 'varhLagToday': 1457.497, 'varhLeadLifetime': 39146.49, 'varhLeadToday': 40.49, 'wNow': 178.495, 'whLastSevenDays': 149972.105, 'whLifetime': 3659506.105, 'whToday': 86.105, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 365474, 'watt_hours_lifetime': 10154381, 'watt_hours_today': 15178, 'watts_now': 1393, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7116676, 'watt_hours_today': 0, 'watts_now': 1215, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 149972, 'watt_hours_lifetime': 3659506, 'watt_hours_today': 86, 'watts_now': 178, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.3.130_no_consumption] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 3625, 'current': 30.223, 'eid': 704643328, 'energy_delivered': 4545930, 'energy_received': 1, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 241.696, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1811, 'current': 15.11, 'eid': 1778385169, 'energy_delivered': 2271794, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.749, }), : dict({ 'active_power': 1814, 'current': 15.113, 'eid': 1778385170, 'energy_delivered': 2274136, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.946, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202302072076': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549623, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302072076', 'temperature': None, }), '202302073177': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549622, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '202302073177', 'temperature': None, }), '202302073203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549592, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302073203', 'temperature': None, }), '202302073606': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549655, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302073606', 'temperature': None, }), '202302074252': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549653, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302074252', 'temperature': None, }), '202302075515': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549531, 'last_report_duration': None, 'last_report_watts': 284, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302075515', 'temperature': None, }), '202302076392': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549625, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302076392', 'temperature': None, }), '202302076838': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549652, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302076838', 'temperature': None, }), '202302077015': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549626, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077015', 'temperature': None, }), '202302077415': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549654, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077415', 'temperature': None, }), '202302077506': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549561, 'last_report_duration': None, 'last_report_watts': 283, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077506', 'temperature': None, }), '202302077890': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549594, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077890', 'temperature': None, }), '482236040239': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549628, 'last_report_duration': None, 'last_report_watts': 272, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040239', 'temperature': None, }), '482236040258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549627, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040258', 'temperature': None, }), '482236040746': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549624, 'last_report_duration': None, 'last_report_watts': 270, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040746', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-07-09 22:07:02 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694549622, 'lastReportWatts': 271, 'maxReportWatts': 299, 'serialNumber': '202302073177', }), dict({ 'devType': 1, 'lastReportDate': 1694549623, 'lastReportWatts': 271, 'maxReportWatts': 300, 'serialNumber': '202302072076', }), dict({ 'devType': 1, 'lastReportDate': 1694549592, 'lastReportWatts': 276, 'maxReportWatts': 301, 'serialNumber': '202302073203', }), dict({ 'devType': 1, 'lastReportDate': 1694549531, 'lastReportWatts': 284, 'maxReportWatts': 300, 'serialNumber': '202302075515', }), dict({ 'devType': 1, 'lastReportDate': 1694549624, 'lastReportWatts': 270, 'maxReportWatts': 300, 'serialNumber': '482236040746', }), dict({ 'devType': 1, 'lastReportDate': 1694549625, 'lastReportWatts': 271, 'maxReportWatts': 301, 'serialNumber': '202302076392', }), dict({ 'devType': 1, 'lastReportDate': 1694549561, 'lastReportWatts': 283, 'maxReportWatts': 300, 'serialNumber': '202302077506', }), dict({ 'devType': 1, 'lastReportDate': 1694549626, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302077015', }), dict({ 'devType': 1, 'lastReportDate': 1694549652, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302076838', }), dict({ 'devType': 1, 'lastReportDate': 1694549627, 'lastReportWatts': 273, 'maxReportWatts': 300, 'serialNumber': '482236040258', }), dict({ 'devType': 1, 'lastReportDate': 1694549594, 'lastReportWatts': 276, 'maxReportWatts': 300, 'serialNumber': '202302077890', }), dict({ 'devType': 1, 'lastReportDate': 1694549653, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302074252', }), dict({ 'devType': 1, 'lastReportDate': 1694549654, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302077415', }), dict({ 'devType': 1, 'lastReportDate': 1694549628, 'lastReportWatts': 272, 'maxReportWatts': 300, 'serialNumber': '482236040239', }), dict({ 'devType': 1, 'lastReportDate': 1694549655, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302073606', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'disabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 4545929.53, 'actEnergyRcvd': 0.637, 'activePower': 3624.573, 'apparentEnergy': 5375938.331, 'apparentPower': 3675.535, 'channels': list([ dict({ 'actEnergyDlvd': 2271793.63, 'actEnergyRcvd': 0.3, 'activePower': 1810.773, 'apparentEnergy': 2685521.244, 'apparentPower': 1836.021, 'current': 15.11, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1810.773, 'pwrFactor': 0.988, 'reactEnergyLagg': 365648.234, 'reactEnergyLead': 7490.926, 'reactivePower': 13.171, 'timestamp': 1694549733, 'voltage': 120.749, }), dict({ 'actEnergyDlvd': 2274135.9, 'actEnergyRcvd': 0.337, 'activePower': 1813.8, 'apparentEnergy': 2690417.087, 'apparentPower': 1839.514, 'current': 15.113, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1813.8, 'pwrFactor': 0.988, 'reactEnergyLagg': 364353.682, 'reactEnergyLead': 8559.662, 'reactivePower': 12.373, 'timestamp': 1694549733, 'voltage': 120.946, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 30.223, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 3624.573, 'pwrFactor': 0.988, 'reactEnergyLagg': 730001.916, 'reactEnergyLead': 16050.589, 'reactivePower': 25.544, 'timestamp': 1694549733, 'voltage': 241.696, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.021, 'apparentPower': 34.651, 'channels': list([ dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.009, 'apparentPower': 15.201, 'current': 0.126, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.773, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.012, 'apparentPower': 19.45, 'current': 0.16, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.945, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 0.287, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 241.718, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 7698.231, 'measurementType': 'total-consumption', 'pwrFactor': 0.49, 'reactPwr': -29.295, 'readingTime': 1694549731, 'rmsCurrent': 31.831, 'rmsVoltage': 241.85, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0.021, 'varhLagLifetime': 730001.895, 'varhLagToday': 730001.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 16050.589, 'wNow': 3780.646, 'whLastSevenDays': 4545909.217, 'whLifetime': 4545909.217, 'whToday': 4545909.217, }), dict({ 'activeCount': 0, 'apprntPwr': 35.041, 'measurementType': 'net-consumption', 'pwrFactor': 0.0, 'reactPwr': 0.909, 'readingTime': 1694549731, 'rmsCurrent': 0.29, 'rmsVoltage': 241.9, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': 0.0, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 15, 'readingTime': 1694549655, 'type': 'inverters', 'wNow': 4085, 'whLifetime': 943236, }), dict({ 'activeCount': 1, 'apprntPwr': 3826.518, 'measurementType': 'production', 'pwrFactor': 0.99, 'reactPwr': 30.203, 'readingTime': 1694549731, 'rmsCurrent': 31.541, 'rmsVoltage': 241.801, 'type': 'eim', 'vahLifetime': 5375935.161, 'vahToday': 17699.161, 'varhLagLifetime': 730001.895, 'varhLagToday': 2831.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 14.589, 'wNow': 3780.646, 'whLastSevenDays': 186010.403, 'whLifetime': 4545926.403, 'whToday': 14848.403, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 186010, 'watt_hours_lifetime': 4545926, 'watt_hours_today': 14848, 'watts_now': 3781, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.466_metered_disabled_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': -144.999, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': -456.848, 'readingTime': 1693745129, 'rmsCurrent': -0.615, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 22904.009, 'varhLagLifetime': -591341.987, 'varhLagToday': 0.0, 'varhLeadLifetime': 3174026.446, 'varhLeadToday': 9602.446, 'wNow': 476.686, 'whLastSevenDays': 4.621, 'whLifetime': 5145153.621, 'whToday': 19903.621, }), dict({ 'activeCount': 0, 'apprntPwr': -654.785, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -572.697, 'readingTime': 1693745129, 'rmsCurrent': -2.778, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 0, 'varhLagLifetime': 251.885, 'varhLagToday': 0, 'varhLeadLifetime': 3174026.466, 'varhLeadToday': 0, 'wNow': -11.468, 'whLastSevenDays': 0, 'whLifetime': 1961512.786, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 1693745066, 'type': 'inverters', 'wNow': 751, 'whLifetime': 702919, }), dict({ 'activeCount': 0, 'apprntPwr': 509.902, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 115.849, 'readingTime': 1693745129, 'rmsCurrent': 2.162, 'rmsVoltage': 235.777, 'type': 'eim', 'vahLifetime': 3576166.777, 'vahToday': 5461.777, 'varhLagLifetime': 591593.872, 'varhLagToday': 1483.872, 'varhLeadLifetime': 0.021, 'varhLeadToday': 0.021, 'wNow': 488.154, 'whLastSevenDays': 111093.303, 'whLifetime': 3183793.303, 'whToday': 4425.303, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 111093, 'watt_hours_lifetime': 702919, 'watt_hours_today': 4425, 'watts_now': 751, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.466_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121212121201': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121212121201', 'temperature': None, }), '121212121202': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121212121202', 'temperature': None, }), '121212121203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121203', 'temperature': None, }), '121212121204': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121204', 'temperature': None, }), '121212121205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121205', 'temperature': None, }), '121212121206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121206', 'temperature': None, }), '121212121207': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121207', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121212121201', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121212121202', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '121212121203', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '121212121204', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '121212121205', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '121212121206', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '121212121207', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'backup', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_legacy_savings_mode] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'savings-mode', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_system_2] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 23, 'current': 2.985, 'eid': 704643584, 'energy_delivered': 4873881, 'energy_received': 7554062, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.031, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 245.008, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -17, 'current': 1.18, 'eid': 1778385425, 'energy_delivered': 3374056, 'energy_received': 3340639, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.154, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.634, }), : dict({ 'active_power': 41, 'current': 1.806, 'eid': 1778385426, 'energy_delivered': 1499825, 'energy_received': 4213423, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.15, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.375, }), }), 'ctmeter_production': dict({ 'active_power': 2660, 'current': 21.736, 'eid': 704643328, 'energy_delivered': 18442497, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 244.845, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1331, 'current': 10.865, 'eid': 1778385169, 'energy_delivered': 9224605, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.565, }), : dict({ 'active_power': 1329, 'current': 10.871, 'eid': 1778385170, 'energy_delivered': 9217892, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.28, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9710, 'backup_reserve': 2016, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 10080, 'reserve_state_of_charge': 20, 'state_of_charge': 96, }), 'encharge_inventory': dict({ '122031000212': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693554929, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693554929, 'last_report_date': 1694553651, 'led_status': 12, 'max_cell_temp': 25, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031000212', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031000215': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693576648, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693576648, 'last_report_date': 1694553547, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 97, 'serial_number': '122031000215', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031023943': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1694098472, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1694098472, 'last_report_date': 1694553574, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031023943', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122031000212': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), '122031000215': dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'soc': 97, }), '122031023943': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'firmware_loaded_date': 1688303357, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1688303357, 'last_report_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r33', 'serial_number': '122036058363', 'temperature': 78, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '122004027913': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553576, 'last_report_duration': None, 'last_report_watts': 230, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004027913', 'temperature': None, }), '122004028091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553426, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028091', 'temperature': None, }), '122004028206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553697, 'last_report_duration': None, 'last_report_watts': 129, 'lifetime_energy': None, 'max_report_watts': 295, 'serial_number': '122004028206', 'temperature': None, }), '122004028286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553702, 'last_report_duration': None, 'last_report_watts': 229, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028286', 'temperature': None, }), '122004028288': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553606, 'last_report_duration': None, 'last_report_watts': 263, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028288', 'temperature': None, }), '122004028400': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553427, 'last_report_duration': None, 'last_report_watts': 177, 'lifetime_energy': None, 'max_report_watts': 286, 'serial_number': '122004028400', 'temperature': None, }), '122004028989': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553456, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028989', 'temperature': None, }), '122004028991': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553699, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004028991', 'temperature': None, }), '122004028996': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553546, 'last_report_duration': None, 'last_report_watts': 232, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028996', 'temperature': None, }), '122004031655': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553607, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004031655', 'temperature': None, }), '122004032100': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553549, 'last_report_duration': None, 'last_report_watts': 170, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '122004032100', 'temperature': None, }), '122004032124': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553457, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004032124', 'temperature': None, }), '122004039060': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553698, 'last_report_duration': None, 'last_report_watts': 231, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004039060', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-08-31 06:04:08 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694553546, 'lastReportWatts': 232, 'maxReportWatts': 296, 'serialNumber': '122004028996', }), dict({ 'devType': 1, 'lastReportDate': 1694553576, 'lastReportWatts': 230, 'maxReportWatts': 296, 'serialNumber': '122004027913', }), dict({ 'devType': 1, 'lastReportDate': 1694553697, 'lastReportWatts': 129, 'maxReportWatts': 295, 'serialNumber': '122004028206', }), dict({ 'devType': 1, 'lastReportDate': 1694553698, 'lastReportWatts': 231, 'maxReportWatts': 296, 'serialNumber': '122004039060', }), dict({ 'devType': 1, 'lastReportDate': 1694553606, 'lastReportWatts': 263, 'maxReportWatts': 296, 'serialNumber': '122004028288', }), dict({ 'devType': 1, 'lastReportDate': 1694553699, 'lastReportWatts': 268, 'maxReportWatts': 297, 'serialNumber': '122004028991', }), dict({ 'devType': 1, 'lastReportDate': 1694553702, 'lastReportWatts': 229, 'maxReportWatts': 296, 'serialNumber': '122004028286', }), dict({ 'devType': 1, 'lastReportDate': 1694553426, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122004028091', }), dict({ 'devType': 1, 'lastReportDate': 1694553549, 'lastReportWatts': 170, 'maxReportWatts': 244, 'serialNumber': '122004032100', }), dict({ 'devType': 1, 'lastReportDate': 1694553427, 'lastReportWatts': 177, 'maxReportWatts': 286, 'serialNumber': '122004028400', }), dict({ 'devType': 1, 'lastReportDate': 1694553456, 'lastReportWatts': 266, 'maxReportWatts': 296, 'serialNumber': '122004028989', }), dict({ 'devType': 1, 'lastReportDate': 1694553607, 'lastReportWatts': 268, 'maxReportWatts': 296, 'serialNumber': '122004031655', }), dict({ 'devType': 1, 'lastReportDate': 1694553457, 'lastReportWatts': 199, 'maxReportWatts': 297, 'serialNumber': '122004032124', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'open', }), dict({ 'id': 'NC2', 'status': 'open', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693554929, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693554929, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693554929, 'last_rpt_date': 1694553651, 'led_status': 12, 'maxCellTemp': 25, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031000212', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693576648, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693576648, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693576648, 'last_rpt_date': 1694553547, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 97, 'serial_num': '122031000215', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1694098472, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1694098472, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1694098472, 'last_rpt_date': 1694553574, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031023943', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 304, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1688303357, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1688303357, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1688303357, 'last_rpt_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r33', 'serial_num': '122036058363', 'temperature': 78, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031000212', 'soc': 96, }), dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'serial_num': '122031000215', 'soc': 97, }), dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031023943', 'soc': 96, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 9710, 'ENC_agg_backup_energy': 2016, 'ENC_agg_soc': 96, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 20, 'agg_soc': 96, 'configured_backup_soc': 20, 'freq_bias_hz': -0.6863999962806702, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -1104, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -8.319999694824219, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -266, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 18442496.933, 'actEnergyRcvd': 0.069, 'activePower': 2659.845, 'apparentEnergy': 21988447.961, 'apparentPower': 2661.49, 'channels': list([ dict({ 'actEnergyDlvd': 9224604.961, 'actEnergyRcvd': 0.018, 'activePower': 1330.866, 'apparentEnergy': 10992997.506, 'apparentPower': 1331.981, 'current': 10.865, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1330.866, 'pwrFactor': 1.0, 'reactEnergyLagg': 1823613.307, 'reactEnergyLead': 113311.01, 'reactivePower': 8.891, 'timestamp': 1694553765, 'voltage': 122.565, }), dict({ 'actEnergyDlvd': 9217891.972, 'actEnergyRcvd': 0.051, 'activePower': 1328.979, 'apparentEnergy': 10995450.455, 'apparentPower': 1329.509, 'current': 10.871, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1328.979, 'pwrFactor': 1.0, 'reactEnergyLagg': 1817923.688, 'reactEnergyLead': 122718.31, 'reactivePower': 7.776, 'timestamp': 1694553765, 'voltage': 122.28, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 21.736, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 2659.845, 'pwrFactor': 1.0, 'reactEnergyLagg': 3641536.995, 'reactEnergyLead': 236029.32, 'reactivePower': 16.667, 'timestamp': 1694553765, 'voltage': 244.845, }), dict({ 'actEnergyDlvd': 4873881.221, 'actEnergyRcvd': 7554062.483, 'activePower': 23.172, 'apparentEnergy': 18779628.396, 'apparentPower': 364.999, 'channels': list([ dict({ 'actEnergyDlvd': 3374056.076, 'actEnergyRcvd': 3340639.336, 'activePower': -17.438, 'apparentEnergy': 9863909.676, 'apparentPower': 143.478, 'current': 1.18, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -17.438, 'pwrFactor': -0.154, 'reactEnergyLagg': 50177.337, 'reactEnergyLead': 4264141.719, 'reactivePower': -95.235, 'timestamp': 1694553765, 'voltage': 122.634, }), dict({ 'actEnergyDlvd': 1499825.145, 'actEnergyRcvd': 4213423.147, 'activePower': 40.61, 'apparentEnergy': 8915718.719, 'apparentPower': 221.521, 'current': 1.806, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 40.61, 'pwrFactor': 0.15, 'reactEnergyLagg': 449728.699, 'reactEnergyLead': 3365454.56, 'reactivePower': -144.988, 'timestamp': 1694553765, 'voltage': 122.375, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 2.985, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 23.172, 'pwrFactor': 0.031, 'reactEnergyLagg': 499906.036, 'reactEnergyLead': 7629596.279, 'reactivePower': -240.223, 'timestamp': 1694553765, 'voltage': 245.008, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2748.29, 'measurementType': 'total-consumption', 'pwrFactor': 0.99, 'reactPwr': -221.854, 'readingTime': 1694553763, 'rmsCurrent': 22.422, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 7275.073, 'varhLagLifetime': -3141630.945, 'varhLagToday': 0.0, 'varhLeadLifetime': 7393566.746, 'varhLeadToday': 5177.746, 'wNow': 2712.776, 'whLastSevenDays': 348.638, 'whLifetime': 15745050.638, 'whToday': 12901.638, }), dict({ 'activeCount': 1, 'apprntPwr': 83.613, 'measurementType': 'net-consumption', 'pwrFactor': 0.56, 'reactPwr': -240.621, 'readingTime': 1694553763, 'rmsCurrent': 0.686, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 0, 'varhLagLifetime': 499906.036, 'varhLagToday': 0, 'varhLeadLifetime': 7629596.066, 'varhLeadToday': 0, 'wNow': 49.701, 'whLastSevenDays': 0, 'whLifetime': -2662918.637, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 13, 'readingTime': 1694553761, 'type': 'inverters', 'wNow': 2675, 'whLifetime': 640883, }), dict({ 'activeCount': 1, 'apprntPwr': 2664.473, 'measurementType': 'production', 'pwrFactor': 1.0, 'reactPwr': 18.766, 'readingTime': 1694553763, 'rmsCurrent': 21.736, 'rmsVoltage': 245.138, 'type': 'eim', 'vahLifetime': 21988445.596, 'vahToday': 13609.596, 'varhLagLifetime': 3641536.981, 'varhLagToday': 2248.981, 'varhLeadLifetime': 236029.32, 'varhLeadToday': 0.32, 'wNow': 2663.075, 'whLastSevenDays': 18431345.567, 'whLifetime': 18442494.567, 'whToday': 11494.567, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 349, 'watt_hours_lifetime': 15745051, 'watt_hours_today': 12902, 'watts_now': 2713, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': -2662919, 'watt_hours_today': 0, 'watts_now': 50, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 18431346, 'watt_hours_lifetime': 18442495, 'watt_hours_today': 11495, 'watts_now': 2663, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.6.114_without_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '482305021663': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412935, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '482305021663', 'temperature': None, }), '482305022836': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412935, 'last_report_duration': None, 'last_report_watts': 39, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482305022836', 'temperature': None, }), '482305023640': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412965, 'last_report_duration': None, 'last_report_watts': 50, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482305023640', 'temperature': None, }), '482306060958': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412754, 'last_report_duration': None, 'last_report_watts': 47, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306060958', 'temperature': None, }), '482306074560': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412755, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306074560', 'temperature': None, }), '482306075432': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412757, 'last_report_duration': None, 'last_report_watts': 46, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306075432', 'temperature': None, }), '482306075729': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412758, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306075729', 'temperature': None, }), '482306076034': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412759, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306076034', 'temperature': None, }), '482306083701': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412936, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083701', 'temperature': None, }), '482306083705': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412937, 'last_report_duration': None, 'last_report_watts': 33, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '482306083705', 'temperature': None, }), '482306083763': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412760, 'last_report_duration': None, 'last_report_watts': 47, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083763', 'temperature': None, }), '482306083851': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412938, 'last_report_duration': None, 'last_report_watts': 44, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083851', 'temperature': None, }), '482306101590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412939, 'last_report_duration': None, 'last_report_watts': 40, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306101590', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 1544282, 'wattHoursSevenDays': 101742, 'wattHoursToday': 10363, 'wattsNow': 586, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691412935, 'lastReportWatts': 48, 'maxReportWatts': 329, 'serialNumber': '482305021663', }), dict({ 'devType': 1, 'lastReportDate': 1691412935, 'lastReportWatts': 39, 'maxReportWatts': 330, 'serialNumber': '482305022836', }), dict({ 'devType': 1, 'lastReportDate': 1691412965, 'lastReportWatts': 50, 'maxReportWatts': 330, 'serialNumber': '482305023640', }), dict({ 'devType': 1, 'lastReportDate': 1691412754, 'lastReportWatts': 47, 'maxReportWatts': 330, 'serialNumber': '482306060958', }), dict({ 'devType': 1, 'lastReportDate': 1691412755, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306074560', }), dict({ 'devType': 1, 'lastReportDate': 1691412757, 'lastReportWatts': 46, 'maxReportWatts': 330, 'serialNumber': '482306075432', }), dict({ 'devType': 1, 'lastReportDate': 1691412758, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306075729', }), dict({ 'devType': 1, 'lastReportDate': 1691412759, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306076034', }), dict({ 'devType': 1, 'lastReportDate': 1691412936, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306083701', }), dict({ 'devType': 1, 'lastReportDate': 1691412937, 'lastReportWatts': 33, 'maxReportWatts': 329, 'serialNumber': '482306083705', }), dict({ 'devType': 1, 'lastReportDate': 1691412760, 'lastReportWatts': 47, 'maxReportWatts': 330, 'serialNumber': '482306083763', }), dict({ 'devType': 1, 'lastReportDate': 1691412938, 'lastReportWatts': 44, 'maxReportWatts': 330, 'serialNumber': '482306083851', }), dict({ 'devType': 1, 'lastReportDate': 1691412939, 'lastReportWatts': 40, 'maxReportWatts': 330, 'serialNumber': '482306101590', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 101742, 'watt_hours_lifetime': 1544282, 'watt_hours_today': 10363, 'watts_now': 586, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122146075749': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318584, 'last_report_duration': None, 'last_report_watts': 270, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122146075749', 'temperature': None, }), '122146076029': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318494, 'last_report_duration': None, 'last_report_watts': 281, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076029', 'temperature': None, }), '122146076125': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318704, 'last_report_duration': None, 'last_report_watts': 229, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076125', 'temperature': None, }), '122146076128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318674, 'last_report_duration': None, 'last_report_watts': 245, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076128', 'temperature': None, }), '122146076272': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318672, 'last_report_duration': None, 'last_report_watts': 243, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076272', 'temperature': None, }), '122146076336': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318523, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122146076336', 'temperature': None, }), '122146076488': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318612, 'last_report_duration': None, 'last_report_watts': 260, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076488', 'temperature': None, }), '122146076492': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318556, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076492', 'temperature': None, }), '122146076500': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318613, 'last_report_duration': None, 'last_report_watts': 259, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076500', 'temperature': None, }), '122146076518': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318462, 'last_report_duration': None, 'last_report_watts': 290, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076518', 'temperature': None, }), '122146076618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318643, 'last_report_duration': None, 'last_report_watts': 250, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076618', 'temperature': None, }), '122146078718': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318583, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146078718', 'temperature': None, }), '122146078769': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318673, 'last_report_duration': None, 'last_report_watts': 243, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146078769', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 8717473, 'wattHoursSevenDays': 107011, 'wattHoursToday': 7883, 'wattsNow': 3391, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691318583, 'lastReportWatts': 273, 'maxReportWatts': 297, 'serialNumber': '122146078718', }), dict({ 'devType': 1, 'lastReportDate': 1691318584, 'lastReportWatts': 270, 'maxReportWatts': 296, 'serialNumber': '122146075749', }), dict({ 'devType': 1, 'lastReportDate': 1691318612, 'lastReportWatts': 260, 'maxReportWatts': 297, 'serialNumber': '122146076488', }), dict({ 'devType': 1, 'lastReportDate': 1691318643, 'lastReportWatts': 250, 'maxReportWatts': 297, 'serialNumber': '122146076618', }), dict({ 'devType': 1, 'lastReportDate': 1691318462, 'lastReportWatts': 290, 'maxReportWatts': 297, 'serialNumber': '122146076518', }), dict({ 'devType': 1, 'lastReportDate': 1691318523, 'lastReportWatts': 275, 'maxReportWatts': 296, 'serialNumber': '122146076336', }), dict({ 'devType': 1, 'lastReportDate': 1691318704, 'lastReportWatts': 229, 'maxReportWatts': 297, 'serialNumber': '122146076125', }), dict({ 'devType': 1, 'lastReportDate': 1691318672, 'lastReportWatts': 243, 'maxReportWatts': 297, 'serialNumber': '122146076272', }), dict({ 'devType': 1, 'lastReportDate': 1691318556, 'lastReportWatts': 273, 'maxReportWatts': 297, 'serialNumber': '122146076492', }), dict({ 'devType': 1, 'lastReportDate': 1691318613, 'lastReportWatts': 259, 'maxReportWatts': 297, 'serialNumber': '122146076500', }), dict({ 'devType': 1, 'lastReportDate': 1691318494, 'lastReportWatts': 281, 'maxReportWatts': 297, 'serialNumber': '122146076029', }), dict({ 'devType': 1, 'lastReportDate': 1691318673, 'lastReportWatts': 243, 'maxReportWatts': 297, 'serialNumber': '122146078769', }), dict({ 'devType': 1, 'lastReportDate': 1691318674, 'lastReportWatts': 245, 'maxReportWatts': 297, 'serialNumber': '122146076128', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 107011, 'watt_hours_lifetime': 8717473, 'watt_hours_today': 7883, 'watts_now': 3391, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175_standard] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122218040027': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416390, 'last_report_duration': None, 'last_report_watts': 299, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '122218040027', 'temperature': None, }), '122218042847': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416211, 'last_report_duration': None, 'last_report_watts': 272, 'lifetime_energy': None, 'max_report_watts': 341, 'serial_number': '122218042847', 'temperature': None, }), '122218043128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416301, 'last_report_duration': None, 'last_report_watts': 292, 'lifetime_energy': None, 'max_report_watts': 354, 'serial_number': '122218043128', 'temperature': None, }), '122218044477': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416513, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '122218044477', 'temperature': None, }), '122218051640': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416484, 'last_report_duration': None, 'last_report_watts': 231, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '122218051640', 'temperature': None, }), '122218052484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416275, 'last_report_duration': None, 'last_report_watts': 284, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '122218052484', 'temperature': None, }), '122218054157': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416304, 'last_report_duration': None, 'last_report_watts': 286, 'lifetime_energy': None, 'max_report_watts': 349, 'serial_number': '122218054157', 'temperature': None, }), '122219082033': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416299, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '122219082033', 'temperature': None, }), '122219083015': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416509, 'last_report_duration': None, 'last_report_watts': 158, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219083015', 'temperature': None, }), '122219083049': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416242, 'last_report_duration': None, 'last_report_watts': 214, 'lifetime_energy': None, 'max_report_watts': 315, 'serial_number': '122219083049', 'temperature': None, }), '122219083053': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416331, 'last_report_duration': None, 'last_report_watts': 226, 'lifetime_energy': None, 'max_report_watts': 315, 'serial_number': '122219083053', 'temperature': None, }), '122219083804': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416420, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '122219083804', 'temperature': None, }), '122219084138': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416304, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 307, 'serial_number': '122219084138', 'temperature': None, }), '122219084557': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416330, 'last_report_duration': None, 'last_report_watts': 219, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219084557', 'temperature': None, }), '122219084578': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416303, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '122219084578', 'temperature': None, }), '122219084937': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416359, 'last_report_duration': None, 'last_report_watts': 244, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219084937', 'temperature': None, }), '122219085086': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416453, 'last_report_duration': None, 'last_report_watts': 248, 'lifetime_energy': None, 'max_report_watts': 339, 'serial_number': '122219085086', 'temperature': None, }), '122219085199': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416421, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 326, 'serial_number': '122219085199', 'temperature': None, }), '122219085275': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416241, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 314, 'serial_number': '122219085275', 'temperature': None, }), '122219085710': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416210, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 327, 'serial_number': '122219085710', 'temperature': None, }), '122219086026': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416301, 'last_report_duration': None, 'last_report_watts': 222, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '122219086026', 'temperature': None, }), '122220004338': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416271, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '122220004338', 'temperature': None, }), '122220004813': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416212, 'last_report_duration': None, 'last_report_watts': 267, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '122220004813', 'temperature': None, }), '122220009431': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416210, 'last_report_duration': None, 'last_report_watts': 267, 'lifetime_energy': None, 'max_report_watts': 340, 'serial_number': '122220009431', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 6139406, 'wattHoursSevenDays': 189712, 'wattHoursToday': 36462, 'wattsNow': 5740, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691416241, 'lastReportWatts': 209, 'maxReportWatts': 314, 'serialNumber': '122219085275', }), dict({ 'devType': 1, 'lastReportDate': 1691416453, 'lastReportWatts': 248, 'maxReportWatts': 339, 'serialNumber': '122219085086', }), dict({ 'devType': 1, 'lastReportDate': 1691416509, 'lastReportWatts': 158, 'maxReportWatts': 312, 'serialNumber': '122219083015', }), dict({ 'devType': 1, 'lastReportDate': 1691416299, 'lastReportWatts': 211, 'maxReportWatts': 324, 'serialNumber': '122219082033', }), dict({ 'devType': 1, 'lastReportDate': 1691416271, 'lastReportWatts': 212, 'maxReportWatts': 323, 'serialNumber': '122220004338', }), dict({ 'devType': 1, 'lastReportDate': 1691416330, 'lastReportWatts': 219, 'maxReportWatts': 312, 'serialNumber': '122219084557', }), dict({ 'devType': 1, 'lastReportDate': 1691416210, 'lastReportWatts': 267, 'maxReportWatts': 340, 'serialNumber': '122220009431', }), dict({ 'devType': 1, 'lastReportDate': 1691416210, 'lastReportWatts': 207, 'maxReportWatts': 327, 'serialNumber': '122219085710', }), dict({ 'devType': 1, 'lastReportDate': 1691416390, 'lastReportWatts': 299, 'maxReportWatts': 345, 'serialNumber': '122218040027', }), dict({ 'devType': 1, 'lastReportDate': 1691416242, 'lastReportWatts': 214, 'maxReportWatts': 315, 'serialNumber': '122219083049', }), dict({ 'devType': 1, 'lastReportDate': 1691416420, 'lastReportWatts': 268, 'maxReportWatts': 338, 'serialNumber': '122219083804', }), dict({ 'devType': 1, 'lastReportDate': 1691416301, 'lastReportWatts': 222, 'maxReportWatts': 319, 'serialNumber': '122219086026', }), dict({ 'devType': 1, 'lastReportDate': 1691416359, 'lastReportWatts': 244, 'maxReportWatts': 312, 'serialNumber': '122219084937', }), dict({ 'devType': 1, 'lastReportDate': 1691416301, 'lastReportWatts': 292, 'maxReportWatts': 354, 'serialNumber': '122218043128', }), dict({ 'devType': 1, 'lastReportDate': 1691416275, 'lastReportWatts': 284, 'maxReportWatts': 348, 'serialNumber': '122218052484', }), dict({ 'devType': 1, 'lastReportDate': 1691416421, 'lastReportWatts': 213, 'maxReportWatts': 326, 'serialNumber': '122219085199', }), dict({ 'devType': 1, 'lastReportDate': 1691416484, 'lastReportWatts': 231, 'maxReportWatts': 345, 'serialNumber': '122218051640', }), dict({ 'devType': 1, 'lastReportDate': 1691416303, 'lastReportWatts': 275, 'maxReportWatts': 338, 'serialNumber': '122219084578', }), dict({ 'devType': 1, 'lastReportDate': 1691416331, 'lastReportWatts': 226, 'maxReportWatts': 315, 'serialNumber': '122219083053', }), dict({ 'devType': 1, 'lastReportDate': 1691416304, 'lastReportWatts': 211, 'maxReportWatts': 307, 'serialNumber': '122219084138', }), dict({ 'devType': 1, 'lastReportDate': 1691416304, 'lastReportWatts': 286, 'maxReportWatts': 349, 'serialNumber': '122218054157', }), dict({ 'devType': 1, 'lastReportDate': 1691416211, 'lastReportWatts': 272, 'maxReportWatts': 341, 'serialNumber': '122218042847', }), dict({ 'devType': 1, 'lastReportDate': 1691416212, 'lastReportWatts': 267, 'maxReportWatts': 336, 'serialNumber': '122220004813', }), dict({ 'devType': 1, 'lastReportDate': 1691416513, 'lastReportWatts': 205, 'maxReportWatts': 346, 'serialNumber': '122218044477', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 189712, 'watt_hours_lifetime': 6139406, 'watt_hours_today': 36462, 'watts_now': 5740, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175_total] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122107025358': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181961, 'last_report_duration': None, 'last_report_watts': 190, 'lifetime_energy': None, 'max_report_watts': 279, 'serial_number': '122107025358', 'temperature': None, }), '122107031694': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182111, 'last_report_duration': None, 'last_report_watts': 193, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122107031694', 'temperature': None, }), '122107031731': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182200, 'last_report_duration': None, 'last_report_watts': 22, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107031731', 'temperature': None, }), '122107032484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182142, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032484', 'temperature': None, }), '122107032623': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181960, 'last_report_duration': None, 'last_report_watts': 190, 'lifetime_energy': None, 'max_report_watts': 279, 'serial_number': '122107032623', 'temperature': None, }), '122107032918': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181930, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032918', 'temperature': None, }), '122107032940': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182172, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032940', 'temperature': None, }), '122107033602': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181992, 'last_report_duration': None, 'last_report_watts': 22, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107033602', 'temperature': None, }), '122107033629': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182081, 'last_report_duration': None, 'last_report_watts': 194, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122107033629', 'temperature': None, }), '122107033673': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182140, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107033673', 'temperature': None, }), '122107035544': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182140, 'last_report_duration': None, 'last_report_watts': 191, 'lifetime_energy': None, 'max_report_watts': 283, 'serial_number': '122107035544', 'temperature': None, }), '122107035551': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182111, 'last_report_duration': None, 'last_report_watts': 191, 'lifetime_energy': None, 'max_report_watts': 287, 'serial_number': '122107035551', 'temperature': None, }), '122107035554': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182170, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107035554', 'temperature': None, }), '122107035597': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182052, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107035597', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-07-06 06:11:26 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688623885', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.38914, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.4424, 'start': 420, }), dict({ 'id': 'filler', 'rate': 0.38914, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.38914, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688623885', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 30.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694182111, 'lastReportWatts': 193, 'maxReportWatts': 289, 'serialNumber': '122107031694', }), dict({ 'devType': 1, 'lastReportDate': 1694182200, 'lastReportWatts': 22, 'maxReportWatts': 296, 'serialNumber': '122107031731', }), dict({ 'devType': 1, 'lastReportDate': 1694182140, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107033673', }), dict({ 'devType': 1, 'lastReportDate': 1694182081, 'lastReportWatts': 194, 'maxReportWatts': 289, 'serialNumber': '122107033629', }), dict({ 'devType': 1, 'lastReportDate': 1694182170, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107035554', }), dict({ 'devType': 1, 'lastReportDate': 1694181992, 'lastReportWatts': 22, 'maxReportWatts': 296, 'serialNumber': '122107033602', }), dict({ 'devType': 1, 'lastReportDate': 1694182052, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107035597', }), dict({ 'devType': 1, 'lastReportDate': 1694181960, 'lastReportWatts': 190, 'maxReportWatts': 279, 'serialNumber': '122107032623', }), dict({ 'devType': 1, 'lastReportDate': 1694182140, 'lastReportWatts': 191, 'maxReportWatts': 283, 'serialNumber': '122107035544', }), dict({ 'devType': 1, 'lastReportDate': 1694182111, 'lastReportWatts': 191, 'maxReportWatts': 287, 'serialNumber': '122107035551', }), dict({ 'devType': 1, 'lastReportDate': 1694181930, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032918', }), dict({ 'devType': 1, 'lastReportDate': 1694182172, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032940', }), dict({ 'devType': 1, 'lastReportDate': 1694181961, 'lastReportWatts': 190, 'maxReportWatts': 279, 'serialNumber': '122107025358', }), dict({ 'devType': 1, 'lastReportDate': 1694182142, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032484', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 0.412, 'measurementType': 'total-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': 0.27, 'rmsVoltage': 238.786, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': -0.768, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), dict({ 'activeCount': 0, 'apprntPwr': -1.746, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': -0.247, 'rmsVoltage': 238.786, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': -1.409, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 14, 'readingTime': 1694182262, 'type': 'inverters', 'wNow': 1322, 'whLifetime': 1152866, }), dict({ 'activeCount': 0, 'apprntPwr': 1.335, 'measurementType': 'production', 'pwrFactor': 1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': 0.516, 'rmsVoltage': 235.291, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': 0.641, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1152866, 'watt_hours_today': 0, 'watts_now': 1322, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688623885', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.38914, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.4424, 'start': 420, }), dict({ 'id': 'filler', 'rate': 0.38914, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.38914, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688623885', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 30.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': -144.999, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': -456.848, 'readingTime': 1693745129, 'rmsCurrent': -0.615, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 22904.009, 'varhLagLifetime': -591341.987, 'varhLagToday': 0.0, 'varhLeadLifetime': 3174026.446, 'varhLeadToday': 9602.446, 'wNow': 476.686, 'whLastSevenDays': 4.621, 'whLifetime': 5145153.621, 'whToday': 19903.621, }), dict({ 'activeCount': 1, 'apprntPwr': -654.785, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -572.697, 'readingTime': 1693745129, 'rmsCurrent': -2.778, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 0, 'varhLagLifetime': 251.885, 'varhLagToday': 0, 'varhLeadLifetime': 3174026.466, 'varhLeadToday': 0, 'wNow': -11.468, 'whLastSevenDays': 0, 'whLifetime': 1961512.786, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 1693745066, 'type': 'inverters', 'wNow': 751, 'whLifetime': 702919, }), dict({ 'activeCount': 1, 'apprntPwr': 509.902, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 115.849, 'readingTime': 1693745129, 'rmsCurrent': 2.162, 'rmsVoltage': 235.777, 'type': 'eim', 'vahLifetime': 3576166.777, 'vahToday': 5461.777, 'varhLagLifetime': 591593.872, 'varhLagToday': 1483.872, 'varhLeadLifetime': 0.021, 'varhLeadToday': 0.021, 'wNow': 488.154, 'whLastSevenDays': 111093.303, 'whLifetime': 3183793.303, 'whToday': 4425.303, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 5, 'watt_hours_lifetime': 5145154, 'watt_hours_today': 19904, 'watts_now': 477, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1961513, 'watt_hours_today': 0, 'watts_now': -11, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 111093, 'watt_hours_lifetime': 3183793, 'watt_hours_today': 4425, 'watts_now': 488, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.185_with_cts_and_battery_3t] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 522, 'current': 3.138, 'eid': 704643584, 'energy_delivered': 2404339, 'energy_received': 1125590, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.706, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.282, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': -1, 'current': 0.386, 'eid': 704643328, 'energy_delivered': 2432970, 'energy_received': 1795, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.524, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': dict({ 'available_energy': 525, 'backup_reserve': 525, 'configured_reserve_state_of_charge': 15, 'max_available_capacity': 3500, 'reserve_state_of_charge': 15, 'state_of_charge': 15, }), 'encharge_inventory': dict({ '122249097612': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3500, 'encharge_revision': 2, 'firmware_loaded_date': 1695330323, 'firmware_version': '2.6.5973_rel/22.11', 'installed_date': 1695330323, 'last_report_date': 1695769447, 'led_status': 17, 'max_cell_temp': 30, 'operating': True, 'part_number': '830-01760-r37', 'percent_full': 15, 'serial_number': '122249097612', 'temperature': 29, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100F', }), }), 'encharge_power': dict({ '122249097612': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 15, }), }), 'enpower': None, 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': True, 'date': '2023-09-26 16:03:40 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 15.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Mon': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sat': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sun': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Thu': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Tue': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Wed': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1695330323, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3500, 'encharge_rev': 2, 'img_load_date': 1695330323, 'img_pnum_running': '2.6.5973_rel/22.11', 'installed': 1695330323, 'last_rpt_date': 1695769447, 'led_status': 17, 'maxCellTemp': 30, 'operating': True, 'part_num': '830-01760-r37', 'percentFull': 15, 'serial_num': '122249097612', 'sleep_enabled': False, 'temperature': 29, 'zigbee_dongle_fw_version': '100F', }), ]), 'type': 'ENCHARGE', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122249097612', 'soc': 15, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 525, 'ENC_agg_backup_energy': 525, 'ENC_agg_soc': 15, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 3500, 'Enc_max_available_capacity': 3500, 'Max_energy': 3500, 'adjusted_backup_soc': 15, 'agg_soc': 15, 'configured_backup_soc': 15, 'freq_bias_hz': 1.3899999856948853, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 2235, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': 16.899999618530273, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 540, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'channels': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'current': 0.386, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 8248.228, 'activePower': -0.0, 'apparentEnergy': 140.353, 'apparentPower': -0.0, 'current': -0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 355.453, 'reactEnergyLead': 1.715, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 7.648, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 12408.486, 'activePower': -0.077, 'apparentEnergy': 898.304, 'apparentPower': 0.178, 'current': 0.152, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -0.077, 'pwrFactor': -1.0, 'reactEnergyLagg': 419.396, 'reactEnergyLead': 0.0, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 1.176, }), ]), 'current': 0.386, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'channels': list([ dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'current': 3.138, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1099.941, 'activePower': 0.0, 'apparentEnergy': 54.285, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 356.336, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695769632, 'voltage': 3.447, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5670.302, 'activePower': -0.351, 'apparentEnergy': 8802.177, 'apparentPower': 1.761, 'current': 0.197, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.351, 'pwrFactor': 0.0, 'reactEnergyLagg': 361.519, 'reactEnergyLead': 0.367, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 8.942, }), ]), 'current': 3.138, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 837.87, 'measurementType': 'total-consumption', 'pwrFactor': 0.62, 'reactPwr': -374.915, 'readingTime': 1695769629, 'rmsCurrent': 3.513, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 88.766, 'varhLagLifetime': -369573.576, 'varhLagToday': 0.0, 'varhLeadLifetime': 1935707.431, 'varhLeadToday': 54.431, 'wNow': 523.579, 'whLastSevenDays': 19.155, 'whLifetime': 3711429.155, 'whToday': 63.155, }), dict({ 'activeCount': 1, 'apprntPwr': 745.663, 'measurementType': 'net-consumption', 'pwrFactor': 0.7, 'reactPwr': -458.436, 'readingTime': 1695769629, 'rmsCurrent': 3.126, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 0, 'varhLagLifetime': 22501.684, 'varhLagToday': 0, 'varhLeadLifetime': 1935714.697, 'varhLeadToday': 0, 'wNow': 524.536, 'whLastSevenDays': 0, 'whLifetime': 1279037.969, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 5, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 45349, }), dict({ 'activeCount': 1, 'apprntPwr': 92.383, 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 83.521, 'readingTime': 1695769629, 'rmsCurrent': 0.387, 'rmsVoltage': 238.522, 'type': 'eim', 'vahLifetime': 2709025.274, 'vahToday': 11.274, 'varhLagLifetime': 392075.259, 'varhLagToday': 10.259, 'varhLeadLifetime': 7.266, 'varhLeadToday': 0.266, 'wNow': -0.957, 'whLastSevenDays': 73002.956, 'whLifetime': 2432969.956, 'whToday': 0.956, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 19, 'watt_hours_lifetime': 3711429, 'watt_hours_today': 63, 'watts_now': 524, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1279038, 'watt_hours_today': 0, 'watts_now': 525, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 73003, 'watt_hours_lifetime': 2432970, 'watt_hours_today': 1, 'watts_now': -1, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[8.1.41] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'AC', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9176, 'backup_reserve': 2976, 'configured_reserve_state_of_charge': 30, 'max_available_capacity': 9920, 'reserve_state_of_charge': 30, 'state_of_charge': 92, }), 'encharge_inventory': dict({ '492319002585': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560591, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560591, 'last_report_date': 1692385816, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 100, 'serial_number': '492319002585', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492319002593': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560590, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560590, 'last_report_date': 1692386075, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 85, 'serial_number': '492319002593', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492319002585': dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'soc': 100, }), '492319002593': dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'soc': 85, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1691648499, 'firmware_version': '3.0.5177_rel/31.07', 'grid_mode': 'multimode-ongrid', 'installed_date': 1691648499, 'last_report_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00377-r28', 'serial_number': '482326083757', 'temperature': 113, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '202314050286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385966, 'last_report_duration': None, 'last_report_watts': 312, 'lifetime_energy': None, 'max_report_watts': 327, 'serial_number': '202314050286', 'temperature': None, }), '202314055790': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314055790', 'temperature': None, }), '202314058203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385784, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314058203', 'temperature': None, }), '202314059855': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385973, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314059855', 'temperature': None, }), '202314060891': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385785, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314060891', 'temperature': None, }), '202314061330': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385997, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314061330', 'temperature': None, }), '202314062224': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385974, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314062224', 'temperature': None, }), '202314062558': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314062558', 'temperature': None, }), '202314062880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386026, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314062880', 'temperature': None, }), '202314063524': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385998, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314063524', 'temperature': None, }), '202314064007': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 325, 'serial_number': '202314064007', 'temperature': None, }), '202314065032': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314065032', 'temperature': None, }), '202314065062': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314065062', 'temperature': None, }), '202314065647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314065647', 'temperature': None, }), '202314066216': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385965, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314066216', 'temperature': None, }), '202314067482': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385977, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314067482', 'temperature': None, }), '202314068272': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385786, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068272', 'temperature': None, }), '202314068438': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385979, 'last_report_duration': None, 'last_report_watts': 293, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068438', 'temperature': None, }), '202314068868': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385904, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314068868', 'temperature': None, }), '202314069065': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385847, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314069065', 'temperature': None, }), '202314069086': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385968, 'last_report_duration': None, 'last_report_watts': 313, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314069086', 'temperature': None, }), '202314069092': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385980, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314069092', 'temperature': None, }), '202314069944': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385814, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314069944', 'temperature': None, }), '202314070107': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314070107', 'temperature': None, }), '202314070295': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386032, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314070295', 'temperature': None, }), '202314070321': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386030, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '202314070321', 'temperature': None, }), '202314070523': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314070523', 'temperature': None, }), '202314070647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385939, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314070647', 'temperature': None, }), '202314070713': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385936, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 326, 'serial_number': '202314070713', 'temperature': None, }), '202314070988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386027, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314070988', 'temperature': None, }), '202314071516': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386025, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314071516', 'temperature': None, }), '202314071599': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314071599', 'temperature': None, }), '202314071660': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385995, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314071660', 'temperature': None, }), '202314071753': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385996, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314071753', 'temperature': None, }), '202314071845': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385846, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314071845', 'temperature': None, }), '202314072420': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385967, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314072420', 'temperature': None, }), '202314072546': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385844, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314072546', 'temperature': None, }), '202314073012': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385787, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073012', 'temperature': None, }), '202314073205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385938, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314073205', 'temperature': None, }), '202314073251': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385937, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073251', 'temperature': None, }), '202314073257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385907, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314073257', 'temperature': None, }), '202314073428': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385942, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314073428', 'temperature': None, }), '202314075069': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385999, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314075069', 'temperature': None, }), '202314077078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314077078', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692385844, 'lastReportWatts': 307, 'maxReportWatts': 319, 'serialNumber': '202314072546', }), dict({ 'devType': 1, 'lastReportDate': 1692386025, 'lastReportWatts': 308, 'maxReportWatts': 321, 'serialNumber': '202314071516', }), dict({ 'devType': 1, 'lastReportDate': 1692385784, 'lastReportWatts': 310, 'maxReportWatts': 321, 'serialNumber': '202314058203', }), dict({ 'devType': 1, 'lastReportDate': 1692385785, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314060891', }), dict({ 'devType': 1, 'lastReportDate': 1692385786, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314068272', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 302, 'maxReportWatts': 317, 'serialNumber': '202314077078', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 277, 'maxReportWatts': 334, 'serialNumber': '202314065062', }), dict({ 'devType': 1, 'lastReportDate': 1692385787, 'lastReportWatts': 308, 'maxReportWatts': 323, 'serialNumber': '202314073012', }), dict({ 'devType': 1, 'lastReportDate': 1692385936, 'lastReportWatts': 309, 'maxReportWatts': 326, 'serialNumber': '202314070713', }), dict({ 'devType': 1, 'lastReportDate': 1692385846, 'lastReportWatts': 308, 'maxReportWatts': 324, 'serialNumber': '202314071845', }), dict({ 'devType': 1, 'lastReportDate': 1692385847, 'lastReportWatts': 303, 'maxReportWatts': 320, 'serialNumber': '202314069065', }), dict({ 'devType': 1, 'lastReportDate': 1692385904, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314068868', }), dict({ 'devType': 1, 'lastReportDate': 1692385965, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314066216', }), dict({ 'devType': 1, 'lastReportDate': 1692385937, 'lastReportWatts': 307, 'maxReportWatts': 323, 'serialNumber': '202314073251', }), dict({ 'devType': 1, 'lastReportDate': 1692385938, 'lastReportWatts': 304, 'maxReportWatts': 321, 'serialNumber': '202314073205', }), dict({ 'devType': 1, 'lastReportDate': 1692385966, 'lastReportWatts': 312, 'maxReportWatts': 327, 'serialNumber': '202314050286', }), dict({ 'devType': 1, 'lastReportDate': 1692385967, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314072420', }), dict({ 'devType': 1, 'lastReportDate': 1692385907, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314073257', }), dict({ 'devType': 1, 'lastReportDate': 1692385939, 'lastReportWatts': 301, 'maxReportWatts': 319, 'serialNumber': '202314070647', }), dict({ 'devType': 1, 'lastReportDate': 1692385995, 'lastReportWatts': 310, 'maxReportWatts': 322, 'serialNumber': '202314071660', }), dict({ 'devType': 1, 'lastReportDate': 1692385968, 'lastReportWatts': 313, 'maxReportWatts': 323, 'serialNumber': '202314069086', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314055790', }), dict({ 'devType': 1, 'lastReportDate': 1692385996, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314071753', }), dict({ 'devType': 1, 'lastReportDate': 1692385997, 'lastReportWatts': 269, 'maxReportWatts': 336, 'serialNumber': '202314061330', }), dict({ 'devType': 1, 'lastReportDate': 1692385942, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314073428', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 303, 'maxReportWatts': 319, 'serialNumber': '202314065647', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 301, 'maxReportWatts': 322, 'serialNumber': '202314062558', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 308, 'maxReportWatts': 317, 'serialNumber': '202314070107', }), dict({ 'devType': 1, 'lastReportDate': 1692385973, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314059855', }), dict({ 'devType': 1, 'lastReportDate': 1692385998, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314063524', }), dict({ 'devType': 1, 'lastReportDate': 1692386026, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314062880', }), dict({ 'devType': 1, 'lastReportDate': 1692386027, 'lastReportWatts': 275, 'maxReportWatts': 334, 'serialNumber': '202314070988', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 273, 'maxReportWatts': 336, 'serialNumber': '202314065032', }), dict({ 'devType': 1, 'lastReportDate': 1692385974, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314062224', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 307, 'maxReportWatts': 325, 'serialNumber': '202314064007', }), dict({ 'devType': 1, 'lastReportDate': 1692385977, 'lastReportWatts': 302, 'maxReportWatts': 318, 'serialNumber': '202314067482', }), dict({ 'devType': 1, 'lastReportDate': 1692386030, 'lastReportWatts': 271, 'maxReportWatts': 329, 'serialNumber': '202314070321', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 305, 'maxReportWatts': 320, 'serialNumber': '202314070523', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 307, 'maxReportWatts': 317, 'serialNumber': '202314071599', }), dict({ 'devType': 1, 'lastReportDate': 1692385979, 'lastReportWatts': 293, 'maxReportWatts': 324, 'serialNumber': '202314068438', }), dict({ 'devType': 1, 'lastReportDate': 1692385814, 'lastReportWatts': 277, 'maxReportWatts': 336, 'serialNumber': '202314069944', }), dict({ 'devType': 1, 'lastReportDate': 1692385999, 'lastReportWatts': 308, 'maxReportWatts': 319, 'serialNumber': '202314075069', }), dict({ 'devType': 1, 'lastReportDate': 1692386032, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314070295', }), dict({ 'devType': 1, 'lastReportDate': 1692385980, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314069092', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560591, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560591, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560591, 'last_rpt_date': 1692385816, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 100, 'phase': 'ph-a', 'serial_num': '492319002585', 'sleep_enabled': False, 'temperature': 42, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560590, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560590, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560590, 'last_rpt_date': 1692386075, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 85, 'phase': 'ph-a', 'serial_num': '492319002593', 'sleep_enabled': False, 'temperature': 42, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 3568, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691648499, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1691648499, 'img_pnum_running': '3.0.5177_rel/31.07', 'installed': 1691648499, 'last_rpt_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00377-r28', 'serial_num': '482326083757', 'temperature': 113, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'serial_num': '492319002585', 'soc': 100, }), dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'serial_num': '492319002593', 'soc': 85, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 9176, 'ENC_agg_backup_energy': 2976, 'ENC_agg_soc': 92, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 9920, 'Enc_max_available_capacity': 9920, 'Max_energy': 9920, 'Recovery_threshold_soc': 13, 'VLS_Limit': 10, 'adjusted_backup_soc': 30, 'agg_soc': 92, 'configured_backup_soc': 30, 'freq_bias_hz': -1.348230004310608, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2168, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.190109252929688, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -518, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'AC', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5007.246, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 1407.058, 'readingTime': 1692386083, 'rmsCurrent': 40.571, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 1190799.036, 'varhLagLifetime': 29677.693, 'varhLagToday': 17206.693, 'varhLeadLifetime': 108784.489, 'varhLeadToday': 104827.489, 'wNow': 5216.083, 'whLastSevenDays': 0.0, 'whLifetime': 1757943.133, 'whToday': 0.0, }), dict({ 'activeCount': 1, 'apprntPwr': -8358.792, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 1329.256, 'readingTime': 1692386083, 'rmsCurrent': -67.703, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 0, 'varhLagLifetime': 234428.764, 'varhLagToday': 0, 'varhLeadLifetime': 109642.368, 'varhLeadToday': 0, 'wNow': -7812.457, 'whLastSevenDays': 0, 'whLifetime': 247929.658, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 44, 'readingTime': 1692386032, 'type': 'inverters', 'wNow': 13163, 'whLifetime': 348363, }), dict({ 'activeCount': 1, 'apprntPwr': 13367.009, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 77.802, 'readingTime': 1692386083, 'rmsCurrent': 108.274, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1746683.744, 'vahToday': 64277.744, 'varhLagLifetime': 204751.071, 'varhLagToday': 8551.071, 'varhLeadLifetime': 857.879, 'varhLeadToday': 33.879, 'wNow': 13028.54, 'whLastSevenDays': 1456156.655, 'whLifetime': 1510198.655, 'whToday': 55037.655, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1757943, 'watt_hours_today': 0, 'watts_now': 5216, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 247930, 'watt_hours_today': 0, 'watts_now': -7812, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 1456157, 'watt_hours_lifetime': 1510199, 'watt_hours_today': 55038, 'watts_now': 13029, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[8.2.127_with_3cts_and_battery_split] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 129, 'current': 21.241, 'eid': 704643584, 'energy_delivered': 4998252, 'energy_received': 253961, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.034, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.553, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -201, 'current': 9.316, 'eid': 1778385425, 'energy_delivered': 2631217, 'energy_received': 93777, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': 331, 'current': 11.925, 'eid': 1778385426, 'energy_delivered': 2367035, 'energy_received': 160184, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.212, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.219, }), }), 'ctmeter_production': dict({ 'active_power': 1714, 'current': 17.326, 'eid': 704643328, 'energy_delivered': 3165834, 'energy_received': 76, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.817, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.367, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 856, 'current': 8.658, 'eid': 1778385169, 'energy_delivered': 1581746, 'energy_received': 46, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.822, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.224, }), : dict({ 'active_power': 858, 'current': 8.668, 'eid': 1778385170, 'energy_delivered': 1584088, 'energy_received': 30, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.812, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.143, }), }), 'ctmeter_storage': dict({ 'active_power': -2580, 'current': 14.575, 'eid': 704643840, 'energy_delivered': 2274359, 'energy_received': 2971414, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.582, }), 'ctmeter_storage_phases': dict({ : dict({ 'active_power': -2115, 'current': 9.316, 'eid': 1778385681, 'energy_delivered': 1136860, 'energy_received': 1485292, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': -465, 'current': 5.259, 'eid': 1778385682, 'energy_delivered': 1137499, 'energy_received': 1486122, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.713, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.248, }), }), 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NC2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 5250, 'backup_reserve': 5000, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 25000, 'reserve_state_of_charge': 20, 'state_of_charge': 21, }), 'encharge_inventory': dict({ '12345678901002': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707197622, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707197622, 'last_report_date': 1709829328, 'led_status': 12, 'max_cell_temp': 13, 'operating': None, 'part_number': '836-01826-r81', 'percent_full': 21, 'serial_number': '12345678901002', 'temperature': 13, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901003': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1706749292, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1706749292, 'last_report_date': 1709829288, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901003', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901004': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707622567, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707622567, 'last_report_date': 1709829437, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901004', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901005': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709410199, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709410199, 'last_report_date': 1709829256, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901005', 'temperature': 11, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901006': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709749530, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709749530, 'last_report_date': 1709829434, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901006', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '12345678901002': dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'soc': 21, }), '12345678901003': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901004': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901005': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901006': dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'soc': 21, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1709657837, 'firmware_version': '3.0.5654_rel/31.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1709657837, 'last_report_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00378-r27', 'serial_number': '12345678901001', 'temperature': 72, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-03-06 22:58:46 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': 'prioritize-energy', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': 'self-consumption', 'operation_mode_sub_type': 'prioritize-energy', 'reserved_soc': 20, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709749530, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709749530, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709749530, 'last_rpt_date': 1709829434, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901006', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709410199, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709410199, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709410199, 'last_rpt_date': 1709829256, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901005', 'sleep_enabled': False, 'temperature': 11, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707622567, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707622567, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707622567, 'last_rpt_date': 1709829437, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901004', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1706749292, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1706749292, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1706749292, 'last_rpt_date': 1709829288, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901003', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707197622, 'dc_switch_off': False, 'der_index': 3, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707197622, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707197622, 'last_rpt_date': 1709829328, 'led_status': 12, 'maxCellTemp': 13, 'part_num': '836-01826-r81', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901002', 'sleep_enabled': False, 'temperature': 13, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15868, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709657837, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1709657837, 'img_pnum_running': '3.0.5654_rel/31.13', 'installed': 1709657837, 'last_rpt_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00378-r27', 'serial_num': '12345678901001', 'temperature': 72, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'serial_num': '12345678901006', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901005', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901004', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901003', 'soc': 21, }), dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'serial_num': '12345678901002', 'soc': 21, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 5250, 'ENC_agg_backup_energy': 5000, 'ENC_agg_soc': 21, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 25000, 'Enc_max_available_capacity': 25000, 'Max_energy': 25000, 'VLS_Limit': 10, 'adjusted_backup_soc': 20, 'agg_soc': 21, 'configured_backup_soc': 20, 'freq_bias_hz': -0.06000090762972832, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -96, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 2, 'soc_recovery_exit': 10, 'voltage_bias_v': -0.7205159664154053, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -23, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643840, 'measurementType': 'storage', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3165834.272, 'actEnergyRcvd': 75.689, 'activePower': 1714.424, 'apparentEnergy': 5529628.28, 'apparentPower': 2100.04, 'channels': list([ dict({ 'actEnergyDlvd': 1581746.293, 'actEnergyRcvd': 45.89, 'activePower': 856.031, 'apparentEnergy': 2763520.42, 'apparentPower': 1049.732, 'current': 8.658, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 856.031, 'pwrFactor': 0.822, 'reactEnergyLagg': 803725.479, 'reactEnergyLead': 33935.538, 'reactivePower': 8.366, 'timestamp': 1709829517, 'voltage': 121.224, }), dict({ 'actEnergyDlvd': 1584087.979, 'actEnergyRcvd': 29.799, 'activePower': 858.394, 'apparentEnergy': 2766107.86, 'apparentPower': 1050.307, 'current': 8.668, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 858.394, 'pwrFactor': 0.812, 'reactEnergyLagg': 803599.733, 'reactEnergyLead': 34616.443, 'reactivePower': 12.499, 'timestamp': 1709829517, 'voltage': 121.143, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 17.326, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 1714.424, 'pwrFactor': 0.817, 'reactEnergyLagg': 1607325.212, 'reactEnergyLead': 68551.981, 'reactivePower': 20.865, 'timestamp': 1709829517, 'voltage': 242.367, }), dict({ 'actEnergyDlvd': 4998251.825, 'actEnergyRcvd': 253960.783, 'activePower': 129.407, 'apparentEnergy': 12810156.532, 'apparentPower': 2578.068, 'channels': list([ dict({ 'actEnergyDlvd': 2631217.196, 'actEnergyRcvd': 93777.056, 'activePower': -201.39, 'apparentEnergy': 6787276.689, 'apparentPower': 1130.056, 'current': 9.316, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -201.39, 'pwrFactor': -0.193, 'reactEnergyLagg': 79.572, 'reactEnergyLead': 5042497.945, 'reactivePower': -935.571, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 2367034.629, 'actEnergyRcvd': 160183.727, 'activePower': 330.797, 'apparentEnergy': 6022879.843, 'apparentPower': 1448.012, 'current': 11.925, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 330.797, 'pwrFactor': 0.212, 'reactEnergyLagg': 105.465, 'reactEnergyLead': 4128101.723, 'reactivePower': -1295.012, 'timestamp': 1709829517, 'voltage': 121.219, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), ]), 'current': 21.241, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 129.407, 'pwrFactor': 0.034, 'reactEnergyLagg': 185.037, 'reactEnergyLead': 9170599.668, 'reactivePower': -2230.583, 'timestamp': 1709829517, 'voltage': 242.553, }), dict({ 'actEnergyDlvd': 2274358.602, 'actEnergyRcvd': 2971414.344, 'activePower': -2579.823, 'apparentEnergy': 7881024.906, 'apparentPower': 461.253, 'channels': list([ dict({ 'actEnergyDlvd': 1136859.658, 'actEnergyRcvd': 1485292.441, 'activePower': -2114.856, 'apparentEnergy': 3945551.951, 'apparentPower': -179.488, 'current': 9.316, 'eid': 1778385681, 'freq': 60.0, 'instantaneousDemand': -2114.856, 'pwrFactor': -0.193, 'reactEnergyLagg': 1358495.518, 'reactEnergyLead': 31391.267, 'reactivePower': 299.583, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385682, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385683, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 14.575, 'eid': 704643840, 'freq': 60.0, 'instantaneousDemand': -2579.823, 'pwrFactor': -1.0, 'reactEnergyLagg': 2713630.41, 'reactEnergyLead': 62717.621, 'reactivePower': 676.781, 'timestamp': 1709829517, 'voltage': 242.582, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2416.339, 'measurementType': 'total-consumption', 'pwrFactor': 0.75, 'reactPwr': -2209.719, 'readingTime': 1709829518, 'rmsCurrent': 19.934, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 4946716.532, 'varhLagLifetime': -1607140.175, 'varhLagToday': 9360.0, 'varhLeadLifetime': 9102047.686, 'varhLeadToday': 9039334.686, 'wNow': 1843.831, 'whLastSevenDays': 0.0, 'whLifetime': 7909866.491, 'whToday': 7596.0, }), dict({ 'activeCount': 1, 'apprntPwr': 315.151, 'measurementType': 'net-consumption', 'pwrFactor': 0.28, 'reactPwr': -2230.583, 'readingTime': 1709829518, 'rmsCurrent': 2.609, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 0, 'varhLagLifetime': 185.037, 'varhLagToday': 0, 'varhLeadLifetime': 9170599.668, 'varhLeadToday': 0, 'wNow': 129.407, 'whLastSevenDays': 0, 'whLifetime': 4744549.864, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 35, 'readingTime': 1709829490, 'type': 'inverters', 'wNow': 1592, 'whLifetime': 821819, }), dict({ 'activeCount': 1, 'apprntPwr': 2100.04, 'measurementType': 'production', 'pwrFactor': 0.82, 'reactPwr': 20.865, 'readingTime': 1709829518, 'rmsCurrent': 17.326, 'rmsVoltage': 242.367, 'type': 'eim', 'vahLifetime': 5529628.28, 'vahToday': 8010.28, 'varhLagLifetime': 1607325.212, 'varhLagToday': 5202.212, 'varhLeadLifetime': 68551.981, 'varhLeadToday': 0.981, 'wNow': 1714.424, 'whLastSevenDays': 3164458.272, 'whLifetime': 3165834.272, 'whToday': 1475.272, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7909866, 'watt_hours_today': 7596, 'watts_now': 1844, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 4744550, 'watt_hours_today': 0, 'watts_now': 129, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 3164458, 'watt_hours_lifetime': 3165834, 'watt_hours_today': 1475, 'watts_now': 1714, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': , 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': None, 'reserved_soc': 20, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.127_with_generator_running] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 196, 'current': 9.098, 'eid': 704643584, 'energy_delivered': 13632727, 'energy_received': 6336017, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.398, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 243.047, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 268, 'current': 4.859, 'eid': 1778385425, 'energy_delivered': 7037859, 'energy_received': 2542489, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.637, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.856, }), : dict({ 'active_power': -72, 'current': 4.239, 'eid': 1778385426, 'energy_delivered': 6594868, 'energy_received': 3793528, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.081, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.192, }), }), 'ctmeter_production': dict({ 'active_power': 2336, 'current': 21.222, 'eid': 704643328, 'energy_delivered': 15097305, 'energy_received': 15, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.88, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 242.887, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1173, 'current': 10.607, 'eid': 1778385169, 'energy_delivered': 7551632, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.883, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.774, }), : dict({ 'active_power': 1163, 'current': 10.615, 'eid': 1778385170, 'energy_delivered': 7545672, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.877, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.113, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 3292, 'backup_reserve': 1680, 'configured_reserve_state_of_charge': 50, 'max_available_capacity': 3360, 'reserve_state_of_charge': 50, 'state_of_charge': 98, }), 'encharge_inventory': dict({ '492234001350': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 2, 'firmware_loaded_date': 1718210586, 'firmware_version': '2.0.6727_rel/22.15', 'installed_date': 1718210586, 'last_report_date': 1718213052, 'led_status': 12, 'max_cell_temp': 27, 'operating': None, 'part_number': '836-00750-r32', 'percent_full': 98, 'serial_number': '492234001350', 'temperature': 27, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492234001350': dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'soc': 98, }), }), 'enpower': dict({ 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1718209911, 'firmware_version': '2.0.5729_rel/22.15', 'grid_mode': 'multimode-ongrid', 'installed_date': 1718209911, 'last_report_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'operating': None, 'part_number': '860-00376-r37', 'serial_number': '122210043898', 'temperature': 91, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482218039091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213113, 'last_report_duration': None, 'last_report_watts': 67, 'lifetime_energy': None, 'max_report_watts': 122, 'serial_number': '482218039091', 'temperature': None, }), '482218039209': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213114, 'last_report_duration': None, 'last_report_watts': 61, 'lifetime_energy': None, 'max_report_watts': 115, 'serial_number': '482218039209', 'temperature': None, }), '482218039304': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213115, 'last_report_duration': None, 'last_report_watts': 69, 'lifetime_energy': None, 'max_report_watts': 132, 'serial_number': '482218039304', 'temperature': None, }), '482218039386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213116, 'last_report_duration': None, 'last_report_watts': 64, 'lifetime_energy': None, 'max_report_watts': 112, 'serial_number': '482218039386', 'temperature': None, }), '482218039390': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213117, 'last_report_duration': None, 'last_report_watts': 63, 'lifetime_energy': None, 'max_report_watts': 123, 'serial_number': '482218039390', 'temperature': None, }), '482218039529': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213143, 'last_report_duration': None, 'last_report_watts': 75, 'lifetime_energy': None, 'max_report_watts': 120, 'serial_number': '482218039529', 'temperature': None, }), '482218039700': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213203, 'last_report_duration': None, 'last_report_watts': 89, 'lifetime_energy': None, 'max_report_watts': 135, 'serial_number': '482218039700', 'temperature': None, }), '482218039736': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213204, 'last_report_duration': None, 'last_report_watts': 84, 'lifetime_energy': None, 'max_report_watts': 118, 'serial_number': '482218039736', 'temperature': None, }), '482218039788': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213234, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 100, 'serial_number': '482218039788', 'temperature': None, }), '482218039880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213235, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 134, 'serial_number': '482218039880', 'temperature': None, }), '482218039911': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213236, 'last_report_duration': None, 'last_report_watts': 97, 'lifetime_energy': None, 'max_report_watts': 133, 'serial_number': '482218039911', 'temperature': None, }), '482218039918': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 99, 'lifetime_energy': None, 'max_report_watts': 136, 'serial_number': '482218039918', 'temperature': None, }), '482218042609': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218042609', 'temperature': None, }), '482218042662': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213239, 'last_report_duration': None, 'last_report_watts': 90, 'lifetime_energy': None, 'max_report_watts': 116, 'serial_number': '482218042662', 'temperature': None, }), '482218042737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213240, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 130, 'serial_number': '482218042737', 'temperature': None, }), '482218042901': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 103, 'serial_number': '482218042901', 'temperature': None, }), '482218043030': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 102, 'serial_number': '482218043030', 'temperature': None, }), '482218043257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213243, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 137, 'serial_number': '482218043257', 'temperature': None, }), '482218043590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213245, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 108, 'serial_number': '482218043590', 'temperature': None, }), '482218043592': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213264, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 106, 'serial_number': '482218043592', 'temperature': None, }), '482218043652': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213265, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218043652', 'temperature': None, }), '482218043981': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213266, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 121, 'serial_number': '482218043981', 'temperature': None, }), '482218047061': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213267, 'last_report_duration': None, 'last_report_watts': 100, 'lifetime_energy': None, 'max_report_watts': 125, 'serial_number': '482218047061', 'temperature': None, }), '482218047087': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213268, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 101, 'serial_number': '482218047087', 'temperature': None, }), '482218047088': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213269, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 104, 'serial_number': '482218047088', 'temperature': None, }), '482218047099': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718212938, 'last_report_duration': None, 'last_report_watts': 74, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218047099', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-05-27 10:06:36 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 50, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 50, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1718213113, 'lastReportWatts': 67, 'maxReportWatts': 122, 'serialNumber': '482218039091', }), dict({ 'devType': 1, 'lastReportDate': 1718213114, 'lastReportWatts': 61, 'maxReportWatts': 115, 'serialNumber': '482218039209', }), dict({ 'devType': 1, 'lastReportDate': 1718213115, 'lastReportWatts': 69, 'maxReportWatts': 132, 'serialNumber': '482218039304', }), dict({ 'devType': 1, 'lastReportDate': 1718213116, 'lastReportWatts': 64, 'maxReportWatts': 112, 'serialNumber': '482218039386', }), dict({ 'devType': 1, 'lastReportDate': 1718213117, 'lastReportWatts': 63, 'maxReportWatts': 123, 'serialNumber': '482218039390', }), dict({ 'devType': 1, 'lastReportDate': 1718213143, 'lastReportWatts': 75, 'maxReportWatts': 120, 'serialNumber': '482218039529', }), dict({ 'devType': 1, 'lastReportDate': 1718213203, 'lastReportWatts': 89, 'maxReportWatts': 135, 'serialNumber': '482218039700', }), dict({ 'devType': 1, 'lastReportDate': 1718213204, 'lastReportWatts': 84, 'maxReportWatts': 118, 'serialNumber': '482218039736', }), dict({ 'devType': 1, 'lastReportDate': 1718213234, 'lastReportWatts': 95, 'maxReportWatts': 100, 'serialNumber': '482218039788', }), dict({ 'devType': 1, 'lastReportDate': 1718213235, 'lastReportWatts': 96, 'maxReportWatts': 134, 'serialNumber': '482218039880', }), dict({ 'devType': 1, 'lastReportDate': 1718213236, 'lastReportWatts': 97, 'maxReportWatts': 133, 'serialNumber': '482218039911', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 99, 'maxReportWatts': 136, 'serialNumber': '482218039918', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 95, 'maxReportWatts': 107, 'serialNumber': '482218042609', }), dict({ 'devType': 1, 'lastReportDate': 1718213239, 'lastReportWatts': 90, 'maxReportWatts': 116, 'serialNumber': '482218042662', }), dict({ 'devType': 1, 'lastReportDate': 1718213240, 'lastReportWatts': 96, 'maxReportWatts': 130, 'serialNumber': '482218042737', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 96, 'maxReportWatts': 103, 'serialNumber': '482218042901', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 95, 'maxReportWatts': 102, 'serialNumber': '482218043030', }), dict({ 'devType': 1, 'lastReportDate': 1718213243, 'lastReportWatts': 98, 'maxReportWatts': 137, 'serialNumber': '482218043257', }), dict({ 'devType': 1, 'lastReportDate': 1718213245, 'lastReportWatts': 95, 'maxReportWatts': 108, 'serialNumber': '482218043590', }), dict({ 'devType': 1, 'lastReportDate': 1718213264, 'lastReportWatts': 98, 'maxReportWatts': 106, 'serialNumber': '482218043592', }), dict({ 'devType': 1, 'lastReportDate': 1718213265, 'lastReportWatts': 101, 'maxReportWatts': 107, 'serialNumber': '482218043652', }), dict({ 'devType': 1, 'lastReportDate': 1718213266, 'lastReportWatts': 96, 'maxReportWatts': 121, 'serialNumber': '482218043981', }), dict({ 'devType': 1, 'lastReportDate': 1718213267, 'lastReportWatts': 100, 'maxReportWatts': 125, 'serialNumber': '482218047061', }), dict({ 'devType': 1, 'lastReportDate': 1718213268, 'lastReportWatts': 101, 'maxReportWatts': 101, 'serialNumber': '482218047087', }), dict({ 'devType': 1, 'lastReportDate': 1718213269, 'lastReportWatts': 98, 'maxReportWatts': 104, 'serialNumber': '482218047088', }), dict({ 'devType': 1, 'lastReportDate': 1718212938, 'lastReportWatts': 74, 'maxReportWatts': 107, 'serialNumber': '482218047099', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1718210586, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 2, 'img_load_date': 1718210586, 'img_pnum_running': '2.0.6727_rel/22.15', 'installed': 1718210586, 'last_rpt_date': 1718213052, 'led_status': 12, 'maxCellTemp': 27, 'part_num': '836-00750-r32', 'percentFull': 98, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492234001350', 'sleep_enabled': False, 'temperature': 27, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-generator', 'Enpwr_curr_state_id': 128, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 16124, 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1718209911, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1718209911, 'img_pnum_running': '2.0.5729_rel/22.15', 'installed': 1718209911, 'last_rpt_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'part_num': '860-00376-r37', 'serial_num': '122210043898', 'temperature': 91, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'serial_num': '492234001350', 'soc': 98, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 3292, 'ENC_agg_backup_energy': 1680, 'ENC_agg_soc': 98, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 3360, 'Enc_max_available_capacity': 3360, 'Max_energy': 3360, 'VLS_Limit': 10, 'adjusted_backup_soc': 50, 'agg_soc': 98, 'configured_backup_soc': 50, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': -15.69999885559082, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -502, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 15097304.67, 'actEnergyRcvd': 15.392, 'activePower': 2336.093, 'apparentEnergy': 18631234.536, 'apparentPower': 2643.758, 'channels': list([ dict({ 'actEnergyDlvd': 7551632.356, 'actEnergyRcvd': 7.79, 'activePower': 1172.624, 'apparentEnergy': 9315712.558, 'apparentPower': 1324.867, 'current': 10.607, 'eid': 1778385169, 'freq': 60.062, 'instantaneousDemand': 1172.624, 'pwrFactor': 0.883, 'reactEnergyLagg': 2061239.812, 'reactEnergyLead': 2910.699, 'reactivePower': -557.096, 'timestamp': 1718213332, 'voltage': 121.774, }), dict({ 'actEnergyDlvd': 7545672.313, 'actEnergyRcvd': 7.603, 'activePower': 1163.469, 'apparentEnergy': 9315521.977, 'apparentPower': 1318.892, 'current': 10.615, 'eid': 1778385170, 'freq': 60.062, 'instantaneousDemand': 1163.469, 'pwrFactor': 0.877, 'reactEnergyLagg': 2054781.564, 'reactEnergyLead': 4234.214, 'reactivePower': -554.743, 'timestamp': 1718213332, 'voltage': 121.113, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 21.222, 'eid': 704643328, 'freq': 60.062, 'instantaneousDemand': 2336.093, 'pwrFactor': 0.88, 'reactEnergyLagg': 4116021.375, 'reactEnergyLead': 7144.913, 'reactivePower': -1111.839, 'timestamp': 1718213332, 'voltage': 242.887, }), dict({ 'actEnergyDlvd': 13632727.119, 'actEnergyRcvd': 6336017.38, 'activePower': 195.575, 'apparentEnergy': 23220664.459, 'apparentPower': 1088.544, 'channels': list([ dict({ 'actEnergyDlvd': 7037858.755, 'actEnergyRcvd': 2542489.025, 'activePower': 267.695, 'apparentEnergy': 11417171.695, 'apparentPower': 574.709, 'current': 4.859, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 267.695, 'pwrFactor': 0.637, 'reactEnergyLagg': 417029.372, 'reactEnergyLead': 4242565.474, 'reactivePower': 474.518, 'timestamp': 1718213332, 'voltage': 121.856, }), dict({ 'actEnergyDlvd': 6594868.364, 'actEnergyRcvd': 3793528.355, 'activePower': -72.12, 'apparentEnergy': 11803492.765, 'apparentPower': 513.834, 'current': 4.239, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': -72.12, 'pwrFactor': 0.081, 'reactEnergyLagg': 68699.07, 'reactEnergyLead': 3480803.913, 'reactivePower': 464.057, 'timestamp': 1718213332, 'voltage': 121.192, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 9.098, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 195.575, 'pwrFactor': 0.398, 'reactEnergyLagg': 485728.442, 'reactEnergyLead': 7723369.387, 'reactivePower': 938.575, 'timestamp': 1718213332, 'voltage': 243.047, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/ivp/ss/gen_config': dict({ 'charge_from_generator': True, 'cool_down_mins': 0, 'gen_type': 'Standby', 'generator_id': '', 'last_updated_by': 'ITK', 'manufacturer': 'Generac', 'max_cont_gen_amps': 58.3, 'max_gen_efficiency_perc': 100, 'min_gen_loading_perc': 5, 'model': 'G007223-0, G007224-0, G007225-0 (14kW)', 'name_plate_rating_wat': 14.0, 'start_method': 'Auto', 'warm_up_mins': 0, }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2775.526, 'measurementType': 'total-consumption', 'pwrFactor': 0.92, 'reactPwr': -197.689, 'readingTime': 1718213330, 'rmsCurrent': 22.811, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 1585.814, 'varhLagLifetime': -3630293.476, 'varhLagToday': 598.0, 'varhLeadLifetime': 7716225.126, 'varhLeadToday': 0.0, 'wNow': 2670.058, 'whLastSevenDays': 882.448, 'whLifetime': 22392008.448, 'whToday': 3333.448, }), dict({ 'activeCount': 1, 'apprntPwr': 54.157, 'measurementType': 'net-consumption', 'pwrFactor': 1.0, 'reactPwr': 892.549, 'readingTime': 1718213330, 'rmsCurrent': 0.422, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 0, 'varhLagLifetime': 485727.899, 'varhLagToday': 0, 'varhLeadLifetime': 7723369.387, 'varhLeadToday': 0, 'wNow': 240.397, 'whLastSevenDays': 0, 'whLifetime': 7298714.07, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 26, 'readingTime': 1718213270, 'type': 'inverters', 'wNow': 2317, 'whLifetime': 1107526, }), dict({ 'activeCount': 1, 'apprntPwr': 2707.323, 'measurementType': 'production', 'pwrFactor': 0.92, 'reactPwr': -1090.238, 'readingTime': 1718213330, 'rmsCurrent': 22.389, 'rmsVoltage': 242.897, 'type': 'eim', 'vahLifetime': 18631233.018, 'vahToday': 2965.018, 'varhLagLifetime': 4116021.375, 'varhLagToday': 3.375, 'varhLeadLifetime': 7144.262, 'varhLeadToday': 959.262, 'wNow': 2429.661, 'whLastSevenDays': 360056.35, 'whLifetime': 15097303.35, 'whToday': 2645.35, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 882, 'watt_hours_lifetime': 22392008, 'watt_hours_today': 3333, 'watts_now': 2670, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7298714, 'watt_hours_today': 0, 'watts_now': 240, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 360056, 'watt_hours_lifetime': 15097303, 'watt_hours_today': 2645, 'watts_now': 2430, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 50, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4264_metered_noct] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121734002573': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1746702346, 'last_report_duration': None, 'last_report_watts': 169, 'lifetime_energy': None, 'max_report_watts': 255, 'serial_number': '121734002573', 'temperature': None, }), '121734002908': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1746702376, 'last_report_duration': None, 'last_report_watts': 167, 'lifetime_energy': None, 'max_report_watts': 255, 'serial_number': '121734002908', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2025-05-07 19:18:12 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1743427085', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1746645538', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 30.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1746702346, 'lastReportWatts': 169, 'maxReportWatts': 255, 'serialNumber': '121734002573', }), dict({ 'devType': 1, 'lastReportDate': 1746702376, 'lastReportWatts': 167, 'maxReportWatts': 255, 'serialNumber': '121734002908', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 46.343, 'lines': list([ dict({ 'apprntPwr': 10.608, 'pwrFactor': -0.03, 'reactPwr': -0.0, 'rmsCurrent': 0.044, 'rmsVoltage': 238.896, 'vahLifetime': 9382.18, 'vahToday': 396.18, 'varhLagLifetime': -0.111, 'varhLagToday': 0.0, 'varhLeadLifetime': -0.335, 'varhLeadToday': 0.0, 'wNow': -0.319, 'whLastSevenDays': 0.0, 'whLifetime': -7.908, 'whToday': 0.0, }), dict({ 'apprntPwr': -31.399, 'pwrFactor': -1.0, 'reactPwr': 0.595, 'rmsCurrent': -0.133, 'rmsVoltage': 236.932, 'vahLifetime': 7784.254, 'vahToday': 328.254, 'varhLagLifetime': -0.805, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': -2.851, 'whLastSevenDays': 0.946, 'whLifetime': 1.946, 'whToday': 1.946, }), dict({ 'apprntPwr': 67.134, 'pwrFactor': 0.02, 'reactPwr': 0.0, 'rmsCurrent': 0.281, 'rmsVoltage': 238.742, 'vahLifetime': 389.836, 'vahToday': 16.836, 'varhLagLifetime': 0.001, 'varhLagToday': 0.001, 'varhLeadLifetime': -4.914, 'varhLeadToday': 0.0, 'wNow': 1.334, 'whLastSevenDays': 0.0, 'whLifetime': -12.192, 'whToday': 0.0, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': -0.32, 'reactPwr': 0.595, 'readingTime': 1746702913, 'rmsCurrent': 0.193, 'rmsVoltage': 714.57, 'type': 'eim', 'vahLifetime': 17556.27, 'vahToday': 741.27, 'varhLagLifetime': -0.915, 'varhLagToday': 0.0, 'varhLeadLifetime': -5.249, 'varhLeadToday': 0.0, 'wNow': -1.837, 'whLastSevenDays': 0.0, 'whLifetime': -18.153, 'whToday': 1.0, }), dict({ 'activeCount': 0, 'apprntPwr': -69.159, 'lines': list([ dict({ 'apprntPwr': -37.76, 'pwrFactor': -1.0, 'reactPwr': -0.0, 'rmsCurrent': -0.158, 'rmsVoltage': 238.896, 'vahLifetime': 9382.18, 'vahToday': 0, 'varhLagLifetime': 0.521, 'varhLagToday': 0, 'varhLeadLifetime': 3.279, 'varhLeadToday': 0, 'wNow': -2.644, 'whLastSevenDays': 0, 'whLifetime': -800.35, 'whToday': 0, }), dict({ 'apprntPwr': -31.399, 'pwrFactor': -1.0, 'reactPwr': 0.595, 'rmsCurrent': -0.133, 'rmsVoltage': 236.932, 'vahLifetime': 7784.254, 'vahToday': 0, 'varhLagLifetime': 115.089, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': -2.851, 'whLastSevenDays': 0, 'whLifetime': -520.723, 'whToday': 0, }), dict({ 'apprntPwr': 0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': 0.0, 'rmsVoltage': 238.742, 'vahLifetime': 389.836, 'vahToday': 0, 'varhLagLifetime': 0.001, 'varhLagToday': 0, 'varhLeadLifetime': 26.448, 'varhLeadToday': 0, 'wNow': 0.0, 'whLastSevenDays': 0, 'whLifetime': -902.572, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.595, 'readingTime': 1746702913, 'rmsCurrent': -0.291, 'rmsVoltage': 714.57, 'type': 'eim', 'vahLifetime': 17556.27, 'vahToday': 0, 'varhLagLifetime': 115.611, 'varhLagToday': 0, 'varhLeadLifetime': 29.727, 'varhLeadToday': 0, 'wNow': -5.495, 'whLastSevenDays': 0, 'whLifetime': -2223.645, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 38, 'readingTime': 1746702889, 'type': 'inverters', 'wNow': 5521, 'whLifetime': 32465106, }), dict({ 'activeCount': 0, 'apprntPwr': 115.121, 'lines': list([ dict({ 'apprntPwr': 48.155, 'pwrFactor': 0.0, 'reactPwr': -0.0, 'rmsCurrent': 0.202, 'rmsVoltage': 238.77, 'vahLifetime': 11902.303, 'vahToday': 502.303, 'varhLagLifetime': 0.632, 'varhLagToday': 0.632, 'varhLeadLifetime': 3.614, 'varhLeadToday': 0.614, 'wNow': 2.325, 'whLastSevenDays': 487.407, 'whLifetime': 508.407, 'whToday': 22.407, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': -0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 236.917, 'vahLifetime': 875.964, 'vahToday': 37.964, 'varhLagLifetime': 115.894, 'varhLagToday': 4.894, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': 0.0, 'whLastSevenDays': 572.104, 'whLifetime': 597.104, 'whToday': 26.104, }), dict({ 'apprntPwr': 66.966, 'pwrFactor': 0.0, 'reactPwr': -0.0, 'rmsCurrent': 0.281, 'rmsVoltage': 238.712, 'vahLifetime': 16546.948, 'vahToday': 694.948, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 31.361, 'varhLeadToday': 1.361, 'wNow': 1.334, 'whLastSevenDays': 461.147, 'whLifetime': 481.147, 'whToday': 21.147, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': -0.0, 'readingTime': 1746702913, 'rmsCurrent': 0.484, 'rmsVoltage': 714.399, 'type': 'eim', 'vahLifetime': 29325.215, 'vahToday': 1235.215, 'varhLagLifetime': 116.526, 'varhLagToday': 5.526, 'varhLeadLifetime': 34.976, 'varhLeadToday': 1.976, 'wNow': 3.659, 'whLastSevenDays': 1520.658, 'whLifetime': 1586.658, 'whToday': 69.658, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 1521, 'watt_hours_lifetime': 32465106, 'watt_hours_today': 70, 'watts_now': 5521, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1743427085', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1746645538', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 30.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4286_with_3cts_and_battery_split] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 1750, 'current': 22.923, 'eid': 704643584, 'energy_delivered': 5855939, 'energy_received': 4173334, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.618, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 247.172, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 810, 'current': 11.642, 'eid': 1778385425, 'energy_delivered': 2817654, 'energy_received': 2329054, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.563, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.482, }), : dict({ 'active_power': 940, 'current': 11.281, 'eid': 1778385426, 'energy_delivered': 3038285, 'energy_received': 1844280, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.674, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.69, }), }), 'ctmeter_production': dict({ 'active_power': 7131, 'current': 58.537, 'eid': 704643328, 'energy_delivered': 13431337, 'energy_received': 165, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.985, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 247.307, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 3562, 'current': 29.262, 'eid': 1778385169, 'energy_delivered': 6709437, 'energy_received': 93, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.984, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.571, }), : dict({ 'active_power': 3569, 'current': 29.276, 'eid': 1778385170, 'energy_delivered': 6721900, 'energy_received': 72, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.986, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.736, }), }), 'ctmeter_storage': dict({ 'active_power': -7084, 'current': 57.627, 'eid': 704643840, 'energy_delivered': 4073871, 'energy_received': 5409935, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.962, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 247.392, }), 'ctmeter_storage_phases': dict({ : dict({ 'active_power': -3538, 'current': 28.813, 'eid': 1778385681, 'energy_delivered': 2036140, 'energy_received': 2703734, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.994, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.696, }), : dict({ 'active_power': -3545, 'current': 28.813, 'eid': 1778385682, 'energy_delivered': 2037731, 'energy_received': 2706201, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.994, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.696, }), }), 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 11600, 'backup_reserve': 25000, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 25000, 'reserve_state_of_charge': 100, 'state_of_charge': 46, }), 'encharge_inventory': dict({ '492320000140': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887725, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887725, 'last_report_date': 1722966950, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 39, 'serial_number': '492320000140', 'temperature': 18, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492320000148': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887786, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887786, 'last_report_date': 1722966985, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 48, 'serial_number': '492320000148', 'temperature': 19, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492320000149': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887766, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887766, 'last_report_date': 1722966742, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 48, 'serial_number': '492320000149', 'temperature': 19, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492320000158': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887775, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887775, 'last_report_date': 1722966878, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 49, 'serial_number': '492320000158', 'temperature': 19, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492335008361': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887827, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887827, 'last_report_date': 1722966808, 'led_status': 12, 'max_cell_temp': 23, 'operating': None, 'part_number': '836-01826-r81', 'percent_full': 48, 'serial_number': '492335008361', 'temperature': 23, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492320000140': dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'soc': 39, }), '492320000148': dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'soc': 48, }), '492320000149': dict({ 'apparent_power_mva': -1316000, 'real_power_mw': -1316000, 'soc': 48, }), '492320000158': dict({ 'apparent_power_mva': -1317000, 'real_power_mw': -1317000, 'soc': 49, }), '492335008361': dict({ 'apparent_power_mva': -1311000, 'real_power_mw': -1311000, 'soc': 48, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1722887831, 'firmware_version': '3.0.6297_rel/31.33', 'grid_mode': 'multimode-ongrid', 'installed_date': 1722887831, 'last_report_date': 1722967000, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00378-r27', 'serial_number': '482326107450', 'temperature': 83, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '202330048668': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966762, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '202330048668', 'temperature': None, }), '202330048813': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966671, 'last_report_duration': None, 'last_report_watts': 291, 'lifetime_energy': None, 'max_report_watts': 293, 'serial_number': '202330048813', 'temperature': None, }), '202330048928': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966672, 'last_report_duration': None, 'last_report_watts': 290, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '202330048928', 'temperature': None, }), '202330052050': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966883, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330052050', 'temperature': None, }), '202330052070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966856, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202330052070', 'temperature': None, }), '202330054362': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966701, 'last_report_duration': None, 'last_report_watts': 291, 'lifetime_energy': None, 'max_report_watts': 294, 'serial_number': '202330054362', 'temperature': None, }), '202330056305': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966827, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330056305', 'temperature': None, }), '202330056471': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966792, 'last_report_duration': None, 'last_report_watts': 293, 'lifetime_energy': None, 'max_report_watts': 293, 'serial_number': '202330056471', 'temperature': None, }), '202330056742': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966763, 'last_report_duration': None, 'last_report_watts': 295, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '202330056742', 'temperature': None, }), '202330057375': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966795, 'last_report_duration': None, 'last_report_watts': 292, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '202330057375', 'temperature': None, }), '202330057549': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966851, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330057549', 'temperature': None, }), '202330057882': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966857, 'last_report_duration': None, 'last_report_watts': 154, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202330057882', 'temperature': None, }), '202330058066': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966826, 'last_report_duration': None, 'last_report_watts': 156, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '202330058066', 'temperature': None, }), '202330058090': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966823, 'last_report_duration': None, 'last_report_watts': 180, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330058090', 'temperature': None, }), '202330058398': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966822, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330058398', 'temperature': None, }), '202330058599': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966702, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202330058599', 'temperature': None, }), '202330059925': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966831, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202330059925', 'temperature': None, }), '202330059996': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966825, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330059996', 'temperature': None, }), '202330061061': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966855, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330061061', 'temperature': None, }), '202330061346': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966761, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330061346', 'temperature': None, }), '202330061485': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966882, 'last_report_duration': None, 'last_report_watts': 15, 'lifetime_energy': None, 'max_report_watts': 332, 'serial_number': '202330061485', 'temperature': None, }), '202330061497': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966853, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330061497', 'temperature': None, }), '202330061595': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966858, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '202330061595', 'temperature': None, }), '202330061684': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966829, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '202330061684', 'temperature': None, }), '202330061749': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966823, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330061749', 'temperature': None, }), '202330062100': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966859, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202330062100', 'temperature': None, }), '202330062263': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966796, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330062263', 'temperature': None, }), '202330062327': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966854, 'last_report_duration': None, 'last_report_watts': 185, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330062327', 'temperature': None, }), '202330062411': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966830, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330062411', 'temperature': None, }), '202330062671': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966793, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '202330062671', 'temperature': None, }), '202330062816': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966791, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330062816', 'temperature': None, }), '202330063659': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966794, 'last_report_duration': None, 'last_report_watts': 179, 'lifetime_energy': None, 'max_report_watts': 331, 'serial_number': '202330063659', 'temperature': None, }), '202330066965': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966826, 'last_report_duration': None, 'last_report_watts': 153, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202330066965', 'temperature': None, }), '202330067698': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966828, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 340, 'serial_number': '202330067698', 'temperature': None, }), '202330068303': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966882, 'last_report_duration': None, 'last_report_watts': 30, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202330068303', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-08-06 17:56:47 UTC', 'filename': '', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), }), 'source': '', 'version': '', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1722602347', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.36445000767707825, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1722551964', 'mode': 'self-consumption', 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': True, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1722966851, 'lastReportWatts': 184, 'maxReportWatts': 335, 'serialNumber': '202330057549', }), dict({ 'devType': 1, 'lastReportDate': 1722966761, 'lastReportWatts': 181, 'maxReportWatts': 333, 'serialNumber': '202330061346', }), dict({ 'devType': 1, 'lastReportDate': 1722966882, 'lastReportWatts': 15, 'maxReportWatts': 332, 'serialNumber': '202330061485', }), dict({ 'devType': 1, 'lastReportDate': 1722966762, 'lastReportWatts': 155, 'maxReportWatts': 247, 'serialNumber': '202330048668', }), dict({ 'devType': 1, 'lastReportDate': 1722966763, 'lastReportWatts': 295, 'maxReportWatts': 296, 'serialNumber': '202330056742', }), dict({ 'devType': 1, 'lastReportDate': 1722966671, 'lastReportWatts': 291, 'maxReportWatts': 293, 'serialNumber': '202330048813', }), dict({ 'devType': 1, 'lastReportDate': 1722966822, 'lastReportWatts': 302, 'maxReportWatts': 337, 'serialNumber': '202330058398', }), dict({ 'devType': 1, 'lastReportDate': 1722966672, 'lastReportWatts': 290, 'maxReportWatts': 292, 'serialNumber': '202330048928', }), dict({ 'devType': 1, 'lastReportDate': 1722966823, 'lastReportWatts': 180, 'maxReportWatts': 333, 'serialNumber': '202330058090', }), dict({ 'devType': 1, 'lastReportDate': 1722966823, 'lastReportWatts': 184, 'maxReportWatts': 337, 'serialNumber': '202330061749', }), dict({ 'devType': 1, 'lastReportDate': 1722966825, 'lastReportWatts': 182, 'maxReportWatts': 337, 'serialNumber': '202330059996', }), dict({ 'devType': 1, 'lastReportDate': 1722966826, 'lastReportWatts': 153, 'maxReportWatts': 242, 'serialNumber': '202330066965', }), dict({ 'devType': 1, 'lastReportDate': 1722966826, 'lastReportWatts': 156, 'maxReportWatts': 249, 'serialNumber': '202330058066', }), dict({ 'devType': 1, 'lastReportDate': 1722966701, 'lastReportWatts': 291, 'maxReportWatts': 294, 'serialNumber': '202330054362', }), dict({ 'devType': 1, 'lastReportDate': 1722966827, 'lastReportWatts': 181, 'maxReportWatts': 335, 'serialNumber': '202330056305', }), dict({ 'devType': 1, 'lastReportDate': 1722966828, 'lastReportWatts': 305, 'maxReportWatts': 340, 'serialNumber': '202330067698', }), dict({ 'devType': 1, 'lastReportDate': 1722966829, 'lastReportWatts': 186, 'maxReportWatts': 338, 'serialNumber': '202330061684', }), dict({ 'devType': 1, 'lastReportDate': 1722966791, 'lastReportWatts': 184, 'maxReportWatts': 335, 'serialNumber': '202330062816', }), dict({ 'devType': 1, 'lastReportDate': 1722966792, 'lastReportWatts': 293, 'maxReportWatts': 293, 'serialNumber': '202330056471', }), dict({ 'devType': 1, 'lastReportDate': 1722966793, 'lastReportWatts': 155, 'maxReportWatts': 246, 'serialNumber': '202330062671', }), dict({ 'devType': 1, 'lastReportDate': 1722966830, 'lastReportWatts': 181, 'maxReportWatts': 333, 'serialNumber': '202330062411', }), dict({ 'devType': 1, 'lastReportDate': 1722966794, 'lastReportWatts': 179, 'maxReportWatts': 331, 'serialNumber': '202330063659', }), dict({ 'devType': 1, 'lastReportDate': 1722966795, 'lastReportWatts': 292, 'maxReportWatts': 292, 'serialNumber': '202330057375', }), dict({ 'devType': 1, 'lastReportDate': 1722966702, 'lastReportWatts': 155, 'maxReportWatts': 245, 'serialNumber': '202330058599', }), dict({ 'devType': 1, 'lastReportDate': 1722966831, 'lastReportWatts': 182, 'maxReportWatts': 334, 'serialNumber': '202330059925', }), dict({ 'devType': 1, 'lastReportDate': 1722966853, 'lastReportWatts': 184, 'maxReportWatts': 335, 'serialNumber': '202330061497', }), dict({ 'devType': 1, 'lastReportDate': 1722966854, 'lastReportWatts': 185, 'maxReportWatts': 337, 'serialNumber': '202330062327', }), dict({ 'devType': 1, 'lastReportDate': 1722966882, 'lastReportWatts': 30, 'maxReportWatts': 336, 'serialNumber': '202330068303', }), dict({ 'devType': 1, 'lastReportDate': 1722966855, 'lastReportWatts': 302, 'maxReportWatts': 333, 'serialNumber': '202330061061', }), dict({ 'devType': 1, 'lastReportDate': 1722966883, 'lastReportWatts': 182, 'maxReportWatts': 337, 'serialNumber': '202330052050', }), dict({ 'devType': 1, 'lastReportDate': 1722966856, 'lastReportWatts': 155, 'maxReportWatts': 245, 'serialNumber': '202330052070', }), dict({ 'devType': 1, 'lastReportDate': 1722966796, 'lastReportWatts': 181, 'maxReportWatts': 333, 'serialNumber': '202330062263', }), dict({ 'devType': 1, 'lastReportDate': 1722966857, 'lastReportWatts': 154, 'maxReportWatts': 243, 'serialNumber': '202330057882', }), dict({ 'devType': 1, 'lastReportDate': 1722966858, 'lastReportWatts': 303, 'maxReportWatts': 338, 'serialNumber': '202330061595', }), dict({ 'devType': 1, 'lastReportDate': 1722966859, 'lastReportWatts': 182, 'maxReportWatts': 336, 'serialNumber': '202330062100', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887725, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887725, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887725, 'last_rpt_date': 1722966950, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 39, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000140', 'sleep_enabled': False, 'temperature': 18, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887786, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887786, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887786, 'last_rpt_date': 1722966985, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 48, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000148', 'sleep_enabled': False, 'temperature': 19, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887766, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887766, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887766, 'last_rpt_date': 1722966742, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 48, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000149', 'sleep_enabled': False, 'temperature': 19, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887775, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887775, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887775, 'last_rpt_date': 1722966878, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 49, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000158', 'sleep_enabled': False, 'temperature': 19, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887827, 'dc_switch_off': False, 'der_index': 3, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887827, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887827, 'last_rpt_date': 1722966808, 'led_status': 12, 'maxCellTemp': 23, 'part_num': '836-01826-r81', 'percentFull': 48, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492335008361', 'sleep_enabled': False, 'temperature': 23, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15868, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887831, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1722887831, 'img_pnum_running': '3.0.6297_rel/31.33', 'installed': 1722887831, 'last_rpt_date': 1722967000, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00378-r27', 'serial_num': '482326107450', 'temperature': 83, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'serial_num': '492320000140', 'soc': 39, }), dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'serial_num': '492320000148', 'soc': 48, }), dict({ 'apparent_power_mva': -1316000, 'real_power_mw': -1316000, 'serial_num': '492320000149', 'soc': 48, }), dict({ 'apparent_power_mva': -1317000, 'real_power_mw': -1317000, 'serial_num': '492320000158', 'soc': 49, }), dict({ 'apparent_power_mva': -1311000, 'real_power_mw': -1311000, 'serial_num': '492335008361', 'soc': 48, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 11600, 'ENC_agg_backup_energy': 25000, 'ENC_agg_soc': 46, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 25000, 'Enc_max_available_capacity': 25000, 'Max_energy': 25000, 'VLS_Limit': 10, 'adjusted_backup_soc': 100, 'agg_soc': 46, 'configured_backup_soc': 100, 'freq_bias_hz': -0.4749099016189575, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -763, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 2, 'soc_recovery_exit': 10, 'voltage_bias_v': -5.702916622161865, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -182, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643840, 'measurementType': 'storage', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 13431336.968, 'actEnergyRcvd': 164.852, 'activePower': 7131.017, 'apparentEnergy': 17695037.667, 'apparentPower': 7237.365, 'channels': list([ dict({ 'actEnergyDlvd': 6709437.261, 'actEnergyRcvd': 92.996, 'activePower': 3562.174, 'apparentEnergy': 8841528.936, 'apparentPower': 3615.485, 'current': 29.262, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 3562.174, 'pwrFactor': 0.984, 'reactEnergyLagg': 1433208.527, 'reactEnergyLead': 100991.799, 'reactivePower': 2.24, 'timestamp': 1722967007, 'voltage': 123.571, }), dict({ 'actEnergyDlvd': 6721899.707, 'actEnergyRcvd': 71.856, 'activePower': 3568.843, 'apparentEnergy': 8853508.731, 'apparentPower': 3621.88, 'current': 29.276, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 3568.843, 'pwrFactor': 0.986, 'reactEnergyLagg': 1437578.543, 'reactEnergyLead': 96894.114, 'reactivePower': -5.959, 'timestamp': 1722967007, 'voltage': 123.736, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1722967007, 'voltage': 0.0, }), ]), 'current': 58.537, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 7131.017, 'pwrFactor': 0.985, 'reactEnergyLagg': 2870787.07, 'reactEnergyLead': 197885.914, 'reactivePower': -3.719, 'timestamp': 1722967007, 'voltage': 247.307, }), dict({ 'actEnergyDlvd': 5855939.23, 'actEnergyRcvd': 4173334.272, 'activePower': 1749.504, 'apparentEnergy': 25731843.679, 'apparentPower': 2826.5, 'channels': list([ dict({ 'actEnergyDlvd': 2817654.26, 'actEnergyRcvd': 2329054.288, 'activePower': 809.907, 'apparentEnergy': 12904982.372, 'apparentPower': 1438.017, 'current': 11.642, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 809.907, 'pwrFactor': 0.563, 'reactEnergyLagg': 8801.054, 'reactEnergyLead': 9410020.986, 'reactivePower': -851.171, 'timestamp': 1722967007, 'voltage': 123.482, }), dict({ 'actEnergyDlvd': 3038284.97, 'actEnergyRcvd': 1844279.984, 'activePower': 939.597, 'apparentEnergy': 12826861.306, 'apparentPower': 1388.484, 'current': 11.281, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 939.597, 'pwrFactor': 0.674, 'reactEnergyLagg': 5083.172, 'reactEnergyLead': 9489490.631, 'reactivePower': -530.687, 'timestamp': 1722967007, 'voltage': 123.69, }), dict({ 'actEnergyDlvd': 2037731.459, 'actEnergyRcvd': 2706201.405, 'activePower': -3545.209, 'apparentEnergy': 7469208.32, 'apparentPower': 3563.706, 'current': 28.813, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': -3545.209, 'pwrFactor': -0.994, 'reactEnergyLagg': 3071742.732, 'reactEnergyLead': 73803.42, 'reactivePower': 22.091, 'timestamp': 1722967007, 'voltage': 123.696, }), ]), 'current': 22.923, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 1749.504, 'pwrFactor': 0.618, 'reactEnergyLagg': 13884.226, 'reactEnergyLead': 18899511.617, 'reactivePower': -1381.858, 'timestamp': 1722967007, 'voltage': 247.172, }), dict({ 'actEnergyDlvd': 4073871.031, 'actEnergyRcvd': 5409935.465, 'activePower': -7083.656, 'apparentEnergy': 14939666.293, 'apparentPower': 7210.614, 'channels': list([ dict({ 'actEnergyDlvd': 2036139.572, 'actEnergyRcvd': 2703734.06, 'activePower': -3538.447, 'apparentEnergy': 7470457.973, 'apparentPower': 3646.908, 'current': 28.813, 'eid': 1778385681, 'freq': 60.0, 'instantaneousDemand': -3538.447, 'pwrFactor': -0.994, 'reactEnergyLagg': 3072253.785, 'reactEnergyLead': 73813.053, 'reactivePower': 27.294, 'timestamp': 1722967007, 'voltage': 123.696, }), dict({ 'actEnergyDlvd': 2037731.459, 'actEnergyRcvd': 2706201.405, 'activePower': -3545.209, 'apparentEnergy': 7469208.32, 'apparentPower': 3563.706, 'current': 28.813, 'eid': 1778385682, 'freq': 60.0, 'instantaneousDemand': -3545.209, 'pwrFactor': -0.994, 'reactEnergyLagg': 3071742.732, 'reactEnergyLead': 73803.42, 'reactivePower': 22.091, 'timestamp': 1722967007, 'voltage': 123.696, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385683, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1722967007, 'voltage': 0.0, }), ]), 'current': 57.627, 'eid': 704643840, 'freq': 60.0, 'instantaneousDemand': -7083.656, 'pwrFactor': -0.962, 'reactEnergyLagg': 6143996.517, 'reactEnergyLead': 147616.472, 'reactivePower': 49.385, 'timestamp': 1722967007, 'voltage': 247.392, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 10045.047, 'lines': list([ dict({ 'apprntPwr': 5056.383, 'pwrFactor': 0.87, 'reactPwr': -845.076, 'rmsCurrent': 40.957, 'rmsVoltage': 123.455, 'vahLifetime': 12904980.692, 'vahToday': 5443650.692, 'varhLagLifetime': -1424407.47, 'varhLagToday': 5048.0, 'varhLeadLifetime': 9309028.193, 'varhLeadToday': 9235408.193, 'wNow': 4407.017, 'whLastSevenDays': 0.0, 'whLifetime': 7197820.664, 'whToday': 0.0, }), dict({ 'apprntPwr': 4988.664, 'pwrFactor': 0.9, 'reactPwr': -535.229, 'rmsCurrent': 40.347, 'rmsVoltage': 123.643, 'vahLifetime': 12826859.692, 'vahToday': 5366803.692, 'varhLagLifetime': -1432495.371, 'varhLagToday': 5066.0, 'varhLeadLifetime': 9392595.906, 'varhLeadToday': 9318985.906, 'wNow': 4477.703, 'whLastSevenDays': 0.0, 'whLifetime': 7915653.393, 'whToday': 0.0, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.89, 'reactPwr': -1380.305, 'readingTime': 1722967003, 'rmsCurrent': 81.305, 'rmsVoltage': 247.098, 'type': 'eim', 'vahLifetime': 25731840.384, 'vahToday': 10810454.384, 'varhLagLifetime': -2856902.841, 'varhLagToday': 10114.0, 'varhLeadLifetime': 18701624.099, 'varhLeadToday': 18554394.099, 'wNow': 8884.72, 'whLastSevenDays': 0.0, 'whLifetime': 15113474.057, 'whToday': 0.0, }), dict({ 'activeCount': 1, 'apprntPwr': 2816.647, 'lines': list([ dict({ 'apprntPwr': 1445.905, 'pwrFactor': 0.59, 'reactPwr': -848.913, 'rmsCurrent': 11.712, 'rmsVoltage': 123.455, 'vahLifetime': 12904980.692, 'vahToday': 0, 'varhLagLifetime': 8801.054, 'varhLagToday': 0, 'varhLeadLifetime': 9410019.992, 'varhLeadToday': 0, 'wNow': 848.37, 'whLastSevenDays': 0, 'whLifetime': 488810.481, 'whToday': 0, }), dict({ 'apprntPwr': 1370.742, 'pwrFactor': 0.67, 'reactPwr': -529.564, 'rmsCurrent': 11.086, 'rmsVoltage': 123.643, 'vahLifetime': 12826859.692, 'vahToday': 0, 'varhLagLifetime': 5083.172, 'varhLagToday': 0, 'varhLeadLifetime': 9489490.013, 'varhLeadToday': 0, 'wNow': 913.254, 'whLastSevenDays': 0, 'whLifetime': 1194249.954, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.63, 'reactPwr': -1378.477, 'readingTime': 1722967003, 'rmsCurrent': 22.798, 'rmsVoltage': 247.098, 'type': 'eim', 'vahLifetime': 25731840.384, 'vahToday': 0, 'varhLagLifetime': 13884.226, 'varhLagToday': 0, 'varhLeadLifetime': 18899510.005, 'varhLeadToday': 0, 'wNow': 1761.624, 'whLastSevenDays': 0, 'whLifetime': 1683060.434, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 35, 'readingTime': 1722966883, 'type': 'inverters', 'wNow': 7012, 'whLifetime': 13504814, }), dict({ 'activeCount': 1, 'apprntPwr': 7230.713, 'lines': list([ dict({ 'apprntPwr': 3612.416, 'pwrFactor': 0.98, 'reactPwr': 3.837, 'rmsCurrent': 29.245, 'rmsVoltage': 123.539, 'vahLifetime': 8841524.726, 'vahToday': 9490.726, 'varhLagLifetime': 1433208.524, 'varhLagToday': 2205.524, 'varhLeadLifetime': 100991.799, 'varhLeadToday': 74.799, 'wNow': 3558.648, 'whLastSevenDays': 6703259.113, 'whLifetime': 6709433.113, 'whToday': 6277.113, }), dict({ 'apprntPwr': 3618.297, 'pwrFactor': 0.99, 'reactPwr': -5.665, 'rmsCurrent': 29.261, 'rmsVoltage': 123.672, 'vahLifetime': 8853504.515, 'vahToday': 9517.515, 'varhLagLifetime': 1437578.543, 'varhLagToday': 2209.543, 'varhLeadLifetime': 96894.107, 'varhLeadToday': 81.107, 'wNow': 3564.449, 'whLastSevenDays': 6715705.553, 'whLifetime': 6721895.553, 'whToday': 6292.553, }), ]), 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': -1.829, 'readingTime': 1722967003, 'rmsCurrent': 58.506, 'rmsVoltage': 247.211, 'type': 'eim', 'vahLifetime': 17695029.241, 'vahToday': 19008.241, 'varhLagLifetime': 2870787.067, 'varhLagToday': 4415.067, 'varhLeadLifetime': 197885.906, 'varhLeadToday': 155.906, 'wNow': 7123.097, 'whLastSevenDays': 13418964.665, 'whLifetime': 13431328.665, 'whToday': 12569.665, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 15113474, 'watt_hours_today': 0, 'watts_now': 8885, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7197821, 'watt_hours_today': 0, 'watts_now': 4407, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7915653, 'watt_hours_today': 0, 'watts_now': 4478, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1683060, 'watt_hours_today': 0, 'watts_now': 1762, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 488810, 'watt_hours_today': 0, 'watts_now': 848, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1194250, 'watt_hours_today': 0, 'watts_now': 913, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 13418965, 'watt_hours_lifetime': 13431329, 'watt_hours_today': 12570, 'watts_now': 7123, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 6703259, 'watt_hours_lifetime': 6709433, 'watt_hours_today': 6277, 'watts_now': 3559, }), : dict({ 'watt_hours_last_7_days': 6715706, 'watt_hours_lifetime': 6721896, 'watt_hours_today': 6293, 'watts_now': 3564, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1722602347', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.36445000767707825, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1722551964', 'mode': , 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': True, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4345_with_device_data] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 199, 'current': 4.066, 'eid': 704643584, 'energy_delivered': 648203, 'energy_received': 883900, 'frequency': 50.062, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.14, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1748577049, 'voltage': 244.228, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 807, 'current': 5.299, 'eid': 704643328, 'energy_delivered': 1243812, 'energy_received': 12, 'frequency': 50.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.654, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1748577049, 'voltage': 244.062, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 0, 'backup_reserve': 0, 'configured_reserve_state_of_charge': 43, 'max_available_capacity': 0, 'reserve_state_of_charge': 43, 'state_of_charge': 0, }), 'encharge_inventory': dict({ }), 'encharge_power': dict({ }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1744816473, 'firmware_version': '2.7.6360_rel/31.33', 'grid_mode': 'grid-tied', 'installed_date': 1744816473, 'last_report_date': 1748577041, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '860-01801-r70', 'serial_number': '122446012073', 'temperature': 76, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '122344043197': dict({ 'ac_current': 1.049, 'ac_frequency': 50.013, 'ac_voltage': 248.156, 'dc_current': 8.078, 'dc_voltage': 32.363, 'energy_produced': 70.875, 'energy_today': 1239, 'last_report_date': 1748576887, 'last_report_duration': 903, 'last_report_watts': 255, 'lifetime_energy': 98412, 'max_report_watts': 371, 'serial_number': '122344043197', 'temperature': 38, }), '122344044368': dict({ 'ac_current': 0.435, 'ac_frequency': 50.019, 'ac_voltage': 246.188, 'dc_current': 2.324, 'dc_voltage': 31.684, 'energy_produced': 21.664, 'energy_today': 773, 'last_report_date': 1748576917, 'last_report_duration': 903, 'last_report_watts': 78, 'lifetime_energy': 72124, 'max_report_watts': 309, 'serial_number': '122344044368', 'temperature': 30, }), '122344044385': dict({ 'ac_current': 0.424, 'ac_frequency': 50.016, 'ac_voltage': 245.906, 'dc_current': 2.598, 'dc_voltage': 31.117, 'energy_produced': 70.944, 'energy_today': 1245, 'last_report_date': 1748576977, 'last_report_duration': 903, 'last_report_watts': 255, 'lifetime_energy': 99861, 'max_report_watts': 370, 'serial_number': '122344044385', 'temperature': 41, }), '122344044392': dict({ 'ac_current': 0.331, 'ac_frequency': 50.026, 'ac_voltage': 245.188, 'dc_current': 1.469, 'dc_voltage': 31.477, 'energy_produced': 66.372, 'energy_today': 992, 'last_report_date': 1748577008, 'last_report_duration': 904, 'last_report_watts': 239, 'lifetime_energy': 92269, 'max_report_watts': 367, 'serial_number': '122344044392', 'temperature': 36, }), '122344044656': dict({ 'ac_current': 0.334, 'ac_frequency': 50.023, 'ac_voltage': 245.563, 'dc_current': 1.488, 'dc_voltage': 31.441, 'energy_produced': 36.06, 'energy_today': 467, 'last_report_date': 1748577037, 'last_report_duration': 903, 'last_report_watts': 130, 'lifetime_energy': 72316, 'max_report_watts': 341, 'serial_number': '122344044656', 'temperature': 35, }), '122344046030': dict({ 'ac_current': 0.379, 'ac_frequency': 50.026, 'ac_voltage': 245.563, 'dc_current': 1.949, 'dc_voltage': 30.504, 'energy_produced': 63.123, 'energy_today': 815, 'last_report_date': 1748577038, 'last_report_duration': 903, 'last_report_watts': 227, 'lifetime_energy': 78621, 'max_report_watts': 349, 'serial_number': '122344046030', 'temperature': 41, }), '122344046450': dict({ 'ac_current': 0.415, 'ac_frequency': 49.988, 'ac_voltage': 245.625, 'dc_current': 2.637, 'dc_voltage': 31.656, 'energy_produced': 23.576, 'energy_today': 751, 'last_report_date': 1748576165, 'last_report_duration': 904, 'last_report_watts': 85, 'lifetime_energy': 72318, 'max_report_watts': 308, 'serial_number': '122344046450', 'temperature': 30, }), '122344046574': dict({ 'ac_current': 0.315, 'ac_frequency': 49.985, 'ac_voltage': 246.188, 'dc_current': 0.789, 'dc_voltage': 33.156, 'energy_produced': 9.541, 'energy_today': 207, 'last_report_date': 1748576166, 'last_report_duration': 904, 'last_report_watts': 34, 'lifetime_energy': 60054, 'max_report_watts': 362, 'serial_number': '122344046574', 'temperature': 27, }), '122344047608': dict({ 'ac_current': 0.358, 'ac_frequency': 49.978, 'ac_voltage': 245.75, 'dc_current': 1.879, 'dc_voltage': 31.922, 'energy_produced': 17.65, 'energy_today': 769, 'last_report_date': 1748576194, 'last_report_duration': 903, 'last_report_watts': 64, 'lifetime_energy': 72994, 'max_report_watts': 299, 'serial_number': '122344047608', 'temperature': 32, }), '122344047620': dict({ 'ac_current': 1.073, 'ac_frequency': 49.977, 'ac_voltage': 247.063, 'dc_current': 8.32, 'dc_voltage': 32.398, 'energy_produced': 64.436, 'energy_today': 979, 'last_report_date': 1748576196, 'last_report_duration': 904, 'last_report_watts': 232, 'lifetime_energy': 95057, 'max_report_watts': 364, 'serial_number': '122344047620', 'temperature': 36, }), '122344047645': dict({ 'ac_current': 1.088, 'ac_frequency': 49.978, 'ac_voltage': 246.5, 'dc_current': 8.527, 'dc_voltage': 32.012, 'energy_produced': 65.47, 'energy_today': 1209, 'last_report_date': 1748576197, 'last_report_duration': 905, 'last_report_watts': 236, 'lifetime_energy': 100072, 'max_report_watts': 365, 'serial_number': '122344047645', 'temperature': 41, }), '122344047687': dict({ 'ac_current': 1.06, 'ac_frequency': 49.977, 'ac_voltage': 246.281, 'dc_current': 8.102, 'dc_voltage': 32.316, 'energy_produced': 63.054, 'energy_today': 1120, 'last_report_date': 1748576224, 'last_report_duration': 903, 'last_report_watts': 227, 'lifetime_energy': 96931, 'max_report_watts': 365, 'serial_number': '122344047687', 'temperature': 36, }), '122344047713': dict({ 'ac_current': 1.068, 'ac_frequency': 49.969, 'ac_voltage': 247.094, 'dc_current': 8.383, 'dc_voltage': 32.133, 'energy_produced': 64.505, 'energy_today': 1199, 'last_report_date': 1748576226, 'last_report_duration': 904, 'last_report_watts': 232, 'lifetime_energy': 99460, 'max_report_watts': 365, 'serial_number': '122344047713', 'temperature': 40, }), '122344047722': dict({ 'ac_current': 1.028, 'ac_frequency': 49.984, 'ac_voltage': 245.344, 'dc_current': 7.902, 'dc_voltage': 32.043, 'energy_produced': 60.08, 'energy_today': 780, 'last_report_date': 1748576255, 'last_report_duration': 904, 'last_report_watts': 216, 'lifetime_energy': 79693, 'max_report_watts': 338, 'serial_number': '122344047722', 'temperature': 39, }), '122344048305': dict({ 'ac_current': 0.417, 'ac_frequency': 49.984, 'ac_voltage': 245.5, 'dc_current': 2.637, 'dc_voltage': 31.953, 'energy_produced': 23.23, 'energy_today': 777, 'last_report_date': 1748576256, 'last_report_duration': 904, 'last_report_watts': 84, 'lifetime_energy': 73997, 'max_report_watts': 324, 'serial_number': '122344048305', 'temperature': 29, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2025-04-16 15:14:25 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 43.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'AUD', }), 'date': '1743840002', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.2579500079154968, 'sell': 0.07000000029802322, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1742364587', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 43.0, 'very_low_soc': 10, }), }), }), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'open', }), dict({ 'id': 'NC2', 'status': 'open', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'grid-tied', 'Enpwr_relay_state_bm': 975, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1744816473, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1744816473, 'img_pnum_running': '2.7.6360_rel/31.33', 'installed': 1744816473, 'last_rpt_date': 1748577041, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '860-01801-r70', 'serial_num': '122446012073', 'temperature': 76, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 0, 'ENC_agg_backup_energy': 0, 'ENC_agg_soc': 0, 'ENC_agg_soh': 0, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 0, 'Enc_max_available_capacity': 0, 'Max_energy': 0, 'VLS_Limit': 10, 'adjusted_backup_soc': 43, 'agg_soc': 0, 'configured_backup_soc': 43, 'freq_bias_hz': 0.0, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 0, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': True, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': 0.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 0, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 1243812.228, 'actEnergyRcvd': 11.6, 'activePower': 807.326, 'apparentEnergy': 1776752.059, 'apparentPower': 1282.057, 'channels': list([ dict({ 'actEnergyDlvd': 1243812.228, 'actEnergyRcvd': 11.6, 'activePower': 807.326, 'apparentEnergy': 1776752.059, 'apparentPower': 1282.057, 'current': 5.299, 'eid': 1778385169, 'freq': 50.062, 'instantaneousDemand': 807.326, 'pwrFactor': 0.654, 'reactEnergyLagg': 255919.503, 'reactEnergyLead': 573233.207, 'reactivePower': -886.389, 'timestamp': 1748577049, 'voltage': 244.062, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1054.214, 'activePower': -0.039, 'apparentEnergy': 663.506, 'apparentPower': 0.388, 'current': 0.182, 'eid': 1778385170, 'freq': 50.062, 'instantaneousDemand': -0.039, 'pwrFactor': 0.0, 'reactEnergyLagg': 127.361, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 2.124, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 2598.312, 'activePower': -0.0, 'apparentEnergy': 49.729, 'apparentPower': 0.0, 'current': -0.0, 'eid': 1778385171, 'freq': 50.062, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 127.222, 'reactEnergyLead': 0.015, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 3.045, }), ]), 'current': 5.299, 'eid': 704643328, 'freq': 50.062, 'instantaneousDemand': 807.326, 'pwrFactor': 0.654, 'reactEnergyLagg': 255919.503, 'reactEnergyLead': 573233.207, 'reactivePower': -886.389, 'timestamp': 1748577049, 'voltage': 244.062, }), dict({ 'actEnergyDlvd': 648203.353, 'actEnergyRcvd': 883899.646, 'activePower': 199.234, 'apparentEnergy': 2017963.73, 'apparentPower': 993.877, 'channels': list([ dict({ 'actEnergyDlvd': 648203.353, 'actEnergyRcvd': 883899.646, 'activePower': 199.234, 'apparentEnergy': 2017963.73, 'apparentPower': 993.877, 'current': 4.066, 'eid': 1778385425, 'freq': 50.062, 'instantaneousDemand': 199.234, 'pwrFactor': 0.14, 'reactEnergyLagg': 430154.145, 'reactEnergyLead': 463468.848, 'reactivePower': 906.056, 'timestamp': 1748577049, 'voltage': 244.228, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 2171.834, 'activePower': -0.236, 'apparentEnergy': 1754.876, 'apparentPower': 1.01, 'current': 0.166, 'eid': 1778385426, 'freq': 50.062, 'instantaneousDemand': -0.236, 'pwrFactor': 0.0, 'reactEnergyLagg': 122.318, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 6.082, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 3397.655, 'activePower': 0.0, 'apparentEnergy': 60.378, 'apparentPower': 0.0, 'current': -0.0, 'eid': 1778385427, 'freq': 50.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 121.108, 'reactEnergyLead': 0.038, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 5.672, }), ]), 'current': 4.066, 'eid': 704643584, 'freq': 50.062, 'instantaneousDemand': 199.234, 'pwrFactor': 0.14, 'reactEnergyLagg': 430154.145, 'reactEnergyLead': 463468.848, 'reactivePower': 906.056, 'timestamp': 1748577049, 'voltage': 244.228, }), ]), '/ivp/pdm/device_data': dict({ '553648384': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390225, 'created': 1748576887, 'lastReading': dict({ 'acCurrentInmA': 1049, 'acFrequencyINmHz': 50013, 'acVoltageINmV': 248156, 'channelTemp': 38, 'dcCurrentINmA': 8078, 'dcVoltageINmV': 32363, 'duration': 903, 'eid': 1627390225, 'endDate': 1748576887, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 68, 'joulesProduced': 230400, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834453, 'duration': 6124463, 'joulesProduced': 354281850, }), 'wattHours': dict({ 'today': 1239, 'week': 7466, 'yesterday': 455, }), 'watts': dict({ 'max': 371, 'now': 255, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344043197', }), '553648640': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390481, 'created': 1748576917, 'lastReading': dict({ 'acCurrentInmA': 435, 'acFrequencyINmHz': 50019, 'acVoltageINmV': 246188, 'channelTemp': 30, 'dcCurrentINmA': 2324, 'dcVoltageINmV': 31684, 'duration': 903, 'eid': 1627390481, 'endDate': 1748576917, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 70425, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834377, 'duration': 6125538, 'joulesProduced': 259647525, }), 'wattHours': dict({ 'today': 773, 'week': 5129, 'yesterday': 447, }), 'watts': dict({ 'max': 309, 'now': 78, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044368', }), '553648896': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390737, 'created': 1748576977, 'lastReading': dict({ 'acCurrentInmA': 424, 'acFrequencyINmHz': 50016, 'acVoltageINmV': 245906, 'channelTemp': 41, 'dcCurrentINmA': 2598, 'dcVoltageINmV': 31117, 'duration': 903, 'eid': 1627390737, 'endDate': 1748576977, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 76, 'joulesProduced': 230625, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834457, 'duration': 6124361, 'joulesProduced': 359500950, }), 'wattHours': dict({ 'today': 1245, 'week': 7778, 'yesterday': 459, }), 'watts': dict({ 'max': 370, 'now': 255, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044385', }), '553649152': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390993, 'created': 1748577008, 'lastReading': dict({ 'acCurrentInmA': 331, 'acFrequencyINmHz': 50026, 'acVoltageINmV': 245188, 'channelTemp': 36, 'dcCurrentINmA': 1469, 'dcVoltageINmV': 31477, 'duration': 904, 'eid': 1627390993, 'endDate': 1748577008, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 216000, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 37, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834459, 'duration': 6124386, 'joulesProduced': 332167725, }), 'wattHours': dict({ 'today': 992, 'week': 6099, 'yesterday': 435, }), 'watts': dict({ 'max': 367, 'now': 239, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044392', }), '553649408': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391249, 'created': 1748577037, 'lastReading': dict({ 'acCurrentInmA': 334, 'acFrequencyINmHz': 50023, 'acVoltageINmV': 245563, 'channelTemp': 35, 'dcCurrentINmA': 1488, 'dcVoltageINmV': 31441, 'duration': 903, 'eid': 1627391249, 'endDate': 1748577037, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 72, 'joulesProduced': 117225, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834609, 'duration': 6124491, 'joulesProduced': 260339400, }), 'wattHours': dict({ 'today': 467, 'week': 3714, 'yesterday': 405, }), 'watts': dict({ 'max': 341, 'now': 130, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044656', }), '553649664': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391505, 'created': 1748577038, 'lastReading': dict({ 'acCurrentInmA': 379, 'acFrequencyINmHz': 50026, 'acVoltageINmV': 245563, 'channelTemp': 41, 'dcCurrentINmA': 1949, 'dcVoltageINmV': 30504, 'duration': 903, 'eid': 1627391505, 'endDate': 1748577038, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 205200, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 40, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834598, 'duration': 6124485, 'joulesProduced': 283035600, }), 'wattHours': dict({ 'today': 815, 'week': 5251, 'yesterday': 416, }), 'watts': dict({ 'max': 349, 'now': 227, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046030', }), '553649920': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391761, 'created': 1748576165, 'lastReading': dict({ 'acCurrentInmA': 415, 'acFrequencyINmHz': 49988, 'acVoltageINmV': 245625, 'channelTemp': 30, 'dcCurrentINmA': 2637, 'dcVoltageINmV': 31656, 'duration': 904, 'eid': 1627391761, 'endDate': 1748576165, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 76725, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834388, 'duration': 6124702, 'joulesProduced': 260345025, }), 'wattHours': dict({ 'today': 751, 'week': 5036, 'yesterday': 444, }), 'watts': dict({ 'max': 308, 'now': 85, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046450', }), '553650176': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392017, 'created': 1748576166, 'lastReading': dict({ 'acCurrentInmA': 315, 'acFrequencyINmHz': 49985, 'acVoltageINmV': 246188, 'channelTemp': 27, 'dcCurrentINmA': 789, 'dcVoltageINmV': 33156, 'duration': 904, 'eid': 1627392017, 'endDate': 1748576166, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 31050, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834506, 'duration': 6123681, 'joulesProduced': 216194625, }), 'wattHours': dict({ 'today': 207, 'week': 2283, 'yesterday': 380, }), 'watts': dict({ 'max': 362, 'now': 34, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046574', }), '553650432': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392273, 'created': 1748576194, 'lastReading': dict({ 'acCurrentInmA': 358, 'acFrequencyINmHz': 49978, 'acVoltageINmV': 245750, 'channelTemp': 32, 'dcCurrentINmA': 1879, 'dcVoltageINmV': 31922, 'duration': 903, 'eid': 1627392273, 'endDate': 1748576194, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 78, 'joulesProduced': 57375, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834414, 'duration': 6123760, 'joulesProduced': 262778625, }), 'wattHours': dict({ 'today': 769, 'week': 5048, 'yesterday': 443, }), 'watts': dict({ 'max': 299, 'now': 64, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047608', }), '553650688': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392529, 'created': 1748576196, 'lastReading': dict({ 'acCurrentInmA': 1073, 'acFrequencyINmHz': 49977, 'acVoltageINmV': 247063, 'channelTemp': 36, 'dcCurrentINmA': 8320, 'dcVoltageINmV': 32398, 'duration': 904, 'eid': 1627392529, 'endDate': 1748576196, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 209700, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834482, 'duration': 6123650, 'joulesProduced': 342205650, }), 'wattHours': dict({ 'today': 979, 'week': 6393, 'yesterday': 438, }), 'watts': dict({ 'max': 364, 'now': 232, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047620', }), '553650944': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392785, 'created': 1748576197, 'lastReading': dict({ 'acCurrentInmA': 1088, 'acFrequencyINmHz': 49978, 'acVoltageINmV': 246500, 'channelTemp': 41, 'dcCurrentINmA': 8527, 'dcVoltageINmV': 32012, 'duration': 905, 'eid': 1627392785, 'endDate': 1748576197, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 213300, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834445, 'duration': 6123908, 'joulesProduced': 360257400, }), 'wattHours': dict({ 'today': 1209, 'week': 7838, 'yesterday': 467, }), 'watts': dict({ 'max': 365, 'now': 236, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047645', }), '553651200': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393041, 'created': 1748576224, 'lastReading': dict({ 'acCurrentInmA': 1060, 'acFrequencyINmHz': 49977, 'acVoltageINmV': 246281, 'channelTemp': 36, 'dcCurrentINmA': 8102, 'dcVoltageINmV': 32316, 'duration': 903, 'eid': 1627393041, 'endDate': 1748576224, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 204975, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834485, 'duration': 6123654, 'joulesProduced': 348953175, }), 'wattHours': dict({ 'today': 1120, 'week': 7235, 'yesterday': 447, }), 'watts': dict({ 'max': 365, 'now': 227, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047687', }), '553651456': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393297, 'created': 1748576226, 'lastReading': dict({ 'acCurrentInmA': 1068, 'acFrequencyINmHz': 49969, 'acVoltageINmV': 247094, 'channelTemp': 40, 'dcCurrentINmA': 8383, 'dcVoltageINmV': 32133, 'duration': 904, 'eid': 1627393297, 'endDate': 1748576226, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 209925, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834446, 'duration': 6123674, 'joulesProduced': 358057125, }), 'wattHours': dict({ 'today': 1199, 'week': 7769, 'yesterday': 462, }), 'watts': dict({ 'max': 365, 'now': 232, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047713', }), '553651712': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393553, 'created': 1748576255, 'lastReading': dict({ 'acCurrentInmA': 1028, 'acFrequencyINmHz': 49984, 'acVoltageINmV': 245344, 'channelTemp': 39, 'dcCurrentINmA': 7902, 'dcVoltageINmV': 32043, 'duration': 904, 'eid': 1627393553, 'endDate': 1748576255, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 195525, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834580, 'duration': 6123492, 'joulesProduced': 286893675, }), 'wattHours': dict({ 'today': 780, 'week': 5471, 'yesterday': 426, }), 'watts': dict({ 'max': 338, 'now': 216, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047722', }), '553651968': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393809, 'created': 1748576256, 'lastReading': dict({ 'acCurrentInmA': 417, 'acFrequencyINmHz': 49984, 'acVoltageINmV': 245500, 'channelTemp': 29, 'dcCurrentINmA': 2637, 'dcVoltageINmV': 31953, 'duration': 904, 'eid': 1627393809, 'endDate': 1748576256, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 75600, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834361, 'duration': 6124139, 'joulesProduced': 266390550, }), 'wattHours': dict({ 'today': 777, 'week': 5130, 'yesterday': 453, }), 'watts': dict({ 'max': 324, 'now': 84, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344048305', }), '704643328': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1778385169, 'created': 1748576700, 'lastReading': dict({ 'curr_w': 2675, 'duration': 900, 'eid': 1778385169, 'endDate': 1748576700, 'freq_mhz': 50000, 'interval_type': 0, 'rms_mamp': 12045, 'rms_mvolt': 246790, 'vah_cum': 1776512, 'varh_lag_cum': 255919, 'varh_lead_cum': 573128, 'wh_dlvd_cum': 1243605, 'wh_neg': 11, 'wh_pos': 1243605, }), 'lifetime': dict({ 'createdTime': 1744817400, 'duration': 6212100, 'vah_cum': 1776512, 'varh_lag_cum': 255919, 'varh_lead_cum': 573128, 'wh_dlvd_cum': 1243605, }), 'wattHours': dict({ 'today': 13233, 'week': 86068, 'yesterday': 6432, }), 'watts': dict({ 'max': 5171, 'now': 2675, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385170, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385171, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), ]), 'devName': 'eim', 'modGone': True, 'sn': '122446001637EIM1', }), '704643584': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1778385425, 'created': 1748576700, 'lastReading': dict({ 'curr_w': 419, 'duration': 900, 'eid': 1778385425, 'endDate': 1748576700, 'freq_mhz': 50062, 'interval_type': 0, 'rms_mamp': 1974, 'rms_mvolt': 246944, 'vah_cum': 2017794, 'varh_lag_cum': 174130, 'varh_lead_cum': -109660, 'wh_dlvd_cum': 1007981, 'wh_neg': 883785, 'wh_pos': 648196, }), 'lifetime': dict({ 'createdTime': 1744817400, 'duration': 6211500, 'vah_cum': 2017794, 'varh_lag_cum': 174130, 'varh_lead_cum': -109660, 'wh_dlvd_cum': 1007981, }), 'wattHours': dict({ 'today': 14467, 'week': 136796, 'yesterday': 25760, }), 'watts': dict({ 'max': 5726, 'now': 419, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385426, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385427, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), ]), 'devName': 'eim', 'modGone': True, 'sn': '122446001637EIM2', }), 'deviceCount': 17, 'deviceDataLimit': 50, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2265.958, 'measurementType': 'total-consumption', 'pwrFactor': 0.45, 'reactPwr': 19.832, 'readingTime': 1748577048, 'rmsCurrent': 9.279, 'rmsVoltage': 244.195, 'type': 'eim', 'vahLifetime': 2017963.456, 'vahToday': 16554.456, 'varhLagLifetime': 174234.39, 'varhLagToday': 670.39, 'varhLeadLifetime': -109764.113, 'varhLeadToday': 0.0, 'wNow': 1008.957, 'whLastSevenDays': 136895.923, 'whLifetime': 1008080.923, 'whToday': 14566.923, }), dict({ 'activeCount': 1, 'apprntPwr': 996.717, 'measurementType': 'net-consumption', 'pwrFactor': 0.23, 'reactPwr': 898.838, 'readingTime': 1748577048, 'rmsCurrent': 4.082, 'rmsVoltage': 244.195, 'type': 'eim', 'vahLifetime': 2017963.456, 'vahToday': 0, 'varhLagLifetime': 430153.893, 'varhLagToday': 0, 'varhLeadLifetime': 463468.848, 'varhLeadToday': 0, 'wNow': 231.561, 'whLastSevenDays': 0, 'whLifetime': -235661.6, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 15, 'readingTime': 1748577038, 'type': 'inverters', 'wNow': 2594, 'whLifetime': 1264180, }), dict({ 'activeCount': 1, 'apprntPwr': 1258.19, 'measurementType': 'production', 'pwrFactor': 0.63, 'reactPwr': -879.006, 'readingTime': 1748577048, 'rmsCurrent': 5.198, 'rmsVoltage': 243.975, 'type': 'eim', 'vahLifetime': 1776751.697, 'vahToday': 16484.697, 'varhLagLifetime': 255919.503, 'varhLagToday': 1824.503, 'varhLeadLifetime': 573232.961, 'varhLeadToday': 3458.961, 'wNow': 777.395, 'whLastSevenDays': 86274.993, 'whLifetime': 1243811.993, 'whToday': 13439.993, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 136896, 'watt_hours_lifetime': 1008081, 'watt_hours_today': 14567, 'watts_now': 1009, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': -235662, 'watt_hours_today': 0, 'watts_now': 232, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 86275, 'watt_hours_lifetime': 1243812, 'watt_hours_today': 13440, 'watts_now': 777, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'AUD', }), 'date': '1743840002', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.2579500079154968, 'sell': 0.07000000029802322, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1742364587', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 43.0, 'very_low_soc': 10, }), }), }) # --- pyenphase-2.3.1/tests/__snapshots__/test_ensemble.ambr000066400000000000000000030175661505013723300232060ustar00rootroot00000000000000# serializer version: 1 # name: test_with_7_x_firmware[4.10.35] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 567, 'current': 8.389, 'eid': 704643584, 'energy_delivered': 16908209, 'energy_received': 17357690, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.5, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.736, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 394, 'current': 5.208, 'eid': 1778385425, 'energy_delivered': 10220652, 'energy_received': 8001772, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.549, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.867, }), : dict({ 'active_power': 173, 'current': 3.181, 'eid': 1778385426, 'energy_delivered': 6687557, 'energy_received': 9355918, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.426, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.869, }), }), 'ctmeter_production': dict({ 'active_power': 166, 'current': 3.692, 'eid': 704643328, 'energy_delivered': 26785327, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.394, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.659, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 83, 'current': 1.844, 'eid': 1778385169, 'energy_delivered': 13398798, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.4, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.824, }), : dict({ 'active_power': 84, 'current': 1.848, 'eid': 1778385170, 'energy_delivered': 13386530, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.387, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.836, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122002010484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301305, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002010484', 'temperature': None, }), '122002010488': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301325, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010488', 'temperature': None, }), '122002010489': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301317, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002010489', 'temperature': None, }), '122002010577': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301322, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010577', 'temperature': None, }), '122002011248': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 227, 'serial_number': '122002011248', 'temperature': None, }), '122002017614': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301321, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 294, 'serial_number': '122002017614', 'temperature': None, }), '122002017669': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002017669', 'temperature': None, }), '122002021078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301323, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002021078', 'temperature': None, }), '122002021258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021258', 'temperature': None, }), '122002021381': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301308, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021381', 'temperature': None, }), '122002026181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301309, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 287, 'serial_number': '122002026181', 'temperature': None, }), '122002026190': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301313, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122002026190', 'temperature': None, }), '122002027876': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301332, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002027876', 'temperature': None, }), '122002040286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '122002040286', 'temperature': None, }), '122002041618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301318, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '122002041618', 'temperature': None, }), '122002041621': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301310, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 197, 'serial_number': '122002041621', 'temperature': None, }), '122002041626': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002041626', 'temperature': None, }), '122002041636': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301319, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002041636', 'temperature': None, }), '122002041638': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122002041638', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'date': '2023-05-11 19:46:56 UTC', 'source': 'Tariff', 'version': '00.00.01', }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'single_rate': dict({ 'rate': 0.21835, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695301309, 'lastReportWatts': 13, 'maxReportWatts': 287, 'serialNumber': '122002026181', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 299, 'serialNumber': '122002040286', }), dict({ 'devType': 1, 'lastReportDate': 1695301305, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002010484', }), dict({ 'devType': 1, 'lastReportDate': 1695301313, 'lastReportWatts': 13, 'maxReportWatts': 289, 'serialNumber': '122002026190', }), dict({ 'devType': 1, 'lastReportDate': 1695301318, 'lastReportWatts': 13, 'maxReportWatts': 292, 'serialNumber': '122002041618', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021258', }), dict({ 'devType': 1, 'lastReportDate': 1695301325, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010488', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002041626', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 12, 'maxReportWatts': 305, 'serialNumber': '122002017669', }), dict({ 'devType': 1, 'lastReportDate': 1695301321, 'lastReportWatts': 13, 'maxReportWatts': 294, 'serialNumber': '122002017614', }), dict({ 'devType': 1, 'lastReportDate': 1695301332, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002027876', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 227, 'serialNumber': '122002011248', }), dict({ 'devType': 1, 'lastReportDate': 1695301323, 'lastReportWatts': 12, 'maxReportWatts': 306, 'serialNumber': '122002021078', }), dict({ 'devType': 1, 'lastReportDate': 1695301308, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021381', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122002041638', }), dict({ 'devType': 1, 'lastReportDate': 1695301319, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002041636', }), dict({ 'devType': 1, 'lastReportDate': 1695301310, 'lastReportWatts': 13, 'maxReportWatts': 197, 'serialNumber': '122002041621', }), dict({ 'devType': 1, 'lastReportDate': 1695301317, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002010489', }), dict({ 'devType': 1, 'lastReportDate': 1695301322, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010577', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 26785327.449, 'actEnergyRcvd': 0.001, 'activePower': 166.489, 'apparentEnergy': 33655488.016, 'apparentPower': 457.211, 'channels': list([ dict({ 'actEnergyDlvd': 13398797.544, 'actEnergyRcvd': 0.001, 'activePower': 82.913, 'apparentEnergy': 16836537.224, 'apparentPower': 228.406, 'current': 1.844, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 82.913, 'pwrFactor': 0.4, 'reactEnergyLagg': 5169167.875, 'reactEnergyLead': 0.0, 'reactivePower': 191.751, 'timestamp': 1695301419, 'voltage': 123.824, }), dict({ 'actEnergyDlvd': 13386529.904, 'actEnergyRcvd': 0.0, 'activePower': 83.576, 'apparentEnergy': 16818950.792, 'apparentPower': 228.804, 'current': 1.848, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 83.576, 'pwrFactor': 0.387, 'reactEnergyLagg': 5122825.568, 'reactEnergyLead': 0.001, 'reactivePower': 191.574, 'timestamp': 1695301419, 'voltage': 123.836, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 3.692, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 166.489, 'pwrFactor': 0.394, 'reactEnergyLagg': 10291993.443, 'reactEnergyLead': 0.001, 'reactivePower': 383.325, 'timestamp': 1695301419, 'voltage': 247.659, }), dict({ 'actEnergyDlvd': 16908208.78, 'actEnergyRcvd': 17357690.272, 'activePower': 566.864, 'apparentEnergy': 41943778.605, 'apparentPower': 1063.035, 'channels': list([ dict({ 'actEnergyDlvd': 10220652.219, 'actEnergyRcvd': 8001771.78, 'activePower': 393.965, 'apparentEnergy': 22610499.739, 'apparentPower': 668.739, 'current': 5.208, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 393.965, 'pwrFactor': 0.549, 'reactEnergyLagg': 87750.153, 'reactEnergyLead': 7841689.25, 'reactivePower': -337.072, 'timestamp': 1695301419, 'voltage': 123.867, }), dict({ 'actEnergyDlvd': 6687556.561, 'actEnergyRcvd': 9355918.492, 'activePower': 172.899, 'apparentEnergy': 19333278.866, 'apparentPower': 394.296, 'current': 3.181, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 172.899, 'pwrFactor': 0.426, 'reactEnergyLagg': 455469.296, 'reactEnergyLead': 5687697.556, 'reactivePower': -243.946, 'timestamp': 1695301419, 'voltage': 123.869, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 8.389, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 566.864, 'pwrFactor': 0.5, 'reactEnergyLagg': 543219.449, 'reactEnergyLead': 13529386.807, 'reactivePower': -581.018, 'timestamp': 1695301419, 'voltage': 247.736, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3189.788, 'measurementType': 'total-consumption', 'pwrFactor': 0.25, 'reactPwr': -959.115, 'readingTime': 1695301418, 'rmsCurrent': 12.88, 'rmsVoltage': 247.663, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 9709.997, 'varhLagLifetime': 10835212.67, 'varhLagToday': 3120.67, 'varhLeadLifetime': 13529386.465, 'varhLeadToday': 4281.465, 'wNow': 806.405, 'whLastSevenDays': 163075.411, 'whLifetime': 26335790.411, 'whToday': 7412.411, }), dict({ 'activeCount': 1, 'apprntPwr': 1155.626, 'measurementType': 'net-consumption', 'pwrFactor': 0.53, 'reactPwr': -577.46, 'readingTime': 1695301418, 'rmsCurrent': 9.195, 'rmsVoltage': 247.696, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 0, 'varhLagLifetime': 543219.449, 'varhLagToday': 0, 'varhLeadLifetime': 13529386.464, 'varhLeadToday': 0, 'wNow': 640.874, 'whLastSevenDays': 0, 'whLifetime': 16908208.46, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 19, 'readingTime': 1695301333, 'type': 'inverters', 'wNow': 246, 'whLifetime': 26890410, }), dict({ 'activeCount': 1, 'apprntPwr': 457.492, 'measurementType': 'production', 'pwrFactor': 0.35, 'reactPwr': 381.654, 'readingTime': 1695301418, 'rmsCurrent': 3.685, 'rmsVoltage': 247.631, 'type': 'eim', 'vahLifetime': 33655487.75, 'vahToday': 3288.75, 'varhLagLifetime': 10291993.22, 'varhLagToday': 3108.22, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 165.53, 'whLastSevenDays': 179155.351, 'whLifetime': 26785327.351, 'whToday': 139.351, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 163075, 'watt_hours_lifetime': 26335790, 'watt_hours_today': 7412, 'watts_now': 806, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 16908208, 'watt_hours_today': 0, 'watts_now': 641, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 179155, 'watt_hours_lifetime': 26785327, 'watt_hours_today': 139, 'watts_now': 166, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': None, 'logger': None, 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'seasons_sell': None, 'single_rate': dict({ 'rate': 0.21835, }), 'storage_settings': None, }), }) # --- # name: test_with_7_x_firmware[5.0.62] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121547055830': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554884, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547055830', 'temperature': None, }), '121547059008': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554837, 'last_report_duration': None, 'last_report_watts': 203, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059008', 'temperature': None, }), '121547059079': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554838, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059079', 'temperature': None, }), '121547059102': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554873, 'last_report_duration': None, 'last_report_watts': 159, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059102', 'temperature': None, }), '121547059107': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554863, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059107', 'temperature': None, }), '121547059108': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554865, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059108', 'temperature': None, }), '121547059112': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554890, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059112', 'temperature': None, }), '121547059128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554858, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059128', 'temperature': None, }), '121547059193': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554845, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547059193', 'temperature': None, }), '121547059202': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554848, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '121547059202', 'temperature': None, }), '121547059217': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554886, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059217', 'temperature': None, }), '121547059253': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554896, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059253', 'temperature': None, }), '121547059333': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554877, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059333', 'temperature': None, }), '121547059354': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554892, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 250, 'serial_number': '121547059354', 'temperature': None, }), '121547059355': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554861, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059355', 'temperature': None, }), '121547059357': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554850, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547059357', 'temperature': None, }), '121547059359': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554843, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059359', 'temperature': None, }), '121547059360': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554839, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059360', 'temperature': None, }), '121547059363': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554852, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547059363', 'temperature': None, }), '121547059381': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554856, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059381', 'temperature': None, }), '121547059889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554862, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059889', 'temperature': None, }), '121547060383': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554853, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547060383', 'temperature': None, }), '121547060384': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554845, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060384', 'temperature': None, }), '121547060392': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554895, 'last_report_duration': None, 'last_report_watts': 208, 'lifetime_energy': None, 'max_report_watts': 250, 'serial_number': '121547060392', 'temperature': None, }), '121547060396': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554867, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060396', 'temperature': None, }), '121547060412': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554855, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 220, 'serial_number': '121547060412', 'temperature': None, }), '121547060415': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554866, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060415', 'temperature': None, }), '121547060590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554881, 'last_report_duration': None, 'last_report_watts': 180, 'lifetime_energy': None, 'max_report_watts': 234, 'serial_number': '121547060590', 'temperature': None, }), '121547060592': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554881, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547060592', 'temperature': None, }), '121547060593': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554871, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060593', 'temperature': None, }), '121547060643': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554888, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060643', 'temperature': None, }), '121547060647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554890, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060647', 'temperature': None, }), '121547060650': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554848, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547060650', 'temperature': None, }), '121547060670': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554870, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '121547060670', 'temperature': None, }), '121547060671': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554887, 'last_report_duration': None, 'last_report_watts': 60, 'lifetime_energy': None, 'max_report_watts': 224, 'serial_number': '121547060671', 'temperature': None, }), '121547060727': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554877, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060727', 'temperature': None, }), '121547060758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554874, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 240, 'serial_number': '121547060758', 'temperature': None, }), '121547060761': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554857, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547060761', 'temperature': None, }), '121547060766': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554837, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547060766', 'temperature': None, }), '121547060773': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554841, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547060773', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'date': '2023-08-10 17:59:03 UTC', 'source': 'Tariff', 'version': '00.00.02', }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), }), }), '/api/v1/production': dict({ 'wattHoursLifetime': 133798553, 'wattHoursSevenDays': 366671, 'wattHoursToday': 20161, 'wattsNow': 7907, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694554838, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547059079', }), dict({ 'devType': 1, 'lastReportDate': 1694554845, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '121547059193', }), dict({ 'devType': 1, 'lastReportDate': 1694554839, 'lastReportWatts': 204, 'maxReportWatts': 246, 'serialNumber': '121547059360', }), dict({ 'devType': 1, 'lastReportDate': 1694554845, 'lastReportWatts': 206, 'maxReportWatts': 248, 'serialNumber': '121547060384', }), dict({ 'devType': 1, 'lastReportDate': 1694554852, 'lastReportWatts': 198, 'maxReportWatts': 242, 'serialNumber': '121547059363', }), dict({ 'devType': 1, 'lastReportDate': 1694554848, 'lastReportWatts': 199, 'maxReportWatts': 242, 'serialNumber': '121547060650', }), dict({ 'devType': 1, 'lastReportDate': 1694554858, 'lastReportWatts': 204, 'maxReportWatts': 248, 'serialNumber': '121547059128', }), dict({ 'devType': 1, 'lastReportDate': 1694554865, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547059108', }), dict({ 'devType': 1, 'lastReportDate': 1694554871, 'lastReportWatts': 206, 'maxReportWatts': 248, 'serialNumber': '121547060593', }), dict({ 'devType': 1, 'lastReportDate': 1694554873, 'lastReportWatts': 159, 'maxReportWatts': 247, 'serialNumber': '121547059102', }), dict({ 'devType': 1, 'lastReportDate': 1694554881, 'lastReportWatts': 180, 'maxReportWatts': 234, 'serialNumber': '121547060590', }), dict({ 'devType': 1, 'lastReportDate': 1694554887, 'lastReportWatts': 60, 'maxReportWatts': 224, 'serialNumber': '121547060671', }), dict({ 'devType': 1, 'lastReportDate': 1694554892, 'lastReportWatts': 206, 'maxReportWatts': 250, 'serialNumber': '121547059354', }), dict({ 'devType': 1, 'lastReportDate': 1694554896, 'lastReportWatts': 202, 'maxReportWatts': 249, 'serialNumber': '121547059253', }), dict({ 'devType': 1, 'lastReportDate': 1694554895, 'lastReportWatts': 208, 'maxReportWatts': 250, 'serialNumber': '121547060392', }), dict({ 'devType': 1, 'lastReportDate': 1694554890, 'lastReportWatts': 200, 'maxReportWatts': 248, 'serialNumber': '121547059112', }), dict({ 'devType': 1, 'lastReportDate': 1694554890, 'lastReportWatts': 207, 'maxReportWatts': 249, 'serialNumber': '121547060647', }), dict({ 'devType': 1, 'lastReportDate': 1694554888, 'lastReportWatts': 200, 'maxReportWatts': 248, 'serialNumber': '121547060643', }), dict({ 'devType': 1, 'lastReportDate': 1694554886, 'lastReportWatts': 210, 'maxReportWatts': 249, 'serialNumber': '121547059217', }), dict({ 'devType': 1, 'lastReportDate': 1694554884, 'lastReportWatts': 201, 'maxReportWatts': 247, 'serialNumber': '121547055830', }), dict({ 'devType': 1, 'lastReportDate': 1694554881, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547060592', }), dict({ 'devType': 1, 'lastReportDate': 1694554874, 'lastReportWatts': 197, 'maxReportWatts': 240, 'serialNumber': '121547060758', }), dict({ 'devType': 1, 'lastReportDate': 1694554877, 'lastReportWatts': 202, 'maxReportWatts': 248, 'serialNumber': '121547059333', }), dict({ 'devType': 1, 'lastReportDate': 1694554877, 'lastReportWatts': 204, 'maxReportWatts': 249, 'serialNumber': '121547060727', }), dict({ 'devType': 1, 'lastReportDate': 1694554837, 'lastReportWatts': 203, 'maxReportWatts': 247, 'serialNumber': '121547059008', }), dict({ 'devType': 1, 'lastReportDate': 1694554841, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547060773', }), dict({ 'devType': 1, 'lastReportDate': 1694554848, 'lastReportWatts': 200, 'maxReportWatts': 243, 'serialNumber': '121547059202', }), dict({ 'devType': 1, 'lastReportDate': 1694554857, 'lastReportWatts': 202, 'maxReportWatts': 244, 'serialNumber': '121547060761', }), dict({ 'devType': 1, 'lastReportDate': 1694554855, 'lastReportWatts': 197, 'maxReportWatts': 220, 'serialNumber': '121547060412', }), dict({ 'devType': 1, 'lastReportDate': 1694554861, 'lastReportWatts': 207, 'maxReportWatts': 249, 'serialNumber': '121547059355', }), dict({ 'devType': 1, 'lastReportDate': 1694554866, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547060415', }), dict({ 'devType': 1, 'lastReportDate': 1694554870, 'lastReportWatts': 199, 'maxReportWatts': 243, 'serialNumber': '121547060670', }), dict({ 'devType': 1, 'lastReportDate': 1694554867, 'lastReportWatts': 205, 'maxReportWatts': 248, 'serialNumber': '121547060396', }), dict({ 'devType': 1, 'lastReportDate': 1694554863, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547059107', }), dict({ 'devType': 1, 'lastReportDate': 1694554862, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547059889', }), dict({ 'devType': 1, 'lastReportDate': 1694554853, 'lastReportWatts': 204, 'maxReportWatts': 246, 'serialNumber': '121547060383', }), dict({ 'devType': 1, 'lastReportDate': 1694554837, 'lastReportWatts': 202, 'maxReportWatts': 244, 'serialNumber': '121547060766', }), dict({ 'devType': 1, 'lastReportDate': 1694554843, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547059359', }), dict({ 'devType': 1, 'lastReportDate': 1694554850, 'lastReportWatts': 201, 'maxReportWatts': 242, 'serialNumber': '121547059357', }), dict({ 'devType': 1, 'lastReportDate': 1694554856, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547059381', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 366671, 'watt_hours_lifetime': 133798553, 'watt_hours_today': 20161, 'watts_now': 7907, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': None, 'logger': None, 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': None, }), }) # --- # name: test_with_7_x_firmware[7.3.130] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202218023114': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342554, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218023114', 'temperature': None, }), '202218024705': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342553, 'last_report_duration': None, 'last_report_watts': 8, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218024705', 'temperature': None, }), '202218025399': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342465, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 350, 'serial_number': '202218025399', 'temperature': None, }), '202218026521': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342464, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218026521', 'temperature': None, }), '202218028926': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342462, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218028926', 'temperature': None, }), '202218029586': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342643, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218029586', 'temperature': None, }), '202218031593': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342674, 'last_report_duration': None, 'last_report_watts': 20, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218031593', 'temperature': None, }), '202218034002': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342555, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218034002', 'temperature': None, }), '202218035988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342613, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218035988', 'temperature': None, }), '202218036214': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342432, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218036214', 'temperature': None, }), '202218036386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342584, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218036386', 'temperature': None, }), '202218037990': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342525, 'last_report_duration': None, 'last_report_watts': 16, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218037990', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691342432, 'lastReportWatts': 13, 'maxReportWatts': 347, 'serialNumber': '202218036214', }), dict({ 'devType': 1, 'lastReportDate': 1691342462, 'lastReportWatts': 17, 'maxReportWatts': 346, 'serialNumber': '202218028926', }), dict({ 'devType': 1, 'lastReportDate': 1691342643, 'lastReportWatts': 12, 'maxReportWatts': 347, 'serialNumber': '202218029586', }), dict({ 'devType': 1, 'lastReportDate': 1691342613, 'lastReportWatts': 17, 'maxReportWatts': 348, 'serialNumber': '202218035988', }), dict({ 'devType': 1, 'lastReportDate': 1691342553, 'lastReportWatts': 8, 'maxReportWatts': 345, 'serialNumber': '202218024705', }), dict({ 'devType': 1, 'lastReportDate': 1691342554, 'lastReportWatts': 14, 'maxReportWatts': 346, 'serialNumber': '202218023114', }), dict({ 'devType': 1, 'lastReportDate': 1691342525, 'lastReportWatts': 16, 'maxReportWatts': 348, 'serialNumber': '202218037990', }), dict({ 'devType': 1, 'lastReportDate': 1691342555, 'lastReportWatts': 14, 'maxReportWatts': 345, 'serialNumber': '202218034002', }), dict({ 'devType': 1, 'lastReportDate': 1691342464, 'lastReportWatts': 9, 'maxReportWatts': 347, 'serialNumber': '202218026521', }), dict({ 'devType': 1, 'lastReportDate': 1691342465, 'lastReportWatts': 10, 'maxReportWatts': 350, 'serialNumber': '202218025399', }), dict({ 'devType': 1, 'lastReportDate': 1691342584, 'lastReportWatts': 9, 'maxReportWatts': 346, 'serialNumber': '202218036386', }), dict({ 'devType': 1, 'lastReportDate': 1691342674, 'lastReportWatts': 20, 'maxReportWatts': 348, 'serialNumber': '202218031593', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5108.445, 'measurementType': 'total-consumption', 'pwrFactor': 0.27, 'reactPwr': -1565.844, 'readingTime': 1691342712, 'rmsCurrent': 21.153, 'rmsVoltage': 241.499, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 22482.589, 'varhLagLifetime': 998203.693, 'varhLagToday': 1456.693, 'varhLeadLifetime': 10691664.429, 'varhLeadToday': 13981.429, 'wNow': 1393.191, 'whLastSevenDays': 365473.825, 'whLifetime': 10154380.825, 'whToday': 15177.825, }), dict({ 'activeCount': 1, 'apprntPwr': 2118.15, 'measurementType': 'net-consumption', 'pwrFactor': 0.59, 'reactPwr': -1596.082, 'readingTime': 1691342712, 'rmsCurrent': 17.572, 'rmsVoltage': 241.437, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 0, 'varhLagLifetime': 258967.196, 'varhLagToday': 0, 'varhLeadLifetime': 10652517.939, 'varhLeadToday': 0, 'wNow': 1214.696, 'whLastSevenDays': 0, 'whLifetime': 7116675.502, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 12, 'readingTime': 1691342674, 'type': 'inverters', 'wNow': 158, 'whLifetime': 142373, }), dict({ 'activeCount': 1, 'apprntPwr': 432.848, 'measurementType': 'production', 'pwrFactor': 0.41, 'reactPwr': -30.238, 'readingTime': 1691342712, 'rmsCurrent': 3.581, 'rmsVoltage': 241.56, 'type': 'eim', 'vahLifetime': 4846260.619, 'vahToday': 1977.619, 'varhLagLifetime': 739236.497, 'varhLagToday': 1457.497, 'varhLeadLifetime': 39146.49, 'varhLeadToday': 40.49, 'wNow': 178.495, 'whLastSevenDays': 149972.105, 'whLifetime': 3659506.105, 'whToday': 86.105, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 365474, 'watt_hours_lifetime': 10154381, 'watt_hours_today': 15178, 'watts_now': 1393, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7116676, 'watt_hours_today': 0, 'watts_now': 1215, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 149972, 'watt_hours_lifetime': 3659506, 'watt_hours_today': 86, 'watts_now': 178, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.3.130_no_consumption] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 3625, 'current': 30.223, 'eid': 704643328, 'energy_delivered': 4545930, 'energy_received': 1, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 241.696, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1811, 'current': 15.11, 'eid': 1778385169, 'energy_delivered': 2271794, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.749, }), : dict({ 'active_power': 1814, 'current': 15.113, 'eid': 1778385170, 'energy_delivered': 2274136, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.946, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202302072076': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549623, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302072076', 'temperature': None, }), '202302073177': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549622, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '202302073177', 'temperature': None, }), '202302073203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549592, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302073203', 'temperature': None, }), '202302073606': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549655, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302073606', 'temperature': None, }), '202302074252': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549653, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302074252', 'temperature': None, }), '202302075515': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549531, 'last_report_duration': None, 'last_report_watts': 284, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302075515', 'temperature': None, }), '202302076392': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549625, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302076392', 'temperature': None, }), '202302076838': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549652, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302076838', 'temperature': None, }), '202302077015': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549626, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077015', 'temperature': None, }), '202302077415': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549654, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077415', 'temperature': None, }), '202302077506': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549561, 'last_report_duration': None, 'last_report_watts': 283, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077506', 'temperature': None, }), '202302077890': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549594, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077890', 'temperature': None, }), '482236040239': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549628, 'last_report_duration': None, 'last_report_watts': 272, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040239', 'temperature': None, }), '482236040258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549627, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040258', 'temperature': None, }), '482236040746': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549624, 'last_report_duration': None, 'last_report_watts': 270, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040746', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-07-09 22:07:02 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694549622, 'lastReportWatts': 271, 'maxReportWatts': 299, 'serialNumber': '202302073177', }), dict({ 'devType': 1, 'lastReportDate': 1694549623, 'lastReportWatts': 271, 'maxReportWatts': 300, 'serialNumber': '202302072076', }), dict({ 'devType': 1, 'lastReportDate': 1694549592, 'lastReportWatts': 276, 'maxReportWatts': 301, 'serialNumber': '202302073203', }), dict({ 'devType': 1, 'lastReportDate': 1694549531, 'lastReportWatts': 284, 'maxReportWatts': 300, 'serialNumber': '202302075515', }), dict({ 'devType': 1, 'lastReportDate': 1694549624, 'lastReportWatts': 270, 'maxReportWatts': 300, 'serialNumber': '482236040746', }), dict({ 'devType': 1, 'lastReportDate': 1694549625, 'lastReportWatts': 271, 'maxReportWatts': 301, 'serialNumber': '202302076392', }), dict({ 'devType': 1, 'lastReportDate': 1694549561, 'lastReportWatts': 283, 'maxReportWatts': 300, 'serialNumber': '202302077506', }), dict({ 'devType': 1, 'lastReportDate': 1694549626, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302077015', }), dict({ 'devType': 1, 'lastReportDate': 1694549652, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302076838', }), dict({ 'devType': 1, 'lastReportDate': 1694549627, 'lastReportWatts': 273, 'maxReportWatts': 300, 'serialNumber': '482236040258', }), dict({ 'devType': 1, 'lastReportDate': 1694549594, 'lastReportWatts': 276, 'maxReportWatts': 300, 'serialNumber': '202302077890', }), dict({ 'devType': 1, 'lastReportDate': 1694549653, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302074252', }), dict({ 'devType': 1, 'lastReportDate': 1694549654, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302077415', }), dict({ 'devType': 1, 'lastReportDate': 1694549628, 'lastReportWatts': 272, 'maxReportWatts': 300, 'serialNumber': '482236040239', }), dict({ 'devType': 1, 'lastReportDate': 1694549655, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302073606', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'disabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 4545929.53, 'actEnergyRcvd': 0.637, 'activePower': 3624.573, 'apparentEnergy': 5375938.331, 'apparentPower': 3675.535, 'channels': list([ dict({ 'actEnergyDlvd': 2271793.63, 'actEnergyRcvd': 0.3, 'activePower': 1810.773, 'apparentEnergy': 2685521.244, 'apparentPower': 1836.021, 'current': 15.11, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1810.773, 'pwrFactor': 0.988, 'reactEnergyLagg': 365648.234, 'reactEnergyLead': 7490.926, 'reactivePower': 13.171, 'timestamp': 1694549733, 'voltage': 120.749, }), dict({ 'actEnergyDlvd': 2274135.9, 'actEnergyRcvd': 0.337, 'activePower': 1813.8, 'apparentEnergy': 2690417.087, 'apparentPower': 1839.514, 'current': 15.113, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1813.8, 'pwrFactor': 0.988, 'reactEnergyLagg': 364353.682, 'reactEnergyLead': 8559.662, 'reactivePower': 12.373, 'timestamp': 1694549733, 'voltage': 120.946, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 30.223, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 3624.573, 'pwrFactor': 0.988, 'reactEnergyLagg': 730001.916, 'reactEnergyLead': 16050.589, 'reactivePower': 25.544, 'timestamp': 1694549733, 'voltage': 241.696, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.021, 'apparentPower': 34.651, 'channels': list([ dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.009, 'apparentPower': 15.201, 'current': 0.126, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.773, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.012, 'apparentPower': 19.45, 'current': 0.16, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.945, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 0.287, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 241.718, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 7698.231, 'measurementType': 'total-consumption', 'pwrFactor': 0.49, 'reactPwr': -29.295, 'readingTime': 1694549731, 'rmsCurrent': 31.831, 'rmsVoltage': 241.85, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0.021, 'varhLagLifetime': 730001.895, 'varhLagToday': 730001.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 16050.589, 'wNow': 3780.646, 'whLastSevenDays': 4545909.217, 'whLifetime': 4545909.217, 'whToday': 4545909.217, }), dict({ 'activeCount': 0, 'apprntPwr': 35.041, 'measurementType': 'net-consumption', 'pwrFactor': 0.0, 'reactPwr': 0.909, 'readingTime': 1694549731, 'rmsCurrent': 0.29, 'rmsVoltage': 241.9, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': 0.0, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 15, 'readingTime': 1694549655, 'type': 'inverters', 'wNow': 4085, 'whLifetime': 943236, }), dict({ 'activeCount': 1, 'apprntPwr': 3826.518, 'measurementType': 'production', 'pwrFactor': 0.99, 'reactPwr': 30.203, 'readingTime': 1694549731, 'rmsCurrent': 31.541, 'rmsVoltage': 241.801, 'type': 'eim', 'vahLifetime': 5375935.161, 'vahToday': 17699.161, 'varhLagLifetime': 730001.895, 'varhLagToday': 2831.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 14.589, 'wNow': 3780.646, 'whLastSevenDays': 186010.403, 'whLifetime': 4545926.403, 'whToday': 14848.403, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 186010, 'watt_hours_lifetime': 4545926, 'watt_hours_today': 14848, 'watts_now': 3781, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.466_metered_disabled_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': -144.999, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': -456.848, 'readingTime': 1693745129, 'rmsCurrent': -0.615, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 22904.009, 'varhLagLifetime': -591341.987, 'varhLagToday': 0.0, 'varhLeadLifetime': 3174026.446, 'varhLeadToday': 9602.446, 'wNow': 476.686, 'whLastSevenDays': 4.621, 'whLifetime': 5145153.621, 'whToday': 19903.621, }), dict({ 'activeCount': 0, 'apprntPwr': -654.785, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -572.697, 'readingTime': 1693745129, 'rmsCurrent': -2.778, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 0, 'varhLagLifetime': 251.885, 'varhLagToday': 0, 'varhLeadLifetime': 3174026.466, 'varhLeadToday': 0, 'wNow': -11.468, 'whLastSevenDays': 0, 'whLifetime': 1961512.786, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 1693745066, 'type': 'inverters', 'wNow': 751, 'whLifetime': 702919, }), dict({ 'activeCount': 0, 'apprntPwr': 509.902, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 115.849, 'readingTime': 1693745129, 'rmsCurrent': 2.162, 'rmsVoltage': 235.777, 'type': 'eim', 'vahLifetime': 3576166.777, 'vahToday': 5461.777, 'varhLagLifetime': 591593.872, 'varhLagToday': 1483.872, 'varhLeadLifetime': 0.021, 'varhLeadToday': 0.021, 'wNow': 488.154, 'whLastSevenDays': 111093.303, 'whLifetime': 3183793.303, 'whToday': 4425.303, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 111093, 'watt_hours_lifetime': 702919, 'watt_hours_today': 4425, 'watts_now': 751, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.466_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121212121201': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121212121201', 'temperature': None, }), '121212121202': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121212121202', 'temperature': None, }), '121212121203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121203', 'temperature': None, }), '121212121204': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121204', 'temperature': None, }), '121212121205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121205', 'temperature': None, }), '121212121206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121206', 'temperature': None, }), '121212121207': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121207', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121212121201', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121212121202', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '121212121203', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '121212121204', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '121212121205', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '121212121206', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '121212121207', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'backup', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_legacy_savings_mode] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'savings-mode', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_system_2] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 23, 'current': 2.985, 'eid': 704643584, 'energy_delivered': 4873881, 'energy_received': 7554062, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.031, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 245.008, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -17, 'current': 1.18, 'eid': 1778385425, 'energy_delivered': 3374056, 'energy_received': 3340639, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.154, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.634, }), : dict({ 'active_power': 41, 'current': 1.806, 'eid': 1778385426, 'energy_delivered': 1499825, 'energy_received': 4213423, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.15, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.375, }), }), 'ctmeter_production': dict({ 'active_power': 2660, 'current': 21.736, 'eid': 704643328, 'energy_delivered': 18442497, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 244.845, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1331, 'current': 10.865, 'eid': 1778385169, 'energy_delivered': 9224605, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.565, }), : dict({ 'active_power': 1329, 'current': 10.871, 'eid': 1778385170, 'energy_delivered': 9217892, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.28, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9710, 'backup_reserve': 2016, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 10080, 'reserve_state_of_charge': 20, 'state_of_charge': 96, }), 'encharge_inventory': dict({ '122031000212': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693554929, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693554929, 'last_report_date': 1694553651, 'led_status': 12, 'max_cell_temp': 25, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031000212', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031000215': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693576648, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693576648, 'last_report_date': 1694553547, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 97, 'serial_number': '122031000215', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031023943': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1694098472, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1694098472, 'last_report_date': 1694553574, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031023943', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122031000212': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), '122031000215': dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'soc': 97, }), '122031023943': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'firmware_loaded_date': 1688303357, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1688303357, 'last_report_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r33', 'serial_number': '122036058363', 'temperature': 78, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '122004027913': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553576, 'last_report_duration': None, 'last_report_watts': 230, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004027913', 'temperature': None, }), '122004028091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553426, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028091', 'temperature': None, }), '122004028206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553697, 'last_report_duration': None, 'last_report_watts': 129, 'lifetime_energy': None, 'max_report_watts': 295, 'serial_number': '122004028206', 'temperature': None, }), '122004028286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553702, 'last_report_duration': None, 'last_report_watts': 229, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028286', 'temperature': None, }), '122004028288': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553606, 'last_report_duration': None, 'last_report_watts': 263, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028288', 'temperature': None, }), '122004028400': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553427, 'last_report_duration': None, 'last_report_watts': 177, 'lifetime_energy': None, 'max_report_watts': 286, 'serial_number': '122004028400', 'temperature': None, }), '122004028989': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553456, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028989', 'temperature': None, }), '122004028991': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553699, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004028991', 'temperature': None, }), '122004028996': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553546, 'last_report_duration': None, 'last_report_watts': 232, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028996', 'temperature': None, }), '122004031655': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553607, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004031655', 'temperature': None, }), '122004032100': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553549, 'last_report_duration': None, 'last_report_watts': 170, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '122004032100', 'temperature': None, }), '122004032124': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553457, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004032124', 'temperature': None, }), '122004039060': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553698, 'last_report_duration': None, 'last_report_watts': 231, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004039060', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-08-31 06:04:08 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694553546, 'lastReportWatts': 232, 'maxReportWatts': 296, 'serialNumber': '122004028996', }), dict({ 'devType': 1, 'lastReportDate': 1694553576, 'lastReportWatts': 230, 'maxReportWatts': 296, 'serialNumber': '122004027913', }), dict({ 'devType': 1, 'lastReportDate': 1694553697, 'lastReportWatts': 129, 'maxReportWatts': 295, 'serialNumber': '122004028206', }), dict({ 'devType': 1, 'lastReportDate': 1694553698, 'lastReportWatts': 231, 'maxReportWatts': 296, 'serialNumber': '122004039060', }), dict({ 'devType': 1, 'lastReportDate': 1694553606, 'lastReportWatts': 263, 'maxReportWatts': 296, 'serialNumber': '122004028288', }), dict({ 'devType': 1, 'lastReportDate': 1694553699, 'lastReportWatts': 268, 'maxReportWatts': 297, 'serialNumber': '122004028991', }), dict({ 'devType': 1, 'lastReportDate': 1694553702, 'lastReportWatts': 229, 'maxReportWatts': 296, 'serialNumber': '122004028286', }), dict({ 'devType': 1, 'lastReportDate': 1694553426, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122004028091', }), dict({ 'devType': 1, 'lastReportDate': 1694553549, 'lastReportWatts': 170, 'maxReportWatts': 244, 'serialNumber': '122004032100', }), dict({ 'devType': 1, 'lastReportDate': 1694553427, 'lastReportWatts': 177, 'maxReportWatts': 286, 'serialNumber': '122004028400', }), dict({ 'devType': 1, 'lastReportDate': 1694553456, 'lastReportWatts': 266, 'maxReportWatts': 296, 'serialNumber': '122004028989', }), dict({ 'devType': 1, 'lastReportDate': 1694553607, 'lastReportWatts': 268, 'maxReportWatts': 296, 'serialNumber': '122004031655', }), dict({ 'devType': 1, 'lastReportDate': 1694553457, 'lastReportWatts': 199, 'maxReportWatts': 297, 'serialNumber': '122004032124', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'open', }), dict({ 'id': 'NC2', 'status': 'open', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693554929, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693554929, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693554929, 'last_rpt_date': 1694553651, 'led_status': 12, 'maxCellTemp': 25, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031000212', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693576648, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693576648, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693576648, 'last_rpt_date': 1694553547, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 97, 'serial_num': '122031000215', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1694098472, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1694098472, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1694098472, 'last_rpt_date': 1694553574, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031023943', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 304, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1688303357, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1688303357, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1688303357, 'last_rpt_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r33', 'serial_num': '122036058363', 'temperature': 78, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031000212', 'soc': 96, }), dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'serial_num': '122031000215', 'soc': 97, }), dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031023943', 'soc': 96, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 9710, 'ENC_agg_backup_energy': 2016, 'ENC_agg_soc': 96, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 20, 'agg_soc': 96, 'configured_backup_soc': 20, 'freq_bias_hz': -0.6863999962806702, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -1104, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -8.319999694824219, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -266, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 18442496.933, 'actEnergyRcvd': 0.069, 'activePower': 2659.845, 'apparentEnergy': 21988447.961, 'apparentPower': 2661.49, 'channels': list([ dict({ 'actEnergyDlvd': 9224604.961, 'actEnergyRcvd': 0.018, 'activePower': 1330.866, 'apparentEnergy': 10992997.506, 'apparentPower': 1331.981, 'current': 10.865, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1330.866, 'pwrFactor': 1.0, 'reactEnergyLagg': 1823613.307, 'reactEnergyLead': 113311.01, 'reactivePower': 8.891, 'timestamp': 1694553765, 'voltage': 122.565, }), dict({ 'actEnergyDlvd': 9217891.972, 'actEnergyRcvd': 0.051, 'activePower': 1328.979, 'apparentEnergy': 10995450.455, 'apparentPower': 1329.509, 'current': 10.871, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1328.979, 'pwrFactor': 1.0, 'reactEnergyLagg': 1817923.688, 'reactEnergyLead': 122718.31, 'reactivePower': 7.776, 'timestamp': 1694553765, 'voltage': 122.28, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 21.736, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 2659.845, 'pwrFactor': 1.0, 'reactEnergyLagg': 3641536.995, 'reactEnergyLead': 236029.32, 'reactivePower': 16.667, 'timestamp': 1694553765, 'voltage': 244.845, }), dict({ 'actEnergyDlvd': 4873881.221, 'actEnergyRcvd': 7554062.483, 'activePower': 23.172, 'apparentEnergy': 18779628.396, 'apparentPower': 364.999, 'channels': list([ dict({ 'actEnergyDlvd': 3374056.076, 'actEnergyRcvd': 3340639.336, 'activePower': -17.438, 'apparentEnergy': 9863909.676, 'apparentPower': 143.478, 'current': 1.18, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -17.438, 'pwrFactor': -0.154, 'reactEnergyLagg': 50177.337, 'reactEnergyLead': 4264141.719, 'reactivePower': -95.235, 'timestamp': 1694553765, 'voltage': 122.634, }), dict({ 'actEnergyDlvd': 1499825.145, 'actEnergyRcvd': 4213423.147, 'activePower': 40.61, 'apparentEnergy': 8915718.719, 'apparentPower': 221.521, 'current': 1.806, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 40.61, 'pwrFactor': 0.15, 'reactEnergyLagg': 449728.699, 'reactEnergyLead': 3365454.56, 'reactivePower': -144.988, 'timestamp': 1694553765, 'voltage': 122.375, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 2.985, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 23.172, 'pwrFactor': 0.031, 'reactEnergyLagg': 499906.036, 'reactEnergyLead': 7629596.279, 'reactivePower': -240.223, 'timestamp': 1694553765, 'voltage': 245.008, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2748.29, 'measurementType': 'total-consumption', 'pwrFactor': 0.99, 'reactPwr': -221.854, 'readingTime': 1694553763, 'rmsCurrent': 22.422, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 7275.073, 'varhLagLifetime': -3141630.945, 'varhLagToday': 0.0, 'varhLeadLifetime': 7393566.746, 'varhLeadToday': 5177.746, 'wNow': 2712.776, 'whLastSevenDays': 348.638, 'whLifetime': 15745050.638, 'whToday': 12901.638, }), dict({ 'activeCount': 1, 'apprntPwr': 83.613, 'measurementType': 'net-consumption', 'pwrFactor': 0.56, 'reactPwr': -240.621, 'readingTime': 1694553763, 'rmsCurrent': 0.686, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 0, 'varhLagLifetime': 499906.036, 'varhLagToday': 0, 'varhLeadLifetime': 7629596.066, 'varhLeadToday': 0, 'wNow': 49.701, 'whLastSevenDays': 0, 'whLifetime': -2662918.637, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 13, 'readingTime': 1694553761, 'type': 'inverters', 'wNow': 2675, 'whLifetime': 640883, }), dict({ 'activeCount': 1, 'apprntPwr': 2664.473, 'measurementType': 'production', 'pwrFactor': 1.0, 'reactPwr': 18.766, 'readingTime': 1694553763, 'rmsCurrent': 21.736, 'rmsVoltage': 245.138, 'type': 'eim', 'vahLifetime': 21988445.596, 'vahToday': 13609.596, 'varhLagLifetime': 3641536.981, 'varhLagToday': 2248.981, 'varhLeadLifetime': 236029.32, 'varhLeadToday': 0.32, 'wNow': 2663.075, 'whLastSevenDays': 18431345.567, 'whLifetime': 18442494.567, 'whToday': 11494.567, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 349, 'watt_hours_lifetime': 15745051, 'watt_hours_today': 12902, 'watts_now': 2713, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': -2662919, 'watt_hours_today': 0, 'watts_now': 50, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 18431346, 'watt_hours_lifetime': 18442495, 'watt_hours_today': 11495, 'watts_now': 2663, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.6.114_without_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '482305021663': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412935, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '482305021663', 'temperature': None, }), '482305022836': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412935, 'last_report_duration': None, 'last_report_watts': 39, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482305022836', 'temperature': None, }), '482305023640': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412965, 'last_report_duration': None, 'last_report_watts': 50, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482305023640', 'temperature': None, }), '482306060958': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412754, 'last_report_duration': None, 'last_report_watts': 47, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306060958', 'temperature': None, }), '482306074560': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412755, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306074560', 'temperature': None, }), '482306075432': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412757, 'last_report_duration': None, 'last_report_watts': 46, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306075432', 'temperature': None, }), '482306075729': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412758, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306075729', 'temperature': None, }), '482306076034': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412759, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306076034', 'temperature': None, }), '482306083701': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412936, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083701', 'temperature': None, }), '482306083705': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412937, 'last_report_duration': None, 'last_report_watts': 33, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '482306083705', 'temperature': None, }), '482306083763': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412760, 'last_report_duration': None, 'last_report_watts': 47, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083763', 'temperature': None, }), '482306083851': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412938, 'last_report_duration': None, 'last_report_watts': 44, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083851', 'temperature': None, }), '482306101590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412939, 'last_report_duration': None, 'last_report_watts': 40, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306101590', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 1544282, 'wattHoursSevenDays': 101742, 'wattHoursToday': 10363, 'wattsNow': 586, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691412935, 'lastReportWatts': 48, 'maxReportWatts': 329, 'serialNumber': '482305021663', }), dict({ 'devType': 1, 'lastReportDate': 1691412935, 'lastReportWatts': 39, 'maxReportWatts': 330, 'serialNumber': '482305022836', }), dict({ 'devType': 1, 'lastReportDate': 1691412965, 'lastReportWatts': 50, 'maxReportWatts': 330, 'serialNumber': '482305023640', }), dict({ 'devType': 1, 'lastReportDate': 1691412754, 'lastReportWatts': 47, 'maxReportWatts': 330, 'serialNumber': '482306060958', }), dict({ 'devType': 1, 'lastReportDate': 1691412755, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306074560', }), dict({ 'devType': 1, 'lastReportDate': 1691412757, 'lastReportWatts': 46, 'maxReportWatts': 330, 'serialNumber': '482306075432', }), dict({ 'devType': 1, 'lastReportDate': 1691412758, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306075729', }), dict({ 'devType': 1, 'lastReportDate': 1691412759, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306076034', }), dict({ 'devType': 1, 'lastReportDate': 1691412936, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306083701', }), dict({ 'devType': 1, 'lastReportDate': 1691412937, 'lastReportWatts': 33, 'maxReportWatts': 329, 'serialNumber': '482306083705', }), dict({ 'devType': 1, 'lastReportDate': 1691412760, 'lastReportWatts': 47, 'maxReportWatts': 330, 'serialNumber': '482306083763', }), dict({ 'devType': 1, 'lastReportDate': 1691412938, 'lastReportWatts': 44, 'maxReportWatts': 330, 'serialNumber': '482306083851', }), dict({ 'devType': 1, 'lastReportDate': 1691412939, 'lastReportWatts': 40, 'maxReportWatts': 330, 'serialNumber': '482306101590', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 101742, 'watt_hours_lifetime': 1544282, 'watt_hours_today': 10363, 'watts_now': 586, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122146075749': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318584, 'last_report_duration': None, 'last_report_watts': 270, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122146075749', 'temperature': None, }), '122146076029': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318494, 'last_report_duration': None, 'last_report_watts': 281, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076029', 'temperature': None, }), '122146076125': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318704, 'last_report_duration': None, 'last_report_watts': 229, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076125', 'temperature': None, }), '122146076128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318674, 'last_report_duration': None, 'last_report_watts': 245, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076128', 'temperature': None, }), '122146076272': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318672, 'last_report_duration': None, 'last_report_watts': 243, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076272', 'temperature': None, }), '122146076336': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318523, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122146076336', 'temperature': None, }), '122146076488': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318612, 'last_report_duration': None, 'last_report_watts': 260, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076488', 'temperature': None, }), '122146076492': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318556, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076492', 'temperature': None, }), '122146076500': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318613, 'last_report_duration': None, 'last_report_watts': 259, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076500', 'temperature': None, }), '122146076518': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318462, 'last_report_duration': None, 'last_report_watts': 290, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076518', 'temperature': None, }), '122146076618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318643, 'last_report_duration': None, 'last_report_watts': 250, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076618', 'temperature': None, }), '122146078718': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318583, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146078718', 'temperature': None, }), '122146078769': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318673, 'last_report_duration': None, 'last_report_watts': 243, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146078769', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 8717473, 'wattHoursSevenDays': 107011, 'wattHoursToday': 7883, 'wattsNow': 3391, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691318583, 'lastReportWatts': 273, 'maxReportWatts': 297, 'serialNumber': '122146078718', }), dict({ 'devType': 1, 'lastReportDate': 1691318584, 'lastReportWatts': 270, 'maxReportWatts': 296, 'serialNumber': '122146075749', }), dict({ 'devType': 1, 'lastReportDate': 1691318612, 'lastReportWatts': 260, 'maxReportWatts': 297, 'serialNumber': '122146076488', }), dict({ 'devType': 1, 'lastReportDate': 1691318643, 'lastReportWatts': 250, 'maxReportWatts': 297, 'serialNumber': '122146076618', }), dict({ 'devType': 1, 'lastReportDate': 1691318462, 'lastReportWatts': 290, 'maxReportWatts': 297, 'serialNumber': '122146076518', }), dict({ 'devType': 1, 'lastReportDate': 1691318523, 'lastReportWatts': 275, 'maxReportWatts': 296, 'serialNumber': '122146076336', }), dict({ 'devType': 1, 'lastReportDate': 1691318704, 'lastReportWatts': 229, 'maxReportWatts': 297, 'serialNumber': '122146076125', }), dict({ 'devType': 1, 'lastReportDate': 1691318672, 'lastReportWatts': 243, 'maxReportWatts': 297, 'serialNumber': '122146076272', }), dict({ 'devType': 1, 'lastReportDate': 1691318556, 'lastReportWatts': 273, 'maxReportWatts': 297, 'serialNumber': '122146076492', }), dict({ 'devType': 1, 'lastReportDate': 1691318613, 'lastReportWatts': 259, 'maxReportWatts': 297, 'serialNumber': '122146076500', }), dict({ 'devType': 1, 'lastReportDate': 1691318494, 'lastReportWatts': 281, 'maxReportWatts': 297, 'serialNumber': '122146076029', }), dict({ 'devType': 1, 'lastReportDate': 1691318673, 'lastReportWatts': 243, 'maxReportWatts': 297, 'serialNumber': '122146078769', }), dict({ 'devType': 1, 'lastReportDate': 1691318674, 'lastReportWatts': 245, 'maxReportWatts': 297, 'serialNumber': '122146076128', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 107011, 'watt_hours_lifetime': 8717473, 'watt_hours_today': 7883, 'watts_now': 3391, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175_standard] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122218040027': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416390, 'last_report_duration': None, 'last_report_watts': 299, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '122218040027', 'temperature': None, }), '122218042847': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416211, 'last_report_duration': None, 'last_report_watts': 272, 'lifetime_energy': None, 'max_report_watts': 341, 'serial_number': '122218042847', 'temperature': None, }), '122218043128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416301, 'last_report_duration': None, 'last_report_watts': 292, 'lifetime_energy': None, 'max_report_watts': 354, 'serial_number': '122218043128', 'temperature': None, }), '122218044477': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416513, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '122218044477', 'temperature': None, }), '122218051640': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416484, 'last_report_duration': None, 'last_report_watts': 231, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '122218051640', 'temperature': None, }), '122218052484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416275, 'last_report_duration': None, 'last_report_watts': 284, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '122218052484', 'temperature': None, }), '122218054157': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416304, 'last_report_duration': None, 'last_report_watts': 286, 'lifetime_energy': None, 'max_report_watts': 349, 'serial_number': '122218054157', 'temperature': None, }), '122219082033': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416299, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '122219082033', 'temperature': None, }), '122219083015': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416509, 'last_report_duration': None, 'last_report_watts': 158, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219083015', 'temperature': None, }), '122219083049': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416242, 'last_report_duration': None, 'last_report_watts': 214, 'lifetime_energy': None, 'max_report_watts': 315, 'serial_number': '122219083049', 'temperature': None, }), '122219083053': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416331, 'last_report_duration': None, 'last_report_watts': 226, 'lifetime_energy': None, 'max_report_watts': 315, 'serial_number': '122219083053', 'temperature': None, }), '122219083804': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416420, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '122219083804', 'temperature': None, }), '122219084138': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416304, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 307, 'serial_number': '122219084138', 'temperature': None, }), '122219084557': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416330, 'last_report_duration': None, 'last_report_watts': 219, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219084557', 'temperature': None, }), '122219084578': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416303, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '122219084578', 'temperature': None, }), '122219084937': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416359, 'last_report_duration': None, 'last_report_watts': 244, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219084937', 'temperature': None, }), '122219085086': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416453, 'last_report_duration': None, 'last_report_watts': 248, 'lifetime_energy': None, 'max_report_watts': 339, 'serial_number': '122219085086', 'temperature': None, }), '122219085199': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416421, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 326, 'serial_number': '122219085199', 'temperature': None, }), '122219085275': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416241, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 314, 'serial_number': '122219085275', 'temperature': None, }), '122219085710': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416210, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 327, 'serial_number': '122219085710', 'temperature': None, }), '122219086026': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416301, 'last_report_duration': None, 'last_report_watts': 222, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '122219086026', 'temperature': None, }), '122220004338': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416271, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '122220004338', 'temperature': None, }), '122220004813': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416212, 'last_report_duration': None, 'last_report_watts': 267, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '122220004813', 'temperature': None, }), '122220009431': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416210, 'last_report_duration': None, 'last_report_watts': 267, 'lifetime_energy': None, 'max_report_watts': 340, 'serial_number': '122220009431', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 6139406, 'wattHoursSevenDays': 189712, 'wattHoursToday': 36462, 'wattsNow': 5740, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691416241, 'lastReportWatts': 209, 'maxReportWatts': 314, 'serialNumber': '122219085275', }), dict({ 'devType': 1, 'lastReportDate': 1691416453, 'lastReportWatts': 248, 'maxReportWatts': 339, 'serialNumber': '122219085086', }), dict({ 'devType': 1, 'lastReportDate': 1691416509, 'lastReportWatts': 158, 'maxReportWatts': 312, 'serialNumber': '122219083015', }), dict({ 'devType': 1, 'lastReportDate': 1691416299, 'lastReportWatts': 211, 'maxReportWatts': 324, 'serialNumber': '122219082033', }), dict({ 'devType': 1, 'lastReportDate': 1691416271, 'lastReportWatts': 212, 'maxReportWatts': 323, 'serialNumber': '122220004338', }), dict({ 'devType': 1, 'lastReportDate': 1691416330, 'lastReportWatts': 219, 'maxReportWatts': 312, 'serialNumber': '122219084557', }), dict({ 'devType': 1, 'lastReportDate': 1691416210, 'lastReportWatts': 267, 'maxReportWatts': 340, 'serialNumber': '122220009431', }), dict({ 'devType': 1, 'lastReportDate': 1691416210, 'lastReportWatts': 207, 'maxReportWatts': 327, 'serialNumber': '122219085710', }), dict({ 'devType': 1, 'lastReportDate': 1691416390, 'lastReportWatts': 299, 'maxReportWatts': 345, 'serialNumber': '122218040027', }), dict({ 'devType': 1, 'lastReportDate': 1691416242, 'lastReportWatts': 214, 'maxReportWatts': 315, 'serialNumber': '122219083049', }), dict({ 'devType': 1, 'lastReportDate': 1691416420, 'lastReportWatts': 268, 'maxReportWatts': 338, 'serialNumber': '122219083804', }), dict({ 'devType': 1, 'lastReportDate': 1691416301, 'lastReportWatts': 222, 'maxReportWatts': 319, 'serialNumber': '122219086026', }), dict({ 'devType': 1, 'lastReportDate': 1691416359, 'lastReportWatts': 244, 'maxReportWatts': 312, 'serialNumber': '122219084937', }), dict({ 'devType': 1, 'lastReportDate': 1691416301, 'lastReportWatts': 292, 'maxReportWatts': 354, 'serialNumber': '122218043128', }), dict({ 'devType': 1, 'lastReportDate': 1691416275, 'lastReportWatts': 284, 'maxReportWatts': 348, 'serialNumber': '122218052484', }), dict({ 'devType': 1, 'lastReportDate': 1691416421, 'lastReportWatts': 213, 'maxReportWatts': 326, 'serialNumber': '122219085199', }), dict({ 'devType': 1, 'lastReportDate': 1691416484, 'lastReportWatts': 231, 'maxReportWatts': 345, 'serialNumber': '122218051640', }), dict({ 'devType': 1, 'lastReportDate': 1691416303, 'lastReportWatts': 275, 'maxReportWatts': 338, 'serialNumber': '122219084578', }), dict({ 'devType': 1, 'lastReportDate': 1691416331, 'lastReportWatts': 226, 'maxReportWatts': 315, 'serialNumber': '122219083053', }), dict({ 'devType': 1, 'lastReportDate': 1691416304, 'lastReportWatts': 211, 'maxReportWatts': 307, 'serialNumber': '122219084138', }), dict({ 'devType': 1, 'lastReportDate': 1691416304, 'lastReportWatts': 286, 'maxReportWatts': 349, 'serialNumber': '122218054157', }), dict({ 'devType': 1, 'lastReportDate': 1691416211, 'lastReportWatts': 272, 'maxReportWatts': 341, 'serialNumber': '122218042847', }), dict({ 'devType': 1, 'lastReportDate': 1691416212, 'lastReportWatts': 267, 'maxReportWatts': 336, 'serialNumber': '122220004813', }), dict({ 'devType': 1, 'lastReportDate': 1691416513, 'lastReportWatts': 205, 'maxReportWatts': 346, 'serialNumber': '122218044477', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 189712, 'watt_hours_lifetime': 6139406, 'watt_hours_today': 36462, 'watts_now': 5740, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175_total] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122107025358': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181961, 'last_report_duration': None, 'last_report_watts': 190, 'lifetime_energy': None, 'max_report_watts': 279, 'serial_number': '122107025358', 'temperature': None, }), '122107031694': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182111, 'last_report_duration': None, 'last_report_watts': 193, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122107031694', 'temperature': None, }), '122107031731': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182200, 'last_report_duration': None, 'last_report_watts': 22, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107031731', 'temperature': None, }), '122107032484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182142, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032484', 'temperature': None, }), '122107032623': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181960, 'last_report_duration': None, 'last_report_watts': 190, 'lifetime_energy': None, 'max_report_watts': 279, 'serial_number': '122107032623', 'temperature': None, }), '122107032918': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181930, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032918', 'temperature': None, }), '122107032940': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182172, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032940', 'temperature': None, }), '122107033602': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181992, 'last_report_duration': None, 'last_report_watts': 22, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107033602', 'temperature': None, }), '122107033629': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182081, 'last_report_duration': None, 'last_report_watts': 194, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122107033629', 'temperature': None, }), '122107033673': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182140, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107033673', 'temperature': None, }), '122107035544': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182140, 'last_report_duration': None, 'last_report_watts': 191, 'lifetime_energy': None, 'max_report_watts': 283, 'serial_number': '122107035544', 'temperature': None, }), '122107035551': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182111, 'last_report_duration': None, 'last_report_watts': 191, 'lifetime_energy': None, 'max_report_watts': 287, 'serial_number': '122107035551', 'temperature': None, }), '122107035554': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182170, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107035554', 'temperature': None, }), '122107035597': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182052, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107035597', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-07-06 06:11:26 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688623885', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.38914, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.4424, 'start': 420, }), dict({ 'id': 'filler', 'rate': 0.38914, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.38914, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688623885', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 30.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694182111, 'lastReportWatts': 193, 'maxReportWatts': 289, 'serialNumber': '122107031694', }), dict({ 'devType': 1, 'lastReportDate': 1694182200, 'lastReportWatts': 22, 'maxReportWatts': 296, 'serialNumber': '122107031731', }), dict({ 'devType': 1, 'lastReportDate': 1694182140, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107033673', }), dict({ 'devType': 1, 'lastReportDate': 1694182081, 'lastReportWatts': 194, 'maxReportWatts': 289, 'serialNumber': '122107033629', }), dict({ 'devType': 1, 'lastReportDate': 1694182170, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107035554', }), dict({ 'devType': 1, 'lastReportDate': 1694181992, 'lastReportWatts': 22, 'maxReportWatts': 296, 'serialNumber': '122107033602', }), dict({ 'devType': 1, 'lastReportDate': 1694182052, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107035597', }), dict({ 'devType': 1, 'lastReportDate': 1694181960, 'lastReportWatts': 190, 'maxReportWatts': 279, 'serialNumber': '122107032623', }), dict({ 'devType': 1, 'lastReportDate': 1694182140, 'lastReportWatts': 191, 'maxReportWatts': 283, 'serialNumber': '122107035544', }), dict({ 'devType': 1, 'lastReportDate': 1694182111, 'lastReportWatts': 191, 'maxReportWatts': 287, 'serialNumber': '122107035551', }), dict({ 'devType': 1, 'lastReportDate': 1694181930, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032918', }), dict({ 'devType': 1, 'lastReportDate': 1694182172, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032940', }), dict({ 'devType': 1, 'lastReportDate': 1694181961, 'lastReportWatts': 190, 'maxReportWatts': 279, 'serialNumber': '122107025358', }), dict({ 'devType': 1, 'lastReportDate': 1694182142, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032484', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 0.412, 'measurementType': 'total-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': 0.27, 'rmsVoltage': 238.786, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': -0.768, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), dict({ 'activeCount': 0, 'apprntPwr': -1.746, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': -0.247, 'rmsVoltage': 238.786, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': -1.409, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 14, 'readingTime': 1694182262, 'type': 'inverters', 'wNow': 1322, 'whLifetime': 1152866, }), dict({ 'activeCount': 0, 'apprntPwr': 1.335, 'measurementType': 'production', 'pwrFactor': 1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': 0.516, 'rmsVoltage': 235.291, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': 0.641, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1152866, 'watt_hours_today': 0, 'watts_now': 1322, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688623885', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.38914, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.4424, 'start': 420, }), dict({ 'id': 'filler', 'rate': 0.38914, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.38914, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688623885', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 30.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': -144.999, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': -456.848, 'readingTime': 1693745129, 'rmsCurrent': -0.615, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 22904.009, 'varhLagLifetime': -591341.987, 'varhLagToday': 0.0, 'varhLeadLifetime': 3174026.446, 'varhLeadToday': 9602.446, 'wNow': 476.686, 'whLastSevenDays': 4.621, 'whLifetime': 5145153.621, 'whToday': 19903.621, }), dict({ 'activeCount': 1, 'apprntPwr': -654.785, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -572.697, 'readingTime': 1693745129, 'rmsCurrent': -2.778, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 0, 'varhLagLifetime': 251.885, 'varhLagToday': 0, 'varhLeadLifetime': 3174026.466, 'varhLeadToday': 0, 'wNow': -11.468, 'whLastSevenDays': 0, 'whLifetime': 1961512.786, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 1693745066, 'type': 'inverters', 'wNow': 751, 'whLifetime': 702919, }), dict({ 'activeCount': 1, 'apprntPwr': 509.902, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 115.849, 'readingTime': 1693745129, 'rmsCurrent': 2.162, 'rmsVoltage': 235.777, 'type': 'eim', 'vahLifetime': 3576166.777, 'vahToday': 5461.777, 'varhLagLifetime': 591593.872, 'varhLagToday': 1483.872, 'varhLeadLifetime': 0.021, 'varhLeadToday': 0.021, 'wNow': 488.154, 'whLastSevenDays': 111093.303, 'whLifetime': 3183793.303, 'whToday': 4425.303, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 5, 'watt_hours_lifetime': 5145154, 'watt_hours_today': 19904, 'watts_now': 477, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1961513, 'watt_hours_today': 0, 'watts_now': -11, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 111093, 'watt_hours_lifetime': 3183793, 'watt_hours_today': 4425, 'watts_now': 488, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.185_with_cts_and_battery_3t] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 522, 'current': 3.138, 'eid': 704643584, 'energy_delivered': 2404339, 'energy_received': 1125590, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.706, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.282, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': -1, 'current': 0.386, 'eid': 704643328, 'energy_delivered': 2432970, 'energy_received': 1795, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.524, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': dict({ 'available_energy': 525, 'backup_reserve': 525, 'configured_reserve_state_of_charge': 15, 'max_available_capacity': 3500, 'reserve_state_of_charge': 15, 'state_of_charge': 15, }), 'encharge_inventory': dict({ '122249097612': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3500, 'encharge_revision': 2, 'firmware_loaded_date': 1695330323, 'firmware_version': '2.6.5973_rel/22.11', 'installed_date': 1695330323, 'last_report_date': 1695769447, 'led_status': 17, 'max_cell_temp': 30, 'operating': True, 'part_number': '830-01760-r37', 'percent_full': 15, 'serial_number': '122249097612', 'temperature': 29, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100F', }), }), 'encharge_power': dict({ '122249097612': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 15, }), }), 'enpower': None, 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': True, 'date': '2023-09-26 16:03:40 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 15.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Mon': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sat': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sun': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Thu': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Tue': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Wed': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1695330323, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3500, 'encharge_rev': 2, 'img_load_date': 1695330323, 'img_pnum_running': '2.6.5973_rel/22.11', 'installed': 1695330323, 'last_rpt_date': 1695769447, 'led_status': 17, 'maxCellTemp': 30, 'operating': True, 'part_num': '830-01760-r37', 'percentFull': 15, 'serial_num': '122249097612', 'sleep_enabled': False, 'temperature': 29, 'zigbee_dongle_fw_version': '100F', }), ]), 'type': 'ENCHARGE', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122249097612', 'soc': 15, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 525, 'ENC_agg_backup_energy': 525, 'ENC_agg_soc': 15, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 3500, 'Enc_max_available_capacity': 3500, 'Max_energy': 3500, 'adjusted_backup_soc': 15, 'agg_soc': 15, 'configured_backup_soc': 15, 'freq_bias_hz': 1.3899999856948853, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 2235, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': 16.899999618530273, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 540, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'channels': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'current': 0.386, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 8248.228, 'activePower': -0.0, 'apparentEnergy': 140.353, 'apparentPower': -0.0, 'current': -0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 355.453, 'reactEnergyLead': 1.715, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 7.648, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 12408.486, 'activePower': -0.077, 'apparentEnergy': 898.304, 'apparentPower': 0.178, 'current': 0.152, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -0.077, 'pwrFactor': -1.0, 'reactEnergyLagg': 419.396, 'reactEnergyLead': 0.0, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 1.176, }), ]), 'current': 0.386, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'channels': list([ dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'current': 3.138, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1099.941, 'activePower': 0.0, 'apparentEnergy': 54.285, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 356.336, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695769632, 'voltage': 3.447, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5670.302, 'activePower': -0.351, 'apparentEnergy': 8802.177, 'apparentPower': 1.761, 'current': 0.197, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.351, 'pwrFactor': 0.0, 'reactEnergyLagg': 361.519, 'reactEnergyLead': 0.367, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 8.942, }), ]), 'current': 3.138, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 837.87, 'measurementType': 'total-consumption', 'pwrFactor': 0.62, 'reactPwr': -374.915, 'readingTime': 1695769629, 'rmsCurrent': 3.513, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 88.766, 'varhLagLifetime': -369573.576, 'varhLagToday': 0.0, 'varhLeadLifetime': 1935707.431, 'varhLeadToday': 54.431, 'wNow': 523.579, 'whLastSevenDays': 19.155, 'whLifetime': 3711429.155, 'whToday': 63.155, }), dict({ 'activeCount': 1, 'apprntPwr': 745.663, 'measurementType': 'net-consumption', 'pwrFactor': 0.7, 'reactPwr': -458.436, 'readingTime': 1695769629, 'rmsCurrent': 3.126, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 0, 'varhLagLifetime': 22501.684, 'varhLagToday': 0, 'varhLeadLifetime': 1935714.697, 'varhLeadToday': 0, 'wNow': 524.536, 'whLastSevenDays': 0, 'whLifetime': 1279037.969, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 5, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 45349, }), dict({ 'activeCount': 1, 'apprntPwr': 92.383, 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 83.521, 'readingTime': 1695769629, 'rmsCurrent': 0.387, 'rmsVoltage': 238.522, 'type': 'eim', 'vahLifetime': 2709025.274, 'vahToday': 11.274, 'varhLagLifetime': 392075.259, 'varhLagToday': 10.259, 'varhLeadLifetime': 7.266, 'varhLeadToday': 0.266, 'wNow': -0.957, 'whLastSevenDays': 73002.956, 'whLifetime': 2432969.956, 'whToday': 0.956, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 19, 'watt_hours_lifetime': 3711429, 'watt_hours_today': 63, 'watts_now': 524, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1279038, 'watt_hours_today': 0, 'watts_now': 525, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 73003, 'watt_hours_lifetime': 2432970, 'watt_hours_today': 1, 'watts_now': -1, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[8.1.41] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'AC', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9176, 'backup_reserve': 2976, 'configured_reserve_state_of_charge': 30, 'max_available_capacity': 9920, 'reserve_state_of_charge': 30, 'state_of_charge': 92, }), 'encharge_inventory': dict({ '492319002585': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560591, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560591, 'last_report_date': 1692385816, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 100, 'serial_number': '492319002585', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492319002593': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560590, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560590, 'last_report_date': 1692386075, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 85, 'serial_number': '492319002593', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492319002585': dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'soc': 100, }), '492319002593': dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'soc': 85, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1691648499, 'firmware_version': '3.0.5177_rel/31.07', 'grid_mode': 'multimode-ongrid', 'installed_date': 1691648499, 'last_report_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00377-r28', 'serial_number': '482326083757', 'temperature': 113, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '202314050286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385966, 'last_report_duration': None, 'last_report_watts': 312, 'lifetime_energy': None, 'max_report_watts': 327, 'serial_number': '202314050286', 'temperature': None, }), '202314055790': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314055790', 'temperature': None, }), '202314058203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385784, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314058203', 'temperature': None, }), '202314059855': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385973, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314059855', 'temperature': None, }), '202314060891': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385785, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314060891', 'temperature': None, }), '202314061330': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385997, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314061330', 'temperature': None, }), '202314062224': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385974, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314062224', 'temperature': None, }), '202314062558': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314062558', 'temperature': None, }), '202314062880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386026, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314062880', 'temperature': None, }), '202314063524': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385998, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314063524', 'temperature': None, }), '202314064007': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 325, 'serial_number': '202314064007', 'temperature': None, }), '202314065032': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314065032', 'temperature': None, }), '202314065062': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314065062', 'temperature': None, }), '202314065647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314065647', 'temperature': None, }), '202314066216': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385965, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314066216', 'temperature': None, }), '202314067482': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385977, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314067482', 'temperature': None, }), '202314068272': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385786, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068272', 'temperature': None, }), '202314068438': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385979, 'last_report_duration': None, 'last_report_watts': 293, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068438', 'temperature': None, }), '202314068868': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385904, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314068868', 'temperature': None, }), '202314069065': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385847, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314069065', 'temperature': None, }), '202314069086': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385968, 'last_report_duration': None, 'last_report_watts': 313, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314069086', 'temperature': None, }), '202314069092': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385980, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314069092', 'temperature': None, }), '202314069944': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385814, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314069944', 'temperature': None, }), '202314070107': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314070107', 'temperature': None, }), '202314070295': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386032, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314070295', 'temperature': None, }), '202314070321': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386030, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '202314070321', 'temperature': None, }), '202314070523': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314070523', 'temperature': None, }), '202314070647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385939, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314070647', 'temperature': None, }), '202314070713': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385936, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 326, 'serial_number': '202314070713', 'temperature': None, }), '202314070988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386027, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314070988', 'temperature': None, }), '202314071516': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386025, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314071516', 'temperature': None, }), '202314071599': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314071599', 'temperature': None, }), '202314071660': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385995, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314071660', 'temperature': None, }), '202314071753': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385996, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314071753', 'temperature': None, }), '202314071845': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385846, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314071845', 'temperature': None, }), '202314072420': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385967, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314072420', 'temperature': None, }), '202314072546': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385844, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314072546', 'temperature': None, }), '202314073012': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385787, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073012', 'temperature': None, }), '202314073205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385938, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314073205', 'temperature': None, }), '202314073251': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385937, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073251', 'temperature': None, }), '202314073257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385907, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314073257', 'temperature': None, }), '202314073428': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385942, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314073428', 'temperature': None, }), '202314075069': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385999, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314075069', 'temperature': None, }), '202314077078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314077078', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692385844, 'lastReportWatts': 307, 'maxReportWatts': 319, 'serialNumber': '202314072546', }), dict({ 'devType': 1, 'lastReportDate': 1692386025, 'lastReportWatts': 308, 'maxReportWatts': 321, 'serialNumber': '202314071516', }), dict({ 'devType': 1, 'lastReportDate': 1692385784, 'lastReportWatts': 310, 'maxReportWatts': 321, 'serialNumber': '202314058203', }), dict({ 'devType': 1, 'lastReportDate': 1692385785, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314060891', }), dict({ 'devType': 1, 'lastReportDate': 1692385786, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314068272', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 302, 'maxReportWatts': 317, 'serialNumber': '202314077078', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 277, 'maxReportWatts': 334, 'serialNumber': '202314065062', }), dict({ 'devType': 1, 'lastReportDate': 1692385787, 'lastReportWatts': 308, 'maxReportWatts': 323, 'serialNumber': '202314073012', }), dict({ 'devType': 1, 'lastReportDate': 1692385936, 'lastReportWatts': 309, 'maxReportWatts': 326, 'serialNumber': '202314070713', }), dict({ 'devType': 1, 'lastReportDate': 1692385846, 'lastReportWatts': 308, 'maxReportWatts': 324, 'serialNumber': '202314071845', }), dict({ 'devType': 1, 'lastReportDate': 1692385847, 'lastReportWatts': 303, 'maxReportWatts': 320, 'serialNumber': '202314069065', }), dict({ 'devType': 1, 'lastReportDate': 1692385904, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314068868', }), dict({ 'devType': 1, 'lastReportDate': 1692385965, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314066216', }), dict({ 'devType': 1, 'lastReportDate': 1692385937, 'lastReportWatts': 307, 'maxReportWatts': 323, 'serialNumber': '202314073251', }), dict({ 'devType': 1, 'lastReportDate': 1692385938, 'lastReportWatts': 304, 'maxReportWatts': 321, 'serialNumber': '202314073205', }), dict({ 'devType': 1, 'lastReportDate': 1692385966, 'lastReportWatts': 312, 'maxReportWatts': 327, 'serialNumber': '202314050286', }), dict({ 'devType': 1, 'lastReportDate': 1692385967, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314072420', }), dict({ 'devType': 1, 'lastReportDate': 1692385907, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314073257', }), dict({ 'devType': 1, 'lastReportDate': 1692385939, 'lastReportWatts': 301, 'maxReportWatts': 319, 'serialNumber': '202314070647', }), dict({ 'devType': 1, 'lastReportDate': 1692385995, 'lastReportWatts': 310, 'maxReportWatts': 322, 'serialNumber': '202314071660', }), dict({ 'devType': 1, 'lastReportDate': 1692385968, 'lastReportWatts': 313, 'maxReportWatts': 323, 'serialNumber': '202314069086', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314055790', }), dict({ 'devType': 1, 'lastReportDate': 1692385996, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314071753', }), dict({ 'devType': 1, 'lastReportDate': 1692385997, 'lastReportWatts': 269, 'maxReportWatts': 336, 'serialNumber': '202314061330', }), dict({ 'devType': 1, 'lastReportDate': 1692385942, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314073428', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 303, 'maxReportWatts': 319, 'serialNumber': '202314065647', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 301, 'maxReportWatts': 322, 'serialNumber': '202314062558', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 308, 'maxReportWatts': 317, 'serialNumber': '202314070107', }), dict({ 'devType': 1, 'lastReportDate': 1692385973, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314059855', }), dict({ 'devType': 1, 'lastReportDate': 1692385998, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314063524', }), dict({ 'devType': 1, 'lastReportDate': 1692386026, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314062880', }), dict({ 'devType': 1, 'lastReportDate': 1692386027, 'lastReportWatts': 275, 'maxReportWatts': 334, 'serialNumber': '202314070988', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 273, 'maxReportWatts': 336, 'serialNumber': '202314065032', }), dict({ 'devType': 1, 'lastReportDate': 1692385974, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314062224', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 307, 'maxReportWatts': 325, 'serialNumber': '202314064007', }), dict({ 'devType': 1, 'lastReportDate': 1692385977, 'lastReportWatts': 302, 'maxReportWatts': 318, 'serialNumber': '202314067482', }), dict({ 'devType': 1, 'lastReportDate': 1692386030, 'lastReportWatts': 271, 'maxReportWatts': 329, 'serialNumber': '202314070321', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 305, 'maxReportWatts': 320, 'serialNumber': '202314070523', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 307, 'maxReportWatts': 317, 'serialNumber': '202314071599', }), dict({ 'devType': 1, 'lastReportDate': 1692385979, 'lastReportWatts': 293, 'maxReportWatts': 324, 'serialNumber': '202314068438', }), dict({ 'devType': 1, 'lastReportDate': 1692385814, 'lastReportWatts': 277, 'maxReportWatts': 336, 'serialNumber': '202314069944', }), dict({ 'devType': 1, 'lastReportDate': 1692385999, 'lastReportWatts': 308, 'maxReportWatts': 319, 'serialNumber': '202314075069', }), dict({ 'devType': 1, 'lastReportDate': 1692386032, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314070295', }), dict({ 'devType': 1, 'lastReportDate': 1692385980, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314069092', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560591, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560591, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560591, 'last_rpt_date': 1692385816, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 100, 'phase': 'ph-a', 'serial_num': '492319002585', 'sleep_enabled': False, 'temperature': 42, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560590, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560590, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560590, 'last_rpt_date': 1692386075, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 85, 'phase': 'ph-a', 'serial_num': '492319002593', 'sleep_enabled': False, 'temperature': 42, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 3568, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691648499, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1691648499, 'img_pnum_running': '3.0.5177_rel/31.07', 'installed': 1691648499, 'last_rpt_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00377-r28', 'serial_num': '482326083757', 'temperature': 113, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'serial_num': '492319002585', 'soc': 100, }), dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'serial_num': '492319002593', 'soc': 85, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 9176, 'ENC_agg_backup_energy': 2976, 'ENC_agg_soc': 92, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 9920, 'Enc_max_available_capacity': 9920, 'Max_energy': 9920, 'Recovery_threshold_soc': 13, 'VLS_Limit': 10, 'adjusted_backup_soc': 30, 'agg_soc': 92, 'configured_backup_soc': 30, 'freq_bias_hz': -1.348230004310608, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2168, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.190109252929688, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -518, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'AC', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5007.246, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 1407.058, 'readingTime': 1692386083, 'rmsCurrent': 40.571, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 1190799.036, 'varhLagLifetime': 29677.693, 'varhLagToday': 17206.693, 'varhLeadLifetime': 108784.489, 'varhLeadToday': 104827.489, 'wNow': 5216.083, 'whLastSevenDays': 0.0, 'whLifetime': 1757943.133, 'whToday': 0.0, }), dict({ 'activeCount': 1, 'apprntPwr': -8358.792, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 1329.256, 'readingTime': 1692386083, 'rmsCurrent': -67.703, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 0, 'varhLagLifetime': 234428.764, 'varhLagToday': 0, 'varhLeadLifetime': 109642.368, 'varhLeadToday': 0, 'wNow': -7812.457, 'whLastSevenDays': 0, 'whLifetime': 247929.658, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 44, 'readingTime': 1692386032, 'type': 'inverters', 'wNow': 13163, 'whLifetime': 348363, }), dict({ 'activeCount': 1, 'apprntPwr': 13367.009, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 77.802, 'readingTime': 1692386083, 'rmsCurrent': 108.274, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1746683.744, 'vahToday': 64277.744, 'varhLagLifetime': 204751.071, 'varhLagToday': 8551.071, 'varhLeadLifetime': 857.879, 'varhLeadToday': 33.879, 'wNow': 13028.54, 'whLastSevenDays': 1456156.655, 'whLifetime': 1510198.655, 'whToday': 55037.655, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1757943, 'watt_hours_today': 0, 'watts_now': 5216, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 247930, 'watt_hours_today': 0, 'watts_now': -7812, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 1456157, 'watt_hours_lifetime': 1510199, 'watt_hours_today': 55038, 'watts_now': 13029, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[8.2.127_with_3cts_and_battery_split] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 129, 'current': 21.241, 'eid': 704643584, 'energy_delivered': 4998252, 'energy_received': 253961, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.034, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.553, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -201, 'current': 9.316, 'eid': 1778385425, 'energy_delivered': 2631217, 'energy_received': 93777, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': 331, 'current': 11.925, 'eid': 1778385426, 'energy_delivered': 2367035, 'energy_received': 160184, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.212, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.219, }), }), 'ctmeter_production': dict({ 'active_power': 1714, 'current': 17.326, 'eid': 704643328, 'energy_delivered': 3165834, 'energy_received': 76, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.817, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.367, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 856, 'current': 8.658, 'eid': 1778385169, 'energy_delivered': 1581746, 'energy_received': 46, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.822, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.224, }), : dict({ 'active_power': 858, 'current': 8.668, 'eid': 1778385170, 'energy_delivered': 1584088, 'energy_received': 30, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.812, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.143, }), }), 'ctmeter_storage': dict({ 'active_power': -2580, 'current': 14.575, 'eid': 704643840, 'energy_delivered': 2274359, 'energy_received': 2971414, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.582, }), 'ctmeter_storage_phases': dict({ : dict({ 'active_power': -2115, 'current': 9.316, 'eid': 1778385681, 'energy_delivered': 1136860, 'energy_received': 1485292, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': -465, 'current': 5.259, 'eid': 1778385682, 'energy_delivered': 1137499, 'energy_received': 1486122, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.713, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.248, }), }), 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NC2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 5250, 'backup_reserve': 5000, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 25000, 'reserve_state_of_charge': 20, 'state_of_charge': 21, }), 'encharge_inventory': dict({ '12345678901002': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707197622, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707197622, 'last_report_date': 1709829328, 'led_status': 12, 'max_cell_temp': 13, 'operating': None, 'part_number': '836-01826-r81', 'percent_full': 21, 'serial_number': '12345678901002', 'temperature': 13, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901003': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1706749292, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1706749292, 'last_report_date': 1709829288, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901003', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901004': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707622567, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707622567, 'last_report_date': 1709829437, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901004', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901005': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709410199, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709410199, 'last_report_date': 1709829256, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901005', 'temperature': 11, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901006': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709749530, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709749530, 'last_report_date': 1709829434, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901006', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '12345678901002': dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'soc': 21, }), '12345678901003': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901004': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901005': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901006': dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'soc': 21, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1709657837, 'firmware_version': '3.0.5654_rel/31.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1709657837, 'last_report_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00378-r27', 'serial_number': '12345678901001', 'temperature': 72, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-03-06 22:58:46 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': 'prioritize-energy', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': 'self-consumption', 'operation_mode_sub_type': 'prioritize-energy', 'reserved_soc': 20, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709749530, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709749530, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709749530, 'last_rpt_date': 1709829434, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901006', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709410199, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709410199, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709410199, 'last_rpt_date': 1709829256, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901005', 'sleep_enabled': False, 'temperature': 11, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707622567, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707622567, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707622567, 'last_rpt_date': 1709829437, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901004', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1706749292, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1706749292, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1706749292, 'last_rpt_date': 1709829288, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901003', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707197622, 'dc_switch_off': False, 'der_index': 3, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707197622, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707197622, 'last_rpt_date': 1709829328, 'led_status': 12, 'maxCellTemp': 13, 'part_num': '836-01826-r81', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901002', 'sleep_enabled': False, 'temperature': 13, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15868, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709657837, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1709657837, 'img_pnum_running': '3.0.5654_rel/31.13', 'installed': 1709657837, 'last_rpt_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00378-r27', 'serial_num': '12345678901001', 'temperature': 72, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'serial_num': '12345678901006', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901005', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901004', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901003', 'soc': 21, }), dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'serial_num': '12345678901002', 'soc': 21, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 5250, 'ENC_agg_backup_energy': 5000, 'ENC_agg_soc': 21, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 25000, 'Enc_max_available_capacity': 25000, 'Max_energy': 25000, 'VLS_Limit': 10, 'adjusted_backup_soc': 20, 'agg_soc': 21, 'configured_backup_soc': 20, 'freq_bias_hz': -0.06000090762972832, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -96, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 2, 'soc_recovery_exit': 10, 'voltage_bias_v': -0.7205159664154053, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -23, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643840, 'measurementType': 'storage', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3165834.272, 'actEnergyRcvd': 75.689, 'activePower': 1714.424, 'apparentEnergy': 5529628.28, 'apparentPower': 2100.04, 'channels': list([ dict({ 'actEnergyDlvd': 1581746.293, 'actEnergyRcvd': 45.89, 'activePower': 856.031, 'apparentEnergy': 2763520.42, 'apparentPower': 1049.732, 'current': 8.658, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 856.031, 'pwrFactor': 0.822, 'reactEnergyLagg': 803725.479, 'reactEnergyLead': 33935.538, 'reactivePower': 8.366, 'timestamp': 1709829517, 'voltage': 121.224, }), dict({ 'actEnergyDlvd': 1584087.979, 'actEnergyRcvd': 29.799, 'activePower': 858.394, 'apparentEnergy': 2766107.86, 'apparentPower': 1050.307, 'current': 8.668, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 858.394, 'pwrFactor': 0.812, 'reactEnergyLagg': 803599.733, 'reactEnergyLead': 34616.443, 'reactivePower': 12.499, 'timestamp': 1709829517, 'voltage': 121.143, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 17.326, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 1714.424, 'pwrFactor': 0.817, 'reactEnergyLagg': 1607325.212, 'reactEnergyLead': 68551.981, 'reactivePower': 20.865, 'timestamp': 1709829517, 'voltage': 242.367, }), dict({ 'actEnergyDlvd': 4998251.825, 'actEnergyRcvd': 253960.783, 'activePower': 129.407, 'apparentEnergy': 12810156.532, 'apparentPower': 2578.068, 'channels': list([ dict({ 'actEnergyDlvd': 2631217.196, 'actEnergyRcvd': 93777.056, 'activePower': -201.39, 'apparentEnergy': 6787276.689, 'apparentPower': 1130.056, 'current': 9.316, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -201.39, 'pwrFactor': -0.193, 'reactEnergyLagg': 79.572, 'reactEnergyLead': 5042497.945, 'reactivePower': -935.571, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 2367034.629, 'actEnergyRcvd': 160183.727, 'activePower': 330.797, 'apparentEnergy': 6022879.843, 'apparentPower': 1448.012, 'current': 11.925, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 330.797, 'pwrFactor': 0.212, 'reactEnergyLagg': 105.465, 'reactEnergyLead': 4128101.723, 'reactivePower': -1295.012, 'timestamp': 1709829517, 'voltage': 121.219, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), ]), 'current': 21.241, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 129.407, 'pwrFactor': 0.034, 'reactEnergyLagg': 185.037, 'reactEnergyLead': 9170599.668, 'reactivePower': -2230.583, 'timestamp': 1709829517, 'voltage': 242.553, }), dict({ 'actEnergyDlvd': 2274358.602, 'actEnergyRcvd': 2971414.344, 'activePower': -2579.823, 'apparentEnergy': 7881024.906, 'apparentPower': 461.253, 'channels': list([ dict({ 'actEnergyDlvd': 1136859.658, 'actEnergyRcvd': 1485292.441, 'activePower': -2114.856, 'apparentEnergy': 3945551.951, 'apparentPower': -179.488, 'current': 9.316, 'eid': 1778385681, 'freq': 60.0, 'instantaneousDemand': -2114.856, 'pwrFactor': -0.193, 'reactEnergyLagg': 1358495.518, 'reactEnergyLead': 31391.267, 'reactivePower': 299.583, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385682, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385683, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 14.575, 'eid': 704643840, 'freq': 60.0, 'instantaneousDemand': -2579.823, 'pwrFactor': -1.0, 'reactEnergyLagg': 2713630.41, 'reactEnergyLead': 62717.621, 'reactivePower': 676.781, 'timestamp': 1709829517, 'voltage': 242.582, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2416.339, 'measurementType': 'total-consumption', 'pwrFactor': 0.75, 'reactPwr': -2209.719, 'readingTime': 1709829518, 'rmsCurrent': 19.934, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 4946716.532, 'varhLagLifetime': -1607140.175, 'varhLagToday': 9360.0, 'varhLeadLifetime': 9102047.686, 'varhLeadToday': 9039334.686, 'wNow': 1843.831, 'whLastSevenDays': 0.0, 'whLifetime': 7909866.491, 'whToday': 7596.0, }), dict({ 'activeCount': 1, 'apprntPwr': 315.151, 'measurementType': 'net-consumption', 'pwrFactor': 0.28, 'reactPwr': -2230.583, 'readingTime': 1709829518, 'rmsCurrent': 2.609, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 0, 'varhLagLifetime': 185.037, 'varhLagToday': 0, 'varhLeadLifetime': 9170599.668, 'varhLeadToday': 0, 'wNow': 129.407, 'whLastSevenDays': 0, 'whLifetime': 4744549.864, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 35, 'readingTime': 1709829490, 'type': 'inverters', 'wNow': 1592, 'whLifetime': 821819, }), dict({ 'activeCount': 1, 'apprntPwr': 2100.04, 'measurementType': 'production', 'pwrFactor': 0.82, 'reactPwr': 20.865, 'readingTime': 1709829518, 'rmsCurrent': 17.326, 'rmsVoltage': 242.367, 'type': 'eim', 'vahLifetime': 5529628.28, 'vahToday': 8010.28, 'varhLagLifetime': 1607325.212, 'varhLagToday': 5202.212, 'varhLeadLifetime': 68551.981, 'varhLeadToday': 0.981, 'wNow': 1714.424, 'whLastSevenDays': 3164458.272, 'whLifetime': 3165834.272, 'whToday': 1475.272, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7909866, 'watt_hours_today': 7596, 'watts_now': 1844, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 4744550, 'watt_hours_today': 0, 'watts_now': 129, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 3164458, 'watt_hours_lifetime': 3165834, 'watt_hours_today': 1475, 'watts_now': 1714, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': , 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': None, 'reserved_soc': 20, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.127_with_generator_running] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 196, 'current': 9.098, 'eid': 704643584, 'energy_delivered': 13632727, 'energy_received': 6336017, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.398, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 243.047, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 268, 'current': 4.859, 'eid': 1778385425, 'energy_delivered': 7037859, 'energy_received': 2542489, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.637, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.856, }), : dict({ 'active_power': -72, 'current': 4.239, 'eid': 1778385426, 'energy_delivered': 6594868, 'energy_received': 3793528, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.081, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.192, }), }), 'ctmeter_production': dict({ 'active_power': 2336, 'current': 21.222, 'eid': 704643328, 'energy_delivered': 15097305, 'energy_received': 15, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.88, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 242.887, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1173, 'current': 10.607, 'eid': 1778385169, 'energy_delivered': 7551632, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.883, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.774, }), : dict({ 'active_power': 1163, 'current': 10.615, 'eid': 1778385170, 'energy_delivered': 7545672, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.877, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.113, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 3292, 'backup_reserve': 1680, 'configured_reserve_state_of_charge': 50, 'max_available_capacity': 3360, 'reserve_state_of_charge': 50, 'state_of_charge': 98, }), 'encharge_inventory': dict({ '492234001350': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 2, 'firmware_loaded_date': 1718210586, 'firmware_version': '2.0.6727_rel/22.15', 'installed_date': 1718210586, 'last_report_date': 1718213052, 'led_status': 12, 'max_cell_temp': 27, 'operating': None, 'part_number': '836-00750-r32', 'percent_full': 98, 'serial_number': '492234001350', 'temperature': 27, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492234001350': dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'soc': 98, }), }), 'enpower': dict({ 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1718209911, 'firmware_version': '2.0.5729_rel/22.15', 'grid_mode': 'multimode-ongrid', 'installed_date': 1718209911, 'last_report_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'operating': None, 'part_number': '860-00376-r37', 'serial_number': '122210043898', 'temperature': 91, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482218039091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213113, 'last_report_duration': None, 'last_report_watts': 67, 'lifetime_energy': None, 'max_report_watts': 122, 'serial_number': '482218039091', 'temperature': None, }), '482218039209': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213114, 'last_report_duration': None, 'last_report_watts': 61, 'lifetime_energy': None, 'max_report_watts': 115, 'serial_number': '482218039209', 'temperature': None, }), '482218039304': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213115, 'last_report_duration': None, 'last_report_watts': 69, 'lifetime_energy': None, 'max_report_watts': 132, 'serial_number': '482218039304', 'temperature': None, }), '482218039386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213116, 'last_report_duration': None, 'last_report_watts': 64, 'lifetime_energy': None, 'max_report_watts': 112, 'serial_number': '482218039386', 'temperature': None, }), '482218039390': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213117, 'last_report_duration': None, 'last_report_watts': 63, 'lifetime_energy': None, 'max_report_watts': 123, 'serial_number': '482218039390', 'temperature': None, }), '482218039529': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213143, 'last_report_duration': None, 'last_report_watts': 75, 'lifetime_energy': None, 'max_report_watts': 120, 'serial_number': '482218039529', 'temperature': None, }), '482218039700': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213203, 'last_report_duration': None, 'last_report_watts': 89, 'lifetime_energy': None, 'max_report_watts': 135, 'serial_number': '482218039700', 'temperature': None, }), '482218039736': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213204, 'last_report_duration': None, 'last_report_watts': 84, 'lifetime_energy': None, 'max_report_watts': 118, 'serial_number': '482218039736', 'temperature': None, }), '482218039788': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213234, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 100, 'serial_number': '482218039788', 'temperature': None, }), '482218039880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213235, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 134, 'serial_number': '482218039880', 'temperature': None, }), '482218039911': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213236, 'last_report_duration': None, 'last_report_watts': 97, 'lifetime_energy': None, 'max_report_watts': 133, 'serial_number': '482218039911', 'temperature': None, }), '482218039918': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 99, 'lifetime_energy': None, 'max_report_watts': 136, 'serial_number': '482218039918', 'temperature': None, }), '482218042609': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218042609', 'temperature': None, }), '482218042662': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213239, 'last_report_duration': None, 'last_report_watts': 90, 'lifetime_energy': None, 'max_report_watts': 116, 'serial_number': '482218042662', 'temperature': None, }), '482218042737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213240, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 130, 'serial_number': '482218042737', 'temperature': None, }), '482218042901': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 103, 'serial_number': '482218042901', 'temperature': None, }), '482218043030': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 102, 'serial_number': '482218043030', 'temperature': None, }), '482218043257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213243, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 137, 'serial_number': '482218043257', 'temperature': None, }), '482218043590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213245, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 108, 'serial_number': '482218043590', 'temperature': None, }), '482218043592': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213264, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 106, 'serial_number': '482218043592', 'temperature': None, }), '482218043652': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213265, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218043652', 'temperature': None, }), '482218043981': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213266, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 121, 'serial_number': '482218043981', 'temperature': None, }), '482218047061': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213267, 'last_report_duration': None, 'last_report_watts': 100, 'lifetime_energy': None, 'max_report_watts': 125, 'serial_number': '482218047061', 'temperature': None, }), '482218047087': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213268, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 101, 'serial_number': '482218047087', 'temperature': None, }), '482218047088': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213269, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 104, 'serial_number': '482218047088', 'temperature': None, }), '482218047099': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718212938, 'last_report_duration': None, 'last_report_watts': 74, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218047099', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-05-27 10:06:36 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 50, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 50, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1718213113, 'lastReportWatts': 67, 'maxReportWatts': 122, 'serialNumber': '482218039091', }), dict({ 'devType': 1, 'lastReportDate': 1718213114, 'lastReportWatts': 61, 'maxReportWatts': 115, 'serialNumber': '482218039209', }), dict({ 'devType': 1, 'lastReportDate': 1718213115, 'lastReportWatts': 69, 'maxReportWatts': 132, 'serialNumber': '482218039304', }), dict({ 'devType': 1, 'lastReportDate': 1718213116, 'lastReportWatts': 64, 'maxReportWatts': 112, 'serialNumber': '482218039386', }), dict({ 'devType': 1, 'lastReportDate': 1718213117, 'lastReportWatts': 63, 'maxReportWatts': 123, 'serialNumber': '482218039390', }), dict({ 'devType': 1, 'lastReportDate': 1718213143, 'lastReportWatts': 75, 'maxReportWatts': 120, 'serialNumber': '482218039529', }), dict({ 'devType': 1, 'lastReportDate': 1718213203, 'lastReportWatts': 89, 'maxReportWatts': 135, 'serialNumber': '482218039700', }), dict({ 'devType': 1, 'lastReportDate': 1718213204, 'lastReportWatts': 84, 'maxReportWatts': 118, 'serialNumber': '482218039736', }), dict({ 'devType': 1, 'lastReportDate': 1718213234, 'lastReportWatts': 95, 'maxReportWatts': 100, 'serialNumber': '482218039788', }), dict({ 'devType': 1, 'lastReportDate': 1718213235, 'lastReportWatts': 96, 'maxReportWatts': 134, 'serialNumber': '482218039880', }), dict({ 'devType': 1, 'lastReportDate': 1718213236, 'lastReportWatts': 97, 'maxReportWatts': 133, 'serialNumber': '482218039911', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 99, 'maxReportWatts': 136, 'serialNumber': '482218039918', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 95, 'maxReportWatts': 107, 'serialNumber': '482218042609', }), dict({ 'devType': 1, 'lastReportDate': 1718213239, 'lastReportWatts': 90, 'maxReportWatts': 116, 'serialNumber': '482218042662', }), dict({ 'devType': 1, 'lastReportDate': 1718213240, 'lastReportWatts': 96, 'maxReportWatts': 130, 'serialNumber': '482218042737', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 96, 'maxReportWatts': 103, 'serialNumber': '482218042901', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 95, 'maxReportWatts': 102, 'serialNumber': '482218043030', }), dict({ 'devType': 1, 'lastReportDate': 1718213243, 'lastReportWatts': 98, 'maxReportWatts': 137, 'serialNumber': '482218043257', }), dict({ 'devType': 1, 'lastReportDate': 1718213245, 'lastReportWatts': 95, 'maxReportWatts': 108, 'serialNumber': '482218043590', }), dict({ 'devType': 1, 'lastReportDate': 1718213264, 'lastReportWatts': 98, 'maxReportWatts': 106, 'serialNumber': '482218043592', }), dict({ 'devType': 1, 'lastReportDate': 1718213265, 'lastReportWatts': 101, 'maxReportWatts': 107, 'serialNumber': '482218043652', }), dict({ 'devType': 1, 'lastReportDate': 1718213266, 'lastReportWatts': 96, 'maxReportWatts': 121, 'serialNumber': '482218043981', }), dict({ 'devType': 1, 'lastReportDate': 1718213267, 'lastReportWatts': 100, 'maxReportWatts': 125, 'serialNumber': '482218047061', }), dict({ 'devType': 1, 'lastReportDate': 1718213268, 'lastReportWatts': 101, 'maxReportWatts': 101, 'serialNumber': '482218047087', }), dict({ 'devType': 1, 'lastReportDate': 1718213269, 'lastReportWatts': 98, 'maxReportWatts': 104, 'serialNumber': '482218047088', }), dict({ 'devType': 1, 'lastReportDate': 1718212938, 'lastReportWatts': 74, 'maxReportWatts': 107, 'serialNumber': '482218047099', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1718210586, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 2, 'img_load_date': 1718210586, 'img_pnum_running': '2.0.6727_rel/22.15', 'installed': 1718210586, 'last_rpt_date': 1718213052, 'led_status': 12, 'maxCellTemp': 27, 'part_num': '836-00750-r32', 'percentFull': 98, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492234001350', 'sleep_enabled': False, 'temperature': 27, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-generator', 'Enpwr_curr_state_id': 128, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 16124, 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1718209911, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1718209911, 'img_pnum_running': '2.0.5729_rel/22.15', 'installed': 1718209911, 'last_rpt_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'part_num': '860-00376-r37', 'serial_num': '122210043898', 'temperature': 91, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'serial_num': '492234001350', 'soc': 98, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 3292, 'ENC_agg_backup_energy': 1680, 'ENC_agg_soc': 98, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 3360, 'Enc_max_available_capacity': 3360, 'Max_energy': 3360, 'VLS_Limit': 10, 'adjusted_backup_soc': 50, 'agg_soc': 98, 'configured_backup_soc': 50, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': -15.69999885559082, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -502, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 15097304.67, 'actEnergyRcvd': 15.392, 'activePower': 2336.093, 'apparentEnergy': 18631234.536, 'apparentPower': 2643.758, 'channels': list([ dict({ 'actEnergyDlvd': 7551632.356, 'actEnergyRcvd': 7.79, 'activePower': 1172.624, 'apparentEnergy': 9315712.558, 'apparentPower': 1324.867, 'current': 10.607, 'eid': 1778385169, 'freq': 60.062, 'instantaneousDemand': 1172.624, 'pwrFactor': 0.883, 'reactEnergyLagg': 2061239.812, 'reactEnergyLead': 2910.699, 'reactivePower': -557.096, 'timestamp': 1718213332, 'voltage': 121.774, }), dict({ 'actEnergyDlvd': 7545672.313, 'actEnergyRcvd': 7.603, 'activePower': 1163.469, 'apparentEnergy': 9315521.977, 'apparentPower': 1318.892, 'current': 10.615, 'eid': 1778385170, 'freq': 60.062, 'instantaneousDemand': 1163.469, 'pwrFactor': 0.877, 'reactEnergyLagg': 2054781.564, 'reactEnergyLead': 4234.214, 'reactivePower': -554.743, 'timestamp': 1718213332, 'voltage': 121.113, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 21.222, 'eid': 704643328, 'freq': 60.062, 'instantaneousDemand': 2336.093, 'pwrFactor': 0.88, 'reactEnergyLagg': 4116021.375, 'reactEnergyLead': 7144.913, 'reactivePower': -1111.839, 'timestamp': 1718213332, 'voltage': 242.887, }), dict({ 'actEnergyDlvd': 13632727.119, 'actEnergyRcvd': 6336017.38, 'activePower': 195.575, 'apparentEnergy': 23220664.459, 'apparentPower': 1088.544, 'channels': list([ dict({ 'actEnergyDlvd': 7037858.755, 'actEnergyRcvd': 2542489.025, 'activePower': 267.695, 'apparentEnergy': 11417171.695, 'apparentPower': 574.709, 'current': 4.859, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 267.695, 'pwrFactor': 0.637, 'reactEnergyLagg': 417029.372, 'reactEnergyLead': 4242565.474, 'reactivePower': 474.518, 'timestamp': 1718213332, 'voltage': 121.856, }), dict({ 'actEnergyDlvd': 6594868.364, 'actEnergyRcvd': 3793528.355, 'activePower': -72.12, 'apparentEnergy': 11803492.765, 'apparentPower': 513.834, 'current': 4.239, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': -72.12, 'pwrFactor': 0.081, 'reactEnergyLagg': 68699.07, 'reactEnergyLead': 3480803.913, 'reactivePower': 464.057, 'timestamp': 1718213332, 'voltage': 121.192, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 9.098, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 195.575, 'pwrFactor': 0.398, 'reactEnergyLagg': 485728.442, 'reactEnergyLead': 7723369.387, 'reactivePower': 938.575, 'timestamp': 1718213332, 'voltage': 243.047, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/ivp/ss/gen_config': dict({ 'charge_from_generator': True, 'cool_down_mins': 0, 'gen_type': 'Standby', 'generator_id': '', 'last_updated_by': 'ITK', 'manufacturer': 'Generac', 'max_cont_gen_amps': 58.3, 'max_gen_efficiency_perc': 100, 'min_gen_loading_perc': 5, 'model': 'G007223-0, G007224-0, G007225-0 (14kW)', 'name_plate_rating_wat': 14.0, 'start_method': 'Auto', 'warm_up_mins': 0, }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2775.526, 'measurementType': 'total-consumption', 'pwrFactor': 0.92, 'reactPwr': -197.689, 'readingTime': 1718213330, 'rmsCurrent': 22.811, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 1585.814, 'varhLagLifetime': -3630293.476, 'varhLagToday': 598.0, 'varhLeadLifetime': 7716225.126, 'varhLeadToday': 0.0, 'wNow': 2670.058, 'whLastSevenDays': 882.448, 'whLifetime': 22392008.448, 'whToday': 3333.448, }), dict({ 'activeCount': 1, 'apprntPwr': 54.157, 'measurementType': 'net-consumption', 'pwrFactor': 1.0, 'reactPwr': 892.549, 'readingTime': 1718213330, 'rmsCurrent': 0.422, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 0, 'varhLagLifetime': 485727.899, 'varhLagToday': 0, 'varhLeadLifetime': 7723369.387, 'varhLeadToday': 0, 'wNow': 240.397, 'whLastSevenDays': 0, 'whLifetime': 7298714.07, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 26, 'readingTime': 1718213270, 'type': 'inverters', 'wNow': 2317, 'whLifetime': 1107526, }), dict({ 'activeCount': 1, 'apprntPwr': 2707.323, 'measurementType': 'production', 'pwrFactor': 0.92, 'reactPwr': -1090.238, 'readingTime': 1718213330, 'rmsCurrent': 22.389, 'rmsVoltage': 242.897, 'type': 'eim', 'vahLifetime': 18631233.018, 'vahToday': 2965.018, 'varhLagLifetime': 4116021.375, 'varhLagToday': 3.375, 'varhLeadLifetime': 7144.262, 'varhLeadToday': 959.262, 'wNow': 2429.661, 'whLastSevenDays': 360056.35, 'whLifetime': 15097303.35, 'whToday': 2645.35, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 882, 'watt_hours_lifetime': 22392008, 'watt_hours_today': 3333, 'watts_now': 2670, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7298714, 'watt_hours_today': 0, 'watts_now': 240, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 360056, 'watt_hours_lifetime': 15097303, 'watt_hours_today': 2645, 'watts_now': 2430, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 50, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4264_metered_noct] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121734002573': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1746702346, 'last_report_duration': None, 'last_report_watts': 169, 'lifetime_energy': None, 'max_report_watts': 255, 'serial_number': '121734002573', 'temperature': None, }), '121734002908': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1746702376, 'last_report_duration': None, 'last_report_watts': 167, 'lifetime_energy': None, 'max_report_watts': 255, 'serial_number': '121734002908', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2025-05-07 19:18:12 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1743427085', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1746645538', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 30.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1746702346, 'lastReportWatts': 169, 'maxReportWatts': 255, 'serialNumber': '121734002573', }), dict({ 'devType': 1, 'lastReportDate': 1746702376, 'lastReportWatts': 167, 'maxReportWatts': 255, 'serialNumber': '121734002908', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 46.343, 'lines': list([ dict({ 'apprntPwr': 10.608, 'pwrFactor': -0.03, 'reactPwr': -0.0, 'rmsCurrent': 0.044, 'rmsVoltage': 238.896, 'vahLifetime': 9382.18, 'vahToday': 396.18, 'varhLagLifetime': -0.111, 'varhLagToday': 0.0, 'varhLeadLifetime': -0.335, 'varhLeadToday': 0.0, 'wNow': -0.319, 'whLastSevenDays': 0.0, 'whLifetime': -7.908, 'whToday': 0.0, }), dict({ 'apprntPwr': -31.399, 'pwrFactor': -1.0, 'reactPwr': 0.595, 'rmsCurrent': -0.133, 'rmsVoltage': 236.932, 'vahLifetime': 7784.254, 'vahToday': 328.254, 'varhLagLifetime': -0.805, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': -2.851, 'whLastSevenDays': 0.946, 'whLifetime': 1.946, 'whToday': 1.946, }), dict({ 'apprntPwr': 67.134, 'pwrFactor': 0.02, 'reactPwr': 0.0, 'rmsCurrent': 0.281, 'rmsVoltage': 238.742, 'vahLifetime': 389.836, 'vahToday': 16.836, 'varhLagLifetime': 0.001, 'varhLagToday': 0.001, 'varhLeadLifetime': -4.914, 'varhLeadToday': 0.0, 'wNow': 1.334, 'whLastSevenDays': 0.0, 'whLifetime': -12.192, 'whToday': 0.0, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': -0.32, 'reactPwr': 0.595, 'readingTime': 1746702913, 'rmsCurrent': 0.193, 'rmsVoltage': 714.57, 'type': 'eim', 'vahLifetime': 17556.27, 'vahToday': 741.27, 'varhLagLifetime': -0.915, 'varhLagToday': 0.0, 'varhLeadLifetime': -5.249, 'varhLeadToday': 0.0, 'wNow': -1.837, 'whLastSevenDays': 0.0, 'whLifetime': -18.153, 'whToday': 1.0, }), dict({ 'activeCount': 0, 'apprntPwr': -69.159, 'lines': list([ dict({ 'apprntPwr': -37.76, 'pwrFactor': -1.0, 'reactPwr': -0.0, 'rmsCurrent': -0.158, 'rmsVoltage': 238.896, 'vahLifetime': 9382.18, 'vahToday': 0, 'varhLagLifetime': 0.521, 'varhLagToday': 0, 'varhLeadLifetime': 3.279, 'varhLeadToday': 0, 'wNow': -2.644, 'whLastSevenDays': 0, 'whLifetime': -800.35, 'whToday': 0, }), dict({ 'apprntPwr': -31.399, 'pwrFactor': -1.0, 'reactPwr': 0.595, 'rmsCurrent': -0.133, 'rmsVoltage': 236.932, 'vahLifetime': 7784.254, 'vahToday': 0, 'varhLagLifetime': 115.089, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': -2.851, 'whLastSevenDays': 0, 'whLifetime': -520.723, 'whToday': 0, }), dict({ 'apprntPwr': 0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': 0.0, 'rmsVoltage': 238.742, 'vahLifetime': 389.836, 'vahToday': 0, 'varhLagLifetime': 0.001, 'varhLagToday': 0, 'varhLeadLifetime': 26.448, 'varhLeadToday': 0, 'wNow': 0.0, 'whLastSevenDays': 0, 'whLifetime': -902.572, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.595, 'readingTime': 1746702913, 'rmsCurrent': -0.291, 'rmsVoltage': 714.57, 'type': 'eim', 'vahLifetime': 17556.27, 'vahToday': 0, 'varhLagLifetime': 115.611, 'varhLagToday': 0, 'varhLeadLifetime': 29.727, 'varhLeadToday': 0, 'wNow': -5.495, 'whLastSevenDays': 0, 'whLifetime': -2223.645, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 38, 'readingTime': 1746702889, 'type': 'inverters', 'wNow': 5521, 'whLifetime': 32465106, }), dict({ 'activeCount': 0, 'apprntPwr': 115.121, 'lines': list([ dict({ 'apprntPwr': 48.155, 'pwrFactor': 0.0, 'reactPwr': -0.0, 'rmsCurrent': 0.202, 'rmsVoltage': 238.77, 'vahLifetime': 11902.303, 'vahToday': 502.303, 'varhLagLifetime': 0.632, 'varhLagToday': 0.632, 'varhLeadLifetime': 3.614, 'varhLeadToday': 0.614, 'wNow': 2.325, 'whLastSevenDays': 487.407, 'whLifetime': 508.407, 'whToday': 22.407, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': -0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 236.917, 'vahLifetime': 875.964, 'vahToday': 37.964, 'varhLagLifetime': 115.894, 'varhLagToday': 4.894, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': 0.0, 'whLastSevenDays': 572.104, 'whLifetime': 597.104, 'whToday': 26.104, }), dict({ 'apprntPwr': 66.966, 'pwrFactor': 0.0, 'reactPwr': -0.0, 'rmsCurrent': 0.281, 'rmsVoltage': 238.712, 'vahLifetime': 16546.948, 'vahToday': 694.948, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 31.361, 'varhLeadToday': 1.361, 'wNow': 1.334, 'whLastSevenDays': 461.147, 'whLifetime': 481.147, 'whToday': 21.147, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': -0.0, 'readingTime': 1746702913, 'rmsCurrent': 0.484, 'rmsVoltage': 714.399, 'type': 'eim', 'vahLifetime': 29325.215, 'vahToday': 1235.215, 'varhLagLifetime': 116.526, 'varhLagToday': 5.526, 'varhLeadLifetime': 34.976, 'varhLeadToday': 1.976, 'wNow': 3.659, 'whLastSevenDays': 1520.658, 'whLifetime': 1586.658, 'whToday': 69.658, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 1521, 'watt_hours_lifetime': 32465106, 'watt_hours_today': 70, 'watts_now': 5521, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1743427085', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1746645538', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 30.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4286_with_3cts_and_battery_split] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 1750, 'current': 22.923, 'eid': 704643584, 'energy_delivered': 5855939, 'energy_received': 4173334, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.618, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 247.172, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 810, 'current': 11.642, 'eid': 1778385425, 'energy_delivered': 2817654, 'energy_received': 2329054, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.563, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.482, }), : dict({ 'active_power': 940, 'current': 11.281, 'eid': 1778385426, 'energy_delivered': 3038285, 'energy_received': 1844280, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.674, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.69, }), }), 'ctmeter_production': dict({ 'active_power': 7131, 'current': 58.537, 'eid': 704643328, 'energy_delivered': 13431337, 'energy_received': 165, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.985, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 247.307, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 3562, 'current': 29.262, 'eid': 1778385169, 'energy_delivered': 6709437, 'energy_received': 93, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.984, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.571, }), : dict({ 'active_power': 3569, 'current': 29.276, 'eid': 1778385170, 'energy_delivered': 6721900, 'energy_received': 72, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.986, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.736, }), }), 'ctmeter_storage': dict({ 'active_power': -7084, 'current': 57.627, 'eid': 704643840, 'energy_delivered': 4073871, 'energy_received': 5409935, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.962, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 247.392, }), 'ctmeter_storage_phases': dict({ : dict({ 'active_power': -3538, 'current': 28.813, 'eid': 1778385681, 'energy_delivered': 2036140, 'energy_received': 2703734, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.994, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.696, }), : dict({ 'active_power': -3545, 'current': 28.813, 'eid': 1778385682, 'energy_delivered': 2037731, 'energy_received': 2706201, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.994, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1722967007, 'voltage': 123.696, }), }), 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 11600, 'backup_reserve': 25000, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 25000, 'reserve_state_of_charge': 100, 'state_of_charge': 46, }), 'encharge_inventory': dict({ '492320000140': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887725, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887725, 'last_report_date': 1722966950, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 39, 'serial_number': '492320000140', 'temperature': 18, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492320000148': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887786, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887786, 'last_report_date': 1722966985, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 48, 'serial_number': '492320000148', 'temperature': 19, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492320000149': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887766, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887766, 'last_report_date': 1722966742, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 48, 'serial_number': '492320000149', 'temperature': 19, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492320000158': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887775, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887775, 'last_report_date': 1722966878, 'led_status': 12, 'max_cell_temp': 19, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 49, 'serial_number': '492320000158', 'temperature': 19, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492335008361': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1722887827, 'firmware_version': '3.0.7545_rel/31.33', 'installed_date': 1722887827, 'last_report_date': 1722966808, 'led_status': 12, 'max_cell_temp': 23, 'operating': None, 'part_number': '836-01826-r81', 'percent_full': 48, 'serial_number': '492335008361', 'temperature': 23, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492320000140': dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'soc': 39, }), '492320000148': dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'soc': 48, }), '492320000149': dict({ 'apparent_power_mva': -1316000, 'real_power_mw': -1316000, 'soc': 48, }), '492320000158': dict({ 'apparent_power_mva': -1317000, 'real_power_mw': -1317000, 'soc': 49, }), '492335008361': dict({ 'apparent_power_mva': -1311000, 'real_power_mw': -1311000, 'soc': 48, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1722887831, 'firmware_version': '3.0.6297_rel/31.33', 'grid_mode': 'multimode-ongrid', 'installed_date': 1722887831, 'last_report_date': 1722967000, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00378-r27', 'serial_number': '482326107450', 'temperature': 83, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '202330048668': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966762, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '202330048668', 'temperature': None, }), '202330048813': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966671, 'last_report_duration': None, 'last_report_watts': 291, 'lifetime_energy': None, 'max_report_watts': 293, 'serial_number': '202330048813', 'temperature': None, }), '202330048928': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966672, 'last_report_duration': None, 'last_report_watts': 290, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '202330048928', 'temperature': None, }), '202330052050': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966883, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330052050', 'temperature': None, }), '202330052070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966856, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202330052070', 'temperature': None, }), '202330054362': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966701, 'last_report_duration': None, 'last_report_watts': 291, 'lifetime_energy': None, 'max_report_watts': 294, 'serial_number': '202330054362', 'temperature': None, }), '202330056305': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966827, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330056305', 'temperature': None, }), '202330056471': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966792, 'last_report_duration': None, 'last_report_watts': 293, 'lifetime_energy': None, 'max_report_watts': 293, 'serial_number': '202330056471', 'temperature': None, }), '202330056742': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966763, 'last_report_duration': None, 'last_report_watts': 295, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '202330056742', 'temperature': None, }), '202330057375': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966795, 'last_report_duration': None, 'last_report_watts': 292, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '202330057375', 'temperature': None, }), '202330057549': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966851, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330057549', 'temperature': None, }), '202330057882': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966857, 'last_report_duration': None, 'last_report_watts': 154, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202330057882', 'temperature': None, }), '202330058066': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966826, 'last_report_duration': None, 'last_report_watts': 156, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '202330058066', 'temperature': None, }), '202330058090': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966823, 'last_report_duration': None, 'last_report_watts': 180, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330058090', 'temperature': None, }), '202330058398': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966822, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330058398', 'temperature': None, }), '202330058599': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966702, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202330058599', 'temperature': None, }), '202330059925': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966831, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202330059925', 'temperature': None, }), '202330059996': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966825, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330059996', 'temperature': None, }), '202330061061': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966855, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330061061', 'temperature': None, }), '202330061346': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966761, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330061346', 'temperature': None, }), '202330061485': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966882, 'last_report_duration': None, 'last_report_watts': 15, 'lifetime_energy': None, 'max_report_watts': 332, 'serial_number': '202330061485', 'temperature': None, }), '202330061497': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966853, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330061497', 'temperature': None, }), '202330061595': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966858, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '202330061595', 'temperature': None, }), '202330061684': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966829, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '202330061684', 'temperature': None, }), '202330061749': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966823, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330061749', 'temperature': None, }), '202330062100': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966859, 'last_report_duration': None, 'last_report_watts': 182, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202330062100', 'temperature': None, }), '202330062263': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966796, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330062263', 'temperature': None, }), '202330062327': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966854, 'last_report_duration': None, 'last_report_watts': 185, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202330062327', 'temperature': None, }), '202330062411': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966830, 'last_report_duration': None, 'last_report_watts': 181, 'lifetime_energy': None, 'max_report_watts': 333, 'serial_number': '202330062411', 'temperature': None, }), '202330062671': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966793, 'last_report_duration': None, 'last_report_watts': 155, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '202330062671', 'temperature': None, }), '202330062816': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966791, 'last_report_duration': None, 'last_report_watts': 184, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202330062816', 'temperature': None, }), '202330063659': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966794, 'last_report_duration': None, 'last_report_watts': 179, 'lifetime_energy': None, 'max_report_watts': 331, 'serial_number': '202330063659', 'temperature': None, }), '202330066965': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966826, 'last_report_duration': None, 'last_report_watts': 153, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202330066965', 'temperature': None, }), '202330067698': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966828, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 340, 'serial_number': '202330067698', 'temperature': None, }), '202330068303': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1722966882, 'last_report_duration': None, 'last_report_watts': 30, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202330068303', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-08-06 17:56:47 UTC', 'filename': '', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), }), 'source': '', 'version': '', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1722602347', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.36445000767707825, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1722551964', 'mode': 'self-consumption', 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': True, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1722966851, 'lastReportWatts': 184, 'maxReportWatts': 335, 'serialNumber': '202330057549', }), dict({ 'devType': 1, 'lastReportDate': 1722966761, 'lastReportWatts': 181, 'maxReportWatts': 333, 'serialNumber': '202330061346', }), dict({ 'devType': 1, 'lastReportDate': 1722966882, 'lastReportWatts': 15, 'maxReportWatts': 332, 'serialNumber': '202330061485', }), dict({ 'devType': 1, 'lastReportDate': 1722966762, 'lastReportWatts': 155, 'maxReportWatts': 247, 'serialNumber': '202330048668', }), dict({ 'devType': 1, 'lastReportDate': 1722966763, 'lastReportWatts': 295, 'maxReportWatts': 296, 'serialNumber': '202330056742', }), dict({ 'devType': 1, 'lastReportDate': 1722966671, 'lastReportWatts': 291, 'maxReportWatts': 293, 'serialNumber': '202330048813', }), dict({ 'devType': 1, 'lastReportDate': 1722966822, 'lastReportWatts': 302, 'maxReportWatts': 337, 'serialNumber': '202330058398', }), dict({ 'devType': 1, 'lastReportDate': 1722966672, 'lastReportWatts': 290, 'maxReportWatts': 292, 'serialNumber': '202330048928', }), dict({ 'devType': 1, 'lastReportDate': 1722966823, 'lastReportWatts': 180, 'maxReportWatts': 333, 'serialNumber': '202330058090', }), dict({ 'devType': 1, 'lastReportDate': 1722966823, 'lastReportWatts': 184, 'maxReportWatts': 337, 'serialNumber': '202330061749', }), dict({ 'devType': 1, 'lastReportDate': 1722966825, 'lastReportWatts': 182, 'maxReportWatts': 337, 'serialNumber': '202330059996', }), dict({ 'devType': 1, 'lastReportDate': 1722966826, 'lastReportWatts': 153, 'maxReportWatts': 242, 'serialNumber': '202330066965', }), dict({ 'devType': 1, 'lastReportDate': 1722966826, 'lastReportWatts': 156, 'maxReportWatts': 249, 'serialNumber': '202330058066', }), dict({ 'devType': 1, 'lastReportDate': 1722966701, 'lastReportWatts': 291, 'maxReportWatts': 294, 'serialNumber': '202330054362', }), dict({ 'devType': 1, 'lastReportDate': 1722966827, 'lastReportWatts': 181, 'maxReportWatts': 335, 'serialNumber': '202330056305', }), dict({ 'devType': 1, 'lastReportDate': 1722966828, 'lastReportWatts': 305, 'maxReportWatts': 340, 'serialNumber': '202330067698', }), dict({ 'devType': 1, 'lastReportDate': 1722966829, 'lastReportWatts': 186, 'maxReportWatts': 338, 'serialNumber': '202330061684', }), dict({ 'devType': 1, 'lastReportDate': 1722966791, 'lastReportWatts': 184, 'maxReportWatts': 335, 'serialNumber': '202330062816', }), dict({ 'devType': 1, 'lastReportDate': 1722966792, 'lastReportWatts': 293, 'maxReportWatts': 293, 'serialNumber': '202330056471', }), dict({ 'devType': 1, 'lastReportDate': 1722966793, 'lastReportWatts': 155, 'maxReportWatts': 246, 'serialNumber': '202330062671', }), dict({ 'devType': 1, 'lastReportDate': 1722966830, 'lastReportWatts': 181, 'maxReportWatts': 333, 'serialNumber': '202330062411', }), dict({ 'devType': 1, 'lastReportDate': 1722966794, 'lastReportWatts': 179, 'maxReportWatts': 331, 'serialNumber': '202330063659', }), dict({ 'devType': 1, 'lastReportDate': 1722966795, 'lastReportWatts': 292, 'maxReportWatts': 292, 'serialNumber': '202330057375', }), dict({ 'devType': 1, 'lastReportDate': 1722966702, 'lastReportWatts': 155, 'maxReportWatts': 245, 'serialNumber': '202330058599', }), dict({ 'devType': 1, 'lastReportDate': 1722966831, 'lastReportWatts': 182, 'maxReportWatts': 334, 'serialNumber': '202330059925', }), dict({ 'devType': 1, 'lastReportDate': 1722966853, 'lastReportWatts': 184, 'maxReportWatts': 335, 'serialNumber': '202330061497', }), dict({ 'devType': 1, 'lastReportDate': 1722966854, 'lastReportWatts': 185, 'maxReportWatts': 337, 'serialNumber': '202330062327', }), dict({ 'devType': 1, 'lastReportDate': 1722966882, 'lastReportWatts': 30, 'maxReportWatts': 336, 'serialNumber': '202330068303', }), dict({ 'devType': 1, 'lastReportDate': 1722966855, 'lastReportWatts': 302, 'maxReportWatts': 333, 'serialNumber': '202330061061', }), dict({ 'devType': 1, 'lastReportDate': 1722966883, 'lastReportWatts': 182, 'maxReportWatts': 337, 'serialNumber': '202330052050', }), dict({ 'devType': 1, 'lastReportDate': 1722966856, 'lastReportWatts': 155, 'maxReportWatts': 245, 'serialNumber': '202330052070', }), dict({ 'devType': 1, 'lastReportDate': 1722966796, 'lastReportWatts': 181, 'maxReportWatts': 333, 'serialNumber': '202330062263', }), dict({ 'devType': 1, 'lastReportDate': 1722966857, 'lastReportWatts': 154, 'maxReportWatts': 243, 'serialNumber': '202330057882', }), dict({ 'devType': 1, 'lastReportDate': 1722966858, 'lastReportWatts': 303, 'maxReportWatts': 338, 'serialNumber': '202330061595', }), dict({ 'devType': 1, 'lastReportDate': 1722966859, 'lastReportWatts': 182, 'maxReportWatts': 336, 'serialNumber': '202330062100', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887725, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887725, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887725, 'last_rpt_date': 1722966950, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 39, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000140', 'sleep_enabled': False, 'temperature': 18, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887786, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887786, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887786, 'last_rpt_date': 1722966985, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 48, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000148', 'sleep_enabled': False, 'temperature': 19, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887766, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887766, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887766, 'last_rpt_date': 1722966742, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 48, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000149', 'sleep_enabled': False, 'temperature': 19, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887775, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887775, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887775, 'last_rpt_date': 1722966878, 'led_status': 12, 'maxCellTemp': 19, 'part_num': '836-01826-r76', 'percentFull': 49, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492320000158', 'sleep_enabled': False, 'temperature': 19, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.69', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887827, 'dc_switch_off': False, 'der_index': 3, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1722887827, 'img_pnum_running': '3.0.7545_rel/31.33', 'installed': 1722887827, 'last_rpt_date': 1722966808, 'led_status': 12, 'maxCellTemp': 23, 'part_num': '836-01826-r81', 'percentFull': 48, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492335008361', 'sleep_enabled': False, 'temperature': 23, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15868, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1722887831, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1722887831, 'img_pnum_running': '3.0.6297_rel/31.33', 'installed': 1722887831, 'last_rpt_date': 1722967000, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00378-r27', 'serial_num': '482326107450', 'temperature': 83, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'serial_num': '492320000140', 'soc': 39, }), dict({ 'apparent_power_mva': -1324000, 'real_power_mw': -1324000, 'serial_num': '492320000148', 'soc': 48, }), dict({ 'apparent_power_mva': -1316000, 'real_power_mw': -1316000, 'serial_num': '492320000149', 'soc': 48, }), dict({ 'apparent_power_mva': -1317000, 'real_power_mw': -1317000, 'serial_num': '492320000158', 'soc': 49, }), dict({ 'apparent_power_mva': -1311000, 'real_power_mw': -1311000, 'serial_num': '492335008361', 'soc': 48, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 11600, 'ENC_agg_backup_energy': 25000, 'ENC_agg_soc': 46, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 25000, 'Enc_max_available_capacity': 25000, 'Max_energy': 25000, 'VLS_Limit': 10, 'adjusted_backup_soc': 100, 'agg_soc': 46, 'configured_backup_soc': 100, 'freq_bias_hz': -0.4749099016189575, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -763, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 2, 'soc_recovery_exit': 10, 'voltage_bias_v': -5.702916622161865, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -182, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643840, 'measurementType': 'storage', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 13431336.968, 'actEnergyRcvd': 164.852, 'activePower': 7131.017, 'apparentEnergy': 17695037.667, 'apparentPower': 7237.365, 'channels': list([ dict({ 'actEnergyDlvd': 6709437.261, 'actEnergyRcvd': 92.996, 'activePower': 3562.174, 'apparentEnergy': 8841528.936, 'apparentPower': 3615.485, 'current': 29.262, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 3562.174, 'pwrFactor': 0.984, 'reactEnergyLagg': 1433208.527, 'reactEnergyLead': 100991.799, 'reactivePower': 2.24, 'timestamp': 1722967007, 'voltage': 123.571, }), dict({ 'actEnergyDlvd': 6721899.707, 'actEnergyRcvd': 71.856, 'activePower': 3568.843, 'apparentEnergy': 8853508.731, 'apparentPower': 3621.88, 'current': 29.276, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 3568.843, 'pwrFactor': 0.986, 'reactEnergyLagg': 1437578.543, 'reactEnergyLead': 96894.114, 'reactivePower': -5.959, 'timestamp': 1722967007, 'voltage': 123.736, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1722967007, 'voltage': 0.0, }), ]), 'current': 58.537, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 7131.017, 'pwrFactor': 0.985, 'reactEnergyLagg': 2870787.07, 'reactEnergyLead': 197885.914, 'reactivePower': -3.719, 'timestamp': 1722967007, 'voltage': 247.307, }), dict({ 'actEnergyDlvd': 5855939.23, 'actEnergyRcvd': 4173334.272, 'activePower': 1749.504, 'apparentEnergy': 25731843.679, 'apparentPower': 2826.5, 'channels': list([ dict({ 'actEnergyDlvd': 2817654.26, 'actEnergyRcvd': 2329054.288, 'activePower': 809.907, 'apparentEnergy': 12904982.372, 'apparentPower': 1438.017, 'current': 11.642, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 809.907, 'pwrFactor': 0.563, 'reactEnergyLagg': 8801.054, 'reactEnergyLead': 9410020.986, 'reactivePower': -851.171, 'timestamp': 1722967007, 'voltage': 123.482, }), dict({ 'actEnergyDlvd': 3038284.97, 'actEnergyRcvd': 1844279.984, 'activePower': 939.597, 'apparentEnergy': 12826861.306, 'apparentPower': 1388.484, 'current': 11.281, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 939.597, 'pwrFactor': 0.674, 'reactEnergyLagg': 5083.172, 'reactEnergyLead': 9489490.631, 'reactivePower': -530.687, 'timestamp': 1722967007, 'voltage': 123.69, }), dict({ 'actEnergyDlvd': 2037731.459, 'actEnergyRcvd': 2706201.405, 'activePower': -3545.209, 'apparentEnergy': 7469208.32, 'apparentPower': 3563.706, 'current': 28.813, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': -3545.209, 'pwrFactor': -0.994, 'reactEnergyLagg': 3071742.732, 'reactEnergyLead': 73803.42, 'reactivePower': 22.091, 'timestamp': 1722967007, 'voltage': 123.696, }), ]), 'current': 22.923, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 1749.504, 'pwrFactor': 0.618, 'reactEnergyLagg': 13884.226, 'reactEnergyLead': 18899511.617, 'reactivePower': -1381.858, 'timestamp': 1722967007, 'voltage': 247.172, }), dict({ 'actEnergyDlvd': 4073871.031, 'actEnergyRcvd': 5409935.465, 'activePower': -7083.656, 'apparentEnergy': 14939666.293, 'apparentPower': 7210.614, 'channels': list([ dict({ 'actEnergyDlvd': 2036139.572, 'actEnergyRcvd': 2703734.06, 'activePower': -3538.447, 'apparentEnergy': 7470457.973, 'apparentPower': 3646.908, 'current': 28.813, 'eid': 1778385681, 'freq': 60.0, 'instantaneousDemand': -3538.447, 'pwrFactor': -0.994, 'reactEnergyLagg': 3072253.785, 'reactEnergyLead': 73813.053, 'reactivePower': 27.294, 'timestamp': 1722967007, 'voltage': 123.696, }), dict({ 'actEnergyDlvd': 2037731.459, 'actEnergyRcvd': 2706201.405, 'activePower': -3545.209, 'apparentEnergy': 7469208.32, 'apparentPower': 3563.706, 'current': 28.813, 'eid': 1778385682, 'freq': 60.0, 'instantaneousDemand': -3545.209, 'pwrFactor': -0.994, 'reactEnergyLagg': 3071742.732, 'reactEnergyLead': 73803.42, 'reactivePower': 22.091, 'timestamp': 1722967007, 'voltage': 123.696, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385683, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1722967007, 'voltage': 0.0, }), ]), 'current': 57.627, 'eid': 704643840, 'freq': 60.0, 'instantaneousDemand': -7083.656, 'pwrFactor': -0.962, 'reactEnergyLagg': 6143996.517, 'reactEnergyLead': 147616.472, 'reactivePower': 49.385, 'timestamp': 1722967007, 'voltage': 247.392, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 10045.047, 'lines': list([ dict({ 'apprntPwr': 5056.383, 'pwrFactor': 0.87, 'reactPwr': -845.076, 'rmsCurrent': 40.957, 'rmsVoltage': 123.455, 'vahLifetime': 12904980.692, 'vahToday': 5443650.692, 'varhLagLifetime': -1424407.47, 'varhLagToday': 5048.0, 'varhLeadLifetime': 9309028.193, 'varhLeadToday': 9235408.193, 'wNow': 4407.017, 'whLastSevenDays': 0.0, 'whLifetime': 7197820.664, 'whToday': 0.0, }), dict({ 'apprntPwr': 4988.664, 'pwrFactor': 0.9, 'reactPwr': -535.229, 'rmsCurrent': 40.347, 'rmsVoltage': 123.643, 'vahLifetime': 12826859.692, 'vahToday': 5366803.692, 'varhLagLifetime': -1432495.371, 'varhLagToday': 5066.0, 'varhLeadLifetime': 9392595.906, 'varhLeadToday': 9318985.906, 'wNow': 4477.703, 'whLastSevenDays': 0.0, 'whLifetime': 7915653.393, 'whToday': 0.0, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.89, 'reactPwr': -1380.305, 'readingTime': 1722967003, 'rmsCurrent': 81.305, 'rmsVoltage': 247.098, 'type': 'eim', 'vahLifetime': 25731840.384, 'vahToday': 10810454.384, 'varhLagLifetime': -2856902.841, 'varhLagToday': 10114.0, 'varhLeadLifetime': 18701624.099, 'varhLeadToday': 18554394.099, 'wNow': 8884.72, 'whLastSevenDays': 0.0, 'whLifetime': 15113474.057, 'whToday': 0.0, }), dict({ 'activeCount': 1, 'apprntPwr': 2816.647, 'lines': list([ dict({ 'apprntPwr': 1445.905, 'pwrFactor': 0.59, 'reactPwr': -848.913, 'rmsCurrent': 11.712, 'rmsVoltage': 123.455, 'vahLifetime': 12904980.692, 'vahToday': 0, 'varhLagLifetime': 8801.054, 'varhLagToday': 0, 'varhLeadLifetime': 9410019.992, 'varhLeadToday': 0, 'wNow': 848.37, 'whLastSevenDays': 0, 'whLifetime': 488810.481, 'whToday': 0, }), dict({ 'apprntPwr': 1370.742, 'pwrFactor': 0.67, 'reactPwr': -529.564, 'rmsCurrent': 11.086, 'rmsVoltage': 123.643, 'vahLifetime': 12826859.692, 'vahToday': 0, 'varhLagLifetime': 5083.172, 'varhLagToday': 0, 'varhLeadLifetime': 9489490.013, 'varhLeadToday': 0, 'wNow': 913.254, 'whLastSevenDays': 0, 'whLifetime': 1194249.954, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.63, 'reactPwr': -1378.477, 'readingTime': 1722967003, 'rmsCurrent': 22.798, 'rmsVoltage': 247.098, 'type': 'eim', 'vahLifetime': 25731840.384, 'vahToday': 0, 'varhLagLifetime': 13884.226, 'varhLagToday': 0, 'varhLeadLifetime': 18899510.005, 'varhLeadToday': 0, 'wNow': 1761.624, 'whLastSevenDays': 0, 'whLifetime': 1683060.434, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 35, 'readingTime': 1722966883, 'type': 'inverters', 'wNow': 7012, 'whLifetime': 13504814, }), dict({ 'activeCount': 1, 'apprntPwr': 7230.713, 'lines': list([ dict({ 'apprntPwr': 3612.416, 'pwrFactor': 0.98, 'reactPwr': 3.837, 'rmsCurrent': 29.245, 'rmsVoltage': 123.539, 'vahLifetime': 8841524.726, 'vahToday': 9490.726, 'varhLagLifetime': 1433208.524, 'varhLagToday': 2205.524, 'varhLeadLifetime': 100991.799, 'varhLeadToday': 74.799, 'wNow': 3558.648, 'whLastSevenDays': 6703259.113, 'whLifetime': 6709433.113, 'whToday': 6277.113, }), dict({ 'apprntPwr': 3618.297, 'pwrFactor': 0.99, 'reactPwr': -5.665, 'rmsCurrent': 29.261, 'rmsVoltage': 123.672, 'vahLifetime': 8853504.515, 'vahToday': 9517.515, 'varhLagLifetime': 1437578.543, 'varhLagToday': 2209.543, 'varhLeadLifetime': 96894.107, 'varhLeadToday': 81.107, 'wNow': 3564.449, 'whLastSevenDays': 6715705.553, 'whLifetime': 6721895.553, 'whToday': 6292.553, }), ]), 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': -1.829, 'readingTime': 1722967003, 'rmsCurrent': 58.506, 'rmsVoltage': 247.211, 'type': 'eim', 'vahLifetime': 17695029.241, 'vahToday': 19008.241, 'varhLagLifetime': 2870787.067, 'varhLagToday': 4415.067, 'varhLeadLifetime': 197885.906, 'varhLeadToday': 155.906, 'wNow': 7123.097, 'whLastSevenDays': 13418964.665, 'whLifetime': 13431328.665, 'whToday': 12569.665, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 15113474, 'watt_hours_today': 0, 'watts_now': 8885, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7197821, 'watt_hours_today': 0, 'watts_now': 4407, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7915653, 'watt_hours_today': 0, 'watts_now': 4478, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1683060, 'watt_hours_today': 0, 'watts_now': 1762, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 488810, 'watt_hours_today': 0, 'watts_now': 848, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1194250, 'watt_hours_today': 0, 'watts_now': 913, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 13418965, 'watt_hours_lifetime': 13431329, 'watt_hours_today': 12570, 'watts_now': 7123, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 6703259, 'watt_hours_lifetime': 6709433, 'watt_hours_today': 6277, 'watts_now': 3559, }), : dict({ 'watt_hours_last_7_days': 6715706, 'watt_hours_lifetime': 6721896, 'watt_hours_today': 6293, 'watts_now': 3564, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1722602347', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.42302998900413513, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5878000259399414, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.42302998900413513, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.36445000767707825, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.3282800018787384, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.3513999879360199, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.3282800018787384, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.31376999616622925, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.36445000767707825, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1722551964', 'mode': , 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': True, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4345_with_device_data] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 199, 'current': 4.066, 'eid': 704643584, 'energy_delivered': 648203, 'energy_received': 883900, 'frequency': 50.062, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.14, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1748577049, 'voltage': 244.228, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 807, 'current': 5.299, 'eid': 704643328, 'energy_delivered': 1243812, 'energy_received': 12, 'frequency': 50.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.654, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1748577049, 'voltage': 244.062, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 0, 'backup_reserve': 0, 'configured_reserve_state_of_charge': 43, 'max_available_capacity': 0, 'reserve_state_of_charge': 43, 'state_of_charge': 0, }), 'encharge_inventory': dict({ }), 'encharge_power': dict({ }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1744816473, 'firmware_version': '2.7.6360_rel/31.33', 'grid_mode': 'grid-tied', 'installed_date': 1744816473, 'last_report_date': 1748577041, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '860-01801-r70', 'serial_number': '122446012073', 'temperature': 76, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '122344043197': dict({ 'ac_current': 1.049, 'ac_frequency': 50.013, 'ac_voltage': 248.156, 'dc_current': 8.078, 'dc_voltage': 32.363, 'energy_produced': 70.875, 'energy_today': 1239, 'last_report_date': 1748576887, 'last_report_duration': 903, 'last_report_watts': 255, 'lifetime_energy': 98412, 'max_report_watts': 371, 'serial_number': '122344043197', 'temperature': 38, }), '122344044368': dict({ 'ac_current': 0.435, 'ac_frequency': 50.019, 'ac_voltage': 246.188, 'dc_current': 2.324, 'dc_voltage': 31.684, 'energy_produced': 21.664, 'energy_today': 773, 'last_report_date': 1748576917, 'last_report_duration': 903, 'last_report_watts': 78, 'lifetime_energy': 72124, 'max_report_watts': 309, 'serial_number': '122344044368', 'temperature': 30, }), '122344044385': dict({ 'ac_current': 0.424, 'ac_frequency': 50.016, 'ac_voltage': 245.906, 'dc_current': 2.598, 'dc_voltage': 31.117, 'energy_produced': 70.944, 'energy_today': 1245, 'last_report_date': 1748576977, 'last_report_duration': 903, 'last_report_watts': 255, 'lifetime_energy': 99861, 'max_report_watts': 370, 'serial_number': '122344044385', 'temperature': 41, }), '122344044392': dict({ 'ac_current': 0.331, 'ac_frequency': 50.026, 'ac_voltage': 245.188, 'dc_current': 1.469, 'dc_voltage': 31.477, 'energy_produced': 66.372, 'energy_today': 992, 'last_report_date': 1748577008, 'last_report_duration': 904, 'last_report_watts': 239, 'lifetime_energy': 92269, 'max_report_watts': 367, 'serial_number': '122344044392', 'temperature': 36, }), '122344044656': dict({ 'ac_current': 0.334, 'ac_frequency': 50.023, 'ac_voltage': 245.563, 'dc_current': 1.488, 'dc_voltage': 31.441, 'energy_produced': 36.06, 'energy_today': 467, 'last_report_date': 1748577037, 'last_report_duration': 903, 'last_report_watts': 130, 'lifetime_energy': 72316, 'max_report_watts': 341, 'serial_number': '122344044656', 'temperature': 35, }), '122344046030': dict({ 'ac_current': 0.379, 'ac_frequency': 50.026, 'ac_voltage': 245.563, 'dc_current': 1.949, 'dc_voltage': 30.504, 'energy_produced': 63.123, 'energy_today': 815, 'last_report_date': 1748577038, 'last_report_duration': 903, 'last_report_watts': 227, 'lifetime_energy': 78621, 'max_report_watts': 349, 'serial_number': '122344046030', 'temperature': 41, }), '122344046450': dict({ 'ac_current': 0.415, 'ac_frequency': 49.988, 'ac_voltage': 245.625, 'dc_current': 2.637, 'dc_voltage': 31.656, 'energy_produced': 23.576, 'energy_today': 751, 'last_report_date': 1748576165, 'last_report_duration': 904, 'last_report_watts': 85, 'lifetime_energy': 72318, 'max_report_watts': 308, 'serial_number': '122344046450', 'temperature': 30, }), '122344046574': dict({ 'ac_current': 0.315, 'ac_frequency': 49.985, 'ac_voltage': 246.188, 'dc_current': 0.789, 'dc_voltage': 33.156, 'energy_produced': 9.541, 'energy_today': 207, 'last_report_date': 1748576166, 'last_report_duration': 904, 'last_report_watts': 34, 'lifetime_energy': 60054, 'max_report_watts': 362, 'serial_number': '122344046574', 'temperature': 27, }), '122344047608': dict({ 'ac_current': 0.358, 'ac_frequency': 49.978, 'ac_voltage': 245.75, 'dc_current': 1.879, 'dc_voltage': 31.922, 'energy_produced': 17.65, 'energy_today': 769, 'last_report_date': 1748576194, 'last_report_duration': 903, 'last_report_watts': 64, 'lifetime_energy': 72994, 'max_report_watts': 299, 'serial_number': '122344047608', 'temperature': 32, }), '122344047620': dict({ 'ac_current': 1.073, 'ac_frequency': 49.977, 'ac_voltage': 247.063, 'dc_current': 8.32, 'dc_voltage': 32.398, 'energy_produced': 64.436, 'energy_today': 979, 'last_report_date': 1748576196, 'last_report_duration': 904, 'last_report_watts': 232, 'lifetime_energy': 95057, 'max_report_watts': 364, 'serial_number': '122344047620', 'temperature': 36, }), '122344047645': dict({ 'ac_current': 1.088, 'ac_frequency': 49.978, 'ac_voltage': 246.5, 'dc_current': 8.527, 'dc_voltage': 32.012, 'energy_produced': 65.47, 'energy_today': 1209, 'last_report_date': 1748576197, 'last_report_duration': 905, 'last_report_watts': 236, 'lifetime_energy': 100072, 'max_report_watts': 365, 'serial_number': '122344047645', 'temperature': 41, }), '122344047687': dict({ 'ac_current': 1.06, 'ac_frequency': 49.977, 'ac_voltage': 246.281, 'dc_current': 8.102, 'dc_voltage': 32.316, 'energy_produced': 63.054, 'energy_today': 1120, 'last_report_date': 1748576224, 'last_report_duration': 903, 'last_report_watts': 227, 'lifetime_energy': 96931, 'max_report_watts': 365, 'serial_number': '122344047687', 'temperature': 36, }), '122344047713': dict({ 'ac_current': 1.068, 'ac_frequency': 49.969, 'ac_voltage': 247.094, 'dc_current': 8.383, 'dc_voltage': 32.133, 'energy_produced': 64.505, 'energy_today': 1199, 'last_report_date': 1748576226, 'last_report_duration': 904, 'last_report_watts': 232, 'lifetime_energy': 99460, 'max_report_watts': 365, 'serial_number': '122344047713', 'temperature': 40, }), '122344047722': dict({ 'ac_current': 1.028, 'ac_frequency': 49.984, 'ac_voltage': 245.344, 'dc_current': 7.902, 'dc_voltage': 32.043, 'energy_produced': 60.08, 'energy_today': 780, 'last_report_date': 1748576255, 'last_report_duration': 904, 'last_report_watts': 216, 'lifetime_energy': 79693, 'max_report_watts': 338, 'serial_number': '122344047722', 'temperature': 39, }), '122344048305': dict({ 'ac_current': 0.417, 'ac_frequency': 49.984, 'ac_voltage': 245.5, 'dc_current': 2.637, 'dc_voltage': 31.953, 'energy_produced': 23.23, 'energy_today': 777, 'last_report_date': 1748576256, 'last_report_duration': 904, 'last_report_watts': 84, 'lifetime_energy': 73997, 'max_report_watts': 324, 'serial_number': '122344048305', 'temperature': 29, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2025-04-16 15:14:25 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 43.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'AUD', }), 'date': '1743840002', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.2579500079154968, 'sell': 0.07000000029802322, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1742364587', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 43.0, 'very_low_soc': 10, }), }), }), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'open', }), dict({ 'id': 'NC2', 'status': 'open', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'grid-tied', 'Enpwr_relay_state_bm': 975, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1744816473, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1744816473, 'img_pnum_running': '2.7.6360_rel/31.33', 'installed': 1744816473, 'last_rpt_date': 1748577041, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '860-01801-r70', 'serial_num': '122446012073', 'temperature': 76, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 0, 'ENC_agg_backup_energy': 0, 'ENC_agg_soc': 0, 'ENC_agg_soh': 0, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 0, 'Enc_max_available_capacity': 0, 'Max_energy': 0, 'VLS_Limit': 10, 'adjusted_backup_soc': 43, 'agg_soc': 0, 'configured_backup_soc': 43, 'freq_bias_hz': 0.0, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 0, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': True, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': 0.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 0, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 1243812.228, 'actEnergyRcvd': 11.6, 'activePower': 807.326, 'apparentEnergy': 1776752.059, 'apparentPower': 1282.057, 'channels': list([ dict({ 'actEnergyDlvd': 1243812.228, 'actEnergyRcvd': 11.6, 'activePower': 807.326, 'apparentEnergy': 1776752.059, 'apparentPower': 1282.057, 'current': 5.299, 'eid': 1778385169, 'freq': 50.062, 'instantaneousDemand': 807.326, 'pwrFactor': 0.654, 'reactEnergyLagg': 255919.503, 'reactEnergyLead': 573233.207, 'reactivePower': -886.389, 'timestamp': 1748577049, 'voltage': 244.062, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1054.214, 'activePower': -0.039, 'apparentEnergy': 663.506, 'apparentPower': 0.388, 'current': 0.182, 'eid': 1778385170, 'freq': 50.062, 'instantaneousDemand': -0.039, 'pwrFactor': 0.0, 'reactEnergyLagg': 127.361, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 2.124, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 2598.312, 'activePower': -0.0, 'apparentEnergy': 49.729, 'apparentPower': 0.0, 'current': -0.0, 'eid': 1778385171, 'freq': 50.062, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 127.222, 'reactEnergyLead': 0.015, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 3.045, }), ]), 'current': 5.299, 'eid': 704643328, 'freq': 50.062, 'instantaneousDemand': 807.326, 'pwrFactor': 0.654, 'reactEnergyLagg': 255919.503, 'reactEnergyLead': 573233.207, 'reactivePower': -886.389, 'timestamp': 1748577049, 'voltage': 244.062, }), dict({ 'actEnergyDlvd': 648203.353, 'actEnergyRcvd': 883899.646, 'activePower': 199.234, 'apparentEnergy': 2017963.73, 'apparentPower': 993.877, 'channels': list([ dict({ 'actEnergyDlvd': 648203.353, 'actEnergyRcvd': 883899.646, 'activePower': 199.234, 'apparentEnergy': 2017963.73, 'apparentPower': 993.877, 'current': 4.066, 'eid': 1778385425, 'freq': 50.062, 'instantaneousDemand': 199.234, 'pwrFactor': 0.14, 'reactEnergyLagg': 430154.145, 'reactEnergyLead': 463468.848, 'reactivePower': 906.056, 'timestamp': 1748577049, 'voltage': 244.228, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 2171.834, 'activePower': -0.236, 'apparentEnergy': 1754.876, 'apparentPower': 1.01, 'current': 0.166, 'eid': 1778385426, 'freq': 50.062, 'instantaneousDemand': -0.236, 'pwrFactor': 0.0, 'reactEnergyLagg': 122.318, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 6.082, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 3397.655, 'activePower': 0.0, 'apparentEnergy': 60.378, 'apparentPower': 0.0, 'current': -0.0, 'eid': 1778385427, 'freq': 50.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 121.108, 'reactEnergyLead': 0.038, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 5.672, }), ]), 'current': 4.066, 'eid': 704643584, 'freq': 50.062, 'instantaneousDemand': 199.234, 'pwrFactor': 0.14, 'reactEnergyLagg': 430154.145, 'reactEnergyLead': 463468.848, 'reactivePower': 906.056, 'timestamp': 1748577049, 'voltage': 244.228, }), ]), '/ivp/pdm/device_data': dict({ '553648384': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390225, 'created': 1748576887, 'lastReading': dict({ 'acCurrentInmA': 1049, 'acFrequencyINmHz': 50013, 'acVoltageINmV': 248156, 'channelTemp': 38, 'dcCurrentINmA': 8078, 'dcVoltageINmV': 32363, 'duration': 903, 'eid': 1627390225, 'endDate': 1748576887, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 68, 'joulesProduced': 230400, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834453, 'duration': 6124463, 'joulesProduced': 354281850, }), 'wattHours': dict({ 'today': 1239, 'week': 7466, 'yesterday': 455, }), 'watts': dict({ 'max': 371, 'now': 255, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344043197', }), '553648640': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390481, 'created': 1748576917, 'lastReading': dict({ 'acCurrentInmA': 435, 'acFrequencyINmHz': 50019, 'acVoltageINmV': 246188, 'channelTemp': 30, 'dcCurrentINmA': 2324, 'dcVoltageINmV': 31684, 'duration': 903, 'eid': 1627390481, 'endDate': 1748576917, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 70425, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834377, 'duration': 6125538, 'joulesProduced': 259647525, }), 'wattHours': dict({ 'today': 773, 'week': 5129, 'yesterday': 447, }), 'watts': dict({ 'max': 309, 'now': 78, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044368', }), '553648896': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390737, 'created': 1748576977, 'lastReading': dict({ 'acCurrentInmA': 424, 'acFrequencyINmHz': 50016, 'acVoltageINmV': 245906, 'channelTemp': 41, 'dcCurrentINmA': 2598, 'dcVoltageINmV': 31117, 'duration': 903, 'eid': 1627390737, 'endDate': 1748576977, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 76, 'joulesProduced': 230625, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834457, 'duration': 6124361, 'joulesProduced': 359500950, }), 'wattHours': dict({ 'today': 1245, 'week': 7778, 'yesterday': 459, }), 'watts': dict({ 'max': 370, 'now': 255, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044385', }), '553649152': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390993, 'created': 1748577008, 'lastReading': dict({ 'acCurrentInmA': 331, 'acFrequencyINmHz': 50026, 'acVoltageINmV': 245188, 'channelTemp': 36, 'dcCurrentINmA': 1469, 'dcVoltageINmV': 31477, 'duration': 904, 'eid': 1627390993, 'endDate': 1748577008, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 216000, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 37, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834459, 'duration': 6124386, 'joulesProduced': 332167725, }), 'wattHours': dict({ 'today': 992, 'week': 6099, 'yesterday': 435, }), 'watts': dict({ 'max': 367, 'now': 239, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044392', }), '553649408': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391249, 'created': 1748577037, 'lastReading': dict({ 'acCurrentInmA': 334, 'acFrequencyINmHz': 50023, 'acVoltageINmV': 245563, 'channelTemp': 35, 'dcCurrentINmA': 1488, 'dcVoltageINmV': 31441, 'duration': 903, 'eid': 1627391249, 'endDate': 1748577037, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 72, 'joulesProduced': 117225, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834609, 'duration': 6124491, 'joulesProduced': 260339400, }), 'wattHours': dict({ 'today': 467, 'week': 3714, 'yesterday': 405, }), 'watts': dict({ 'max': 341, 'now': 130, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044656', }), '553649664': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391505, 'created': 1748577038, 'lastReading': dict({ 'acCurrentInmA': 379, 'acFrequencyINmHz': 50026, 'acVoltageINmV': 245563, 'channelTemp': 41, 'dcCurrentINmA': 1949, 'dcVoltageINmV': 30504, 'duration': 903, 'eid': 1627391505, 'endDate': 1748577038, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 205200, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 40, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834598, 'duration': 6124485, 'joulesProduced': 283035600, }), 'wattHours': dict({ 'today': 815, 'week': 5251, 'yesterday': 416, }), 'watts': dict({ 'max': 349, 'now': 227, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046030', }), '553649920': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391761, 'created': 1748576165, 'lastReading': dict({ 'acCurrentInmA': 415, 'acFrequencyINmHz': 49988, 'acVoltageINmV': 245625, 'channelTemp': 30, 'dcCurrentINmA': 2637, 'dcVoltageINmV': 31656, 'duration': 904, 'eid': 1627391761, 'endDate': 1748576165, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 76725, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834388, 'duration': 6124702, 'joulesProduced': 260345025, }), 'wattHours': dict({ 'today': 751, 'week': 5036, 'yesterday': 444, }), 'watts': dict({ 'max': 308, 'now': 85, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046450', }), '553650176': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392017, 'created': 1748576166, 'lastReading': dict({ 'acCurrentInmA': 315, 'acFrequencyINmHz': 49985, 'acVoltageINmV': 246188, 'channelTemp': 27, 'dcCurrentINmA': 789, 'dcVoltageINmV': 33156, 'duration': 904, 'eid': 1627392017, 'endDate': 1748576166, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 31050, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834506, 'duration': 6123681, 'joulesProduced': 216194625, }), 'wattHours': dict({ 'today': 207, 'week': 2283, 'yesterday': 380, }), 'watts': dict({ 'max': 362, 'now': 34, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046574', }), '553650432': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392273, 'created': 1748576194, 'lastReading': dict({ 'acCurrentInmA': 358, 'acFrequencyINmHz': 49978, 'acVoltageINmV': 245750, 'channelTemp': 32, 'dcCurrentINmA': 1879, 'dcVoltageINmV': 31922, 'duration': 903, 'eid': 1627392273, 'endDate': 1748576194, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 78, 'joulesProduced': 57375, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834414, 'duration': 6123760, 'joulesProduced': 262778625, }), 'wattHours': dict({ 'today': 769, 'week': 5048, 'yesterday': 443, }), 'watts': dict({ 'max': 299, 'now': 64, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047608', }), '553650688': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392529, 'created': 1748576196, 'lastReading': dict({ 'acCurrentInmA': 1073, 'acFrequencyINmHz': 49977, 'acVoltageINmV': 247063, 'channelTemp': 36, 'dcCurrentINmA': 8320, 'dcVoltageINmV': 32398, 'duration': 904, 'eid': 1627392529, 'endDate': 1748576196, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 209700, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834482, 'duration': 6123650, 'joulesProduced': 342205650, }), 'wattHours': dict({ 'today': 979, 'week': 6393, 'yesterday': 438, }), 'watts': dict({ 'max': 364, 'now': 232, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047620', }), '553650944': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392785, 'created': 1748576197, 'lastReading': dict({ 'acCurrentInmA': 1088, 'acFrequencyINmHz': 49978, 'acVoltageINmV': 246500, 'channelTemp': 41, 'dcCurrentINmA': 8527, 'dcVoltageINmV': 32012, 'duration': 905, 'eid': 1627392785, 'endDate': 1748576197, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 213300, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834445, 'duration': 6123908, 'joulesProduced': 360257400, }), 'wattHours': dict({ 'today': 1209, 'week': 7838, 'yesterday': 467, }), 'watts': dict({ 'max': 365, 'now': 236, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047645', }), '553651200': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393041, 'created': 1748576224, 'lastReading': dict({ 'acCurrentInmA': 1060, 'acFrequencyINmHz': 49977, 'acVoltageINmV': 246281, 'channelTemp': 36, 'dcCurrentINmA': 8102, 'dcVoltageINmV': 32316, 'duration': 903, 'eid': 1627393041, 'endDate': 1748576224, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 204975, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834485, 'duration': 6123654, 'joulesProduced': 348953175, }), 'wattHours': dict({ 'today': 1120, 'week': 7235, 'yesterday': 447, }), 'watts': dict({ 'max': 365, 'now': 227, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047687', }), '553651456': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393297, 'created': 1748576226, 'lastReading': dict({ 'acCurrentInmA': 1068, 'acFrequencyINmHz': 49969, 'acVoltageINmV': 247094, 'channelTemp': 40, 'dcCurrentINmA': 8383, 'dcVoltageINmV': 32133, 'duration': 904, 'eid': 1627393297, 'endDate': 1748576226, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 209925, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834446, 'duration': 6123674, 'joulesProduced': 358057125, }), 'wattHours': dict({ 'today': 1199, 'week': 7769, 'yesterday': 462, }), 'watts': dict({ 'max': 365, 'now': 232, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047713', }), '553651712': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393553, 'created': 1748576255, 'lastReading': dict({ 'acCurrentInmA': 1028, 'acFrequencyINmHz': 49984, 'acVoltageINmV': 245344, 'channelTemp': 39, 'dcCurrentINmA': 7902, 'dcVoltageINmV': 32043, 'duration': 904, 'eid': 1627393553, 'endDate': 1748576255, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 195525, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834580, 'duration': 6123492, 'joulesProduced': 286893675, }), 'wattHours': dict({ 'today': 780, 'week': 5471, 'yesterday': 426, }), 'watts': dict({ 'max': 338, 'now': 216, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047722', }), '553651968': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393809, 'created': 1748576256, 'lastReading': dict({ 'acCurrentInmA': 417, 'acFrequencyINmHz': 49984, 'acVoltageINmV': 245500, 'channelTemp': 29, 'dcCurrentINmA': 2637, 'dcVoltageINmV': 31953, 'duration': 904, 'eid': 1627393809, 'endDate': 1748576256, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 75600, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834361, 'duration': 6124139, 'joulesProduced': 266390550, }), 'wattHours': dict({ 'today': 777, 'week': 5130, 'yesterday': 453, }), 'watts': dict({ 'max': 324, 'now': 84, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344048305', }), '704643328': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1778385169, 'created': 1748576700, 'lastReading': dict({ 'curr_w': 2675, 'duration': 900, 'eid': 1778385169, 'endDate': 1748576700, 'freq_mhz': 50000, 'interval_type': 0, 'rms_mamp': 12045, 'rms_mvolt': 246790, 'vah_cum': 1776512, 'varh_lag_cum': 255919, 'varh_lead_cum': 573128, 'wh_dlvd_cum': 1243605, 'wh_neg': 11, 'wh_pos': 1243605, }), 'lifetime': dict({ 'createdTime': 1744817400, 'duration': 6212100, 'vah_cum': 1776512, 'varh_lag_cum': 255919, 'varh_lead_cum': 573128, 'wh_dlvd_cum': 1243605, }), 'wattHours': dict({ 'today': 13233, 'week': 86068, 'yesterday': 6432, }), 'watts': dict({ 'max': 5171, 'now': 2675, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385170, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385171, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), ]), 'devName': 'eim', 'modGone': True, 'sn': '122446001637EIM1', }), '704643584': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1778385425, 'created': 1748576700, 'lastReading': dict({ 'curr_w': 419, 'duration': 900, 'eid': 1778385425, 'endDate': 1748576700, 'freq_mhz': 50062, 'interval_type': 0, 'rms_mamp': 1974, 'rms_mvolt': 246944, 'vah_cum': 2017794, 'varh_lag_cum': 174130, 'varh_lead_cum': -109660, 'wh_dlvd_cum': 1007981, 'wh_neg': 883785, 'wh_pos': 648196, }), 'lifetime': dict({ 'createdTime': 1744817400, 'duration': 6211500, 'vah_cum': 2017794, 'varh_lag_cum': 174130, 'varh_lead_cum': -109660, 'wh_dlvd_cum': 1007981, }), 'wattHours': dict({ 'today': 14467, 'week': 136796, 'yesterday': 25760, }), 'watts': dict({ 'max': 5726, 'now': 419, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385426, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385427, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), ]), 'devName': 'eim', 'modGone': True, 'sn': '122446001637EIM2', }), 'deviceCount': 17, 'deviceDataLimit': 50, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2265.958, 'measurementType': 'total-consumption', 'pwrFactor': 0.45, 'reactPwr': 19.832, 'readingTime': 1748577048, 'rmsCurrent': 9.279, 'rmsVoltage': 244.195, 'type': 'eim', 'vahLifetime': 2017963.456, 'vahToday': 16554.456, 'varhLagLifetime': 174234.39, 'varhLagToday': 670.39, 'varhLeadLifetime': -109764.113, 'varhLeadToday': 0.0, 'wNow': 1008.957, 'whLastSevenDays': 136895.923, 'whLifetime': 1008080.923, 'whToday': 14566.923, }), dict({ 'activeCount': 1, 'apprntPwr': 996.717, 'measurementType': 'net-consumption', 'pwrFactor': 0.23, 'reactPwr': 898.838, 'readingTime': 1748577048, 'rmsCurrent': 4.082, 'rmsVoltage': 244.195, 'type': 'eim', 'vahLifetime': 2017963.456, 'vahToday': 0, 'varhLagLifetime': 430153.893, 'varhLagToday': 0, 'varhLeadLifetime': 463468.848, 'varhLeadToday': 0, 'wNow': 231.561, 'whLastSevenDays': 0, 'whLifetime': -235661.6, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 15, 'readingTime': 1748577038, 'type': 'inverters', 'wNow': 2594, 'whLifetime': 1264180, }), dict({ 'activeCount': 1, 'apprntPwr': 1258.19, 'measurementType': 'production', 'pwrFactor': 0.63, 'reactPwr': -879.006, 'readingTime': 1748577048, 'rmsCurrent': 5.198, 'rmsVoltage': 243.975, 'type': 'eim', 'vahLifetime': 1776751.697, 'vahToday': 16484.697, 'varhLagLifetime': 255919.503, 'varhLagToday': 1824.503, 'varhLeadLifetime': 573232.961, 'varhLeadToday': 3458.961, 'wNow': 777.395, 'whLastSevenDays': 86274.993, 'whLifetime': 1243811.993, 'whToday': 13439.993, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 136896, 'watt_hours_lifetime': 1008081, 'watt_hours_today': 14567, 'watts_now': 1009, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': -235662, 'watt_hours_today': 0, 'watts_now': 232, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 86275, 'watt_hours_lifetime': 1243812, 'watt_hours_today': 13440, 'watts_now': 777, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'AUD', }), 'date': '1743840002', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.2579500079154968, 'sell': 0.07000000029802322, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1742364587', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 43.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.3.1598_collar] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': dict({ 'admin_state': 82, 'admin_state_str': 'ENCMN_C6_CC_READY', 'communicating': True, 'dmir_version': '0.1.20-D1', 'firmware_loaded_date': 1752945451, 'firmware_version': '0.1.20-D1', 'installed_date': 1752945451, 'last_report_date': 1752945451, 'part_number': '800-02403-r08', 'serial_number': '482523040549', }), 'collar': dict({ 'admin_state': 88, 'admin_state_str': 'ENCMN_MDE_ON_GRID', 'collar_state': 'Installed', 'communicating': True, 'control_error': 0, 'firmware_loaded_date': 1752939759, 'firmware_version': '3.0.6-D0', 'grid_state': 'on_grid', 'installed_date': 1752939759, 'last_report_date': 1752939759, 'mid_state': 'close', 'part_number': '865-00400-r22', 'serial_number': '482520020939', 'temperature': 42, 'temperature_unit': 'C', }), 'ctmeter_consumption': dict({ 'active_power': 3761, 'current': 32.108, 'eid': 704643584, 'energy_delivered': 108564, 'energy_received': 22729, 'frequency': 60.021, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 1.94, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 240.537, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 2395, 'current': 20.729, 'eid': 1778385425, 'energy_delivered': 47525, 'energy_received': 14282, 'frequency': 60.021, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.979, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 120.617, }), : dict({ 'active_power': 1460, 'current': 12.566, 'eid': 1778385426, 'energy_delivered': 61039, 'energy_received': 8447, 'frequency': 60.021, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.96, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 119.833, }), }), 'ctmeter_production': dict({ 'active_power': 0, 'current': 2.927, 'eid': 704643328, 'energy_delivered': 47078, 'energy_received': 16, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 240.537, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 0, 'current': 1.46, 'eid': 1778385169, 'energy_delivered': 23506, 'energy_received': 8, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 120.617, }), : dict({ 'active_power': 0, 'current': 1.46, 'eid': 1778385170, 'energy_delivered': 23572, 'energy_received': 8, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 119.833, }), }), 'ctmeter_storage': dict({ 'active_power': -1298, 'current': 10.964, 'eid': 704643840, 'energy_delivered': 344, 'energy_received': 8053, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -1.966, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 240.684, }), 'ctmeter_storage_phases': dict({ : dict({ 'active_power': -656, 'current': 5.54, 'eid': 1778385681, 'energy_delivered': 234, 'energy_received': 4028, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.989, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 120.674, }), : dict({ 'active_power': -652, 'current': 5.534, 'eid': 1778385682, 'energy_delivered': 110, 'energy_received': 4025, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.977, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974752, 'voltage': 119.923, }), }), 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': dict({ 'available_energy': 8900, 'backup_reserve': 10000, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10000, 'reserve_state_of_charge': 100, 'state_of_charge': 89, }), 'encharge_inventory': dict({ '492516006337': dict({ 'admin_state': 63, 'admin_state_str': 'ENCMN_MDE_ENCHARGE_READY', 'bmu_firmware_version': '4.5.35', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 4, 'firmware_loaded_date': 1752939764, 'firmware_version': '4.5.35', 'installed_date': 1752939764, 'last_report_date': 1752974610, 'led_status': 12, 'max_cell_temp': 33, 'operating': None, 'part_number': '836-01250-r00', 'percent_full': 92, 'serial_number': '492516006337', 'temperature': 32, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492517004892': dict({ 'admin_state': 63, 'admin_state_str': 'ENCMN_MDE_ENCHARGE_READY', 'bmu_firmware_version': '4.5.35', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 4, 'firmware_loaded_date': 1752939763, 'firmware_version': '4.5.35', 'installed_date': 1752939763, 'last_report_date': 1752974529, 'led_status': 12, 'max_cell_temp': 33, 'operating': None, 'part_number': '836-01250-r00', 'percent_full': 86, 'serial_number': '492517004892', 'temperature': 33, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492516006337': dict({ 'apparent_power_mva': -532000, 'real_power_mw': -532000, 'soc': 92, }), '492517004892': dict({ 'apparent_power_mva': -552000, 'real_power_mw': -552000, 'soc': 86, }), }), 'enpower': None, 'inverters': dict({ '123456789056': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970696, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 339, 'serial_number': '123456789056', 'temperature': None, }), '123456789059': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970949, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '123456789059', 'temperature': None, }), '123456789119': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970785, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '123456789119', 'temperature': None, }), '123456789130': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970788, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 342, 'serial_number': '123456789130', 'temperature': None, }), '123456789247': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970605, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '123456789247', 'temperature': None, }), '123456789336': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970883, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '123456789336', 'temperature': None, }), '123456789508': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970786, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 270, 'serial_number': '123456789508', 'temperature': None, }), '123456789618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970884, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '123456789618', 'temperature': None, }), '123456789644': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970877, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '123456789644', 'temperature': None, }), '123456789682': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970882, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '123456789682', 'temperature': None, }), '123456789703': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970666, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '123456789703', 'temperature': None, }), '123456789750': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970786, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 284, 'serial_number': '123456789750', 'temperature': None, }), '123456789806': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970362, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '123456789806', 'temperature': None, }), '123456789892': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970724, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '123456789892', 'temperature': None, }), '123456789899': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970789, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '123456789899', 'temperature': None, }), '123456789910': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970333, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '123456789910', 'temperature': None, }), '123456789979': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1752970941, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 282, 'serial_number': '123456789979', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'backup', 'battery_mode': 'backup', 'charge_from_grid': False, 'date': '2025-07-19 15:54:58 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CP', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CP', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CP', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CP', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CP', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CP', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CP', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1752958498', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 0, }), dict({ 'id': 'mid-pe_k-1', 'rate': 0.1899999976158142, 'start': 420, }), dict({ 'id': 'peak-1_', 'rate': 0.375, 'start': 900, }), dict({ 'id': 'mid-pe_k-2', 'rate': 0.1899999976158142, 'start': 1140, }), dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 1381, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 0, }), dict({ 'id': 'peak-1_', 'rate': 0.15299999713897705, 'start': 1380, }), dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15199999511241913, 'sell': 0.1899999976158142, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1752766997', 'mode': 'backup', 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 100.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1752970877, 'lastReportWatts': 0, 'maxReportWatts': 345, 'serialNumber': '123456789644', }), dict({ 'devType': 1, 'lastReportDate': 1752970362, 'lastReportWatts': 0, 'maxReportWatts': 301, 'serialNumber': '123456789806', }), dict({ 'devType': 1, 'lastReportDate': 1752970785, 'lastReportWatts': 0, 'maxReportWatts': 337, 'serialNumber': '123456789119', }), dict({ 'devType': 1, 'lastReportDate': 1752970949, 'lastReportWatts': 0, 'maxReportWatts': 335, 'serialNumber': '123456789059', }), dict({ 'devType': 1, 'lastReportDate': 1752970786, 'lastReportWatts': 0, 'maxReportWatts': 270, 'serialNumber': '123456789508', }), dict({ 'devType': 1, 'lastReportDate': 1752970605, 'lastReportWatts': 0, 'maxReportWatts': 324, 'serialNumber': '123456789247', }), dict({ 'devType': 1, 'lastReportDate': 1752970333, 'lastReportWatts': 0, 'maxReportWatts': 329, 'serialNumber': '123456789910', }), dict({ 'devType': 1, 'lastReportDate': 1752970882, 'lastReportWatts': 0, 'maxReportWatts': 323, 'serialNumber': '123456789682', }), dict({ 'devType': 1, 'lastReportDate': 1752970786, 'lastReportWatts': 0, 'maxReportWatts': 284, 'serialNumber': '123456789750', }), dict({ 'devType': 1, 'lastReportDate': 1752970696, 'lastReportWatts': 0, 'maxReportWatts': 339, 'serialNumber': '123456789056', }), dict({ 'devType': 1, 'lastReportDate': 1752970788, 'lastReportWatts': 0, 'maxReportWatts': 342, 'serialNumber': '123456789130', }), dict({ 'devType': 1, 'lastReportDate': 1752970883, 'lastReportWatts': 0, 'maxReportWatts': 346, 'serialNumber': '123456789336', }), dict({ 'devType': 1, 'lastReportDate': 1752970884, 'lastReportWatts': 0, 'maxReportWatts': 348, 'serialNumber': '123456789618', }), dict({ 'devType': 1, 'lastReportDate': 1752970789, 'lastReportWatts': 0, 'maxReportWatts': 338, 'serialNumber': '123456789899', }), dict({ 'devType': 1, 'lastReportDate': 1752970941, 'lastReportWatts': 0, 'maxReportWatts': 282, 'serialNumber': '123456789979', }), dict({ 'devType': 1, 'lastReportDate': 1752970666, 'lastReportWatts': 0, 'maxReportWatts': 301, 'serialNumber': '123456789703', }), dict({ 'devType': 1, 'lastReportDate': 1752970724, 'lastReportWatts': 0, 'maxReportWatts': 317, 'serialNumber': '123456789892', }), ]), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 63, 'admin_state_str': 'ENCMN_MDE_ENCHARGE_READY', 'bmu_fw_version': '4.5.35', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1752939764, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 4, 'img_load_date': 1752939764, 'img_pnum_running': '4.5.35', 'installed': 1752939764, 'last_rpt_date': 1752974610, 'led_status': 12, 'maxCellTemp': 33, 'part_num': '836-01250-r00', 'percentFull': 92, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492516006337', 'sleep_enabled': False, 'temperature': 32, }), dict({ 'admin_state': 63, 'admin_state_str': 'ENCMN_MDE_ENCHARGE_READY', 'bmu_fw_version': '4.5.35', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1752939763, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 4, 'img_load_date': 1752939763, 'img_pnum_running': '4.5.35', 'installed': 1752939763, 'last_rpt_date': 1752974529, 'led_status': 12, 'maxCellTemp': 33, 'part_num': '836-01250-r00', 'percentFull': 86, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492517004892', 'sleep_enabled': False, 'temperature': 33, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'admin_state': 88, 'admin_state_str': 'ENCMN_MDE_ON_GRID', 'collar_state': 'Installed', 'communicating': True, 'control_error': 0, 'created_date': 1752939759, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'grid_state': 'on_grid', 'img_load_date': 1752939759, 'img_pnum_running': '3.0.6-D0', 'installed': 1752939759, 'last_rpt_date': 1752939759, 'mid_state': 'close', 'part_num': '865-00400-r22', 'serial_num': '482520020939', 'temperature': 42, }), ]), 'type': 'COLLAR', }), dict({ 'devices': list([ dict({ 'admin_state': 82, 'admin_state_str': 'ENCMN_C6_CC_READY', 'communicating': True, 'created_date': 1752945451, 'dmir_version': '0.1.20-D1', 'fw_version': '0.1.20-D1', 'img_load_date': 1752945451, 'installed': 1752945451, 'last_rpt_date': 1752945451, 'part_num': '800-02403-r08', 'serial_num': '482523040549', }), ]), 'type': 'C6 COMBINER CONTROLLER', }), dict({ 'devices': list([ dict({ 'Device State': 80, 'FW Version': '2.2.1-D4119', 'installed': 1752939759, 'part_num': '800-02403-r08', 'serial_num': '482523040550', }), ]), 'type': 'C6 RGM', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -532000, 'real_power_mw': -532000, 'serial_num': '492516006337', 'soc': 92, }), dict({ 'apparent_power_mva': -552000, 'real_power_mw': -552000, 'serial_num': '492517004892', 'soc': 86, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 8900, 'ENC_agg_backup_energy': 10000, 'ENC_agg_soc': 89, 'ENC_agg_soh': 100, 'ESS_R3_To_R4_in_progress': False, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 10000, 'Enc_max_available_capacity': 10000, 'Max_energy': 10000, 'VLS_Limit': 5, 'adjusted_backup_soc': 100, 'agg_soc': 89, 'configured_backup_soc': 100, 'freq_bias_hz': 0.0, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 0, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'offgrid_secctrl': dict({ 'F': 0.7687389826090736, 'V': -0.0014091715353808515, 'Vd_neg': 5.126506875393791, 'Vd_zero': 0.8743872414038012, 'Vq_neg': 1.5839945028613174, 'Vq_zero': 5.888518297886519, 'is_active': False, 'is_system_balanced': False, }), 'shutdown': False, 'soc_rec_enabled': True, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': 0.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 0, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643840, 'measurementType': 'storage', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704644352, 'measurementType': 'backfeed', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704644608, 'measurementType': 'load', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'disabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704644864, 'measurementType': 'evse', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'disabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704645120, 'measurementType': 'pv3p', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'disabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 47077.959, 'actEnergyRcvd': 15.925, 'activePower': 0.0, 'apparentEnergy': 0.01, 'apparentPower': 352.088, 'channels': list([ dict({ 'actEnergyDlvd': 23505.638, 'actEnergyRcvd': 7.868, 'activePower': 0.0, 'apparentEnergy': 0.004, 'apparentPower': 176.187, 'current': 1.46, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 4861.567, 'reactEnergyLead': 21.566, 'reactivePower': 172.976, 'timestamp': 1752974752, 'voltage': 120.617, }), dict({ 'actEnergyDlvd': 23572.321, 'actEnergyRcvd': 8.056, 'activePower': -0.0, 'apparentEnergy': 0.005, 'apparentPower': 175.119, 'current': 1.46, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 4881.141, 'reactEnergyLead': 42.739, 'reactivePower': 172.281, 'timestamp': 1752974752, 'voltage': 119.833, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974752, 'voltage': 0.0, }), ]), 'current': 2.927, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 9742.709, 'reactEnergyLead': 64.306, 'reactivePower': 352.088, 'timestamp': 1752974752, 'voltage': 240.537, }), dict({ 'actEnergyDlvd': 108563.587, 'actEnergyRcvd': 22728.922, 'activePower': 3760.828, 'apparentEnergy': 0.0, 'apparentPower': 3864.088, 'channels': list([ dict({ 'actEnergyDlvd': 47524.636, 'actEnergyRcvd': 14281.669, 'activePower': 2395.037, 'apparentEnergy': 0.0, 'apparentPower': 2500.323, 'current': 20.729, 'eid': 1778385425, 'freq': 60.021, 'instantaneousDemand': 2309.657, 'pwrFactor': 0.979, 'reactEnergyLagg': 127.627, 'reactEnergyLead': 8477.743, 'reactivePower': -178.061, 'timestamp': 1752974752, 'voltage': 120.617, }), dict({ 'actEnergyDlvd': 61038.952, 'actEnergyRcvd': 8447.253, 'activePower': 1459.645, 'apparentEnergy': 0.0, 'apparentPower': 1505.846, 'current': 12.566, 'eid': 1778385426, 'freq': 60.021, 'instantaneousDemand': 1451.171, 'pwrFactor': 0.96, 'reactEnergyLagg': 433.049, 'reactEnergyLead': 11093.869, 'reactivePower': -354.95, 'timestamp': 1752974752, 'voltage': 119.833, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.021, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974752, 'voltage': 0.0, }), ]), 'current': 32.108, 'eid': 704643584, 'freq': 60.021, 'instantaneousDemand': 3760.828, 'pwrFactor': 1.94, 'reactEnergyLagg': 560.675, 'reactEnergyLead': 19571.612, 'reactivePower': -528.986, 'timestamp': 1752974752, 'voltage': 240.537, }), dict({ 'actEnergyDlvd': 344.359, 'actEnergyRcvd': 8052.959, 'activePower': -1297.667, 'apparentEnergy': 0.036, 'apparentPower': 1319.516, 'channels': list([ dict({ 'actEnergyDlvd': 234.071, 'actEnergyRcvd': 4028.434, 'activePower': -655.695, 'apparentEnergy': 0.018, 'apparentPower': 666.636, 'current': 5.54, 'eid': 1778385681, 'freq': 60.0, 'instantaneousDemand': -658.017, 'pwrFactor': -0.989, 'reactEnergyLagg': 60.023, 'reactEnergyLead': 63.177, 'reactivePower': 0.367, 'timestamp': 1752974752, 'voltage': 120.674, }), dict({ 'actEnergyDlvd': 110.288, 'actEnergyRcvd': 4024.524, 'activePower': -652.373, 'apparentEnergy': 0.018, 'apparentPower': 661.374, 'current': 5.534, 'eid': 1778385682, 'freq': 60.0, 'instantaneousDemand': -639.65, 'pwrFactor': -0.977, 'reactEnergyLagg': 55.071, 'reactEnergyLead': 52.142, 'reactivePower': -0.845, 'timestamp': 1752974752, 'voltage': 119.923, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385683, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974752, 'voltage': 0.0, }), ]), 'current': 10.964, 'eid': 704643840, 'freq': 60.0, 'instantaneousDemand': -1297.667, 'pwrFactor': -1.966, 'reactEnergyLagg': 115.094, 'reactEnergyLead': 115.319, 'reactivePower': 0.0, 'timestamp': 1752974752, 'voltage': 240.684, }), dict({ 'actEnergyDlvd': 3.797, 'actEnergyRcvd': 7014.684, 'activePower': -686.225, 'apparentEnergy': 0.0, 'apparentPower': 691.896, 'channels': list([ dict({ 'actEnergyDlvd': 3.797, 'actEnergyRcvd': 7014.684, 'activePower': -661.536, 'apparentEnergy': 0.0, 'apparentPower': 691.272, 'current': 5.73, 'eid': 1778386193, 'freq': 0.0, 'instantaneousDemand': -686.225, 'pwrFactor': -0.991, 'reactEnergyLagg': 1.121, 'reactEnergyLead': 15.242, 'reactivePower': 187.758, 'timestamp': 1752974751, 'voltage': 120.587, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 5.722, 'eid': 1778386194, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974751, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778386195, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974751, 'voltage': 0.0, }), ]), 'current': 11.488, 'eid': 704644352, 'freq': 0.0, 'instantaneousDemand': -686.225, 'pwrFactor': -0.991, 'reactEnergyLagg': 1.121, 'reactEnergyLead': 15.242, 'reactivePower': 88.401, 'timestamp': 1752974751, 'voltage': 120.58, }), dict({ 'actEnergyDlvd': 14.307, 'actEnergyRcvd': 8.56, 'activePower': 0.078, 'apparentEnergy': 0.0, 'apparentPower': 1.036, 'channels': list([ dict({ 'actEnergyDlvd': 10.778, 'actEnergyRcvd': 2.454, 'activePower': 0.046, 'apparentEnergy': 0.0, 'apparentPower': 0.278, 'current': 0.002, 'eid': 1778386449, 'freq': 60.02, 'instantaneousDemand': 0.039, 'pwrFactor': 0.139, 'reactEnergyLagg': 0.716, 'reactEnergyLead': 0.011, 'reactivePower': 0.014, 'timestamp': 1752974751, 'voltage': 120.589, }), dict({ 'actEnergyDlvd': 3.529, 'actEnergyRcvd': 6.106, 'activePower': 0.041, 'apparentEnergy': 0.0, 'apparentPower': 0.756, 'current': 0.005, 'eid': 1778386450, 'freq': 60.02, 'instantaneousDemand': 0.039, 'pwrFactor': 0.051, 'reactEnergyLagg': 0.145, 'reactEnergyLead': 0.06, 'reactivePower': 0.002, 'timestamp': 1752974751, 'voltage': 119.841, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778386451, 'freq': 60.02, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974751, 'voltage': 0.0, }), ]), 'current': 0.008, 'eid': 704644608, 'freq': 60.02, 'instantaneousDemand': 0.078, 'pwrFactor': 0.191, 'reactEnergyLagg': 0.861, 'reactEnergyLead': 0.071, 'reactivePower': 0.078, 'timestamp': 1752974751, 'voltage': 240.478, }), dict({ 'actEnergyDlvd': 123.136, 'actEnergyRcvd': -19.677, 'activePower': -14.617, 'apparentEnergy': -0.0, 'apparentPower': 7.306, 'channels': list([ dict({ 'actEnergyDlvd': 123.136, 'actEnergyRcvd': -19.677, 'activePower': 0.501, 'apparentEnergy': -0.0, 'apparentPower': 1.385, 'current': 0.0, 'eid': 1778386705, 'freq': 60.0, 'instantaneousDemand': -14.617, 'pwrFactor': 0.0, 'reactEnergyLagg': 4.628, 'reactEnergyLead': 10.729, 'reactivePower': 1.217, 'timestamp': 1752974752, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778386706, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974752, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778386707, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974752, 'voltage': 0.0, }), ]), 'current': 0.0, 'eid': 704644864, 'freq': 60.0, 'instantaneousDemand': -14.617, 'pwrFactor': 0.0, 'reactEnergyLagg': 4.628, 'reactEnergyLead': 10.729, 'reactivePower': 0.0, 'timestamp': 1752974752, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'channels': list([ dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778386961, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 0, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778386962, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 0, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778386963, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 0, 'voltage': 0.0, }), ]), 'current': 0.0, 'eid': 704645120, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 0, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'channels': list([ dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 2097152513, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974746.0, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 2097152514, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974746.0, 'voltage': 0.0, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 2097152515, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974746.0, 'voltage': 0.0, }), ]), 'current': 0.0, 'eid': 1023410688, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1752974746, 'voltage': 0.0, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 4237.115, 'lines': list([ dict({ 'apprntPwr': 2567.002, 'pwrFactor': 0.971, 'reactPwr': 8.744, 'rmsCurrent': 21.29, 'rmsVoltage': 120.572, 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': -4733.753, 'varhLagToday': 0.0, 'varhLeadLifetime': 3616.362, 'varhLeadToday': 3616.362, 'wNow': 2326.028, 'whLastSevenDays': 56748.605, 'whLifetime': 56748.605, 'whToday': 56748.605, }), dict({ 'apprntPwr': 1670.113, 'pwrFactor': 0.96, 'reactPwr': -182.463, 'rmsCurrent': 13.936, 'rmsVoltage': 119.84, 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': -4447.906, 'varhLagToday': 0.0, 'varhLeadLifetime': 6212.913, 'varhLeadToday': 6212.913, 'wNow': 1448.282, 'whLastSevenDays': 76164.02, 'whLifetime': 76164.02, 'whToday': 76164.02, }), dict({ 'apprntPwr': 0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': 0.0, 'rmsVoltage': 0.0, 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': 0.0, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 1.931, 'reactPwr': -173.719, 'readingTime': 1752974748, 'rmsCurrent': 35.226, 'rmsVoltage': 240.413, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 9829.276, 'varhLagToday': 9829.276, 'varhLeadLifetime': -9181.659, 'varhLeadToday': 0.0, 'wNow': 3774.309, 'whLastSevenDays': 132912.625, 'whLifetime': 132912.625, 'whToday': 132912.625, }), dict({ 'activeCount': 1, 'apprntPwr': 3886.083, 'lines': list([ dict({ 'apprntPwr': 2391.071, 'pwrFactor': 0.971, 'reactPwr': -167.157, 'rmsCurrent': 19.831, 'rmsVoltage': 120.572, 'vahLifetime': 0.0, 'vahToday': 0, 'varhLagLifetime': 127.627, 'varhLagToday': 0, 'varhLeadLifetime': 8477.743, 'varhLeadToday': 0, 'wNow': 2326.028, 'whLastSevenDays': 0, 'whLifetime': 33242.967, 'whToday': 0, }), dict({ 'apprntPwr': 1495.012, 'pwrFactor': 0.96, 'reactPwr': -357.564, 'rmsCurrent': 12.475, 'rmsVoltage': 119.84, 'vahLifetime': 0.0, 'vahToday': 0, 'varhLagLifetime': 433.049, 'varhLagToday': 0, 'varhLeadLifetime': 11093.869, 'varhLeadToday': 0, 'wNow': 1448.282, 'whLastSevenDays': 0, 'whLifetime': 52591.698, 'whToday': 0, }), dict({ 'apprntPwr': 0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': 0.0, 'rmsVoltage': 0.0, 'vahLifetime': 0.0, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': 0.0, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 1.931, 'reactPwr': -524.721, 'readingTime': 1752974748, 'rmsCurrent': 32.306, 'rmsVoltage': 240.413, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0, 'varhLagLifetime': 19571.612, 'varhLagToday': 0, 'varhLeadLifetime': 560.675, 'varhLeadToday': 0, 'wNow': 3774.309, 'whLastSevenDays': 0, 'whLifetime': 85834.666, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 17, 'readingTime': 1752947372, 'type': 'inverters', 'wNow': 0, 'whLifetime': 53108, }), dict({ 'activeCount': 1, 'apprntPwr': 351.001, 'lines': list([ dict({ 'apprntPwr': 175.901, 'pwrFactor': 0.0, 'reactPwr': 175.901, 'rmsCurrent': 1.459, 'rmsVoltage': 120.552, 'vahLifetime': 0.004, 'vahToday': 0.004, 'varhLagLifetime': 4861.38, 'varhLagToday': 4861.38, 'varhLeadLifetime': 21.566, 'varhLeadToday': 21.566, 'wNow': 0.0, 'whLastSevenDays': 23505.638, 'whLifetime': 23505.638, 'whToday': 23505.638, }), dict({ 'apprntPwr': 175.1, 'pwrFactor': 0.0, 'reactPwr': 175.1, 'rmsCurrent': 1.461, 'rmsVoltage': 119.84, 'vahLifetime': 0.004, 'vahToday': 0.004, 'varhLagLifetime': 4880.955, 'varhLagToday': 4880.955, 'varhLeadLifetime': 42.739, 'varhLeadToday': 42.739, 'wNow': 0.0, 'whLastSevenDays': 23572.321, 'whLifetime': 23572.321, 'whToday': 23572.321, }), dict({ 'apprntPwr': 0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': 0.0, 'rmsVoltage': 0.0, 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': 0.0, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 351.001, 'readingTime': 1752974748, 'rmsCurrent': 2.92, 'rmsVoltage': 240.392, 'type': 'eim', 'vahLifetime': 0.009, 'vahToday': 0.009, 'varhLagLifetime': 64.306, 'varhLagToday': 64.306, 'varhLeadLifetime': 9742.335, 'varhLeadToday': 9742.335, 'wNow': 0.0, 'whLastSevenDays': 47077.959, 'whLifetime': 47077.959, 'whToday': 47077.959, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 132913, 'watt_hours_lifetime': 132913, 'watt_hours_today': 132913, 'watts_now': 3774, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 56749, 'watt_hours_lifetime': 56749, 'watt_hours_today': 56749, 'watts_now': 2326, }), : dict({ 'watt_hours_last_7_days': 76164, 'watt_hours_lifetime': 76164, 'watt_hours_today': 76164, 'watts_now': 1448, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 85835, 'watt_hours_today': 0, 'watts_now': 3774, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 33243, 'watt_hours_today': 0, 'watts_now': 2326, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 52592, 'watt_hours_today': 0, 'watts_now': 1448, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 47078, 'watt_hours_lifetime': 47078, 'watt_hours_today': 47078, 'watts_now': 0, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 23506, 'watt_hours_lifetime': 23506, 'watt_hours_today': 23506, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 23572, 'watt_hours_lifetime': 23572, 'watt_hours_today': 23572, 'watts_now': 0, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1752958498', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 0, }), dict({ 'id': 'mid-pe_k-1', 'rate': 0.1899999976158142, 'start': 420, }), dict({ 'id': 'peak-1_', 'rate': 0.375, 'start': 900, }), dict({ 'id': 'mid-pe_k-2', 'rate': 0.1899999976158142, 'start': 1140, }), dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 1381, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 0, }), dict({ 'id': 'peak-1_', 'rate': 0.15299999713897705, 'start': 1380, }), dict({ 'id': 'filler', 'rate': 0.15199999511241913, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15199999511241913, 'sell': 0.1899999976158142, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1752766997', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 100.0, 'very_low_soc': 5, }), }), }) # --- pyenphase-2.3.1/tests/__snapshots__/test_net_consumption.ambr000066400000000000000000023240261505013723300246270ustar00rootroot00000000000000# serializer version: 1 # name: test_with_7_x_firmware[4.10.35] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 567, 'current': 8.389, 'eid': 704643584, 'energy_delivered': 16908209, 'energy_received': 17357690, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.5, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.736, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 394, 'current': 5.208, 'eid': 1778385425, 'energy_delivered': 10220652, 'energy_received': 8001772, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.549, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.867, }), : dict({ 'active_power': 173, 'current': 3.181, 'eid': 1778385426, 'energy_delivered': 6687557, 'energy_received': 9355918, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.426, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.869, }), }), 'ctmeter_production': dict({ 'active_power': 166, 'current': 3.692, 'eid': 704643328, 'energy_delivered': 26785327, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.394, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 247.659, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 83, 'current': 1.844, 'eid': 1778385169, 'energy_delivered': 13398798, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.4, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.824, }), : dict({ 'active_power': 84, 'current': 1.848, 'eid': 1778385170, 'energy_delivered': 13386530, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.387, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695301419, 'voltage': 123.836, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122002010484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301305, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002010484', 'temperature': None, }), '122002010488': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301325, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010488', 'temperature': None, }), '122002010489': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301317, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002010489', 'temperature': None, }), '122002010577': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301322, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002010577', 'temperature': None, }), '122002011248': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 227, 'serial_number': '122002011248', 'temperature': None, }), '122002017614': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301321, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 294, 'serial_number': '122002017614', 'temperature': None, }), '122002017669': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002017669', 'temperature': None, }), '122002021078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301323, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002021078', 'temperature': None, }), '122002021258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301327, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021258', 'temperature': None, }), '122002021381': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301308, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 305, 'serial_number': '122002021381', 'temperature': None, }), '122002026181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301309, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 287, 'serial_number': '122002026181', 'temperature': None, }), '122002026190': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301313, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122002026190', 'temperature': None, }), '122002027876': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301332, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002027876', 'temperature': None, }), '122002040286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '122002040286', 'temperature': None, }), '122002041618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301318, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 292, 'serial_number': '122002041618', 'temperature': None, }), '122002041621': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301310, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 197, 'serial_number': '122002041621', 'temperature': None, }), '122002041626': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301330, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 306, 'serial_number': '122002041626', 'temperature': None, }), '122002041636': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301319, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '122002041636', 'temperature': None, }), '122002041638': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695301314, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122002041638', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'date': '2023-05-11 19:46:56 UTC', 'source': 'Tariff', 'version': '00.00.01', }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'single_rate': dict({ 'rate': 0.21835, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695301309, 'lastReportWatts': 13, 'maxReportWatts': 287, 'serialNumber': '122002026181', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 299, 'serialNumber': '122002040286', }), dict({ 'devType': 1, 'lastReportDate': 1695301305, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002010484', }), dict({ 'devType': 1, 'lastReportDate': 1695301313, 'lastReportWatts': 13, 'maxReportWatts': 289, 'serialNumber': '122002026190', }), dict({ 'devType': 1, 'lastReportDate': 1695301318, 'lastReportWatts': 13, 'maxReportWatts': 292, 'serialNumber': '122002041618', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021258', }), dict({ 'devType': 1, 'lastReportDate': 1695301325, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010488', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002041626', }), dict({ 'devType': 1, 'lastReportDate': 1695301327, 'lastReportWatts': 12, 'maxReportWatts': 305, 'serialNumber': '122002017669', }), dict({ 'devType': 1, 'lastReportDate': 1695301321, 'lastReportWatts': 13, 'maxReportWatts': 294, 'serialNumber': '122002017614', }), dict({ 'devType': 1, 'lastReportDate': 1695301332, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002027876', }), dict({ 'devType': 1, 'lastReportDate': 1695301330, 'lastReportWatts': 13, 'maxReportWatts': 227, 'serialNumber': '122002011248', }), dict({ 'devType': 1, 'lastReportDate': 1695301323, 'lastReportWatts': 12, 'maxReportWatts': 306, 'serialNumber': '122002021078', }), dict({ 'devType': 1, 'lastReportDate': 1695301308, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002021381', }), dict({ 'devType': 1, 'lastReportDate': 1695301314, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122002041638', }), dict({ 'devType': 1, 'lastReportDate': 1695301319, 'lastReportWatts': 13, 'maxReportWatts': 300, 'serialNumber': '122002041636', }), dict({ 'devType': 1, 'lastReportDate': 1695301310, 'lastReportWatts': 13, 'maxReportWatts': 197, 'serialNumber': '122002041621', }), dict({ 'devType': 1, 'lastReportDate': 1695301317, 'lastReportWatts': 13, 'maxReportWatts': 306, 'serialNumber': '122002010489', }), dict({ 'devType': 1, 'lastReportDate': 1695301322, 'lastReportWatts': 13, 'maxReportWatts': 305, 'serialNumber': '122002010577', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 26785327.449, 'actEnergyRcvd': 0.001, 'activePower': 166.489, 'apparentEnergy': 33655488.016, 'apparentPower': 457.211, 'channels': list([ dict({ 'actEnergyDlvd': 13398797.544, 'actEnergyRcvd': 0.001, 'activePower': 82.913, 'apparentEnergy': 16836537.224, 'apparentPower': 228.406, 'current': 1.844, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 82.913, 'pwrFactor': 0.4, 'reactEnergyLagg': 5169167.875, 'reactEnergyLead': 0.0, 'reactivePower': 191.751, 'timestamp': 1695301419, 'voltage': 123.824, }), dict({ 'actEnergyDlvd': 13386529.904, 'actEnergyRcvd': 0.0, 'activePower': 83.576, 'apparentEnergy': 16818950.792, 'apparentPower': 228.804, 'current': 1.848, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 83.576, 'pwrFactor': 0.387, 'reactEnergyLagg': 5122825.568, 'reactEnergyLead': 0.001, 'reactivePower': 191.574, 'timestamp': 1695301419, 'voltage': 123.836, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 3.692, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 166.489, 'pwrFactor': 0.394, 'reactEnergyLagg': 10291993.443, 'reactEnergyLead': 0.001, 'reactivePower': 383.325, 'timestamp': 1695301419, 'voltage': 247.659, }), dict({ 'actEnergyDlvd': 16908208.78, 'actEnergyRcvd': 17357690.272, 'activePower': 566.864, 'apparentEnergy': 41943778.605, 'apparentPower': 1063.035, 'channels': list([ dict({ 'actEnergyDlvd': 10220652.219, 'actEnergyRcvd': 8001771.78, 'activePower': 393.965, 'apparentEnergy': 22610499.739, 'apparentPower': 668.739, 'current': 5.208, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 393.965, 'pwrFactor': 0.549, 'reactEnergyLagg': 87750.153, 'reactEnergyLead': 7841689.25, 'reactivePower': -337.072, 'timestamp': 1695301419, 'voltage': 123.867, }), dict({ 'actEnergyDlvd': 6687556.561, 'actEnergyRcvd': 9355918.492, 'activePower': 172.899, 'apparentEnergy': 19333278.866, 'apparentPower': 394.296, 'current': 3.181, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 172.899, 'pwrFactor': 0.426, 'reactEnergyLagg': 455469.296, 'reactEnergyLead': 5687697.556, 'reactivePower': -243.946, 'timestamp': 1695301419, 'voltage': 123.869, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695301419, 'voltage': 0.0, }), ]), 'current': 8.389, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 566.864, 'pwrFactor': 0.5, 'reactEnergyLagg': 543219.449, 'reactEnergyLead': 13529386.807, 'reactivePower': -581.018, 'timestamp': 1695301419, 'voltage': 247.736, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3189.788, 'measurementType': 'total-consumption', 'pwrFactor': 0.25, 'reactPwr': -959.115, 'readingTime': 1695301418, 'rmsCurrent': 12.88, 'rmsVoltage': 247.663, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 9709.997, 'varhLagLifetime': 10835212.67, 'varhLagToday': 3120.67, 'varhLeadLifetime': 13529386.465, 'varhLeadToday': 4281.465, 'wNow': 806.405, 'whLastSevenDays': 163075.411, 'whLifetime': 26335790.411, 'whToday': 7412.411, }), dict({ 'activeCount': 1, 'apprntPwr': 1155.626, 'measurementType': 'net-consumption', 'pwrFactor': 0.53, 'reactPwr': -577.46, 'readingTime': 1695301418, 'rmsCurrent': 9.195, 'rmsVoltage': 247.696, 'type': 'eim', 'vahLifetime': 41943777.997, 'vahToday': 0, 'varhLagLifetime': 543219.449, 'varhLagToday': 0, 'varhLeadLifetime': 13529386.464, 'varhLeadToday': 0, 'wNow': 640.874, 'whLastSevenDays': 0, 'whLifetime': 16908208.46, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 19, 'readingTime': 1695301333, 'type': 'inverters', 'wNow': 246, 'whLifetime': 26890410, }), dict({ 'activeCount': 1, 'apprntPwr': 457.492, 'measurementType': 'production', 'pwrFactor': 0.35, 'reactPwr': 381.654, 'readingTime': 1695301418, 'rmsCurrent': 3.685, 'rmsVoltage': 247.631, 'type': 'eim', 'vahLifetime': 33655487.75, 'vahToday': 3288.75, 'varhLagLifetime': 10291993.22, 'varhLagToday': 3108.22, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 165.53, 'whLastSevenDays': 179155.351, 'whLifetime': 26785327.351, 'whToday': 139.351, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 163075, 'watt_hours_lifetime': 26335790, 'watt_hours_today': 7412, 'watts_now': 806, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 16908208, 'watt_hours_today': 0, 'watts_now': 641, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 179155, 'watt_hours_lifetime': 26785327, 'watt_hours_today': 139, 'watts_now': 166, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': None, 'logger': None, 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 500, 'rate': 0.21835, }), dict({ 'id': 'tier_2', 'limit': 1200, 'rate': 0.19587, }), dict({ 'id': 'tier_3', 'limit': -1, 'rate': 0.15798, }), ]), }), ]), 'seasons_sell': None, 'single_rate': dict({ 'rate': 0.21835, }), 'storage_settings': None, }), }) # --- # name: test_with_7_x_firmware[5.0.62] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121547055830': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554884, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547055830', 'temperature': None, }), '121547059008': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554837, 'last_report_duration': None, 'last_report_watts': 203, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059008', 'temperature': None, }), '121547059079': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554838, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059079', 'temperature': None, }), '121547059102': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554873, 'last_report_duration': None, 'last_report_watts': 159, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059102', 'temperature': None, }), '121547059107': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554863, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059107', 'temperature': None, }), '121547059108': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554865, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059108', 'temperature': None, }), '121547059112': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554890, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059112', 'temperature': None, }), '121547059128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554858, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059128', 'temperature': None, }), '121547059193': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554845, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547059193', 'temperature': None, }), '121547059202': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554848, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '121547059202', 'temperature': None, }), '121547059217': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554886, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059217', 'temperature': None, }), '121547059253': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554896, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059253', 'temperature': None, }), '121547059333': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554877, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547059333', 'temperature': None, }), '121547059354': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554892, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 250, 'serial_number': '121547059354', 'temperature': None, }), '121547059355': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554861, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059355', 'temperature': None, }), '121547059357': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554850, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547059357', 'temperature': None, }), '121547059359': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554843, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059359', 'temperature': None, }), '121547059360': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554839, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547059360', 'temperature': None, }), '121547059363': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554852, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547059363', 'temperature': None, }), '121547059381': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554856, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547059381', 'temperature': None, }), '121547059889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554862, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547059889', 'temperature': None, }), '121547060383': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554853, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547060383', 'temperature': None, }), '121547060384': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554845, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060384', 'temperature': None, }), '121547060392': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554895, 'last_report_duration': None, 'last_report_watts': 208, 'lifetime_energy': None, 'max_report_watts': 250, 'serial_number': '121547060392', 'temperature': None, }), '121547060396': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554867, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060396', 'temperature': None, }), '121547060412': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554855, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 220, 'serial_number': '121547060412', 'temperature': None, }), '121547060415': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554866, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060415', 'temperature': None, }), '121547060590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554881, 'last_report_duration': None, 'last_report_watts': 180, 'lifetime_energy': None, 'max_report_watts': 234, 'serial_number': '121547060590', 'temperature': None, }), '121547060592': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554881, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 247, 'serial_number': '121547060592', 'temperature': None, }), '121547060593': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554871, 'last_report_duration': None, 'last_report_watts': 206, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060593', 'temperature': None, }), '121547060643': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554888, 'last_report_duration': None, 'last_report_watts': 200, 'lifetime_energy': None, 'max_report_watts': 248, 'serial_number': '121547060643', 'temperature': None, }), '121547060647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554890, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060647', 'temperature': None, }), '121547060650': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554848, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '121547060650', 'temperature': None, }), '121547060670': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554870, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '121547060670', 'temperature': None, }), '121547060671': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554887, 'last_report_duration': None, 'last_report_watts': 60, 'lifetime_energy': None, 'max_report_watts': 224, 'serial_number': '121547060671', 'temperature': None, }), '121547060727': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554877, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 249, 'serial_number': '121547060727', 'temperature': None, }), '121547060758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554874, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 240, 'serial_number': '121547060758', 'temperature': None, }), '121547060761': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554857, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547060761', 'temperature': None, }), '121547060766': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554837, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '121547060766', 'temperature': None, }), '121547060773': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694554841, 'last_report_duration': None, 'last_report_watts': 202, 'lifetime_energy': None, 'max_report_watts': 246, 'serial_number': '121547060773', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'date': '2023-08-10 17:59:03 UTC', 'source': 'Tariff', 'version': '00.00.02', }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), }), }), '/api/v1/production': dict({ 'wattHoursLifetime': 133798553, 'wattHoursSevenDays': 366671, 'wattHoursToday': 20161, 'wattsNow': 7907, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694554838, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547059079', }), dict({ 'devType': 1, 'lastReportDate': 1694554845, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '121547059193', }), dict({ 'devType': 1, 'lastReportDate': 1694554839, 'lastReportWatts': 204, 'maxReportWatts': 246, 'serialNumber': '121547059360', }), dict({ 'devType': 1, 'lastReportDate': 1694554845, 'lastReportWatts': 206, 'maxReportWatts': 248, 'serialNumber': '121547060384', }), dict({ 'devType': 1, 'lastReportDate': 1694554852, 'lastReportWatts': 198, 'maxReportWatts': 242, 'serialNumber': '121547059363', }), dict({ 'devType': 1, 'lastReportDate': 1694554848, 'lastReportWatts': 199, 'maxReportWatts': 242, 'serialNumber': '121547060650', }), dict({ 'devType': 1, 'lastReportDate': 1694554858, 'lastReportWatts': 204, 'maxReportWatts': 248, 'serialNumber': '121547059128', }), dict({ 'devType': 1, 'lastReportDate': 1694554865, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547059108', }), dict({ 'devType': 1, 'lastReportDate': 1694554871, 'lastReportWatts': 206, 'maxReportWatts': 248, 'serialNumber': '121547060593', }), dict({ 'devType': 1, 'lastReportDate': 1694554873, 'lastReportWatts': 159, 'maxReportWatts': 247, 'serialNumber': '121547059102', }), dict({ 'devType': 1, 'lastReportDate': 1694554881, 'lastReportWatts': 180, 'maxReportWatts': 234, 'serialNumber': '121547060590', }), dict({ 'devType': 1, 'lastReportDate': 1694554887, 'lastReportWatts': 60, 'maxReportWatts': 224, 'serialNumber': '121547060671', }), dict({ 'devType': 1, 'lastReportDate': 1694554892, 'lastReportWatts': 206, 'maxReportWatts': 250, 'serialNumber': '121547059354', }), dict({ 'devType': 1, 'lastReportDate': 1694554896, 'lastReportWatts': 202, 'maxReportWatts': 249, 'serialNumber': '121547059253', }), dict({ 'devType': 1, 'lastReportDate': 1694554895, 'lastReportWatts': 208, 'maxReportWatts': 250, 'serialNumber': '121547060392', }), dict({ 'devType': 1, 'lastReportDate': 1694554890, 'lastReportWatts': 200, 'maxReportWatts': 248, 'serialNumber': '121547059112', }), dict({ 'devType': 1, 'lastReportDate': 1694554890, 'lastReportWatts': 207, 'maxReportWatts': 249, 'serialNumber': '121547060647', }), dict({ 'devType': 1, 'lastReportDate': 1694554888, 'lastReportWatts': 200, 'maxReportWatts': 248, 'serialNumber': '121547060643', }), dict({ 'devType': 1, 'lastReportDate': 1694554886, 'lastReportWatts': 210, 'maxReportWatts': 249, 'serialNumber': '121547059217', }), dict({ 'devType': 1, 'lastReportDate': 1694554884, 'lastReportWatts': 201, 'maxReportWatts': 247, 'serialNumber': '121547055830', }), dict({ 'devType': 1, 'lastReportDate': 1694554881, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547060592', }), dict({ 'devType': 1, 'lastReportDate': 1694554874, 'lastReportWatts': 197, 'maxReportWatts': 240, 'serialNumber': '121547060758', }), dict({ 'devType': 1, 'lastReportDate': 1694554877, 'lastReportWatts': 202, 'maxReportWatts': 248, 'serialNumber': '121547059333', }), dict({ 'devType': 1, 'lastReportDate': 1694554877, 'lastReportWatts': 204, 'maxReportWatts': 249, 'serialNumber': '121547060727', }), dict({ 'devType': 1, 'lastReportDate': 1694554837, 'lastReportWatts': 203, 'maxReportWatts': 247, 'serialNumber': '121547059008', }), dict({ 'devType': 1, 'lastReportDate': 1694554841, 'lastReportWatts': 202, 'maxReportWatts': 246, 'serialNumber': '121547060773', }), dict({ 'devType': 1, 'lastReportDate': 1694554848, 'lastReportWatts': 200, 'maxReportWatts': 243, 'serialNumber': '121547059202', }), dict({ 'devType': 1, 'lastReportDate': 1694554857, 'lastReportWatts': 202, 'maxReportWatts': 244, 'serialNumber': '121547060761', }), dict({ 'devType': 1, 'lastReportDate': 1694554855, 'lastReportWatts': 197, 'maxReportWatts': 220, 'serialNumber': '121547060412', }), dict({ 'devType': 1, 'lastReportDate': 1694554861, 'lastReportWatts': 207, 'maxReportWatts': 249, 'serialNumber': '121547059355', }), dict({ 'devType': 1, 'lastReportDate': 1694554866, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547060415', }), dict({ 'devType': 1, 'lastReportDate': 1694554870, 'lastReportWatts': 199, 'maxReportWatts': 243, 'serialNumber': '121547060670', }), dict({ 'devType': 1, 'lastReportDate': 1694554867, 'lastReportWatts': 205, 'maxReportWatts': 248, 'serialNumber': '121547060396', }), dict({ 'devType': 1, 'lastReportDate': 1694554863, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547059107', }), dict({ 'devType': 1, 'lastReportDate': 1694554862, 'lastReportWatts': 204, 'maxReportWatts': 247, 'serialNumber': '121547059889', }), dict({ 'devType': 1, 'lastReportDate': 1694554853, 'lastReportWatts': 204, 'maxReportWatts': 246, 'serialNumber': '121547060383', }), dict({ 'devType': 1, 'lastReportDate': 1694554837, 'lastReportWatts': 202, 'maxReportWatts': 244, 'serialNumber': '121547060766', }), dict({ 'devType': 1, 'lastReportDate': 1694554843, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547059359', }), dict({ 'devType': 1, 'lastReportDate': 1694554850, 'lastReportWatts': 201, 'maxReportWatts': 242, 'serialNumber': '121547059357', }), dict({ 'devType': 1, 'lastReportDate': 1694554856, 'lastReportWatts': 205, 'maxReportWatts': 249, 'serialNumber': '121547059381', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 366671, 'watt_hours_lifetime': 133798553, 'watt_hours_today': 20161, 'watts_now': 7907, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': None, 'logger': None, 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': None, }), }) # --- # name: test_with_7_x_firmware[7.3.130] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202218023114': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342554, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218023114', 'temperature': None, }), '202218024705': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342553, 'last_report_duration': None, 'last_report_watts': 8, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218024705', 'temperature': None, }), '202218025399': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342465, 'last_report_duration': None, 'last_report_watts': 10, 'lifetime_energy': None, 'max_report_watts': 350, 'serial_number': '202218025399', 'temperature': None, }), '202218026521': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342464, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218026521', 'temperature': None, }), '202218028926': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342462, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218028926', 'temperature': None, }), '202218029586': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342643, 'last_report_duration': None, 'last_report_watts': 12, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218029586', 'temperature': None, }), '202218031593': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342674, 'last_report_duration': None, 'last_report_watts': 20, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218031593', 'temperature': None, }), '202218034002': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342555, 'last_report_duration': None, 'last_report_watts': 14, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '202218034002', 'temperature': None, }), '202218035988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342613, 'last_report_duration': None, 'last_report_watts': 17, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218035988', 'temperature': None, }), '202218036214': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342432, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 347, 'serial_number': '202218036214', 'temperature': None, }), '202218036386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342584, 'last_report_duration': None, 'last_report_watts': 9, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '202218036386', 'temperature': None, }), '202218037990': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691342525, 'last_report_duration': None, 'last_report_watts': 16, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '202218037990', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691342432, 'lastReportWatts': 13, 'maxReportWatts': 347, 'serialNumber': '202218036214', }), dict({ 'devType': 1, 'lastReportDate': 1691342462, 'lastReportWatts': 17, 'maxReportWatts': 346, 'serialNumber': '202218028926', }), dict({ 'devType': 1, 'lastReportDate': 1691342643, 'lastReportWatts': 12, 'maxReportWatts': 347, 'serialNumber': '202218029586', }), dict({ 'devType': 1, 'lastReportDate': 1691342613, 'lastReportWatts': 17, 'maxReportWatts': 348, 'serialNumber': '202218035988', }), dict({ 'devType': 1, 'lastReportDate': 1691342553, 'lastReportWatts': 8, 'maxReportWatts': 345, 'serialNumber': '202218024705', }), dict({ 'devType': 1, 'lastReportDate': 1691342554, 'lastReportWatts': 14, 'maxReportWatts': 346, 'serialNumber': '202218023114', }), dict({ 'devType': 1, 'lastReportDate': 1691342525, 'lastReportWatts': 16, 'maxReportWatts': 348, 'serialNumber': '202218037990', }), dict({ 'devType': 1, 'lastReportDate': 1691342555, 'lastReportWatts': 14, 'maxReportWatts': 345, 'serialNumber': '202218034002', }), dict({ 'devType': 1, 'lastReportDate': 1691342464, 'lastReportWatts': 9, 'maxReportWatts': 347, 'serialNumber': '202218026521', }), dict({ 'devType': 1, 'lastReportDate': 1691342465, 'lastReportWatts': 10, 'maxReportWatts': 350, 'serialNumber': '202218025399', }), dict({ 'devType': 1, 'lastReportDate': 1691342584, 'lastReportWatts': 9, 'maxReportWatts': 346, 'serialNumber': '202218036386', }), dict({ 'devType': 1, 'lastReportDate': 1691342674, 'lastReportWatts': 20, 'maxReportWatts': 348, 'serialNumber': '202218031593', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5108.445, 'measurementType': 'total-consumption', 'pwrFactor': 0.27, 'reactPwr': -1565.844, 'readingTime': 1691342712, 'rmsCurrent': 21.153, 'rmsVoltage': 241.499, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 22482.589, 'varhLagLifetime': 998203.693, 'varhLagToday': 1456.693, 'varhLeadLifetime': 10691664.429, 'varhLeadToday': 13981.429, 'wNow': 1393.191, 'whLastSevenDays': 365473.825, 'whLifetime': 10154380.825, 'whToday': 15177.825, }), dict({ 'activeCount': 1, 'apprntPwr': 2118.15, 'measurementType': 'net-consumption', 'pwrFactor': 0.59, 'reactPwr': -1596.082, 'readingTime': 1691342712, 'rmsCurrent': 17.572, 'rmsVoltage': 241.437, 'type': 'eim', 'vahLifetime': 14686267.589, 'vahToday': 0, 'varhLagLifetime': 258967.196, 'varhLagToday': 0, 'varhLeadLifetime': 10652517.939, 'varhLeadToday': 0, 'wNow': 1214.696, 'whLastSevenDays': 0, 'whLifetime': 7116675.502, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 12, 'readingTime': 1691342674, 'type': 'inverters', 'wNow': 158, 'whLifetime': 142373, }), dict({ 'activeCount': 1, 'apprntPwr': 432.848, 'measurementType': 'production', 'pwrFactor': 0.41, 'reactPwr': -30.238, 'readingTime': 1691342712, 'rmsCurrent': 3.581, 'rmsVoltage': 241.56, 'type': 'eim', 'vahLifetime': 4846260.619, 'vahToday': 1977.619, 'varhLagLifetime': 739236.497, 'varhLagToday': 1457.497, 'varhLeadLifetime': 39146.49, 'varhLeadToday': 40.49, 'wNow': 178.495, 'whLastSevenDays': 149972.105, 'whLifetime': 3659506.105, 'whToday': 86.105, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 365474, 'watt_hours_lifetime': 10154381, 'watt_hours_today': 15178, 'watts_now': 1393, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7116676, 'watt_hours_today': 0, 'watts_now': 1215, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 149972, 'watt_hours_lifetime': 3659506, 'watt_hours_today': 86, 'watts_now': 178, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.3.130_no_consumption] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 3625, 'current': 30.223, 'eid': 704643328, 'energy_delivered': 4545930, 'energy_received': 1, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 241.696, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1811, 'current': 15.11, 'eid': 1778385169, 'energy_delivered': 2271794, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.749, }), : dict({ 'active_power': 1814, 'current': 15.113, 'eid': 1778385170, 'energy_delivered': 2274136, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.988, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694549733, 'voltage': 120.946, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '202302072076': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549623, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302072076', 'temperature': None, }), '202302073177': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549622, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 299, 'serial_number': '202302073177', 'temperature': None, }), '202302073203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549592, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302073203', 'temperature': None, }), '202302073606': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549655, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302073606', 'temperature': None, }), '202302074252': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549653, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302074252', 'temperature': None, }), '202302075515': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549531, 'last_report_duration': None, 'last_report_watts': 284, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302075515', 'temperature': None, }), '202302076392': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549625, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 301, 'serial_number': '202302076392', 'temperature': None, }), '202302076838': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549652, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302076838', 'temperature': None, }), '202302077015': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549626, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077015', 'temperature': None, }), '202302077415': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549654, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077415', 'temperature': None, }), '202302077506': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549561, 'last_report_duration': None, 'last_report_watts': 283, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077506', 'temperature': None, }), '202302077890': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549594, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '202302077890', 'temperature': None, }), '482236040239': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549628, 'last_report_duration': None, 'last_report_watts': 272, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040239', 'temperature': None, }), '482236040258': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549627, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040258', 'temperature': None, }), '482236040746': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694549624, 'last_report_duration': None, 'last_report_watts': 270, 'lifetime_energy': None, 'max_report_watts': 300, 'serial_number': '482236040746', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-07-09 22:07:02 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694549622, 'lastReportWatts': 271, 'maxReportWatts': 299, 'serialNumber': '202302073177', }), dict({ 'devType': 1, 'lastReportDate': 1694549623, 'lastReportWatts': 271, 'maxReportWatts': 300, 'serialNumber': '202302072076', }), dict({ 'devType': 1, 'lastReportDate': 1694549592, 'lastReportWatts': 276, 'maxReportWatts': 301, 'serialNumber': '202302073203', }), dict({ 'devType': 1, 'lastReportDate': 1694549531, 'lastReportWatts': 284, 'maxReportWatts': 300, 'serialNumber': '202302075515', }), dict({ 'devType': 1, 'lastReportDate': 1694549624, 'lastReportWatts': 270, 'maxReportWatts': 300, 'serialNumber': '482236040746', }), dict({ 'devType': 1, 'lastReportDate': 1694549625, 'lastReportWatts': 271, 'maxReportWatts': 301, 'serialNumber': '202302076392', }), dict({ 'devType': 1, 'lastReportDate': 1694549561, 'lastReportWatts': 283, 'maxReportWatts': 300, 'serialNumber': '202302077506', }), dict({ 'devType': 1, 'lastReportDate': 1694549626, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302077015', }), dict({ 'devType': 1, 'lastReportDate': 1694549652, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302076838', }), dict({ 'devType': 1, 'lastReportDate': 1694549627, 'lastReportWatts': 273, 'maxReportWatts': 300, 'serialNumber': '482236040258', }), dict({ 'devType': 1, 'lastReportDate': 1694549594, 'lastReportWatts': 276, 'maxReportWatts': 300, 'serialNumber': '202302077890', }), dict({ 'devType': 1, 'lastReportDate': 1694549653, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302074252', }), dict({ 'devType': 1, 'lastReportDate': 1694549654, 'lastReportWatts': 266, 'maxReportWatts': 300, 'serialNumber': '202302077415', }), dict({ 'devType': 1, 'lastReportDate': 1694549628, 'lastReportWatts': 272, 'maxReportWatts': 300, 'serialNumber': '482236040239', }), dict({ 'devType': 1, 'lastReportDate': 1694549655, 'lastReportWatts': 269, 'maxReportWatts': 300, 'serialNumber': '202302073606', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'disabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 4545929.53, 'actEnergyRcvd': 0.637, 'activePower': 3624.573, 'apparentEnergy': 5375938.331, 'apparentPower': 3675.535, 'channels': list([ dict({ 'actEnergyDlvd': 2271793.63, 'actEnergyRcvd': 0.3, 'activePower': 1810.773, 'apparentEnergy': 2685521.244, 'apparentPower': 1836.021, 'current': 15.11, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1810.773, 'pwrFactor': 0.988, 'reactEnergyLagg': 365648.234, 'reactEnergyLead': 7490.926, 'reactivePower': 13.171, 'timestamp': 1694549733, 'voltage': 120.749, }), dict({ 'actEnergyDlvd': 2274135.9, 'actEnergyRcvd': 0.337, 'activePower': 1813.8, 'apparentEnergy': 2690417.087, 'apparentPower': 1839.514, 'current': 15.113, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1813.8, 'pwrFactor': 0.988, 'reactEnergyLagg': 364353.682, 'reactEnergyLead': 8559.662, 'reactivePower': 12.373, 'timestamp': 1694549733, 'voltage': 120.946, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 30.223, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 3624.573, 'pwrFactor': 0.988, 'reactEnergyLagg': 730001.916, 'reactEnergyLead': 16050.589, 'reactivePower': 25.544, 'timestamp': 1694549733, 'voltage': 241.696, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.021, 'apparentPower': 34.651, 'channels': list([ dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.009, 'apparentPower': 15.201, 'current': 0.126, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.773, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.012, 'apparentPower': 19.45, 'current': 0.16, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 120.945, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 0.0, }), ]), 'current': 0.287, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694549733, 'voltage': 241.718, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 7698.231, 'measurementType': 'total-consumption', 'pwrFactor': 0.49, 'reactPwr': -29.295, 'readingTime': 1694549731, 'rmsCurrent': 31.831, 'rmsVoltage': 241.85, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0.021, 'varhLagLifetime': 730001.895, 'varhLagToday': 730001.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 16050.589, 'wNow': 3780.646, 'whLastSevenDays': 4545909.217, 'whLifetime': 4545909.217, 'whToday': 4545909.217, }), dict({ 'activeCount': 0, 'apprntPwr': 35.041, 'measurementType': 'net-consumption', 'pwrFactor': 0.0, 'reactPwr': 0.909, 'readingTime': 1694549731, 'rmsCurrent': 0.29, 'rmsVoltage': 241.9, 'type': 'eim', 'vahLifetime': 0.021, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': 0.0, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 15, 'readingTime': 1694549655, 'type': 'inverters', 'wNow': 4085, 'whLifetime': 943236, }), dict({ 'activeCount': 1, 'apprntPwr': 3826.518, 'measurementType': 'production', 'pwrFactor': 0.99, 'reactPwr': 30.203, 'readingTime': 1694549731, 'rmsCurrent': 31.541, 'rmsVoltage': 241.801, 'type': 'eim', 'vahLifetime': 5375935.161, 'vahToday': 17699.161, 'varhLagLifetime': 730001.895, 'varhLagToday': 2831.895, 'varhLeadLifetime': 16050.589, 'varhLeadToday': 14.589, 'wNow': 3780.646, 'whLastSevenDays': 186010.403, 'whLifetime': 4545926.403, 'whToday': 14848.403, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 186010, 'watt_hours_lifetime': 4545926, 'watt_hours_today': 14848, 'watts_now': 3781, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1680547193', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ dict({ 'id': 'tier_1', 'limit': 1000, 'rate': 0.15128, }), dict({ 'id': 'tier_2', 'limit': -1, 'rate': 0.1585, }), ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.15128, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1680547193', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.466_metered_disabled_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': -144.999, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': -456.848, 'readingTime': 1693745129, 'rmsCurrent': -0.615, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 22904.009, 'varhLagLifetime': -591341.987, 'varhLagToday': 0.0, 'varhLeadLifetime': 3174026.446, 'varhLeadToday': 9602.446, 'wNow': 476.686, 'whLastSevenDays': 4.621, 'whLifetime': 5145153.621, 'whToday': 19903.621, }), dict({ 'activeCount': 0, 'apprntPwr': -654.785, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -572.697, 'readingTime': 1693745129, 'rmsCurrent': -2.778, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 0, 'varhLagLifetime': 251.885, 'varhLagToday': 0, 'varhLeadLifetime': 3174026.466, 'varhLeadToday': 0, 'wNow': -11.468, 'whLastSevenDays': 0, 'whLifetime': 1961512.786, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 1693745066, 'type': 'inverters', 'wNow': 751, 'whLifetime': 702919, }), dict({ 'activeCount': 0, 'apprntPwr': 509.902, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 115.849, 'readingTime': 1693745129, 'rmsCurrent': 2.162, 'rmsVoltage': 235.777, 'type': 'eim', 'vahLifetime': 3576166.777, 'vahToday': 5461.777, 'varhLagLifetime': 591593.872, 'varhLagToday': 1483.872, 'varhLeadLifetime': 0.021, 'varhLeadToday': 0.021, 'wNow': 488.154, 'whLastSevenDays': 111093.303, 'whLifetime': 3183793.303, 'whToday': 4425.303, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 111093, 'watt_hours_lifetime': 702919, 'watt_hours_today': 4425, 'watts_now': 751, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.466_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121212121201': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121212121201', 'temperature': None, }), '121212121202': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121212121202', 'temperature': None, }), '121212121203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121203', 'temperature': None, }), '121212121204': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121204', 'temperature': None, }), '121212121205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121205', 'temperature': None, }), '121212121206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121206', 'temperature': None, }), '121212121207': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '121212121207', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121212121201', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121212121202', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '121212121203', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '121212121204', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '121212121205', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '121212121206', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '121212121207', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'backup', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_legacy_savings_mode] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'NC2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'No1', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'NO2', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 10080, 'backup_reserve': 10080, 'configured_reserve_state_of_charge': 100, 'max_available_capacity': 10080, 'reserve_state_of_charge': 100, 'state_of_charge': 100, }), 'encharge_inventory': dict({ '122035013273': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651649, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651649, 'last_report_date': 1692817971, 'led_status': 14, 'max_cell_temp': 28, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013273', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013278': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692651650, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692651650, 'last_report_date': 1692817716, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013278', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122035013286': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1692779890, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1692779890, 'last_report_date': 1692817944, 'led_status': 14, 'max_cell_temp': 29, 'operating': True, 'part_number': '830-00703-r67', 'percent_full': 100, 'serial_number': '122035013286', 'temperature': 28, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122035013273': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013278': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), '122035013286': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 100, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1692651723, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1692651723, 'last_report_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r28', 'serial_number': '122029016399', 'temperature': 88, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '202042084581': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817988, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202042084581', 'temperature': None, }), '202042085758': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817781, 'last_report_duration': None, 'last_report_watts': 198, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202042085758', 'temperature': None, }), '202043001326': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817929, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043001326', 'temperature': None, }), '202043001340': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817840, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001340', 'temperature': None, }), '202043001781': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817838, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043001781', 'temperature': None, }), '202043002628': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 188, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043002628', 'temperature': None, }), '202043002631': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817819, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043002631', 'temperature': None, }), '202043002733': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817871, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002733', 'temperature': None, }), '202043002762': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817752, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002762', 'temperature': None, }), '202043002877': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817778, 'last_report_duration': None, 'last_report_watts': 197, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043002877', 'temperature': None, }), '202043002943': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817753, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 242, 'serial_number': '202043002943', 'temperature': None, }), '202043003123': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003123', 'temperature': None, }), '202043003256': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 218, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003256', 'temperature': None, }), '202043003454': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817816, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003454', 'temperature': None, }), '202043003467': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817748, 'last_report_duration': None, 'last_report_watts': 186, 'lifetime_energy': None, 'max_report_watts': 245, 'serial_number': '202043003467', 'temperature': None, }), '202043003473': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817928, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202043003473', 'temperature': None, }), '202043003484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817869, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003484', 'temperature': None, }), '202043003803': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817808, 'last_report_duration': None, 'last_report_watts': 210, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202043003803', 'temperature': None, }), '202106021181': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817958, 'last_report_duration': None, 'last_report_watts': 204, 'lifetime_energy': None, 'max_report_watts': 243, 'serial_number': '202106021181', 'temperature': None, }), '202106046579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817965, 'last_report_duration': None, 'last_report_watts': 201, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046579', 'temperature': None, }), '202106046737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817754, 'last_report_duration': None, 'last_report_watts': 187, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106046737', 'temperature': None, }), '202106049949': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692817841, 'last_report_duration': None, 'last_report_watts': 220, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '202106049949', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'backup', 'charge_from_grid': True, 'date': '2023-08-19 19:04:23 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 100.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'CG', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': 'savings-mode', 'operation_mode_sub_type': '', 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692817928, 'lastReportWatts': 209, 'maxReportWatts': 243, 'serialNumber': '202043003473', }), dict({ 'devType': 1, 'lastReportDate': 1692817869, 'lastReportWatts': 213, 'maxReportWatts': 244, 'serialNumber': '202043003484', }), dict({ 'devType': 1, 'lastReportDate': 1692817778, 'lastReportWatts': 197, 'maxReportWatts': 244, 'serialNumber': '202043002877', }), dict({ 'devType': 1, 'lastReportDate': 1692817808, 'lastReportWatts': 210, 'maxReportWatts': 244, 'serialNumber': '202043003803', }), dict({ 'devType': 1, 'lastReportDate': 1692817838, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043001781', }), dict({ 'devType': 1, 'lastReportDate': 1692817748, 'lastReportWatts': 186, 'maxReportWatts': 245, 'serialNumber': '202043003467', }), dict({ 'devType': 1, 'lastReportDate': 1692817929, 'lastReportWatts': 205, 'maxReportWatts': 244, 'serialNumber': '202043001326', }), dict({ 'devType': 1, 'lastReportDate': 1692817781, 'lastReportWatts': 198, 'maxReportWatts': 243, 'serialNumber': '202042085758', }), dict({ 'devType': 1, 'lastReportDate': 1692817958, 'lastReportWatts': 204, 'maxReportWatts': 243, 'serialNumber': '202106021181', }), dict({ 'devType': 1, 'lastReportDate': 1692817871, 'lastReportWatts': 212, 'maxReportWatts': 244, 'serialNumber': '202043002733', }), dict({ 'devType': 1, 'lastReportDate': 1692817752, 'lastReportWatts': 186, 'maxReportWatts': 244, 'serialNumber': '202043002762', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 220, 'maxReportWatts': 244, 'serialNumber': '202106049949', }), dict({ 'devType': 1, 'lastReportDate': 1692817753, 'lastReportWatts': 187, 'maxReportWatts': 242, 'serialNumber': '202043002943', }), dict({ 'devType': 1, 'lastReportDate': 1692817840, 'lastReportWatts': 220, 'maxReportWatts': 245, 'serialNumber': '202043001340', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 188, 'maxReportWatts': 245, 'serialNumber': '202043002628', }), dict({ 'devType': 1, 'lastReportDate': 1692817754, 'lastReportWatts': 187, 'maxReportWatts': 244, 'serialNumber': '202106046737', }), dict({ 'devType': 1, 'lastReportDate': 1692817841, 'lastReportWatts': 218, 'maxReportWatts': 245, 'serialNumber': '202043003256', }), dict({ 'devType': 1, 'lastReportDate': 1692817965, 'lastReportWatts': 201, 'maxReportWatts': 244, 'serialNumber': '202106046579', }), dict({ 'devType': 1, 'lastReportDate': 1692817988, 'lastReportWatts': 199, 'maxReportWatts': 245, 'serialNumber': '202042084581', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 211, 'maxReportWatts': 243, 'serialNumber': '202043003454', }), dict({ 'devType': 1, 'lastReportDate': 1692817816, 'lastReportWatts': 209, 'maxReportWatts': 245, 'serialNumber': '202043003123', }), dict({ 'devType': 1, 'lastReportDate': 1692817819, 'lastReportWatts': 212, 'maxReportWatts': 243, 'serialNumber': '202043002631', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651649, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651649, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651649, 'last_rpt_date': 1692817971, 'led_status': 14, 'maxCellTemp': 28, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013273', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651650, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692651650, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692651650, 'last_rpt_date': 1692817716, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013278', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692779890, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1692779890, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1692779890, 'last_rpt_date': 1692817944, 'led_status': 14, 'maxCellTemp': 29, 'operating': True, 'part_num': '830-00703-r67', 'percentFull': 100, 'serial_num': '122035013286', 'sleep_enabled': False, 'temperature': 28, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15664, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1692651723, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1692651723, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1692651723, 'last_rpt_date': 1692817873, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r28', 'serial_num': '122029016399', 'temperature': 88, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013273', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013278', 'soc': 100, }), dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122035013286', 'soc': 100, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 10080, 'ENC_agg_backup_energy': 10080, 'ENC_agg_soc': 100, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 100, 'agg_soc': 100, 'configured_backup_soc': 100, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -512, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'NC1 Test', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 25.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'shed', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'NC2', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'No1', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'NO2', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 3159.183, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 120.73, 'readingTime': 1692818014, 'rmsCurrent': 25.982, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 20422.404, 'varhLagLifetime': -9185383.698, 'varhLagToday': 0.0, 'varhLeadLifetime': 13182910.813, 'varhLeadToday': 8438.813, 'wNow': 3791.075, 'whLastSevenDays': 852.104, 'whLifetime': 27629799.104, 'whToday': 24292.104, }), dict({ 'activeCount': 1, 'apprntPwr': -1322.483, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -287.032, 'readingTime': 1692818014, 'rmsCurrent': -10.874, 'rmsVoltage': 243.198, 'type': 'eim', 'vahLifetime': 35703441.404, 'vahToday': 0, 'varhLagLifetime': 190188.018, 'varhLagToday': 0, 'varhLeadLifetime': 13182911.259, 'varhLeadToday': 0, 'wNow': -765.064, 'whLastSevenDays': 0, 'whLifetime': 8436418.891, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 22, 'readingTime': 1692817988, 'type': 'inverters', 'wNow': 4490, 'whLifetime': 183353, }), dict({ 'activeCount': 1, 'apprntPwr': 4646.052, 'measurementType': 'production', 'pwrFactor': 0.98, 'reactPwr': 407.762, 'readingTime': 1692818014, 'rmsCurrent': 36.856, 'rmsVoltage': 243.341, 'type': 'eim', 'vahLifetime': 25459515.173, 'vahToday': 22749.173, 'varhLagLifetime': 9375571.716, 'varhLagToday': 6529.716, 'varhLeadLifetime': 0.446, 'varhLeadToday': 0.446, 'wNow': 4556.139, 'whLastSevenDays': 218714.461, 'whLifetime': 19230313.461, 'whToday': 18633.461, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 852, 'watt_hours_lifetime': 27629799, 'watt_hours_today': 24292, 'watts_now': 3791, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 8436419, 'watt_hours_today': 0, 'watts_now': -765, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 218714, 'watt_hours_lifetime': 19230313, 'watt_hours_today': 18633, 'watts_now': 4556, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1692471808', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1692471808', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 100.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.3.517_system_2] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 23, 'current': 2.985, 'eid': 704643584, 'energy_delivered': 4873881, 'energy_received': 7554062, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.031, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 245.008, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -17, 'current': 1.18, 'eid': 1778385425, 'energy_delivered': 3374056, 'energy_received': 3340639, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.154, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.634, }), : dict({ 'active_power': 41, 'current': 1.806, 'eid': 1778385426, 'energy_delivered': 1499825, 'energy_received': 4213423, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.15, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.375, }), }), 'ctmeter_production': dict({ 'active_power': 2660, 'current': 21.736, 'eid': 704643328, 'energy_delivered': 18442497, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 244.845, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1331, 'current': 10.865, 'eid': 1778385169, 'energy_delivered': 9224605, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.565, }), : dict({ 'active_power': 1329, 'current': 10.871, 'eid': 1778385170, 'energy_delivered': 9217892, 'energy_received': 0, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1694553765, 'voltage': 122.28, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': None, 'essential_end_time': None, 'essential_start_time': None, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': None, 'micro_grid_action': , 'mode': , 'override': False, 'priority': None, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9710, 'backup_reserve': 2016, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 10080, 'reserve_state_of_charge': 20, 'state_of_charge': 96, }), 'encharge_inventory': dict({ '122031000212': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693554929, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693554929, 'last_report_date': 1694553651, 'led_status': 12, 'max_cell_temp': 25, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031000212', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031000215': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1693576648, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1693576648, 'last_report_date': 1694553547, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 97, 'serial_number': '122031000215', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), '122031023943': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 1, 'firmware_loaded_date': 1694098472, 'firmware_version': '2.0.5663_rel/22.13', 'installed_date': 1694098472, 'last_report_date': 1694553574, 'led_status': 12, 'max_cell_temp': 26, 'operating': True, 'part_number': '830-00703-r64', 'percent_full': 96, 'serial_number': '122031023943', 'temperature': 25, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100B', }), }), 'encharge_power': dict({ '122031000212': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), '122031000215': dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'soc': 97, }), '122031023943': dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'soc': 96, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'firmware_loaded_date': 1688303357, 'firmware_version': '1.5.5229_rel/22.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1688303357, 'last_report_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_number': '860-00276-r33', 'serial_number': '122036058363', 'temperature': 78, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': '100B', }), 'inverters': dict({ '122004027913': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553576, 'last_report_duration': None, 'last_report_watts': 230, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004027913', 'temperature': None, }), '122004028091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553426, 'last_report_duration': None, 'last_report_watts': 13, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028091', 'temperature': None, }), '122004028206': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553697, 'last_report_duration': None, 'last_report_watts': 129, 'lifetime_energy': None, 'max_report_watts': 295, 'serial_number': '122004028206', 'temperature': None, }), '122004028286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553702, 'last_report_duration': None, 'last_report_watts': 229, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028286', 'temperature': None, }), '122004028288': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553606, 'last_report_duration': None, 'last_report_watts': 263, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028288', 'temperature': None, }), '122004028400': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553427, 'last_report_duration': None, 'last_report_watts': 177, 'lifetime_energy': None, 'max_report_watts': 286, 'serial_number': '122004028400', 'temperature': None, }), '122004028989': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553456, 'last_report_duration': None, 'last_report_watts': 266, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028989', 'temperature': None, }), '122004028991': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553699, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004028991', 'temperature': None, }), '122004028996': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553546, 'last_report_duration': None, 'last_report_watts': 232, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004028996', 'temperature': None, }), '122004031655': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553607, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004031655', 'temperature': None, }), '122004032100': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553549, 'last_report_duration': None, 'last_report_watts': 170, 'lifetime_energy': None, 'max_report_watts': 244, 'serial_number': '122004032100', 'temperature': None, }), '122004032124': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553457, 'last_report_duration': None, 'last_report_watts': 199, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122004032124', 'temperature': None, }), '122004039060': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694553698, 'last_report_duration': None, 'last_report_watts': 231, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122004039060', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-08-31 06:04:08 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694553546, 'lastReportWatts': 232, 'maxReportWatts': 296, 'serialNumber': '122004028996', }), dict({ 'devType': 1, 'lastReportDate': 1694553576, 'lastReportWatts': 230, 'maxReportWatts': 296, 'serialNumber': '122004027913', }), dict({ 'devType': 1, 'lastReportDate': 1694553697, 'lastReportWatts': 129, 'maxReportWatts': 295, 'serialNumber': '122004028206', }), dict({ 'devType': 1, 'lastReportDate': 1694553698, 'lastReportWatts': 231, 'maxReportWatts': 296, 'serialNumber': '122004039060', }), dict({ 'devType': 1, 'lastReportDate': 1694553606, 'lastReportWatts': 263, 'maxReportWatts': 296, 'serialNumber': '122004028288', }), dict({ 'devType': 1, 'lastReportDate': 1694553699, 'lastReportWatts': 268, 'maxReportWatts': 297, 'serialNumber': '122004028991', }), dict({ 'devType': 1, 'lastReportDate': 1694553702, 'lastReportWatts': 229, 'maxReportWatts': 296, 'serialNumber': '122004028286', }), dict({ 'devType': 1, 'lastReportDate': 1694553426, 'lastReportWatts': 13, 'maxReportWatts': 296, 'serialNumber': '122004028091', }), dict({ 'devType': 1, 'lastReportDate': 1694553549, 'lastReportWatts': 170, 'maxReportWatts': 244, 'serialNumber': '122004032100', }), dict({ 'devType': 1, 'lastReportDate': 1694553427, 'lastReportWatts': 177, 'maxReportWatts': 286, 'serialNumber': '122004028400', }), dict({ 'devType': 1, 'lastReportDate': 1694553456, 'lastReportWatts': 266, 'maxReportWatts': 296, 'serialNumber': '122004028989', }), dict({ 'devType': 1, 'lastReportDate': 1694553607, 'lastReportWatts': 268, 'maxReportWatts': 296, 'serialNumber': '122004031655', }), dict({ 'devType': 1, 'lastReportDate': 1694553457, 'lastReportWatts': 199, 'maxReportWatts': 297, 'serialNumber': '122004032124', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'open', }), dict({ 'id': 'NC2', 'status': 'open', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693554929, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693554929, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693554929, 'last_rpt_date': 1694553651, 'led_status': 12, 'maxCellTemp': 25, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031000212', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 3, 'comm_level_sub_ghz': 3, 'communicating': True, 'created_date': 1693576648, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1693576648, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1693576648, 'last_rpt_date': 1694553547, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 97, 'serial_num': '122031000215', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.27', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1694098472, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 1, 'img_load_date': 1694098472, 'img_pnum_running': '2.0.5663_rel/22.13', 'installed': 1694098472, 'last_rpt_date': 1694553574, 'led_status': 12, 'maxCellTemp': 26, 'operating': True, 'part_num': '830-00703-r64', 'percentFull': 96, 'serial_num': '122031023943', 'sleep_enabled': False, 'temperature': 25, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 304, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1688303357, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1688303357, 'img_pnum_running': '1.5.5229_rel/22.13', 'installed': 1688303357, 'last_rpt_date': 1694553566, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': True, 'part_num': '860-00276-r33', 'serial_num': '122036058363', 'temperature': 78, 'zigbee_dongle_fw_version': '100B', }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031000212', 'soc': 96, }), dict({ 'apparent_power_mva': -680000, 'real_power_mw': -680000, 'serial_num': '122031000215', 'soc': 97, }), dict({ 'apparent_power_mva': -676000, 'real_power_mw': -676000, 'serial_num': '122031023943', 'soc': 96, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 9710, 'ENC_agg_backup_energy': 2016, 'ENC_agg_soc': 96, 'Enc_commissioned_capacity': 10080, 'Enc_max_available_capacity': 10080, 'Max_energy': 10080, 'adjusted_backup_soc': 20, 'agg_soc': 96, 'configured_backup_soc': 20, 'freq_bias_hz': -0.6863999962806702, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -1104, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -8.319999694824219, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -266, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 18442496.933, 'actEnergyRcvd': 0.069, 'activePower': 2659.845, 'apparentEnergy': 21988447.961, 'apparentPower': 2661.49, 'channels': list([ dict({ 'actEnergyDlvd': 9224604.961, 'actEnergyRcvd': 0.018, 'activePower': 1330.866, 'apparentEnergy': 10992997.506, 'apparentPower': 1331.981, 'current': 10.865, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 1330.866, 'pwrFactor': 1.0, 'reactEnergyLagg': 1823613.307, 'reactEnergyLead': 113311.01, 'reactivePower': 8.891, 'timestamp': 1694553765, 'voltage': 122.565, }), dict({ 'actEnergyDlvd': 9217891.972, 'actEnergyRcvd': 0.051, 'activePower': 1328.979, 'apparentEnergy': 10995450.455, 'apparentPower': 1329.509, 'current': 10.871, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 1328.979, 'pwrFactor': 1.0, 'reactEnergyLagg': 1817923.688, 'reactEnergyLead': 122718.31, 'reactivePower': 7.776, 'timestamp': 1694553765, 'voltage': 122.28, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 21.736, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 2659.845, 'pwrFactor': 1.0, 'reactEnergyLagg': 3641536.995, 'reactEnergyLead': 236029.32, 'reactivePower': 16.667, 'timestamp': 1694553765, 'voltage': 244.845, }), dict({ 'actEnergyDlvd': 4873881.221, 'actEnergyRcvd': 7554062.483, 'activePower': 23.172, 'apparentEnergy': 18779628.396, 'apparentPower': 364.999, 'channels': list([ dict({ 'actEnergyDlvd': 3374056.076, 'actEnergyRcvd': 3340639.336, 'activePower': -17.438, 'apparentEnergy': 9863909.676, 'apparentPower': 143.478, 'current': 1.18, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -17.438, 'pwrFactor': -0.154, 'reactEnergyLagg': 50177.337, 'reactEnergyLead': 4264141.719, 'reactivePower': -95.235, 'timestamp': 1694553765, 'voltage': 122.634, }), dict({ 'actEnergyDlvd': 1499825.145, 'actEnergyRcvd': 4213423.147, 'activePower': 40.61, 'apparentEnergy': 8915718.719, 'apparentPower': 221.521, 'current': 1.806, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 40.61, 'pwrFactor': 0.15, 'reactEnergyLagg': 449728.699, 'reactEnergyLead': 3365454.56, 'reactivePower': -144.988, 'timestamp': 1694553765, 'voltage': 122.375, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1694553765, 'voltage': 0.0, }), ]), 'current': 2.985, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 23.172, 'pwrFactor': 0.031, 'reactEnergyLagg': 499906.036, 'reactEnergyLead': 7629596.279, 'reactivePower': -240.223, 'timestamp': 1694553765, 'voltage': 245.008, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2748.29, 'measurementType': 'total-consumption', 'pwrFactor': 0.99, 'reactPwr': -221.854, 'readingTime': 1694553763, 'rmsCurrent': 22.422, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 7275.073, 'varhLagLifetime': -3141630.945, 'varhLagToday': 0.0, 'varhLeadLifetime': 7393566.746, 'varhLeadToday': 5177.746, 'wNow': 2712.776, 'whLastSevenDays': 348.638, 'whLifetime': 15745050.638, 'whToday': 12901.638, }), dict({ 'activeCount': 1, 'apprntPwr': 83.613, 'measurementType': 'net-consumption', 'pwrFactor': 0.56, 'reactPwr': -240.621, 'readingTime': 1694553763, 'rmsCurrent': 0.686, 'rmsVoltage': 245.187, 'type': 'eim', 'vahLifetime': 18779628.073, 'vahToday': 0, 'varhLagLifetime': 499906.036, 'varhLagToday': 0, 'varhLeadLifetime': 7629596.066, 'varhLeadToday': 0, 'wNow': 49.701, 'whLastSevenDays': 0, 'whLifetime': -2662918.637, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 13, 'readingTime': 1694553761, 'type': 'inverters', 'wNow': 2675, 'whLifetime': 640883, }), dict({ 'activeCount': 1, 'apprntPwr': 2664.473, 'measurementType': 'production', 'pwrFactor': 1.0, 'reactPwr': 18.766, 'readingTime': 1694553763, 'rmsCurrent': 21.736, 'rmsVoltage': 245.138, 'type': 'eim', 'vahLifetime': 21988445.596, 'vahToday': 13609.596, 'varhLagLifetime': 3641536.981, 'varhLagToday': 2248.981, 'varhLeadLifetime': 236029.32, 'varhLeadToday': 0.32, 'wNow': 2663.075, 'whLastSevenDays': 18431345.567, 'whLifetime': 18442494.567, 'whToday': 11494.567, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 349, 'watt_hours_lifetime': 15745051, 'watt_hours_today': 12902, 'watts_now': 2713, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': -2662919, 'watt_hours_today': 0, 'watts_now': 50, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 18431346, 'watt_hours_lifetime': 18442495, 'watt_hours_today': 11495, 'watts_now': 2663, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1693461802', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.24488, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.183109, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.183109, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'id': 'weekdays', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.196829, 'start': 1020, }), dict({ 'id': 'filler', 'rate': 0.185529, 'start': 1200, }), ]), }), dict({ 'days': 'Sat,Sun', 'id': 'weekend', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.185529, 'start': 0, }), dict({ 'id': 'filler', 'rate': 0.0, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', }), ]), 'single_rate': dict({ 'rate': 0.183109, 'sell': 0.183109, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1693461802', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 20.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.6.114_without_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '482305021663': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412935, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '482305021663', 'temperature': None, }), '482305022836': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412935, 'last_report_duration': None, 'last_report_watts': 39, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482305022836', 'temperature': None, }), '482305023640': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412965, 'last_report_duration': None, 'last_report_watts': 50, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482305023640', 'temperature': None, }), '482306060958': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412754, 'last_report_duration': None, 'last_report_watts': 47, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306060958', 'temperature': None, }), '482306074560': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412755, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306074560', 'temperature': None, }), '482306075432': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412757, 'last_report_duration': None, 'last_report_watts': 46, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306075432', 'temperature': None, }), '482306075729': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412758, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306075729', 'temperature': None, }), '482306076034': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412759, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306076034', 'temperature': None, }), '482306083701': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412936, 'last_report_duration': None, 'last_report_watts': 48, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083701', 'temperature': None, }), '482306083705': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412937, 'last_report_duration': None, 'last_report_watts': 33, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '482306083705', 'temperature': None, }), '482306083763': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412760, 'last_report_duration': None, 'last_report_watts': 47, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083763', 'temperature': None, }), '482306083851': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412938, 'last_report_duration': None, 'last_report_watts': 44, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306083851', 'temperature': None, }), '482306101590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691412939, 'last_report_duration': None, 'last_report_watts': 40, 'lifetime_energy': None, 'max_report_watts': 330, 'serial_number': '482306101590', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 1544282, 'wattHoursSevenDays': 101742, 'wattHoursToday': 10363, 'wattsNow': 586, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691412935, 'lastReportWatts': 48, 'maxReportWatts': 329, 'serialNumber': '482305021663', }), dict({ 'devType': 1, 'lastReportDate': 1691412935, 'lastReportWatts': 39, 'maxReportWatts': 330, 'serialNumber': '482305022836', }), dict({ 'devType': 1, 'lastReportDate': 1691412965, 'lastReportWatts': 50, 'maxReportWatts': 330, 'serialNumber': '482305023640', }), dict({ 'devType': 1, 'lastReportDate': 1691412754, 'lastReportWatts': 47, 'maxReportWatts': 330, 'serialNumber': '482306060958', }), dict({ 'devType': 1, 'lastReportDate': 1691412755, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306074560', }), dict({ 'devType': 1, 'lastReportDate': 1691412757, 'lastReportWatts': 46, 'maxReportWatts': 330, 'serialNumber': '482306075432', }), dict({ 'devType': 1, 'lastReportDate': 1691412758, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306075729', }), dict({ 'devType': 1, 'lastReportDate': 1691412759, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306076034', }), dict({ 'devType': 1, 'lastReportDate': 1691412936, 'lastReportWatts': 48, 'maxReportWatts': 330, 'serialNumber': '482306083701', }), dict({ 'devType': 1, 'lastReportDate': 1691412937, 'lastReportWatts': 33, 'maxReportWatts': 329, 'serialNumber': '482306083705', }), dict({ 'devType': 1, 'lastReportDate': 1691412760, 'lastReportWatts': 47, 'maxReportWatts': 330, 'serialNumber': '482306083763', }), dict({ 'devType': 1, 'lastReportDate': 1691412938, 'lastReportWatts': 44, 'maxReportWatts': 330, 'serialNumber': '482306083851', }), dict({ 'devType': 1, 'lastReportDate': 1691412939, 'lastReportWatts': 40, 'maxReportWatts': 330, 'serialNumber': '482306101590', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 101742, 'watt_hours_lifetime': 1544282, 'watt_hours_today': 10363, 'watts_now': 586, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122146075749': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318584, 'last_report_duration': None, 'last_report_watts': 270, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122146075749', 'temperature': None, }), '122146076029': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318494, 'last_report_duration': None, 'last_report_watts': 281, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076029', 'temperature': None, }), '122146076125': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318704, 'last_report_duration': None, 'last_report_watts': 229, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076125', 'temperature': None, }), '122146076128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318674, 'last_report_duration': None, 'last_report_watts': 245, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076128', 'temperature': None, }), '122146076272': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318672, 'last_report_duration': None, 'last_report_watts': 243, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076272', 'temperature': None, }), '122146076336': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318523, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122146076336', 'temperature': None, }), '122146076488': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318612, 'last_report_duration': None, 'last_report_watts': 260, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076488', 'temperature': None, }), '122146076492': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318556, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076492', 'temperature': None, }), '122146076500': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318613, 'last_report_duration': None, 'last_report_watts': 259, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076500', 'temperature': None, }), '122146076518': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318462, 'last_report_duration': None, 'last_report_watts': 290, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076518', 'temperature': None, }), '122146076618': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318643, 'last_report_duration': None, 'last_report_watts': 250, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146076618', 'temperature': None, }), '122146078718': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318583, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146078718', 'temperature': None, }), '122146078769': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691318673, 'last_report_duration': None, 'last_report_watts': 243, 'lifetime_energy': None, 'max_report_watts': 297, 'serial_number': '122146078769', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 8717473, 'wattHoursSevenDays': 107011, 'wattHoursToday': 7883, 'wattsNow': 3391, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691318583, 'lastReportWatts': 273, 'maxReportWatts': 297, 'serialNumber': '122146078718', }), dict({ 'devType': 1, 'lastReportDate': 1691318584, 'lastReportWatts': 270, 'maxReportWatts': 296, 'serialNumber': '122146075749', }), dict({ 'devType': 1, 'lastReportDate': 1691318612, 'lastReportWatts': 260, 'maxReportWatts': 297, 'serialNumber': '122146076488', }), dict({ 'devType': 1, 'lastReportDate': 1691318643, 'lastReportWatts': 250, 'maxReportWatts': 297, 'serialNumber': '122146076618', }), dict({ 'devType': 1, 'lastReportDate': 1691318462, 'lastReportWatts': 290, 'maxReportWatts': 297, 'serialNumber': '122146076518', }), dict({ 'devType': 1, 'lastReportDate': 1691318523, 'lastReportWatts': 275, 'maxReportWatts': 296, 'serialNumber': '122146076336', }), dict({ 'devType': 1, 'lastReportDate': 1691318704, 'lastReportWatts': 229, 'maxReportWatts': 297, 'serialNumber': '122146076125', }), dict({ 'devType': 1, 'lastReportDate': 1691318672, 'lastReportWatts': 243, 'maxReportWatts': 297, 'serialNumber': '122146076272', }), dict({ 'devType': 1, 'lastReportDate': 1691318556, 'lastReportWatts': 273, 'maxReportWatts': 297, 'serialNumber': '122146076492', }), dict({ 'devType': 1, 'lastReportDate': 1691318613, 'lastReportWatts': 259, 'maxReportWatts': 297, 'serialNumber': '122146076500', }), dict({ 'devType': 1, 'lastReportDate': 1691318494, 'lastReportWatts': 281, 'maxReportWatts': 297, 'serialNumber': '122146076029', }), dict({ 'devType': 1, 'lastReportDate': 1691318673, 'lastReportWatts': 243, 'maxReportWatts': 297, 'serialNumber': '122146078769', }), dict({ 'devType': 1, 'lastReportDate': 1691318674, 'lastReportWatts': 245, 'maxReportWatts': 297, 'serialNumber': '122146076128', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 107011, 'watt_hours_lifetime': 8717473, 'watt_hours_today': 7883, 'watts_now': 3391, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175_standard] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122218040027': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416390, 'last_report_duration': None, 'last_report_watts': 299, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '122218040027', 'temperature': None, }), '122218042847': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416211, 'last_report_duration': None, 'last_report_watts': 272, 'lifetime_energy': None, 'max_report_watts': 341, 'serial_number': '122218042847', 'temperature': None, }), '122218043128': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416301, 'last_report_duration': None, 'last_report_watts': 292, 'lifetime_energy': None, 'max_report_watts': 354, 'serial_number': '122218043128', 'temperature': None, }), '122218044477': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416513, 'last_report_duration': None, 'last_report_watts': 205, 'lifetime_energy': None, 'max_report_watts': 346, 'serial_number': '122218044477', 'temperature': None, }), '122218051640': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416484, 'last_report_duration': None, 'last_report_watts': 231, 'lifetime_energy': None, 'max_report_watts': 345, 'serial_number': '122218051640', 'temperature': None, }), '122218052484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416275, 'last_report_duration': None, 'last_report_watts': 284, 'lifetime_energy': None, 'max_report_watts': 348, 'serial_number': '122218052484', 'temperature': None, }), '122218054157': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416304, 'last_report_duration': None, 'last_report_watts': 286, 'lifetime_energy': None, 'max_report_watts': 349, 'serial_number': '122218054157', 'temperature': None, }), '122219082033': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416299, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '122219082033', 'temperature': None, }), '122219083015': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416509, 'last_report_duration': None, 'last_report_watts': 158, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219083015', 'temperature': None, }), '122219083049': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416242, 'last_report_duration': None, 'last_report_watts': 214, 'lifetime_energy': None, 'max_report_watts': 315, 'serial_number': '122219083049', 'temperature': None, }), '122219083053': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416331, 'last_report_duration': None, 'last_report_watts': 226, 'lifetime_energy': None, 'max_report_watts': 315, 'serial_number': '122219083053', 'temperature': None, }), '122219083804': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416420, 'last_report_duration': None, 'last_report_watts': 268, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '122219083804', 'temperature': None, }), '122219084138': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416304, 'last_report_duration': None, 'last_report_watts': 211, 'lifetime_energy': None, 'max_report_watts': 307, 'serial_number': '122219084138', 'temperature': None, }), '122219084557': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416330, 'last_report_duration': None, 'last_report_watts': 219, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219084557', 'temperature': None, }), '122219084578': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416303, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 338, 'serial_number': '122219084578', 'temperature': None, }), '122219084937': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416359, 'last_report_duration': None, 'last_report_watts': 244, 'lifetime_energy': None, 'max_report_watts': 312, 'serial_number': '122219084937', 'temperature': None, }), '122219085086': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416453, 'last_report_duration': None, 'last_report_watts': 248, 'lifetime_energy': None, 'max_report_watts': 339, 'serial_number': '122219085086', 'temperature': None, }), '122219085199': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416421, 'last_report_duration': None, 'last_report_watts': 213, 'lifetime_energy': None, 'max_report_watts': 326, 'serial_number': '122219085199', 'temperature': None, }), '122219085275': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416241, 'last_report_duration': None, 'last_report_watts': 209, 'lifetime_energy': None, 'max_report_watts': 314, 'serial_number': '122219085275', 'temperature': None, }), '122219085710': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416210, 'last_report_duration': None, 'last_report_watts': 207, 'lifetime_energy': None, 'max_report_watts': 327, 'serial_number': '122219085710', 'temperature': None, }), '122219086026': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416301, 'last_report_duration': None, 'last_report_watts': 222, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '122219086026', 'temperature': None, }), '122220004338': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416271, 'last_report_duration': None, 'last_report_watts': 212, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '122220004338', 'temperature': None, }), '122220004813': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416212, 'last_report_duration': None, 'last_report_watts': 267, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '122220004813', 'temperature': None, }), '122220009431': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1691416210, 'last_report_duration': None, 'last_report_watts': 267, 'lifetime_energy': None, 'max_report_watts': 340, 'serial_number': '122220009431', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production': dict({ 'wattHoursLifetime': 6139406, 'wattHoursSevenDays': 189712, 'wattHoursToday': 36462, 'wattsNow': 5740, }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1691416241, 'lastReportWatts': 209, 'maxReportWatts': 314, 'serialNumber': '122219085275', }), dict({ 'devType': 1, 'lastReportDate': 1691416453, 'lastReportWatts': 248, 'maxReportWatts': 339, 'serialNumber': '122219085086', }), dict({ 'devType': 1, 'lastReportDate': 1691416509, 'lastReportWatts': 158, 'maxReportWatts': 312, 'serialNumber': '122219083015', }), dict({ 'devType': 1, 'lastReportDate': 1691416299, 'lastReportWatts': 211, 'maxReportWatts': 324, 'serialNumber': '122219082033', }), dict({ 'devType': 1, 'lastReportDate': 1691416271, 'lastReportWatts': 212, 'maxReportWatts': 323, 'serialNumber': '122220004338', }), dict({ 'devType': 1, 'lastReportDate': 1691416330, 'lastReportWatts': 219, 'maxReportWatts': 312, 'serialNumber': '122219084557', }), dict({ 'devType': 1, 'lastReportDate': 1691416210, 'lastReportWatts': 267, 'maxReportWatts': 340, 'serialNumber': '122220009431', }), dict({ 'devType': 1, 'lastReportDate': 1691416210, 'lastReportWatts': 207, 'maxReportWatts': 327, 'serialNumber': '122219085710', }), dict({ 'devType': 1, 'lastReportDate': 1691416390, 'lastReportWatts': 299, 'maxReportWatts': 345, 'serialNumber': '122218040027', }), dict({ 'devType': 1, 'lastReportDate': 1691416242, 'lastReportWatts': 214, 'maxReportWatts': 315, 'serialNumber': '122219083049', }), dict({ 'devType': 1, 'lastReportDate': 1691416420, 'lastReportWatts': 268, 'maxReportWatts': 338, 'serialNumber': '122219083804', }), dict({ 'devType': 1, 'lastReportDate': 1691416301, 'lastReportWatts': 222, 'maxReportWatts': 319, 'serialNumber': '122219086026', }), dict({ 'devType': 1, 'lastReportDate': 1691416359, 'lastReportWatts': 244, 'maxReportWatts': 312, 'serialNumber': '122219084937', }), dict({ 'devType': 1, 'lastReportDate': 1691416301, 'lastReportWatts': 292, 'maxReportWatts': 354, 'serialNumber': '122218043128', }), dict({ 'devType': 1, 'lastReportDate': 1691416275, 'lastReportWatts': 284, 'maxReportWatts': 348, 'serialNumber': '122218052484', }), dict({ 'devType': 1, 'lastReportDate': 1691416421, 'lastReportWatts': 213, 'maxReportWatts': 326, 'serialNumber': '122219085199', }), dict({ 'devType': 1, 'lastReportDate': 1691416484, 'lastReportWatts': 231, 'maxReportWatts': 345, 'serialNumber': '122218051640', }), dict({ 'devType': 1, 'lastReportDate': 1691416303, 'lastReportWatts': 275, 'maxReportWatts': 338, 'serialNumber': '122219084578', }), dict({ 'devType': 1, 'lastReportDate': 1691416331, 'lastReportWatts': 226, 'maxReportWatts': 315, 'serialNumber': '122219083053', }), dict({ 'devType': 1, 'lastReportDate': 1691416304, 'lastReportWatts': 211, 'maxReportWatts': 307, 'serialNumber': '122219084138', }), dict({ 'devType': 1, 'lastReportDate': 1691416304, 'lastReportWatts': 286, 'maxReportWatts': 349, 'serialNumber': '122218054157', }), dict({ 'devType': 1, 'lastReportDate': 1691416211, 'lastReportWatts': 272, 'maxReportWatts': 341, 'serialNumber': '122218042847', }), dict({ 'devType': 1, 'lastReportDate': 1691416212, 'lastReportWatts': 267, 'maxReportWatts': 336, 'serialNumber': '122220004813', }), dict({ 'devType': 1, 'lastReportDate': 1691416513, 'lastReportWatts': 205, 'maxReportWatts': 346, 'serialNumber': '122218044477', }), ]), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 189712, 'watt_hours_lifetime': 6139406, 'watt_hours_today': 36462, 'watts_now': 5740, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[7.6.175_total] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '122107025358': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181961, 'last_report_duration': None, 'last_report_watts': 190, 'lifetime_energy': None, 'max_report_watts': 279, 'serial_number': '122107025358', 'temperature': None, }), '122107031694': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182111, 'last_report_duration': None, 'last_report_watts': 193, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122107031694', 'temperature': None, }), '122107031731': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182200, 'last_report_duration': None, 'last_report_watts': 22, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107031731', 'temperature': None, }), '122107032484': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182142, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032484', 'temperature': None, }), '122107032623': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181960, 'last_report_duration': None, 'last_report_watts': 190, 'lifetime_energy': None, 'max_report_watts': 279, 'serial_number': '122107032623', 'temperature': None, }), '122107032918': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181930, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032918', 'temperature': None, }), '122107032940': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182172, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107032940', 'temperature': None, }), '122107033602': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694181992, 'last_report_duration': None, 'last_report_watts': 22, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107033602', 'temperature': None, }), '122107033629': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182081, 'last_report_duration': None, 'last_report_watts': 194, 'lifetime_energy': None, 'max_report_watts': 289, 'serial_number': '122107033629', 'temperature': None, }), '122107033673': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182140, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107033673', 'temperature': None, }), '122107035544': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182140, 'last_report_duration': None, 'last_report_watts': 191, 'lifetime_energy': None, 'max_report_watts': 283, 'serial_number': '122107035544', 'temperature': None, }), '122107035551': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182111, 'last_report_duration': None, 'last_report_watts': 191, 'lifetime_energy': None, 'max_report_watts': 287, 'serial_number': '122107035551', 'temperature': None, }), '122107035554': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182170, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107035554', 'temperature': None, }), '122107035597': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1694182052, 'last_report_duration': None, 'last_report_watts': 21, 'lifetime_energy': None, 'max_report_watts': 296, 'serial_number': '122107035597', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-07-06 06:11:26 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 30.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688623885', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.38914, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.4424, 'start': 420, }), dict({ 'id': 'filler', 'rate': 0.38914, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.38914, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688623885', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 30.0, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1694182111, 'lastReportWatts': 193, 'maxReportWatts': 289, 'serialNumber': '122107031694', }), dict({ 'devType': 1, 'lastReportDate': 1694182200, 'lastReportWatts': 22, 'maxReportWatts': 296, 'serialNumber': '122107031731', }), dict({ 'devType': 1, 'lastReportDate': 1694182140, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107033673', }), dict({ 'devType': 1, 'lastReportDate': 1694182081, 'lastReportWatts': 194, 'maxReportWatts': 289, 'serialNumber': '122107033629', }), dict({ 'devType': 1, 'lastReportDate': 1694182170, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107035554', }), dict({ 'devType': 1, 'lastReportDate': 1694181992, 'lastReportWatts': 22, 'maxReportWatts': 296, 'serialNumber': '122107033602', }), dict({ 'devType': 1, 'lastReportDate': 1694182052, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107035597', }), dict({ 'devType': 1, 'lastReportDate': 1694181960, 'lastReportWatts': 190, 'maxReportWatts': 279, 'serialNumber': '122107032623', }), dict({ 'devType': 1, 'lastReportDate': 1694182140, 'lastReportWatts': 191, 'maxReportWatts': 283, 'serialNumber': '122107035544', }), dict({ 'devType': 1, 'lastReportDate': 1694182111, 'lastReportWatts': 191, 'maxReportWatts': 287, 'serialNumber': '122107035551', }), dict({ 'devType': 1, 'lastReportDate': 1694181930, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032918', }), dict({ 'devType': 1, 'lastReportDate': 1694182172, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032940', }), dict({ 'devType': 1, 'lastReportDate': 1694181961, 'lastReportWatts': 190, 'maxReportWatts': 279, 'serialNumber': '122107025358', }), dict({ 'devType': 1, 'lastReportDate': 1694182142, 'lastReportWatts': 21, 'maxReportWatts': 296, 'serialNumber': '122107032484', }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 0, 'apprntPwr': 0.412, 'measurementType': 'total-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': 0.27, 'rmsVoltage': 238.786, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': -0.768, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), dict({ 'activeCount': 0, 'apprntPwr': -1.746, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': -0.247, 'rmsVoltage': 238.786, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0, 'varhLagLifetime': 0.0, 'varhLagToday': 0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0, 'wNow': -1.409, 'whLastSevenDays': 0, 'whLifetime': 0.0, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 14, 'readingTime': 1694182262, 'type': 'inverters', 'wNow': 1322, 'whLifetime': 1152866, }), dict({ 'activeCount': 0, 'apprntPwr': 1.335, 'measurementType': 'production', 'pwrFactor': 1.0, 'reactPwr': 0.0, 'readingTime': 1694182274, 'rmsCurrent': 0.516, 'rmsVoltage': 235.291, 'type': 'eim', 'vahLifetime': 0.0, 'vahToday': 0.0, 'varhLagLifetime': 0.0, 'varhLagToday': 0.0, 'varhLeadLifetime': 0.0, 'varhLeadToday': 0.0, 'wNow': 0.641, 'whLastSevenDays': 0.0, 'whLifetime': 0.0, 'whToday': 0.0, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': None, 'system_consumption_phases': None, 'system_net_consumption': None, 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1152866, 'watt_hours_today': 0, 'watts_now': 1322, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688623885', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'filler', 'rate': 0.38914, 'start': 0, }), dict({ 'id': 'period_1', 'rate': 0.4424, 'start': 420, }), dict({ 'id': 'filler', 'rate': 0.38914, 'start': 1381, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.38914, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688623885', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 30.0, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': -144.999, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': -456.848, 'readingTime': 1693745129, 'rmsCurrent': -0.615, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 22904.009, 'varhLagLifetime': -591341.987, 'varhLagToday': 0.0, 'varhLeadLifetime': 3174026.446, 'varhLeadToday': 9602.446, 'wNow': 476.686, 'whLastSevenDays': 4.621, 'whLifetime': 5145153.621, 'whToday': 19903.621, }), dict({ 'activeCount': 1, 'apprntPwr': -654.785, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': -572.697, 'readingTime': 1693745129, 'rmsCurrent': -2.778, 'rmsVoltage': 235.743, 'type': 'eim', 'vahLifetime': 7252190.009, 'vahToday': 0, 'varhLagLifetime': 251.885, 'varhLagToday': 0, 'varhLeadLifetime': 3174026.466, 'varhLeadToday': 0, 'wNow': -11.468, 'whLastSevenDays': 0, 'whLifetime': 1961512.786, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 1693745066, 'type': 'inverters', 'wNow': 751, 'whLifetime': 702919, }), dict({ 'activeCount': 1, 'apprntPwr': 509.902, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 115.849, 'readingTime': 1693745129, 'rmsCurrent': 2.162, 'rmsVoltage': 235.777, 'type': 'eim', 'vahLifetime': 3576166.777, 'vahToday': 5461.777, 'varhLagLifetime': 591593.872, 'varhLagToday': 1483.872, 'varhLeadLifetime': 0.021, 'varhLeadToday': 0.021, 'wNow': 488.154, 'whLastSevenDays': 111093.303, 'whLifetime': 3183793.303, 'whToday': 4425.303, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 5, 'watt_hours_lifetime': 5145154, 'watt_hours_today': 19904, 'watts_now': 477, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1961513, 'watt_hours_today': 0, 'watts_now': -11, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 111093, 'watt_hours_lifetime': 3183793, 'watt_hours_today': 4425, 'watts_now': 488, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.175_with_cts_3phase] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': -36, 'current': 2.745, 'eid': 704643584, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -36, 'current': 2.745, 'eid': 1778385425, 'energy_delivered': 3738205, 'energy_received': 1776769, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.06, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.201, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385426, 'energy_delivered': 0, 'energy_received': 8279, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 2.981, }), : dict({ 'active_power': 0, 'current': 0.242, 'eid': 1778385427, 'energy_delivered': 0, 'energy_received': 13980, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 4.635, }), }), 'ctmeter_production': dict({ 'active_power': 489, 'current': 2.169, 'eid': 704643328, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 489, 'current': 2.169, 'eid': 1778385169, 'energy_delivered': 3183794, 'energy_received': 8852, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.957, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 235.236, }), : dict({ 'active_power': 0, 'current': 0.0, 'eid': 1778385170, 'energy_delivered': 0, 'energy_received': 5371, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 6.124, }), : dict({ 'active_power': -1, 'current': 0.227, 'eid': 1778385171, 'energy_delivered': 0, 'energy_received': 9818, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1693745133, 'voltage': 11.469, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': None, 'encharge_inventory': None, 'encharge_power': None, 'enpower': None, 'inverters': dict({ '121823030072': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745036, 'last_report_duration': None, 'last_report_watts': 58, 'lifetime_energy': None, 'max_report_watts': 253, 'serial_number': '121823030072', 'temperature': None, }), '121823035149': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693745066, 'last_report_duration': None, 'last_report_watts': 56, 'lifetime_energy': None, 'max_report_watts': 254, 'serial_number': '121823035149', 'temperature': None, }), '482243031579': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744825, 'last_report_duration': None, 'last_report_watts': 135, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243031579', 'temperature': None, }), '482243032888': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 133, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032888', 'temperature': None, }), '482243032889': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744946, 'last_report_duration': None, 'last_report_watts': 112, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243032889', 'temperature': None, }), '482243033444': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744829, 'last_report_duration': None, 'last_report_watts': 127, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482243033444', 'temperature': None, }), '482250079070': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1693744828, 'last_report_duration': None, 'last_report_watts': 130, 'lifetime_energy': None, 'max_report_watts': 365, 'serial_number': '482250079070', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2023-06-29 15:50:12 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 0.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1693745036, 'lastReportWatts': 58, 'maxReportWatts': 253, 'serialNumber': '121823030072', }), dict({ 'devType': 1, 'lastReportDate': 1693745066, 'lastReportWatts': 56, 'maxReportWatts': 254, 'serialNumber': '121823035149', }), dict({ 'devType': 1, 'lastReportDate': 1693744825, 'lastReportWatts': 135, 'maxReportWatts': 365, 'serialNumber': '482243031579', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 133, 'maxReportWatts': 365, 'serialNumber': '482243032888', }), dict({ 'devType': 1, 'lastReportDate': 1693744828, 'lastReportWatts': 130, 'maxReportWatts': 365, 'serialNumber': '482250079070', }), dict({ 'devType': 1, 'lastReportDate': 1693744829, 'lastReportWatts': 127, 'maxReportWatts': 365, 'serialNumber': '482243033444', }), dict({ 'devType': 1, 'lastReportDate': 1693744946, 'lastReportWatts': 112, 'maxReportWatts': 365, 'serialNumber': '482243032889', }), ]), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 3, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'channels': list([ dict({ 'actEnergyDlvd': 3183793.885, 'actEnergyRcvd': 8851.704, 'activePower': 488.925, 'apparentEnergy': 3576167.385, 'apparentPower': 510.003, 'current': 2.169, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5370.79, 'activePower': 0.0, 'apparentEnergy': 295.364, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 387.143, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 6.124, }), dict({ 'actEnergyDlvd': 0.022, 'actEnergyRcvd': 9818.109, 'activePower': -1.044, 'apparentEnergy': 14032.684, 'apparentPower': 2.602, 'current': 0.227, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -1.044, 'pwrFactor': -1.0, 'reactEnergyLagg': 391.775, 'reactEnergyLead': 2.189, 'reactivePower': -0.0, 'timestamp': 1693745133, 'voltage': 11.469, }), ]), 'current': 2.169, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': 488.925, 'pwrFactor': 0.957, 'reactEnergyLagg': 591594.008, 'reactEnergyLead': 0.021, 'reactivePower': 114.596, 'timestamp': 1693745133, 'voltage': 235.236, }), dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'channels': list([ dict({ 'actEnergyDlvd': 3738205.282, 'actEnergyRcvd': 1776768.769, 'activePower': -36.162, 'apparentEnergy': 7252190.779, 'apparentPower': 645.376, 'current': 2.745, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 8279.267, 'activePower': -0.0, 'apparentEnergy': 141.429, 'apparentPower': -0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': -1.0, 'reactEnergyLagg': 378.426, 'reactEnergyLead': 0.181, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 2.981, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 13980.174, 'activePower': -0.451, 'apparentEnergy': 6016.263, 'apparentPower': 1.128, 'current': 0.242, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.451, 'pwrFactor': 0.0, 'reactEnergyLagg': 380.215, 'reactEnergyLead': 1.245, 'reactivePower': 0.0, 'timestamp': 1693745133, 'voltage': 4.635, }), ]), 'current': 2.745, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': -36.162, 'pwrFactor': -0.06, 'reactEnergyLagg': 251.885, 'reactEnergyLead': 3174027.145, 'reactivePower': -568.304, 'timestamp': 1693745133, 'voltage': 235.201, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 1929.904, 'lines': list([ dict({ 'apprntPwr': 306.73, 'pwrFactor': 0.29, 'reactPwr': -257.565, 'rmsCurrent': 1.295, 'rmsVoltage': 236.836, 'vahLifetime': 4268391.905, 'vahToday': 10866.905, 'varhLagLifetime': 578414.935, 'varhLagToday': 1188.935, 'varhLeadLifetime': 2114284.979, 'varhLeadToday': 4108.979, 'wNow': 88.573, 'whLastSevenDays': 39391.928, 'whLifetime': 2293782.928, 'whToday': 8584.928, }), dict({ 'apprntPwr': 204.919, 'pwrFactor': 0.6, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.934, 'vahLifetime': 2331874.944, 'vahToday': 4293.944, 'varhLagLifetime': 383807.966, 'varhLagToday': 815.966, 'varhLeadLifetime': 1059082.625, 'varhLeadToday': 2783.625, 'wNow': 123.364, 'whLastSevenDays': 18948.969, 'whLifetime': 948057.969, 'whToday': 2154.969, }), dict({ 'apprntPwr': 131.213, 'pwrFactor': -0.02, 'reactPwr': -75.026, 'rmsCurrent': 0.551, 'rmsVoltage': 237.956, 'vahLifetime': 2134819.346, 'vahToday': 3787.346, 'varhLagLifetime': 379329.532, 'varhLagToday': 797.532, 'varhLeadLifetime': 763032.665, 'varhLeadToday': 1331.665, 'wNow': -2.853, 'whLastSevenDays': 10443.471, 'whLifetime': 832954.471, 'whToday': 1683.471, }), ]), 'measurementType': 'total-consumption', 'pwrFactor': 0.11, 'reactPwr': -464.776, 'readingTime': 1693433002, 'rmsCurrent': 2.708, 'rmsVoltage': 712.725, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 18948.195, 'varhLagLifetime': 1341552.434, 'varhLagToday': 2802.434, 'varhLeadLifetime': 3936400.269, 'varhLeadToday': 8224.269, 'wNow': 209.084, 'whLastSevenDays': 68784.368, 'whLifetime': 4074795.368, 'whToday': 12423.368, }), dict({ 'activeCount': 1, 'apprntPwr': 487.922, 'lines': list([ dict({ 'apprntPwr': 238.691, 'pwrFactor': 0.41, 'reactPwr': -206.71, 'rmsCurrent': 1.009, 'rmsVoltage': 236.905, 'vahLifetime': 4268391.905, 'vahToday': 0, 'varhLagLifetime': 38719.874, 'varhLagToday': 0, 'varhLeadLifetime': 2114284.977, 'varhLeadToday': 0, 'wNow': 91.437, 'whLastSevenDays': 0, 'whLifetime': 1625201.414, 'whToday': 0, }), dict({ 'apprntPwr': 206.35, 'pwrFactor': 0.61, 'reactPwr': -132.184, 'rmsCurrent': 0.861, 'rmsVoltage': 237.949, 'vahLifetime': 2331874.944, 'vahToday': 0, 'varhLagLifetime': 16968.583, 'varhLagToday': 0, 'varhLeadLifetime': 1059082.624, 'varhLeadToday': 0, 'wNow': 123.364, 'whLastSevenDays': 0, 'whLifetime': 629892.171, 'whToday': 0, }), dict({ 'apprntPwr': 42.881, 'pwrFactor': 0.0, 'reactPwr': -41.336, 'rmsCurrent': 0.179, 'rmsVoltage': 238.007, 'vahLifetime': 2134819.346, 'vahToday': 0, 'varhLagLifetime': 20983.605, 'varhLagToday': 0, 'varhLeadLifetime': 763032.663, 'varhLeadToday': 0, 'wNow': 0.764, 'whLastSevenDays': 0, 'whLifetime': 631468.875, 'whToday': 0, }), ]), 'measurementType': 'net-consumption', 'pwrFactor': 0.46, 'reactPwr': -380.23, 'readingTime': 1693433002, 'rmsCurrent': 2.05, 'rmsVoltage': 712.862, 'type': 'eim', 'vahLifetime': 8735086.195, 'vahToday': 0, 'varhLagLifetime': 76672.062, 'varhLagToday': 0, 'varhLeadLifetime': 3936400.264, 'varhLeadToday': 0, 'wNow': 215.565, 'whLastSevenDays': 0, 'whLifetime': 2886562.459, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 7, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 4339764, }), dict({ 'activeCount': 1, 'apprntPwr': 156.055, 'lines': list([ dict({ 'apprntPwr': 67.699, 'pwrFactor': 0.0, 'reactPwr': 50.856, 'rmsCurrent': 0.286, 'rmsVoltage': 236.766, 'vahLifetime': 2377390.886, 'vahToday': 3576.886, 'varhLagLifetime': 539695.061, 'varhLagToday': 1163.061, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -2.864, 'whLastSevenDays': 29891.394, 'whLifetime': 1869678.394, 'whToday': 2200.394, }), dict({ 'apprntPwr': -0.0, 'pwrFactor': 0.0, 'reactPwr': 0.0, 'rmsCurrent': -0.0, 'rmsVoltage': 237.918, 'vahLifetime': 1241038.844, 'vahToday': 1528.844, 'varhLagLifetime': 366839.383, 'varhLagToday': 792.383, 'varhLeadLifetime': 0.001, 'varhLeadToday': 0.001, 'wNow': 0.0, 'whLastSevenDays': 19793.645, 'whLifetime': 1241245.645, 'whToday': 1454.645, }), dict({ 'apprntPwr': 88.355, 'pwrFactor': 0.0, 'reactPwr': 33.69, 'rmsCurrent': 0.372, 'rmsVoltage': 237.904, 'vahLifetime': 1941098.256, 'vahToday': 3191.256, 'varhLagLifetime': 358345.928, 'varhLagToday': 771.928, 'varhLeadLifetime': 0.002, 'varhLeadToday': 0.002, 'wNow': -3.617, 'whLastSevenDays': 19807.161, 'whLifetime': 1240189.161, 'whToday': 1458.161, }), ]), 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 84.546, 'readingTime': 1693433002, 'rmsCurrent': 0.658, 'rmsVoltage': 712.588, 'type': 'eim', 'vahLifetime': 5559527.987, 'vahToday': 8296.987, 'varhLagLifetime': 1264880.372, 'varhLagToday': 2727.372, 'varhLeadLifetime': 0.005, 'varhLeadToday': 0.005, 'wNow': -6.481, 'whLastSevenDays': 69492.2, 'whLifetime': 4351113.2, 'whToday': 5113.2, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 68784, 'watt_hours_lifetime': 4074795, 'watt_hours_today': 12423, 'watts_now': 209, }), 'system_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 39392, 'watt_hours_lifetime': 2293783, 'watt_hours_today': 8585, 'watts_now': 89, }), : dict({ 'watt_hours_last_7_days': 18949, 'watt_hours_lifetime': 948058, 'watt_hours_today': 2155, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 10443, 'watt_hours_lifetime': 832954, 'watt_hours_today': 1683, 'watts_now': -3, }), }), 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 2886562, 'watt_hours_today': 0, 'watts_now': 216, }), 'system_net_consumption_phases': dict({ : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1625201, 'watt_hours_today': 0, 'watts_now': 91, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 629892, 'watt_hours_today': 0, 'watts_now': 123, }), : dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 631469, 'watt_hours_today': 0, 'watts_now': 1, }), }), 'system_production': dict({ 'watt_hours_last_7_days': 69492, 'watt_hours_lifetime': 4351113, 'watt_hours_today': 5113, 'watts_now': -6, }), 'system_production_phases': dict({ : dict({ 'watt_hours_last_7_days': 29891, 'watt_hours_lifetime': 1869678, 'watt_hours_today': 2200, 'watts_now': -3, }), : dict({ 'watt_hours_last_7_days': 19794, 'watt_hours_lifetime': 1241246, 'watt_hours_today': 1455, 'watts_now': 0, }), : dict({ 'watt_hours_last_7_days': 19807, 'watt_hours_lifetime': 1240189, 'watt_hours_today': 1458, 'watts_now': -4, }), }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1688053811', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CG', 'must_charge_start': 0, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.14, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.01, 'start': 1320, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.01, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1688053811', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 0.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[7.6.185_with_cts_and_battery_3t] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 522, 'current': 3.138, 'eid': 704643584, 'energy_delivered': 2404339, 'energy_received': 1125590, 'frequency': 50.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.706, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.282, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': -1, 'current': 0.386, 'eid': 704643328, 'energy_delivered': 2432970, 'energy_received': 1795, 'frequency': 50.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1695769632, 'voltage': 238.524, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ }), 'dry_contact_status': dict({ }), 'encharge_aggregate': dict({ 'available_energy': 525, 'backup_reserve': 525, 'configured_reserve_state_of_charge': 15, 'max_available_capacity': 3500, 'reserve_state_of_charge': 15, 'state_of_charge': 15, }), 'encharge_inventory': dict({ '122249097612': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3500, 'encharge_revision': 2, 'firmware_loaded_date': 1695330323, 'firmware_version': '2.6.5973_rel/22.11', 'installed_date': 1695330323, 'last_report_date': 1695769447, 'led_status': 17, 'max_cell_temp': 30, 'operating': True, 'part_number': '830-01760-r37', 'percent_full': 15, 'serial_number': '122249097612', 'temperature': 29, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': '100F', }), }), 'encharge_power': dict({ '122249097612': dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'soc': 15, }), }), 'enpower': None, 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'battery_mode': 'self-consumption', 'charge_from_grid': True, 'date': '2023-09-26 16:03:40 UTC', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 15.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Mon': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sat': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Sun': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Thu': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Tue': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'Wed': list([ dict({ 'duration': 444, 'setting': 'ZN', 'start': 0, }), dict({ 'duration': 35, 'setting': 'CG', 'start': 444, }), dict({ 'duration': 961, 'setting': 'ZN', 'start': 479, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 5, }), 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 4, 'comm_level_sub_ghz': 4, 'communicating': True, 'created_date': 1695330323, 'dc_switch_off': False, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3500, 'encharge_rev': 2, 'img_load_date': 1695330323, 'img_pnum_running': '2.6.5973_rel/22.11', 'installed': 1695330323, 'last_rpt_date': 1695769447, 'led_status': 17, 'maxCellTemp': 30, 'operating': True, 'part_num': '830-01760-r37', 'percentFull': 15, 'serial_num': '122249097612', 'sleep_enabled': False, 'temperature': 29, 'zigbee_dongle_fw_version': '100F', }), ]), 'type': 'ENCHARGE', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 0, 'real_power_mw': 0, 'serial_num': '122249097612', 'soc': 15, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'ENC_agg_avail_energy': 525, 'ENC_agg_backup_energy': 525, 'ENC_agg_soc': 15, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 3500, 'Enc_max_available_capacity': 3500, 'Max_energy': 3500, 'adjusted_backup_soc': 15, 'agg_soc': 15, 'configured_backup_soc': 15, 'freq_bias_hz': 1.3899999856948853, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 2235, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': 16.899999618530273, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 540, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'channels': list([ dict({ 'actEnergyDlvd': 2432969.956, 'actEnergyRcvd': 1795.013, 'activePower': -0.661, 'apparentEnergy': 2709025.378, 'apparentPower': 92.126, 'current': 0.386, 'eid': 1778385169, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 0.013, 'actEnergyRcvd': 8248.228, 'activePower': -0.0, 'apparentEnergy': 140.353, 'apparentPower': -0.0, 'current': -0.0, 'eid': 1778385170, 'freq': 50.0, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 355.453, 'reactEnergyLead': 1.715, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 7.648, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 12408.486, 'activePower': -0.077, 'apparentEnergy': 898.304, 'apparentPower': 0.178, 'current': 0.152, 'eid': 1778385171, 'freq': 50.0, 'instantaneousDemand': -0.077, 'pwrFactor': -1.0, 'reactEnergyLagg': 419.396, 'reactEnergyLead': 0.0, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 1.176, }), ]), 'current': 0.386, 'eid': 704643328, 'freq': 50.0, 'instantaneousDemand': -0.661, 'pwrFactor': 0.0, 'reactEnergyLagg': 392075.354, 'reactEnergyLead': 7.266, 'reactivePower': 82.942, 'timestamp': 1695769632, 'voltage': 238.524, }), dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'channels': list([ dict({ 'actEnergyDlvd': 2404339.266, 'actEnergyRcvd': 1125590.088, 'activePower': 522.043, 'apparentEnergy': 4833861.616, 'apparentPower': 746.438, 'current': 3.138, 'eid': 1778385425, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1099.941, 'activePower': 0.0, 'apparentEnergy': 54.285, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385426, 'freq': 50.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 356.336, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1695769632, 'voltage': 3.447, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 5670.302, 'activePower': -0.351, 'apparentEnergy': 8802.177, 'apparentPower': 1.761, 'current': 0.197, 'eid': 1778385427, 'freq': 50.0, 'instantaneousDemand': -0.351, 'pwrFactor': 0.0, 'reactEnergyLagg': 361.519, 'reactEnergyLead': 0.367, 'reactivePower': -0.0, 'timestamp': 1695769632, 'voltage': 8.942, }), ]), 'current': 3.138, 'eid': 704643584, 'freq': 50.0, 'instantaneousDemand': 522.043, 'pwrFactor': 0.706, 'reactEnergyLagg': 22501.684, 'reactEnergyLead': 1935715.22, 'reactivePower': -458.984, 'timestamp': 1695769632, 'voltage': 238.282, }), ]), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 837.87, 'measurementType': 'total-consumption', 'pwrFactor': 0.62, 'reactPwr': -374.915, 'readingTime': 1695769629, 'rmsCurrent': 3.513, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 88.766, 'varhLagLifetime': -369573.576, 'varhLagToday': 0.0, 'varhLeadLifetime': 1935707.431, 'varhLeadToday': 54.431, 'wNow': 523.579, 'whLastSevenDays': 19.155, 'whLifetime': 3711429.155, 'whToday': 63.155, }), dict({ 'activeCount': 1, 'apprntPwr': 745.663, 'measurementType': 'net-consumption', 'pwrFactor': 0.7, 'reactPwr': -458.436, 'readingTime': 1695769629, 'rmsCurrent': 3.126, 'rmsVoltage': 238.507, 'type': 'eim', 'vahLifetime': 4833860.766, 'vahToday': 0, 'varhLagLifetime': 22501.684, 'varhLagToday': 0, 'varhLeadLifetime': 1935714.697, 'varhLeadToday': 0, 'wNow': 524.536, 'whLastSevenDays': 0, 'whLifetime': 1279037.969, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 5, 'readingTime': 0, 'type': 'inverters', 'wNow': 0, 'whLifetime': 45349, }), dict({ 'activeCount': 1, 'apprntPwr': 92.383, 'measurementType': 'production', 'pwrFactor': 0.0, 'reactPwr': 83.521, 'readingTime': 1695769629, 'rmsCurrent': 0.387, 'rmsVoltage': 238.522, 'type': 'eim', 'vahLifetime': 2709025.274, 'vahToday': 11.274, 'varhLagLifetime': 392075.259, 'varhLagToday': 10.259, 'varhLeadLifetime': 7.266, 'varhLeadToday': 0.266, 'wNow': -0.957, 'whLastSevenDays': 73002.956, 'whLifetime': 2432969.956, 'whToday': 0.956, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 19, 'watt_hours_lifetime': 3711429, 'watt_hours_today': 63, 'watts_now': 524, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1279038, 'watt_hours_today': 0, 'watts_now': 525, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 73003, 'watt_hours_lifetime': 2432970, 'watt_hours_today': 1, 'watts_now': -1, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'EUR', }), 'date': '1695744220', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': True, 'id': 'all_days', 'must_charge_duration': 35, 'must_charge_mode': 'CG', 'must_charge_start': 444, 'periods': list([ dict({ 'id': 'period_1', 'rate': 0.1898, 'start': 480, }), dict({ 'id': 'filler', 'rate': 0.1034, 'start': 1320, }), ]), }), ]), 'id': 'season_1', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.0, 'sell': 0.0, }), 'storage_settings': dict({ 'charge_from_grid': True, 'date': '1695598084', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 15.0, 'very_low_soc': 5, }), }), }) # --- # name: test_with_7_x_firmware[8.1.41] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': None, 'ctmeter_consumption_phases': None, 'ctmeter_production': None, 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': 'AC', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 9176, 'backup_reserve': 2976, 'configured_reserve_state_of_charge': 30, 'max_available_capacity': 9920, 'reserve_state_of_charge': 30, 'state_of_charge': 92, }), 'encharge_inventory': dict({ '492319002585': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560591, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560591, 'last_report_date': 1692385816, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 100, 'serial_number': '492319002585', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '492319002593': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 4960, 'encharge_revision': 3, 'firmware_loaded_date': 1691560590, 'firmware_version': '3.0.5949_rel/31.07', 'installed_date': 1691560590, 'last_report_date': 1692386075, 'led_status': 14, 'max_cell_temp': 42, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 85, 'serial_number': '492319002593', 'temperature': 42, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492319002585': dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'soc': 100, }), '492319002593': dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'soc': 85, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1691648499, 'firmware_version': '3.0.5177_rel/31.07', 'grid_mode': 'multimode-ongrid', 'installed_date': 1691648499, 'last_report_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00377-r28', 'serial_number': '482326083757', 'temperature': 113, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '202314050286': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385966, 'last_report_duration': None, 'last_report_watts': 312, 'lifetime_energy': None, 'max_report_watts': 327, 'serial_number': '202314050286', 'temperature': None, }), '202314055790': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314055790', 'temperature': None, }), '202314058203': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385784, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314058203', 'temperature': None, }), '202314059855': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385973, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314059855', 'temperature': None, }), '202314060891': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385785, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314060891', 'temperature': None, }), '202314061330': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385997, 'last_report_duration': None, 'last_report_watts': 269, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314061330', 'temperature': None, }), '202314062224': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385974, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314062224', 'temperature': None, }), '202314062558': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314062558', 'temperature': None, }), '202314062880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386026, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314062880', 'temperature': None, }), '202314063524': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385998, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314063524', 'temperature': None, }), '202314064007': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 325, 'serial_number': '202314064007', 'temperature': None, }), '202314065032': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386029, 'last_report_duration': None, 'last_report_watts': 273, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314065032', 'temperature': None, }), '202314065062': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314065062', 'temperature': None, }), '202314065647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385969, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314065647', 'temperature': None, }), '202314066216': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385965, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314066216', 'temperature': None, }), '202314067482': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385977, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314067482', 'temperature': None, }), '202314068272': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385786, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068272', 'temperature': None, }), '202314068438': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385979, 'last_report_duration': None, 'last_report_watts': 293, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314068438', 'temperature': None, }), '202314068868': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385904, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 318, 'serial_number': '202314068868', 'temperature': None, }), '202314069065': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385847, 'last_report_duration': None, 'last_report_watts': 303, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314069065', 'temperature': None, }), '202314069086': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385968, 'last_report_duration': None, 'last_report_watts': 313, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314069086', 'temperature': None, }), '202314069092': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385980, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314069092', 'temperature': None, }), '202314069944': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385814, 'last_report_duration': None, 'last_report_watts': 277, 'lifetime_energy': None, 'max_report_watts': 336, 'serial_number': '202314069944', 'temperature': None, }), '202314070107': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385971, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314070107', 'temperature': None, }), '202314070295': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386032, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 335, 'serial_number': '202314070295', 'temperature': None, }), '202314070321': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386030, 'last_report_duration': None, 'last_report_watts': 271, 'lifetime_energy': None, 'max_report_watts': 329, 'serial_number': '202314070321', 'temperature': None, }), '202314070523': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 320, 'serial_number': '202314070523', 'temperature': None, }), '202314070647': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385939, 'last_report_duration': None, 'last_report_watts': 301, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314070647', 'temperature': None, }), '202314070713': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385936, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 326, 'serial_number': '202314070713', 'temperature': None, }), '202314070988': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386027, 'last_report_duration': None, 'last_report_watts': 275, 'lifetime_energy': None, 'max_report_watts': 334, 'serial_number': '202314070988', 'temperature': None, }), '202314071516': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692386025, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314071516', 'temperature': None, }), '202314071599': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385978, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314071599', 'temperature': None, }), '202314071660': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385995, 'last_report_duration': None, 'last_report_watts': 310, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314071660', 'temperature': None, }), '202314071753': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385996, 'last_report_duration': None, 'last_report_watts': 276, 'lifetime_energy': None, 'max_report_watts': 337, 'serial_number': '202314071753', 'temperature': None, }), '202314071845': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385846, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314071845', 'temperature': None, }), '202314072420': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385967, 'last_report_duration': None, 'last_report_watts': 305, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314072420', 'temperature': None, }), '202314072546': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385844, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314072546', 'temperature': None, }), '202314073012': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385787, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073012', 'temperature': None, }), '202314073205': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385938, 'last_report_duration': None, 'last_report_watts': 304, 'lifetime_energy': None, 'max_report_watts': 321, 'serial_number': '202314073205', 'temperature': None, }), '202314073251': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385937, 'last_report_duration': None, 'last_report_watts': 307, 'lifetime_energy': None, 'max_report_watts': 323, 'serial_number': '202314073251', 'temperature': None, }), '202314073257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385907, 'last_report_duration': None, 'last_report_watts': 309, 'lifetime_energy': None, 'max_report_watts': 322, 'serial_number': '202314073257', 'temperature': None, }), '202314073428': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385942, 'last_report_duration': None, 'last_report_watts': 311, 'lifetime_energy': None, 'max_report_watts': 324, 'serial_number': '202314073428', 'temperature': None, }), '202314075069': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385999, 'last_report_duration': None, 'last_report_watts': 308, 'lifetime_energy': None, 'max_report_watts': 319, 'serial_number': '202314075069', 'temperature': None, }), '202314077078': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1692385935, 'last_report_duration': None, 'last_report_watts': 302, 'lifetime_energy': None, 'max_report_watts': 317, 'serial_number': '202314077078', 'temperature': None, }), }), 'raw': dict({ '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1692385844, 'lastReportWatts': 307, 'maxReportWatts': 319, 'serialNumber': '202314072546', }), dict({ 'devType': 1, 'lastReportDate': 1692386025, 'lastReportWatts': 308, 'maxReportWatts': 321, 'serialNumber': '202314071516', }), dict({ 'devType': 1, 'lastReportDate': 1692385784, 'lastReportWatts': 310, 'maxReportWatts': 321, 'serialNumber': '202314058203', }), dict({ 'devType': 1, 'lastReportDate': 1692385785, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314060891', }), dict({ 'devType': 1, 'lastReportDate': 1692385786, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314068272', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 302, 'maxReportWatts': 317, 'serialNumber': '202314077078', }), dict({ 'devType': 1, 'lastReportDate': 1692385935, 'lastReportWatts': 277, 'maxReportWatts': 334, 'serialNumber': '202314065062', }), dict({ 'devType': 1, 'lastReportDate': 1692385787, 'lastReportWatts': 308, 'maxReportWatts': 323, 'serialNumber': '202314073012', }), dict({ 'devType': 1, 'lastReportDate': 1692385936, 'lastReportWatts': 309, 'maxReportWatts': 326, 'serialNumber': '202314070713', }), dict({ 'devType': 1, 'lastReportDate': 1692385846, 'lastReportWatts': 308, 'maxReportWatts': 324, 'serialNumber': '202314071845', }), dict({ 'devType': 1, 'lastReportDate': 1692385847, 'lastReportWatts': 303, 'maxReportWatts': 320, 'serialNumber': '202314069065', }), dict({ 'devType': 1, 'lastReportDate': 1692385904, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314068868', }), dict({ 'devType': 1, 'lastReportDate': 1692385965, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314066216', }), dict({ 'devType': 1, 'lastReportDate': 1692385937, 'lastReportWatts': 307, 'maxReportWatts': 323, 'serialNumber': '202314073251', }), dict({ 'devType': 1, 'lastReportDate': 1692385938, 'lastReportWatts': 304, 'maxReportWatts': 321, 'serialNumber': '202314073205', }), dict({ 'devType': 1, 'lastReportDate': 1692385966, 'lastReportWatts': 312, 'maxReportWatts': 327, 'serialNumber': '202314050286', }), dict({ 'devType': 1, 'lastReportDate': 1692385967, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314072420', }), dict({ 'devType': 1, 'lastReportDate': 1692385907, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314073257', }), dict({ 'devType': 1, 'lastReportDate': 1692385939, 'lastReportWatts': 301, 'maxReportWatts': 319, 'serialNumber': '202314070647', }), dict({ 'devType': 1, 'lastReportDate': 1692385995, 'lastReportWatts': 310, 'maxReportWatts': 322, 'serialNumber': '202314071660', }), dict({ 'devType': 1, 'lastReportDate': 1692385968, 'lastReportWatts': 313, 'maxReportWatts': 323, 'serialNumber': '202314069086', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 305, 'maxReportWatts': 321, 'serialNumber': '202314055790', }), dict({ 'devType': 1, 'lastReportDate': 1692385996, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314071753', }), dict({ 'devType': 1, 'lastReportDate': 1692385997, 'lastReportWatts': 269, 'maxReportWatts': 336, 'serialNumber': '202314061330', }), dict({ 'devType': 1, 'lastReportDate': 1692385942, 'lastReportWatts': 311, 'maxReportWatts': 324, 'serialNumber': '202314073428', }), dict({ 'devType': 1, 'lastReportDate': 1692385969, 'lastReportWatts': 303, 'maxReportWatts': 319, 'serialNumber': '202314065647', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 301, 'maxReportWatts': 322, 'serialNumber': '202314062558', }), dict({ 'devType': 1, 'lastReportDate': 1692385971, 'lastReportWatts': 308, 'maxReportWatts': 317, 'serialNumber': '202314070107', }), dict({ 'devType': 1, 'lastReportDate': 1692385973, 'lastReportWatts': 309, 'maxReportWatts': 322, 'serialNumber': '202314059855', }), dict({ 'devType': 1, 'lastReportDate': 1692385998, 'lastReportWatts': 276, 'maxReportWatts': 337, 'serialNumber': '202314063524', }), dict({ 'devType': 1, 'lastReportDate': 1692386026, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314062880', }), dict({ 'devType': 1, 'lastReportDate': 1692386027, 'lastReportWatts': 275, 'maxReportWatts': 334, 'serialNumber': '202314070988', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 273, 'maxReportWatts': 336, 'serialNumber': '202314065032', }), dict({ 'devType': 1, 'lastReportDate': 1692385974, 'lastReportWatts': 304, 'maxReportWatts': 318, 'serialNumber': '202314062224', }), dict({ 'devType': 1, 'lastReportDate': 1692386029, 'lastReportWatts': 307, 'maxReportWatts': 325, 'serialNumber': '202314064007', }), dict({ 'devType': 1, 'lastReportDate': 1692385977, 'lastReportWatts': 302, 'maxReportWatts': 318, 'serialNumber': '202314067482', }), dict({ 'devType': 1, 'lastReportDate': 1692386030, 'lastReportWatts': 271, 'maxReportWatts': 329, 'serialNumber': '202314070321', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 305, 'maxReportWatts': 320, 'serialNumber': '202314070523', }), dict({ 'devType': 1, 'lastReportDate': 1692385978, 'lastReportWatts': 307, 'maxReportWatts': 317, 'serialNumber': '202314071599', }), dict({ 'devType': 1, 'lastReportDate': 1692385979, 'lastReportWatts': 293, 'maxReportWatts': 324, 'serialNumber': '202314068438', }), dict({ 'devType': 1, 'lastReportDate': 1692385814, 'lastReportWatts': 277, 'maxReportWatts': 336, 'serialNumber': '202314069944', }), dict({ 'devType': 1, 'lastReportDate': 1692385999, 'lastReportWatts': 308, 'maxReportWatts': 319, 'serialNumber': '202314075069', }), dict({ 'devType': 1, 'lastReportDate': 1692386032, 'lastReportWatts': 275, 'maxReportWatts': 335, 'serialNumber': '202314070295', }), dict({ 'devType': 1, 'lastReportDate': 1692385980, 'lastReportWatts': 309, 'maxReportWatts': 319, 'serialNumber': '202314069092', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560591, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560591, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560591, 'last_rpt_date': 1692385816, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 100, 'phase': 'ph-a', 'serial_num': '492319002585', 'sleep_enabled': False, 'temperature': 42, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.53', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691560590, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 4960, 'encharge_rev': 3, 'img_load_date': 1691560590, 'img_pnum_running': '3.0.5949_rel/31.07', 'installed': 1691560590, 'last_rpt_date': 1692386075, 'led_status': 14, 'maxCellTemp': 42, 'part_num': '836-01826-r76', 'percentFull': 85, 'phase': 'ph-a', 'serial_num': '492319002593', 'sleep_enabled': False, 'temperature': 42, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 3568, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1691648499, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1691648499, 'img_pnum_running': '3.0.5177_rel/31.07', 'installed': 1691648499, 'last_rpt_date': 1692386076, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00377-r28', 'serial_num': '482326083757', 'temperature': 113, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': 24000, 'real_power_mw': 24000, 'serial_num': '492319002585', 'soc': 100, }), dict({ 'apparent_power_mva': 16000, 'real_power_mw': 16000, 'serial_num': '492319002593', 'soc': 85, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 9176, 'ENC_agg_backup_energy': 2976, 'ENC_agg_soc': 92, 'ENC_agg_soh': 100, 'Enc_commissioned_capacity': 9920, 'Enc_max_available_capacity': 9920, 'Max_energy': 9920, 'Recovery_threshold_soc': 13, 'VLS_Limit': 10, 'adjusted_backup_soc': 30, 'agg_soc': 92, 'configured_backup_soc': 30, 'freq_bias_hz': -1.348230004310608, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2168, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'voltage_bias_v': -16.190109252929688, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -518, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': 'Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': 'AC', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'soc', 'override': 'true', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 5007.246, 'measurementType': 'total-consumption', 'pwrFactor': 1.0, 'reactPwr': 1407.058, 'readingTime': 1692386083, 'rmsCurrent': 40.571, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 1190799.036, 'varhLagLifetime': 29677.693, 'varhLagToday': 17206.693, 'varhLeadLifetime': 108784.489, 'varhLeadToday': 104827.489, 'wNow': 5216.083, 'whLastSevenDays': 0.0, 'whLifetime': 1757943.133, 'whToday': 0.0, }), dict({ 'activeCount': 1, 'apprntPwr': -8358.792, 'measurementType': 'net-consumption', 'pwrFactor': -1.0, 'reactPwr': 1329.256, 'readingTime': 1692386083, 'rmsCurrent': -67.703, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1607135.036, 'vahToday': 0, 'varhLagLifetime': 234428.764, 'varhLagToday': 0, 'varhLeadLifetime': 109642.368, 'varhLeadToday': 0, 'wNow': -7812.457, 'whLastSevenDays': 0, 'whLifetime': 247929.658, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 44, 'readingTime': 1692386032, 'type': 'inverters', 'wNow': 13163, 'whLifetime': 348363, }), dict({ 'activeCount': 1, 'apprntPwr': 13367.009, 'measurementType': 'production', 'pwrFactor': 0.97, 'reactPwr': 77.802, 'readingTime': 1692386083, 'rmsCurrent': 108.274, 'rmsVoltage': 246.894, 'type': 'eim', 'vahLifetime': 1746683.744, 'vahToday': 64277.744, 'varhLagLifetime': 204751.071, 'varhLagToday': 8551.071, 'varhLeadLifetime': 857.879, 'varhLeadToday': 33.879, 'wNow': 13028.54, 'whLastSevenDays': 1456156.655, 'whLifetime': 1510198.655, 'whToday': 55037.655, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 1757943, 'watt_hours_today': 0, 'watts_now': 5216, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 247930, 'watt_hours_today': 0, 'watts_now': -7812, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 1456157, 'watt_hours_lifetime': 1510199, 'watt_hours_today': 55038, 'watts_now': 13029, }), 'system_production_phases': None, 'tariff': None, }) # --- # name: test_with_7_x_firmware[8.2.127_with_3cts_and_battery_split] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 129, 'current': 21.241, 'eid': 704643584, 'energy_delivered': 4998252, 'energy_received': 253961, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.034, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.553, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': -201, 'current': 9.316, 'eid': 1778385425, 'energy_delivered': 2631217, 'energy_received': 93777, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': 331, 'current': 11.925, 'eid': 1778385426, 'energy_delivered': 2367035, 'energy_received': 160184, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.212, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.219, }), }), 'ctmeter_production': dict({ 'active_power': 1714, 'current': 17.326, 'eid': 704643328, 'energy_delivered': 3165834, 'energy_received': 76, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.817, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.367, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 856, 'current': 8.658, 'eid': 1778385169, 'energy_delivered': 1581746, 'energy_received': 46, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.822, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.224, }), : dict({ 'active_power': 858, 'current': 8.668, 'eid': 1778385170, 'energy_delivered': 1584088, 'energy_received': 30, 'frequency': 60.0, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.812, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.143, }), }), 'ctmeter_storage': dict({ 'active_power': -2580, 'current': 14.575, 'eid': 704643840, 'energy_delivered': 2274359, 'energy_received': 2971414, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -1.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 242.582, }), 'ctmeter_storage_phases': dict({ : dict({ 'active_power': -2115, 'current': 9.316, 'eid': 1778385681, 'energy_delivered': 1136860, 'energy_received': 1485292, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.193, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.334, }), : dict({ 'active_power': -465, 'current': 5.259, 'eid': 1778385682, 'energy_delivered': 1137499, 'energy_received': 1486122, 'frequency': 60.0, 'measurement_type': 'storage', 'metering_status': 'normal', 'power_factor': -0.713, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1709829517, 'voltage': 121.248, }), }), 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NC2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO1': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), 'NO2': dict({ 'black_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 5250, 'backup_reserve': 5000, 'configured_reserve_state_of_charge': 20, 'max_available_capacity': 25000, 'reserve_state_of_charge': 20, 'state_of_charge': 21, }), 'encharge_inventory': dict({ '12345678901002': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707197622, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707197622, 'last_report_date': 1709829328, 'led_status': 12, 'max_cell_temp': 13, 'operating': None, 'part_number': '836-01826-r81', 'percent_full': 21, 'serial_number': '12345678901002', 'temperature': 13, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901003': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1706749292, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1706749292, 'last_report_date': 1709829288, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901003', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901004': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1707622567, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1707622567, 'last_report_date': 1709829437, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901004', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901005': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709410199, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709410199, 'last_report_date': 1709829256, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901005', 'temperature': 11, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), '12345678901006': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 5000, 'encharge_revision': 3, 'firmware_loaded_date': 1709749530, 'firmware_version': '3.0.6614_rel/31.13', 'installed_date': 1709749530, 'last_report_date': 1709829434, 'led_status': 12, 'max_cell_temp': 12, 'operating': None, 'part_number': '836-01826-r76', 'percent_full': 21, 'serial_number': '12345678901006', 'temperature': 12, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '12345678901002': dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'soc': 21, }), '12345678901003': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901004': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901005': dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'soc': 21, }), '12345678901006': dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'soc': 21, }), }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1709657837, 'firmware_version': '3.0.5654_rel/31.13', 'grid_mode': 'multimode-ongrid', 'installed_date': 1709657837, 'last_report_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '865-00378-r27', 'serial_number': '12345678901001', 'temperature': 72, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482243033093': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752940, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 362, 'serial_number': '482243033093', 'temperature': None, }), '482243033113': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752919, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482243033113', 'temperature': None, }), '482246043645': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752947, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246043645', 'temperature': None, }), '482246047675': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752865, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 361, 'serial_number': '482246047675', 'temperature': None, }), '482246047880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1695752936, 'last_report_duration': None, 'last_report_watts': 0, 'lifetime_energy': None, 'max_report_watts': 360, 'serial_number': '482246047880', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-03-06 22:58:46 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': 'prioritize-energy', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 20, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '10/1', 'start': '6/1', }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '6/1', 'start': '10/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': 'self-consumption', 'operation_mode_sub_type': 'prioritize-energy', 'reserved_soc': 20, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1695752919, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482243033113', }), dict({ 'devType': 1, 'lastReportDate': 1695752947, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246043645', }), dict({ 'devType': 1, 'lastReportDate': 1695752865, 'lastReportWatts': 0, 'maxReportWatts': 361, 'serialNumber': '482246047675', }), dict({ 'devType': 1, 'lastReportDate': 1695752936, 'lastReportWatts': 0, 'maxReportWatts': 360, 'serialNumber': '482246047880', }), dict({ 'devType': 1, 'lastReportDate': 1695752940, 'lastReportWatts': 0, 'maxReportWatts': 362, 'serialNumber': '482243033093', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709749530, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709749530, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709749530, 'last_rpt_date': 1709829434, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901006', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709410199, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1709410199, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1709410199, 'last_rpt_date': 1709829256, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901005', 'sleep_enabled': False, 'temperature': 11, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707622567, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707622567, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707622567, 'last_rpt_date': 1709829437, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901004', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1706749292, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1706749292, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1706749292, 'last_rpt_date': 1709829288, 'led_status': 12, 'maxCellTemp': 12, 'part_num': '836-01826-r76', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901003', 'sleep_enabled': False, 'temperature': 12, }), dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '3.8.63', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1707197622, 'dc_switch_off': False, 'der_index': 3, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 5000, 'encharge_rev': 3, 'img_load_date': 1707197622, 'img_pnum_running': '3.0.6614_rel/31.13', 'installed': 1707197622, 'last_rpt_date': 1709829328, 'led_status': 12, 'maxCellTemp': 13, 'part_num': '836-01826-r81', 'percentFull': 21, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '12345678901002', 'sleep_enabled': False, 'temperature': 13, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 15868, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1709657837, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1709657837, 'img_pnum_running': '3.0.5654_rel/31.13', 'installed': 1709657837, 'last_rpt_date': 1709829514, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '865-00378-r27', 'serial_num': '12345678901001', 'temperature': 72, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -136000, 'real_power_mw': -136000, 'serial_num': '12345678901006', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901005', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901004', 'soc': 21, }), dict({ 'apparent_power_mva': -128000, 'real_power_mw': -128000, 'serial_num': '12345678901003', 'soc': 21, }), dict({ 'apparent_power_mva': -121000, 'real_power_mw': -121000, 'serial_num': '12345678901002', 'soc': 21, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 5250, 'ENC_agg_backup_energy': 5000, 'ENC_agg_soc': 21, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 25000, 'Enc_max_available_capacity': 25000, 'Max_energy': 25000, 'VLS_Limit': 10, 'adjusted_backup_soc': 20, 'agg_soc': 21, 'configured_backup_soc': 20, 'freq_bias_hz': -0.06000090762972832, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -96, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 2, 'soc_recovery_exit': 10, 'voltage_bias_v': -0.7205159664154053, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -23, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643840, 'measurementType': 'storage', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 3165834.272, 'actEnergyRcvd': 75.689, 'activePower': 1714.424, 'apparentEnergy': 5529628.28, 'apparentPower': 2100.04, 'channels': list([ dict({ 'actEnergyDlvd': 1581746.293, 'actEnergyRcvd': 45.89, 'activePower': 856.031, 'apparentEnergy': 2763520.42, 'apparentPower': 1049.732, 'current': 8.658, 'eid': 1778385169, 'freq': 60.0, 'instantaneousDemand': 856.031, 'pwrFactor': 0.822, 'reactEnergyLagg': 803725.479, 'reactEnergyLead': 33935.538, 'reactivePower': 8.366, 'timestamp': 1709829517, 'voltage': 121.224, }), dict({ 'actEnergyDlvd': 1584087.979, 'actEnergyRcvd': 29.799, 'activePower': 858.394, 'apparentEnergy': 2766107.86, 'apparentPower': 1050.307, 'current': 8.668, 'eid': 1778385170, 'freq': 60.0, 'instantaneousDemand': 858.394, 'pwrFactor': 0.812, 'reactEnergyLagg': 803599.733, 'reactEnergyLead': 34616.443, 'reactivePower': 12.499, 'timestamp': 1709829517, 'voltage': 121.143, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 17.326, 'eid': 704643328, 'freq': 60.0, 'instantaneousDemand': 1714.424, 'pwrFactor': 0.817, 'reactEnergyLagg': 1607325.212, 'reactEnergyLead': 68551.981, 'reactivePower': 20.865, 'timestamp': 1709829517, 'voltage': 242.367, }), dict({ 'actEnergyDlvd': 4998251.825, 'actEnergyRcvd': 253960.783, 'activePower': 129.407, 'apparentEnergy': 12810156.532, 'apparentPower': 2578.068, 'channels': list([ dict({ 'actEnergyDlvd': 2631217.196, 'actEnergyRcvd': 93777.056, 'activePower': -201.39, 'apparentEnergy': 6787276.689, 'apparentPower': 1130.056, 'current': 9.316, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': -201.39, 'pwrFactor': -0.193, 'reactEnergyLagg': 79.572, 'reactEnergyLead': 5042497.945, 'reactivePower': -935.571, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 2367034.629, 'actEnergyRcvd': 160183.727, 'activePower': 330.797, 'apparentEnergy': 6022879.843, 'apparentPower': 1448.012, 'current': 11.925, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': 330.797, 'pwrFactor': 0.212, 'reactEnergyLagg': 105.465, 'reactEnergyLead': 4128101.723, 'reactivePower': -1295.012, 'timestamp': 1709829517, 'voltage': 121.219, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), ]), 'current': 21.241, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 129.407, 'pwrFactor': 0.034, 'reactEnergyLagg': 185.037, 'reactEnergyLead': 9170599.668, 'reactivePower': -2230.583, 'timestamp': 1709829517, 'voltage': 242.553, }), dict({ 'actEnergyDlvd': 2274358.602, 'actEnergyRcvd': 2971414.344, 'activePower': -2579.823, 'apparentEnergy': 7881024.906, 'apparentPower': 461.253, 'channels': list([ dict({ 'actEnergyDlvd': 1136859.658, 'actEnergyRcvd': 1485292.441, 'activePower': -2114.856, 'apparentEnergy': 3945551.951, 'apparentPower': -179.488, 'current': 9.316, 'eid': 1778385681, 'freq': 60.0, 'instantaneousDemand': -2114.856, 'pwrFactor': -0.193, 'reactEnergyLagg': 1358495.518, 'reactEnergyLead': 31391.267, 'reactivePower': 299.583, 'timestamp': 1709829517, 'voltage': 121.334, }), dict({ 'actEnergyDlvd': 1137498.944, 'actEnergyRcvd': 1486121.902, 'activePower': -464.966, 'apparentEnergy': 3935472.955, 'apparentPower': 640.741, 'current': 5.259, 'eid': 1778385682, 'freq': 60.0, 'instantaneousDemand': -464.966, 'pwrFactor': -0.713, 'reactEnergyLagg': 1355134.893, 'reactEnergyLead': 31326.355, 'reactivePower': 377.197, 'timestamp': 1709829517, 'voltage': 121.248, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385683, 'freq': 0.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1709829517, 'voltage': 0.0, }), ]), 'current': 14.575, 'eid': 704643840, 'freq': 60.0, 'instantaneousDemand': -2579.823, 'pwrFactor': -1.0, 'reactEnergyLagg': 2713630.41, 'reactEnergyLead': 62717.621, 'reactivePower': 676.781, 'timestamp': 1709829517, 'voltage': 242.582, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 1, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 2, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), dict({ 'black_s_start': 5, 'essential_end_time': 57600, 'essential_start_time': 32400, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4, 'pv_serial_nb': list([ ]), 'soc_high': 40, 'soc_low': 30, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2416.339, 'measurementType': 'total-consumption', 'pwrFactor': 0.75, 'reactPwr': -2209.719, 'readingTime': 1709829518, 'rmsCurrent': 19.934, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 4946716.532, 'varhLagLifetime': -1607140.175, 'varhLagToday': 9360.0, 'varhLeadLifetime': 9102047.686, 'varhLeadToday': 9039334.686, 'wNow': 1843.831, 'whLastSevenDays': 0.0, 'whLifetime': 7909866.491, 'whToday': 7596.0, }), dict({ 'activeCount': 1, 'apprntPwr': 315.151, 'measurementType': 'net-consumption', 'pwrFactor': 0.28, 'reactPwr': -2230.583, 'readingTime': 1709829518, 'rmsCurrent': 2.609, 'rmsVoltage': 242.553, 'type': 'eim', 'vahLifetime': 12810156.532, 'vahToday': 0, 'varhLagLifetime': 185.037, 'varhLagToday': 0, 'varhLeadLifetime': 9170599.668, 'varhLeadToday': 0, 'wNow': 129.407, 'whLastSevenDays': 0, 'whLifetime': 4744549.864, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 35, 'readingTime': 1709829490, 'type': 'inverters', 'wNow': 1592, 'whLifetime': 821819, }), dict({ 'activeCount': 1, 'apprntPwr': 2100.04, 'measurementType': 'production', 'pwrFactor': 0.82, 'reactPwr': 20.865, 'readingTime': 1709829518, 'rmsCurrent': 17.326, 'rmsVoltage': 242.367, 'type': 'eim', 'vahLifetime': 5529628.28, 'vahToday': 8010.28, 'varhLagLifetime': 1607325.212, 'varhLagToday': 5202.212, 'varhLeadLifetime': 68551.981, 'varhLeadToday': 0.981, 'wNow': 1714.424, 'whLastSevenDays': 3164458.272, 'whLifetime': 3165834.272, 'whToday': 1475.272, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7909866, 'watt_hours_today': 7596, 'watts_now': 1844, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 4744550, 'watt_hours_today': 0, 'watts_now': 129, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 3164458, 'watt_hours_lifetime': 3165834, 'watt_hours_today': 1475, 'watts_now': 1714, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1709367413', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.5212500095367432, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.6300299763679504, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.5212500095367432, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.321370005607605, 'start': 1439, }), ]), }), ]), 'id': 'summer', 'start': '6/1', 'tiers': list([ ]), }), dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri', 'enable_discharge_to_grid': False, 'id': 'weekdays', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), dict({ 'days': 'Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'weekend', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 0, }), dict({ 'id': 'period_2', 'rate': 0.4895789921283722, 'start': 900, }), dict({ 'id': 'period_1', 'rate': 0.5047900080680847, 'start': 960, }), dict({ 'id': 'period_3', 'rate': 0.4895789921283722, 'start': 1260, }), dict({ 'id': 'filler', 'rate': 0.3213590085506439, 'start': 1439, }), ]), }), ]), 'id': 'winter', 'start': '10/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.321370005607605, 'sell': 9.899999713525176e-05, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1709339757', 'mode': , 'operation_mode_sub_type': 'prioritize-energy', 'opt_schedules': None, 'reserved_soc': 20, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.127_with_generator_running] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 196, 'current': 9.098, 'eid': 704643584, 'energy_delivered': 13632727, 'energy_received': 6336017, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.398, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 243.047, }), 'ctmeter_consumption_phases': dict({ : dict({ 'active_power': 268, 'current': 4.859, 'eid': 1778385425, 'energy_delivered': 7037859, 'energy_received': 2542489, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.637, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.856, }), : dict({ 'active_power': -72, 'current': 4.239, 'eid': 1778385426, 'energy_delivered': 6594868, 'energy_received': 3793528, 'frequency': 60.0, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.081, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.192, }), }), 'ctmeter_production': dict({ 'active_power': 2336, 'current': 21.222, 'eid': 704643328, 'energy_delivered': 15097305, 'energy_received': 15, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.88, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 242.887, }), 'ctmeter_production_phases': dict({ : dict({ 'active_power': 1173, 'current': 10.607, 'eid': 1778385169, 'energy_delivered': 7551632, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.883, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.774, }), : dict({ 'active_power': 1163, 'current': 10.615, 'eid': 1778385170, 'energy_delivered': 7545672, 'energy_received': 8, 'frequency': 60.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.877, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1718213332, 'voltage': 121.113, }), }), 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': True, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 3292, 'backup_reserve': 1680, 'configured_reserve_state_of_charge': 50, 'max_available_capacity': 3360, 'reserve_state_of_charge': 50, 'state_of_charge': 98, }), 'encharge_inventory': dict({ '492234001350': dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_firmware_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'dc_switch_off': False, 'encharge_capacity': 3360, 'encharge_revision': 2, 'firmware_loaded_date': 1718210586, 'firmware_version': '2.0.6727_rel/22.15', 'installed_date': 1718210586, 'last_report_date': 1718213052, 'led_status': 12, 'max_cell_temp': 27, 'operating': None, 'part_number': '836-00750-r32', 'percent_full': 98, 'serial_number': '492234001350', 'temperature': 27, 'temperature_unit': 'C', 'zigbee_dongle_fw_version': None, }), }), 'encharge_power': dict({ '492234001350': dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'soc': 98, }), }), 'enpower': dict({ 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'firmware_loaded_date': 1718209911, 'firmware_version': '2.0.5729_rel/22.15', 'grid_mode': 'multimode-ongrid', 'installed_date': 1718209911, 'last_report_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'operating': None, 'part_number': '860-00376-r37', 'serial_number': '122210043898', 'temperature': 91, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '482218039091': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213113, 'last_report_duration': None, 'last_report_watts': 67, 'lifetime_energy': None, 'max_report_watts': 122, 'serial_number': '482218039091', 'temperature': None, }), '482218039209': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213114, 'last_report_duration': None, 'last_report_watts': 61, 'lifetime_energy': None, 'max_report_watts': 115, 'serial_number': '482218039209', 'temperature': None, }), '482218039304': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213115, 'last_report_duration': None, 'last_report_watts': 69, 'lifetime_energy': None, 'max_report_watts': 132, 'serial_number': '482218039304', 'temperature': None, }), '482218039386': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213116, 'last_report_duration': None, 'last_report_watts': 64, 'lifetime_energy': None, 'max_report_watts': 112, 'serial_number': '482218039386', 'temperature': None, }), '482218039390': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213117, 'last_report_duration': None, 'last_report_watts': 63, 'lifetime_energy': None, 'max_report_watts': 123, 'serial_number': '482218039390', 'temperature': None, }), '482218039529': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213143, 'last_report_duration': None, 'last_report_watts': 75, 'lifetime_energy': None, 'max_report_watts': 120, 'serial_number': '482218039529', 'temperature': None, }), '482218039700': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213203, 'last_report_duration': None, 'last_report_watts': 89, 'lifetime_energy': None, 'max_report_watts': 135, 'serial_number': '482218039700', 'temperature': None, }), '482218039736': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213204, 'last_report_duration': None, 'last_report_watts': 84, 'lifetime_energy': None, 'max_report_watts': 118, 'serial_number': '482218039736', 'temperature': None, }), '482218039788': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213234, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 100, 'serial_number': '482218039788', 'temperature': None, }), '482218039880': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213235, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 134, 'serial_number': '482218039880', 'temperature': None, }), '482218039911': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213236, 'last_report_duration': None, 'last_report_watts': 97, 'lifetime_energy': None, 'max_report_watts': 133, 'serial_number': '482218039911', 'temperature': None, }), '482218039918': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 99, 'lifetime_energy': None, 'max_report_watts': 136, 'serial_number': '482218039918', 'temperature': None, }), '482218042609': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213237, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218042609', 'temperature': None, }), '482218042662': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213239, 'last_report_duration': None, 'last_report_watts': 90, 'lifetime_energy': None, 'max_report_watts': 116, 'serial_number': '482218042662', 'temperature': None, }), '482218042737': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213240, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 130, 'serial_number': '482218042737', 'temperature': None, }), '482218042901': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 103, 'serial_number': '482218042901', 'temperature': None, }), '482218043030': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213242, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 102, 'serial_number': '482218043030', 'temperature': None, }), '482218043257': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213243, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 137, 'serial_number': '482218043257', 'temperature': None, }), '482218043590': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213245, 'last_report_duration': None, 'last_report_watts': 95, 'lifetime_energy': None, 'max_report_watts': 108, 'serial_number': '482218043590', 'temperature': None, }), '482218043592': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213264, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 106, 'serial_number': '482218043592', 'temperature': None, }), '482218043652': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213265, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218043652', 'temperature': None, }), '482218043981': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213266, 'last_report_duration': None, 'last_report_watts': 96, 'lifetime_energy': None, 'max_report_watts': 121, 'serial_number': '482218043981', 'temperature': None, }), '482218047061': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213267, 'last_report_duration': None, 'last_report_watts': 100, 'lifetime_energy': None, 'max_report_watts': 125, 'serial_number': '482218047061', 'temperature': None, }), '482218047087': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213268, 'last_report_duration': None, 'last_report_watts': 101, 'lifetime_energy': None, 'max_report_watts': 101, 'serial_number': '482218047087', 'temperature': None, }), '482218047088': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718213269, 'last_report_duration': None, 'last_report_watts': 98, 'lifetime_energy': None, 'max_report_watts': 104, 'serial_number': '482218047088', 'temperature': None, }), '482218047099': dict({ 'ac_current': None, 'ac_frequency': None, 'ac_voltage': None, 'dc_current': None, 'dc_voltage': None, 'energy_produced': None, 'energy_today': None, 'last_report_date': 1718212938, 'last_report_duration': None, 'last_report_watts': 74, 'lifetime_energy': None, 'max_report_watts': 107, 'serial_number': '482218047099', 'temperature': None, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2024-05-27 10:06:36 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'override': False, 'override_backup_soc': 30, 'override_chg_dischg_rate': 0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 50, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'reserved_soc': 50, 'very_low_soc': 10, }), }), }), '/api/v1/production/inverters': list([ dict({ 'devType': 1, 'lastReportDate': 1718213113, 'lastReportWatts': 67, 'maxReportWatts': 122, 'serialNumber': '482218039091', }), dict({ 'devType': 1, 'lastReportDate': 1718213114, 'lastReportWatts': 61, 'maxReportWatts': 115, 'serialNumber': '482218039209', }), dict({ 'devType': 1, 'lastReportDate': 1718213115, 'lastReportWatts': 69, 'maxReportWatts': 132, 'serialNumber': '482218039304', }), dict({ 'devType': 1, 'lastReportDate': 1718213116, 'lastReportWatts': 64, 'maxReportWatts': 112, 'serialNumber': '482218039386', }), dict({ 'devType': 1, 'lastReportDate': 1718213117, 'lastReportWatts': 63, 'maxReportWatts': 123, 'serialNumber': '482218039390', }), dict({ 'devType': 1, 'lastReportDate': 1718213143, 'lastReportWatts': 75, 'maxReportWatts': 120, 'serialNumber': '482218039529', }), dict({ 'devType': 1, 'lastReportDate': 1718213203, 'lastReportWatts': 89, 'maxReportWatts': 135, 'serialNumber': '482218039700', }), dict({ 'devType': 1, 'lastReportDate': 1718213204, 'lastReportWatts': 84, 'maxReportWatts': 118, 'serialNumber': '482218039736', }), dict({ 'devType': 1, 'lastReportDate': 1718213234, 'lastReportWatts': 95, 'maxReportWatts': 100, 'serialNumber': '482218039788', }), dict({ 'devType': 1, 'lastReportDate': 1718213235, 'lastReportWatts': 96, 'maxReportWatts': 134, 'serialNumber': '482218039880', }), dict({ 'devType': 1, 'lastReportDate': 1718213236, 'lastReportWatts': 97, 'maxReportWatts': 133, 'serialNumber': '482218039911', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 99, 'maxReportWatts': 136, 'serialNumber': '482218039918', }), dict({ 'devType': 1, 'lastReportDate': 1718213237, 'lastReportWatts': 95, 'maxReportWatts': 107, 'serialNumber': '482218042609', }), dict({ 'devType': 1, 'lastReportDate': 1718213239, 'lastReportWatts': 90, 'maxReportWatts': 116, 'serialNumber': '482218042662', }), dict({ 'devType': 1, 'lastReportDate': 1718213240, 'lastReportWatts': 96, 'maxReportWatts': 130, 'serialNumber': '482218042737', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 96, 'maxReportWatts': 103, 'serialNumber': '482218042901', }), dict({ 'devType': 1, 'lastReportDate': 1718213242, 'lastReportWatts': 95, 'maxReportWatts': 102, 'serialNumber': '482218043030', }), dict({ 'devType': 1, 'lastReportDate': 1718213243, 'lastReportWatts': 98, 'maxReportWatts': 137, 'serialNumber': '482218043257', }), dict({ 'devType': 1, 'lastReportDate': 1718213245, 'lastReportWatts': 95, 'maxReportWatts': 108, 'serialNumber': '482218043590', }), dict({ 'devType': 1, 'lastReportDate': 1718213264, 'lastReportWatts': 98, 'maxReportWatts': 106, 'serialNumber': '482218043592', }), dict({ 'devType': 1, 'lastReportDate': 1718213265, 'lastReportWatts': 101, 'maxReportWatts': 107, 'serialNumber': '482218043652', }), dict({ 'devType': 1, 'lastReportDate': 1718213266, 'lastReportWatts': 96, 'maxReportWatts': 121, 'serialNumber': '482218043981', }), dict({ 'devType': 1, 'lastReportDate': 1718213267, 'lastReportWatts': 100, 'maxReportWatts': 125, 'serialNumber': '482218047061', }), dict({ 'devType': 1, 'lastReportDate': 1718213268, 'lastReportWatts': 101, 'maxReportWatts': 101, 'serialNumber': '482218047087', }), dict({ 'devType': 1, 'lastReportDate': 1718213269, 'lastReportWatts': 98, 'maxReportWatts': 104, 'serialNumber': '482218047088', }), dict({ 'devType': 1, 'lastReportDate': 1718212938, 'lastReportWatts': 74, 'maxReportWatts': 107, 'serialNumber': '482218047099', }), ]), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'closed', }), dict({ 'id': 'NC2', 'status': 'closed', }), dict({ 'id': 'NO1', 'status': 'closed', }), dict({ 'id': 'NO2', 'status': 'closed', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ dict({ 'admin_state': 6, 'admin_state_str': 'ENCHG_STATE_READY', 'bmu_fw_version': '2.1.34', 'comm_level_2_4_ghz': 2, 'comm_level_sub_ghz': 2, 'communicating': True, 'created_date': 1718210586, 'dc_switch_off': False, 'der_index': 2, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'encharge_capacity': 3360, 'encharge_rev': 2, 'img_load_date': 1718210586, 'img_pnum_running': '2.0.6727_rel/22.15', 'installed': 1718210586, 'last_rpt_date': 1718213052, 'led_status': 12, 'maxCellTemp': 27, 'part_num': '836-00750-r32', 'percentFull': 98, 'phase': 'ph-a', 'reported_enc_grid_state': 'grid-tied', 'serial_num': '492234001350', 'sleep_enabled': False, 'temperature': 27, }), ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-generator', 'Enpwr_curr_state_id': 128, 'Enpwr_grid_mode': 'multimode-ongrid', 'Enpwr_relay_state_bm': 16124, 'admin_state': 30, 'admin_state_str': 'ENPWR_STATE_OPER_GEN_CLOSE', 'comm_level_2_4_ghz': 5, 'comm_level_sub_ghz': 5, 'communicating': True, 'created_date': 1718209911, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1718209911, 'img_pnum_running': '2.0.5729_rel/22.15', 'installed': 1718209911, 'last_rpt_date': 1718213328, 'mains_admin_state': 'closed', 'mains_oper_state': 'open', 'part_num': '860-00376-r37', 'serial_num': '122210043898', 'temperature': 91, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ dict({ 'apparent_power_mva': -1250000, 'real_power_mw': -1250000, 'serial_num': '492234001350', 'soc': 98, }), ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 3292, 'ENC_agg_backup_energy': 1680, 'ENC_agg_soc': 98, 'ENC_agg_soh': 100, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 3360, 'Enc_max_available_capacity': 3360, 'Max_energy': 3360, 'VLS_Limit': 10, 'adjusted_backup_soc': 50, 'agg_soc': 98, 'configured_backup_soc': 50, 'freq_bias_hz': -1.3200000524520874, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': -2123, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': False, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': -15.69999885559082, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': -502, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 2, 'phaseMode': 'split', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 15097304.67, 'actEnergyRcvd': 15.392, 'activePower': 2336.093, 'apparentEnergy': 18631234.536, 'apparentPower': 2643.758, 'channels': list([ dict({ 'actEnergyDlvd': 7551632.356, 'actEnergyRcvd': 7.79, 'activePower': 1172.624, 'apparentEnergy': 9315712.558, 'apparentPower': 1324.867, 'current': 10.607, 'eid': 1778385169, 'freq': 60.062, 'instantaneousDemand': 1172.624, 'pwrFactor': 0.883, 'reactEnergyLagg': 2061239.812, 'reactEnergyLead': 2910.699, 'reactivePower': -557.096, 'timestamp': 1718213332, 'voltage': 121.774, }), dict({ 'actEnergyDlvd': 7545672.313, 'actEnergyRcvd': 7.603, 'activePower': 1163.469, 'apparentEnergy': 9315521.977, 'apparentPower': 1318.892, 'current': 10.615, 'eid': 1778385170, 'freq': 60.062, 'instantaneousDemand': 1163.469, 'pwrFactor': 0.877, 'reactEnergyLagg': 2054781.564, 'reactEnergyLead': 4234.214, 'reactivePower': -554.743, 'timestamp': 1718213332, 'voltage': 121.113, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385171, 'freq': 60.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 21.222, 'eid': 704643328, 'freq': 60.062, 'instantaneousDemand': 2336.093, 'pwrFactor': 0.88, 'reactEnergyLagg': 4116021.375, 'reactEnergyLead': 7144.913, 'reactivePower': -1111.839, 'timestamp': 1718213332, 'voltage': 242.887, }), dict({ 'actEnergyDlvd': 13632727.119, 'actEnergyRcvd': 6336017.38, 'activePower': 195.575, 'apparentEnergy': 23220664.459, 'apparentPower': 1088.544, 'channels': list([ dict({ 'actEnergyDlvd': 7037858.755, 'actEnergyRcvd': 2542489.025, 'activePower': 267.695, 'apparentEnergy': 11417171.695, 'apparentPower': 574.709, 'current': 4.859, 'eid': 1778385425, 'freq': 60.0, 'instantaneousDemand': 267.695, 'pwrFactor': 0.637, 'reactEnergyLagg': 417029.372, 'reactEnergyLead': 4242565.474, 'reactivePower': 474.518, 'timestamp': 1718213332, 'voltage': 121.856, }), dict({ 'actEnergyDlvd': 6594868.364, 'actEnergyRcvd': 3793528.355, 'activePower': -72.12, 'apparentEnergy': 11803492.765, 'apparentPower': 513.834, 'current': 4.239, 'eid': 1778385426, 'freq': 60.0, 'instantaneousDemand': -72.12, 'pwrFactor': 0.081, 'reactEnergyLagg': 68699.07, 'reactEnergyLead': 3480803.913, 'reactivePower': 464.057, 'timestamp': 1718213332, 'voltage': 121.192, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 0.0, 'activePower': 0.0, 'apparentEnergy': 0.0, 'apparentPower': 0.0, 'current': 0.0, 'eid': 1778385427, 'freq': 60.0, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 0.0, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1718213332, 'voltage': 0.0, }), ]), 'current': 9.098, 'eid': 704643584, 'freq': 60.0, 'instantaneousDemand': 195.575, 'pwrFactor': 0.398, 'reactEnergyLagg': 485728.442, 'reactEnergyLead': 7723369.387, 'reactivePower': 938.575, 'timestamp': 1718213332, 'voltage': 243.047, }), ]), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'apply', 'grid_action': 'apply', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO1', 'load_name': 'Fridge and Freezer', 'manual_override': 'true', 'micro_grid_action': 'shed', 'mode': 'manual', 'override': 'true', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 82800.0, 'essential_start_time': 21600.0, 'gen_action': 'shed', 'grid_action': 'shed', 'id': 'NO2', 'load_name': 'HVAC and Furnace', 'manual_override': 'true', 'micro_grid_action': 'apply', 'mode': 'manual', 'override': 'true', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 70.0, 'soc_low': 30.0, 'type': 'LOAD', }), ]), }), '/ivp/ss/gen_config': dict({ 'charge_from_generator': True, 'cool_down_mins': 0, 'gen_type': 'Standby', 'generator_id': '', 'last_updated_by': 'ITK', 'manufacturer': 'Generac', 'max_cont_gen_amps': 58.3, 'max_gen_efficiency_perc': 100, 'min_gen_loading_perc': 5, 'model': 'G007223-0, G007224-0, G007225-0 (14kW)', 'name_plate_rating_wat': 14.0, 'start_method': 'Auto', 'warm_up_mins': 0, }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2775.526, 'measurementType': 'total-consumption', 'pwrFactor': 0.92, 'reactPwr': -197.689, 'readingTime': 1718213330, 'rmsCurrent': 22.811, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 1585.814, 'varhLagLifetime': -3630293.476, 'varhLagToday': 598.0, 'varhLeadLifetime': 7716225.126, 'varhLeadToday': 0.0, 'wNow': 2670.058, 'whLastSevenDays': 882.448, 'whLifetime': 22392008.448, 'whToday': 3333.448, }), dict({ 'activeCount': 1, 'apprntPwr': 54.157, 'measurementType': 'net-consumption', 'pwrFactor': 1.0, 'reactPwr': 892.549, 'readingTime': 1718213330, 'rmsCurrent': 0.422, 'rmsVoltage': 243.1, 'type': 'eim', 'vahLifetime': 23220663.814, 'vahToday': 0, 'varhLagLifetime': 485727.899, 'varhLagToday': 0, 'varhLeadLifetime': 7723369.387, 'varhLeadToday': 0, 'wNow': 240.397, 'whLastSevenDays': 0, 'whLifetime': 7298714.07, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 26, 'readingTime': 1718213270, 'type': 'inverters', 'wNow': 2317, 'whLifetime': 1107526, }), dict({ 'activeCount': 1, 'apprntPwr': 2707.323, 'measurementType': 'production', 'pwrFactor': 0.92, 'reactPwr': -1090.238, 'readingTime': 1718213330, 'rmsCurrent': 22.389, 'rmsVoltage': 242.897, 'type': 'eim', 'vahLifetime': 18631233.018, 'vahToday': 2965.018, 'varhLagLifetime': 4116021.375, 'varhLagToday': 3.375, 'varhLeadLifetime': 7144.262, 'varhLeadToday': 959.262, 'wNow': 2429.661, 'whLastSevenDays': 360056.35, 'whLifetime': 15097303.35, 'whToday': 2645.35, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 882, 'watt_hours_lifetime': 22392008, 'watt_hours_today': 3333, 'watts_now': 2670, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': 7298714, 'watt_hours_today': 0, 'watts_now': 240, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 360056, 'watt_hours_lifetime': 15097303, 'watt_hours_today': 2645, 'watts_now': 2430, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'USD', }), 'date': '1716803909', 'logger': 'mylogger', 'seasons': list([ dict({ 'days': list([ dict({ 'days': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun', 'enable_discharge_to_grid': False, 'id': 'all_days', 'must_charge_duration': 0, 'must_charge_mode': 'CP', 'must_charge_start': 0, 'peak_rule': 'DL', 'periods': list([ dict({ 'id': 'period_1', 'rate': 0, 'start': 0, }), ]), }), ]), 'id': 'all_year_long', 'start': '1/1', 'tiers': list([ ]), }), ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0, 'sell': 0.03999900072813034, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1716803909', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': None, 'reserved_soc': 50, 'very_low_soc': 10, }), }), }) # --- # name: test_with_7_x_firmware[8.2.4345_with_device_data] dict({ 'acb_power': None, 'battery_aggregate': None, 'c6cc': None, 'collar': None, 'ctmeter_consumption': dict({ 'active_power': 199, 'current': 4.066, 'eid': 704643584, 'energy_delivered': 648203, 'energy_received': 883900, 'frequency': 50.062, 'measurement_type': 'net-consumption', 'metering_status': 'normal', 'power_factor': 0.14, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1748577049, 'voltage': 244.228, }), 'ctmeter_consumption_phases': None, 'ctmeter_production': dict({ 'active_power': 807, 'current': 5.299, 'eid': 704643328, 'energy_delivered': 1243812, 'energy_received': 12, 'frequency': 50.062, 'measurement_type': 'production', 'metering_status': 'normal', 'power_factor': 0.654, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1748577049, 'voltage': 244.062, }), 'ctmeter_production_phases': None, 'ctmeter_storage': None, 'ctmeter_storage_phases': None, 'dry_contact_settings': dict({ 'NC1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NC2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NC2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO1': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO1', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), 'NO2': dict({ 'black_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'generator_action': , 'grid_action': , 'id': 'NO2', 'load_name': '', 'manual_override': True, 'micro_grid_action': , 'mode': , 'override': False, 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': , }), }), 'dry_contact_status': dict({ 'NC1': dict({ 'id': 'NC1', 'status': , }), 'NC2': dict({ 'id': 'NC2', 'status': , }), 'NO1': dict({ 'id': 'NO1', 'status': , }), 'NO2': dict({ 'id': 'NO2', 'status': , }), }), 'encharge_aggregate': dict({ 'available_energy': 0, 'backup_reserve': 0, 'configured_reserve_state_of_charge': 43, 'max_available_capacity': 0, 'reserve_state_of_charge': 43, 'state_of_charge': 0, }), 'encharge_inventory': dict({ }), 'encharge_power': dict({ }), 'enpower': dict({ 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'firmware_loaded_date': 1744816473, 'firmware_version': '2.7.6360_rel/31.33', 'grid_mode': 'grid-tied', 'installed_date': 1744816473, 'last_report_date': 1748577041, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'operating': None, 'part_number': '860-01801-r70', 'serial_number': '122446012073', 'temperature': 76, 'temperature_unit': 'F', 'zigbee_dongle_fw_version': None, }), 'inverters': dict({ '122344043197': dict({ 'ac_current': 1.049, 'ac_frequency': 50.013, 'ac_voltage': 248.156, 'dc_current': 8.078, 'dc_voltage': 32.363, 'energy_produced': 70.875, 'energy_today': 1239, 'last_report_date': 1748576887, 'last_report_duration': 903, 'last_report_watts': 255, 'lifetime_energy': 98412, 'max_report_watts': 371, 'serial_number': '122344043197', 'temperature': 38, }), '122344044368': dict({ 'ac_current': 0.435, 'ac_frequency': 50.019, 'ac_voltage': 246.188, 'dc_current': 2.324, 'dc_voltage': 31.684, 'energy_produced': 21.664, 'energy_today': 773, 'last_report_date': 1748576917, 'last_report_duration': 903, 'last_report_watts': 78, 'lifetime_energy': 72124, 'max_report_watts': 309, 'serial_number': '122344044368', 'temperature': 30, }), '122344044385': dict({ 'ac_current': 0.424, 'ac_frequency': 50.016, 'ac_voltage': 245.906, 'dc_current': 2.598, 'dc_voltage': 31.117, 'energy_produced': 70.944, 'energy_today': 1245, 'last_report_date': 1748576977, 'last_report_duration': 903, 'last_report_watts': 255, 'lifetime_energy': 99861, 'max_report_watts': 370, 'serial_number': '122344044385', 'temperature': 41, }), '122344044392': dict({ 'ac_current': 0.331, 'ac_frequency': 50.026, 'ac_voltage': 245.188, 'dc_current': 1.469, 'dc_voltage': 31.477, 'energy_produced': 66.372, 'energy_today': 992, 'last_report_date': 1748577008, 'last_report_duration': 904, 'last_report_watts': 239, 'lifetime_energy': 92269, 'max_report_watts': 367, 'serial_number': '122344044392', 'temperature': 36, }), '122344044656': dict({ 'ac_current': 0.334, 'ac_frequency': 50.023, 'ac_voltage': 245.563, 'dc_current': 1.488, 'dc_voltage': 31.441, 'energy_produced': 36.06, 'energy_today': 467, 'last_report_date': 1748577037, 'last_report_duration': 903, 'last_report_watts': 130, 'lifetime_energy': 72316, 'max_report_watts': 341, 'serial_number': '122344044656', 'temperature': 35, }), '122344046030': dict({ 'ac_current': 0.379, 'ac_frequency': 50.026, 'ac_voltage': 245.563, 'dc_current': 1.949, 'dc_voltage': 30.504, 'energy_produced': 63.123, 'energy_today': 815, 'last_report_date': 1748577038, 'last_report_duration': 903, 'last_report_watts': 227, 'lifetime_energy': 78621, 'max_report_watts': 349, 'serial_number': '122344046030', 'temperature': 41, }), '122344046450': dict({ 'ac_current': 0.415, 'ac_frequency': 49.988, 'ac_voltage': 245.625, 'dc_current': 2.637, 'dc_voltage': 31.656, 'energy_produced': 23.576, 'energy_today': 751, 'last_report_date': 1748576165, 'last_report_duration': 904, 'last_report_watts': 85, 'lifetime_energy': 72318, 'max_report_watts': 308, 'serial_number': '122344046450', 'temperature': 30, }), '122344046574': dict({ 'ac_current': 0.315, 'ac_frequency': 49.985, 'ac_voltage': 246.188, 'dc_current': 0.789, 'dc_voltage': 33.156, 'energy_produced': 9.541, 'energy_today': 207, 'last_report_date': 1748576166, 'last_report_duration': 904, 'last_report_watts': 34, 'lifetime_energy': 60054, 'max_report_watts': 362, 'serial_number': '122344046574', 'temperature': 27, }), '122344047608': dict({ 'ac_current': 0.358, 'ac_frequency': 49.978, 'ac_voltage': 245.75, 'dc_current': 1.879, 'dc_voltage': 31.922, 'energy_produced': 17.65, 'energy_today': 769, 'last_report_date': 1748576194, 'last_report_duration': 903, 'last_report_watts': 64, 'lifetime_energy': 72994, 'max_report_watts': 299, 'serial_number': '122344047608', 'temperature': 32, }), '122344047620': dict({ 'ac_current': 1.073, 'ac_frequency': 49.977, 'ac_voltage': 247.063, 'dc_current': 8.32, 'dc_voltage': 32.398, 'energy_produced': 64.436, 'energy_today': 979, 'last_report_date': 1748576196, 'last_report_duration': 904, 'last_report_watts': 232, 'lifetime_energy': 95057, 'max_report_watts': 364, 'serial_number': '122344047620', 'temperature': 36, }), '122344047645': dict({ 'ac_current': 1.088, 'ac_frequency': 49.978, 'ac_voltage': 246.5, 'dc_current': 8.527, 'dc_voltage': 32.012, 'energy_produced': 65.47, 'energy_today': 1209, 'last_report_date': 1748576197, 'last_report_duration': 905, 'last_report_watts': 236, 'lifetime_energy': 100072, 'max_report_watts': 365, 'serial_number': '122344047645', 'temperature': 41, }), '122344047687': dict({ 'ac_current': 1.06, 'ac_frequency': 49.977, 'ac_voltage': 246.281, 'dc_current': 8.102, 'dc_voltage': 32.316, 'energy_produced': 63.054, 'energy_today': 1120, 'last_report_date': 1748576224, 'last_report_duration': 903, 'last_report_watts': 227, 'lifetime_energy': 96931, 'max_report_watts': 365, 'serial_number': '122344047687', 'temperature': 36, }), '122344047713': dict({ 'ac_current': 1.068, 'ac_frequency': 49.969, 'ac_voltage': 247.094, 'dc_current': 8.383, 'dc_voltage': 32.133, 'energy_produced': 64.505, 'energy_today': 1199, 'last_report_date': 1748576226, 'last_report_duration': 904, 'last_report_watts': 232, 'lifetime_energy': 99460, 'max_report_watts': 365, 'serial_number': '122344047713', 'temperature': 40, }), '122344047722': dict({ 'ac_current': 1.028, 'ac_frequency': 49.984, 'ac_voltage': 245.344, 'dc_current': 7.902, 'dc_voltage': 32.043, 'energy_produced': 60.08, 'energy_today': 780, 'last_report_date': 1748576255, 'last_report_duration': 904, 'last_report_watts': 216, 'lifetime_energy': 79693, 'max_report_watts': 338, 'serial_number': '122344047722', 'temperature': 39, }), '122344048305': dict({ 'ac_current': 0.417, 'ac_frequency': 49.984, 'ac_voltage': 245.5, 'dc_current': 2.637, 'dc_voltage': 31.953, 'energy_produced': 23.23, 'energy_today': 777, 'last_report_date': 1748576256, 'last_report_duration': 904, 'last_report_watts': 84, 'lifetime_energy': 73997, 'max_report_watts': 324, 'serial_number': '122344048305', 'temperature': 29, }), }), 'raw': dict({ '/admin/lib/tariff': dict({ 'schedule': dict({ 'batt_mode': 'self-consumption', 'battery_mode': 'self-consumption', 'charge_from_grid': False, 'date': '2025-04-16 15:14:25 UTC', 'filename': 'Tariff', 'operation_mode_sub_type': '', 'opt_schedules': False, 'override': False, 'override_backup_soc': 30.0, 'override_chg_dischg_rate': 0.0, 'override_tou_mode': 'StorageTouMode_DEFAULT_TOU_MODE', 'reserved_soc': 43.0, 'schedule': dict({ 'Disable': list([ dict({ 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), dict({ 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ID', 'start': 0, }), ]), }), ]), 'tariff': list([ dict({ 'Fri': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Mon': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sat': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Sun': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Thu': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Tue': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'Wed': list([ dict({ 'duration': 1440, 'setting': 'ZN', 'start': 0, }), ]), 'end': '1/1', 'start': '1/1', }), ]), }), 'source': 'Tariff', 'version': '00.00.02', 'very_low_soc': 10, }), 'tariff': dict({ 'currency': dict({ 'code': 'AUD', }), 'date': '1743840002', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.2579500079154968, 'sell': 0.07000000029802322, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1742364587', 'mode': 'self-consumption', 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 43.0, 'very_low_soc': 10, }), }), }), '/ivp/ensemble/dry_contacts': dict({ 'dry_contacts': list([ dict({ 'id': 'NC1', 'status': 'open', }), dict({ 'id': 'NC2', 'status': 'open', }), dict({ 'id': 'NO1', 'status': 'open', }), dict({ 'id': 'NO2', 'status': 'open', }), ]), }), '/ivp/ensemble/inventory': list([ dict({ 'devices': list([ ]), 'type': 'ENCHARGE', }), dict({ 'devices': list([ dict({ 'Enchg_grid_mode': 'multimode-ongrid', 'Enpwr_curr_state_id': 16, 'Enpwr_grid_mode': 'grid-tied', 'Enpwr_relay_state_bm': 975, 'admin_state': 24, 'admin_state_str': 'ENPWR_STATE_OPER_CLOSED', 'comm_level_2_4_ghz': 0, 'comm_level_sub_ghz': 0, 'communicating': True, 'created_date': 1744816473, 'device_status': list([ 'envoy.global.ok', 'prop.done', ]), 'img_load_date': 1744816473, 'img_pnum_running': '2.7.6360_rel/31.33', 'installed': 1744816473, 'last_rpt_date': 1748577041, 'mains_admin_state': 'closed', 'mains_oper_state': 'closed', 'part_num': '860-01801-r70', 'serial_num': '122446012073', 'temperature': 76, }), ]), 'type': 'ENPOWER', }), ]), '/ivp/ensemble/power': dict({ 'devices:': list([ ]), }), '/ivp/ensemble/secctrl': dict({ 'ACB_agg_energy': 0, 'ACB_agg_soc': 0, 'Commission_in_progress': False, 'ENC_agg_avail_energy': 0, 'ENC_agg_backup_energy': 0, 'ENC_agg_soc': 0, 'ENC_agg_soh': 0, 'ESS_in_progress': False, 'Enc_commissioned_capacity': 0, 'Enc_max_available_capacity': 0, 'Max_energy': 0, 'VLS_Limit': 10, 'adjusted_backup_soc': 43, 'agg_soc': 0, 'configured_backup_soc': 43, 'freq_bias_hz': 0.0, 'freq_bias_hz_phaseb': 0.0, 'freq_bias_hz_phasec': 0.0, 'freq_bias_hz_q8': 0, 'freq_bias_hz_q8_phaseb': 0, 'freq_bias_hz_q8_phasec': 0, 'shutdown': False, 'soc_rec_enabled': True, 'soc_recovery_entry': 0, 'soc_recovery_exit': 10, 'voltage_bias_v': 0.0, 'voltage_bias_v_phaseb': 0.0, 'voltage_bias_v_phasec': 0.0, 'voltage_bias_v_q5': 0, 'voltage_bias_v_q5_phaseb': 0, 'voltage_bias_v_q5_phasec': 0, }), '/ivp/meters': list([ dict({ 'eid': 704643328, 'measurementType': 'production', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), dict({ 'eid': 704643584, 'measurementType': 'net-consumption', 'meteringStatus': 'normal', 'phaseCount': 1, 'phaseMode': 'three', 'state': 'enabled', 'statusFlags': list([ ]), }), ]), '/ivp/meters/readings': list([ dict({ 'actEnergyDlvd': 1243812.228, 'actEnergyRcvd': 11.6, 'activePower': 807.326, 'apparentEnergy': 1776752.059, 'apparentPower': 1282.057, 'channels': list([ dict({ 'actEnergyDlvd': 1243812.228, 'actEnergyRcvd': 11.6, 'activePower': 807.326, 'apparentEnergy': 1776752.059, 'apparentPower': 1282.057, 'current': 5.299, 'eid': 1778385169, 'freq': 50.062, 'instantaneousDemand': 807.326, 'pwrFactor': 0.654, 'reactEnergyLagg': 255919.503, 'reactEnergyLead': 573233.207, 'reactivePower': -886.389, 'timestamp': 1748577049, 'voltage': 244.062, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 1054.214, 'activePower': -0.039, 'apparentEnergy': 663.506, 'apparentPower': 0.388, 'current': 0.182, 'eid': 1778385170, 'freq': 50.062, 'instantaneousDemand': -0.039, 'pwrFactor': 0.0, 'reactEnergyLagg': 127.361, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 2.124, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 2598.312, 'activePower': -0.0, 'apparentEnergy': 49.729, 'apparentPower': 0.0, 'current': -0.0, 'eid': 1778385171, 'freq': 50.062, 'instantaneousDemand': -0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 127.222, 'reactEnergyLead': 0.015, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 3.045, }), ]), 'current': 5.299, 'eid': 704643328, 'freq': 50.062, 'instantaneousDemand': 807.326, 'pwrFactor': 0.654, 'reactEnergyLagg': 255919.503, 'reactEnergyLead': 573233.207, 'reactivePower': -886.389, 'timestamp': 1748577049, 'voltage': 244.062, }), dict({ 'actEnergyDlvd': 648203.353, 'actEnergyRcvd': 883899.646, 'activePower': 199.234, 'apparentEnergy': 2017963.73, 'apparentPower': 993.877, 'channels': list([ dict({ 'actEnergyDlvd': 648203.353, 'actEnergyRcvd': 883899.646, 'activePower': 199.234, 'apparentEnergy': 2017963.73, 'apparentPower': 993.877, 'current': 4.066, 'eid': 1778385425, 'freq': 50.062, 'instantaneousDemand': 199.234, 'pwrFactor': 0.14, 'reactEnergyLagg': 430154.145, 'reactEnergyLead': 463468.848, 'reactivePower': 906.056, 'timestamp': 1748577049, 'voltage': 244.228, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 2171.834, 'activePower': -0.236, 'apparentEnergy': 1754.876, 'apparentPower': 1.01, 'current': 0.166, 'eid': 1778385426, 'freq': 50.062, 'instantaneousDemand': -0.236, 'pwrFactor': 0.0, 'reactEnergyLagg': 122.318, 'reactEnergyLead': 0.0, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 6.082, }), dict({ 'actEnergyDlvd': 0.0, 'actEnergyRcvd': 3397.655, 'activePower': 0.0, 'apparentEnergy': 60.378, 'apparentPower': 0.0, 'current': -0.0, 'eid': 1778385427, 'freq': 50.062, 'instantaneousDemand': 0.0, 'pwrFactor': 0.0, 'reactEnergyLagg': 121.108, 'reactEnergyLead': 0.038, 'reactivePower': 0.0, 'timestamp': 1748577049, 'voltage': 5.672, }), ]), 'current': 4.066, 'eid': 704643584, 'freq': 50.062, 'instantaneousDemand': 199.234, 'pwrFactor': 0.14, 'reactEnergyLagg': 430154.145, 'reactEnergyLead': 463468.848, 'reactivePower': 906.056, 'timestamp': 1748577049, 'voltage': 244.228, }), ]), '/ivp/pdm/device_data': dict({ '553648384': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390225, 'created': 1748576887, 'lastReading': dict({ 'acCurrentInmA': 1049, 'acFrequencyINmHz': 50013, 'acVoltageINmV': 248156, 'channelTemp': 38, 'dcCurrentINmA': 8078, 'dcVoltageINmV': 32363, 'duration': 903, 'eid': 1627390225, 'endDate': 1748576887, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 68, 'joulesProduced': 230400, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834453, 'duration': 6124463, 'joulesProduced': 354281850, }), 'wattHours': dict({ 'today': 1239, 'week': 7466, 'yesterday': 455, }), 'watts': dict({ 'max': 371, 'now': 255, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344043197', }), '553648640': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390481, 'created': 1748576917, 'lastReading': dict({ 'acCurrentInmA': 435, 'acFrequencyINmHz': 50019, 'acVoltageINmV': 246188, 'channelTemp': 30, 'dcCurrentINmA': 2324, 'dcVoltageINmV': 31684, 'duration': 903, 'eid': 1627390481, 'endDate': 1748576917, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 70425, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834377, 'duration': 6125538, 'joulesProduced': 259647525, }), 'wattHours': dict({ 'today': 773, 'week': 5129, 'yesterday': 447, }), 'watts': dict({ 'max': 309, 'now': 78, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044368', }), '553648896': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390737, 'created': 1748576977, 'lastReading': dict({ 'acCurrentInmA': 424, 'acFrequencyINmHz': 50016, 'acVoltageINmV': 245906, 'channelTemp': 41, 'dcCurrentINmA': 2598, 'dcVoltageINmV': 31117, 'duration': 903, 'eid': 1627390737, 'endDate': 1748576977, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 76, 'joulesProduced': 230625, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834457, 'duration': 6124361, 'joulesProduced': 359500950, }), 'wattHours': dict({ 'today': 1245, 'week': 7778, 'yesterday': 459, }), 'watts': dict({ 'max': 370, 'now': 255, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044385', }), '553649152': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627390993, 'created': 1748577008, 'lastReading': dict({ 'acCurrentInmA': 331, 'acFrequencyINmHz': 50026, 'acVoltageINmV': 245188, 'channelTemp': 36, 'dcCurrentINmA': 1469, 'dcVoltageINmV': 31477, 'duration': 904, 'eid': 1627390993, 'endDate': 1748577008, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 216000, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 37, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834459, 'duration': 6124386, 'joulesProduced': 332167725, }), 'wattHours': dict({ 'today': 992, 'week': 6099, 'yesterday': 435, }), 'watts': dict({ 'max': 367, 'now': 239, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044392', }), '553649408': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391249, 'created': 1748577037, 'lastReading': dict({ 'acCurrentInmA': 334, 'acFrequencyINmHz': 50023, 'acVoltageINmV': 245563, 'channelTemp': 35, 'dcCurrentINmA': 1488, 'dcVoltageINmV': 31441, 'duration': 903, 'eid': 1627391249, 'endDate': 1748577037, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 72, 'joulesProduced': 117225, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834609, 'duration': 6124491, 'joulesProduced': 260339400, }), 'wattHours': dict({ 'today': 467, 'week': 3714, 'yesterday': 405, }), 'watts': dict({ 'max': 341, 'now': 130, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344044656', }), '553649664': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391505, 'created': 1748577038, 'lastReading': dict({ 'acCurrentInmA': 379, 'acFrequencyINmHz': 50026, 'acVoltageINmV': 245563, 'channelTemp': 41, 'dcCurrentINmA': 1949, 'dcVoltageINmV': 30504, 'duration': 903, 'eid': 1627391505, 'endDate': 1748577038, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 205200, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 40, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834598, 'duration': 6124485, 'joulesProduced': 283035600, }), 'wattHours': dict({ 'today': 815, 'week': 5251, 'yesterday': 416, }), 'watts': dict({ 'max': 349, 'now': 227, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046030', }), '553649920': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627391761, 'created': 1748576165, 'lastReading': dict({ 'acCurrentInmA': 415, 'acFrequencyINmHz': 49988, 'acVoltageINmV': 245625, 'channelTemp': 30, 'dcCurrentINmA': 2637, 'dcVoltageINmV': 31656, 'duration': 904, 'eid': 1627391761, 'endDate': 1748576165, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 76725, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834388, 'duration': 6124702, 'joulesProduced': 260345025, }), 'wattHours': dict({ 'today': 751, 'week': 5036, 'yesterday': 444, }), 'watts': dict({ 'max': 308, 'now': 85, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046450', }), '553650176': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392017, 'created': 1748576166, 'lastReading': dict({ 'acCurrentInmA': 315, 'acFrequencyINmHz': 49985, 'acVoltageINmV': 246188, 'channelTemp': 27, 'dcCurrentINmA': 789, 'dcVoltageINmV': 33156, 'duration': 904, 'eid': 1627392017, 'endDate': 1748576166, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 31050, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834506, 'duration': 6123681, 'joulesProduced': 216194625, }), 'wattHours': dict({ 'today': 207, 'week': 2283, 'yesterday': 380, }), 'watts': dict({ 'max': 362, 'now': 34, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344046574', }), '553650432': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392273, 'created': 1748576194, 'lastReading': dict({ 'acCurrentInmA': 358, 'acFrequencyINmHz': 49978, 'acVoltageINmV': 245750, 'channelTemp': 32, 'dcCurrentINmA': 1879, 'dcVoltageINmV': 31922, 'duration': 903, 'eid': 1627392273, 'endDate': 1748576194, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 78, 'joulesProduced': 57375, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834414, 'duration': 6123760, 'joulesProduced': 262778625, }), 'wattHours': dict({ 'today': 769, 'week': 5048, 'yesterday': 443, }), 'watts': dict({ 'max': 299, 'now': 64, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047608', }), '553650688': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392529, 'created': 1748576196, 'lastReading': dict({ 'acCurrentInmA': 1073, 'acFrequencyINmHz': 49977, 'acVoltageINmV': 247063, 'channelTemp': 36, 'dcCurrentINmA': 8320, 'dcVoltageINmV': 32398, 'duration': 904, 'eid': 1627392529, 'endDate': 1748576196, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 209700, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834482, 'duration': 6123650, 'joulesProduced': 342205650, }), 'wattHours': dict({ 'today': 979, 'week': 6393, 'yesterday': 438, }), 'watts': dict({ 'max': 364, 'now': 232, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047620', }), '553650944': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627392785, 'created': 1748576197, 'lastReading': dict({ 'acCurrentInmA': 1088, 'acFrequencyINmHz': 49978, 'acVoltageINmV': 246500, 'channelTemp': 41, 'dcCurrentINmA': 8527, 'dcVoltageINmV': 32012, 'duration': 905, 'eid': 1627392785, 'endDate': 1748576197, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 213300, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834445, 'duration': 6123908, 'joulesProduced': 360257400, }), 'wattHours': dict({ 'today': 1209, 'week': 7838, 'yesterday': 467, }), 'watts': dict({ 'max': 365, 'now': 236, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047645', }), '553651200': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393041, 'created': 1748576224, 'lastReading': dict({ 'acCurrentInmA': 1060, 'acFrequencyINmHz': 49977, 'acVoltageINmV': 246281, 'channelTemp': 36, 'dcCurrentINmA': 8102, 'dcVoltageINmV': 32316, 'duration': 903, 'eid': 1627393041, 'endDate': 1748576224, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 204975, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834485, 'duration': 6123654, 'joulesProduced': 348953175, }), 'wattHours': dict({ 'today': 1120, 'week': 7235, 'yesterday': 447, }), 'watts': dict({ 'max': 365, 'now': 227, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047687', }), '553651456': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393297, 'created': 1748576226, 'lastReading': dict({ 'acCurrentInmA': 1068, 'acFrequencyINmHz': 49969, 'acVoltageINmV': 247094, 'channelTemp': 40, 'dcCurrentINmA': 8383, 'dcVoltageINmV': 32133, 'duration': 904, 'eid': 1627393297, 'endDate': 1748576226, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 209925, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 38, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834446, 'duration': 6123674, 'joulesProduced': 358057125, }), 'wattHours': dict({ 'today': 1199, 'week': 7769, 'yesterday': 462, }), 'watts': dict({ 'max': 365, 'now': 232, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047713', }), '553651712': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393553, 'created': 1748576255, 'lastReading': dict({ 'acCurrentInmA': 1028, 'acFrequencyINmHz': 49984, 'acVoltageINmV': 245344, 'channelTemp': 39, 'dcCurrentINmA': 7902, 'dcVoltageINmV': 32043, 'duration': 904, 'eid': 1627393553, 'endDate': 1748576255, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 74, 'joulesProduced': 195525, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 1, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834580, 'duration': 6123492, 'joulesProduced': 286893675, }), 'wattHours': dict({ 'today': 780, 'week': 5471, 'yesterday': 426, }), 'watts': dict({ 'max': 338, 'now': 216, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344047722', }), '553651968': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1627393809, 'created': 1748576256, 'lastReading': dict({ 'acCurrentInmA': 417, 'acFrequencyINmHz': 49984, 'acVoltageINmV': 245500, 'channelTemp': 29, 'dcCurrentINmA': 2637, 'dcVoltageINmV': 31953, 'duration': 904, 'eid': 1627393809, 'endDate': 1748576256, 'flags': 0, 'flags_hex': '0x0000000000000000', 'interval_type': 0, 'issi': 70, 'joulesProduced': 75600, 'joulesUsed': 0, 'l1NAcVoltageInmV': 0, 'l2NAcVoltageInmV': 0, 'l3NAcVoltageInmV': 0, 'laggingVArs': 39, 'leadingVArs': 0, 'pwrConvErrSecs': 0, 'pwrConvMaxErrCycles': 0, 'rssi': 110, }), 'lifetime': dict({ 'createdTime': 1744834361, 'duration': 6124139, 'joulesProduced': 266390550, }), 'wattHours': dict({ 'today': 777, 'week': 5130, 'yesterday': 453, }), 'watts': dict({ 'max': 324, 'now': 84, 'nowUsed': 0, }), }), ]), 'devName': 'pcu', 'modGone': False, 'sn': '122344048305', }), '704643328': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1778385169, 'created': 1748576700, 'lastReading': dict({ 'curr_w': 2675, 'duration': 900, 'eid': 1778385169, 'endDate': 1748576700, 'freq_mhz': 50000, 'interval_type': 0, 'rms_mamp': 12045, 'rms_mvolt': 246790, 'vah_cum': 1776512, 'varh_lag_cum': 255919, 'varh_lead_cum': 573128, 'wh_dlvd_cum': 1243605, 'wh_neg': 11, 'wh_pos': 1243605, }), 'lifetime': dict({ 'createdTime': 1744817400, 'duration': 6212100, 'vah_cum': 1776512, 'varh_lag_cum': 255919, 'varh_lead_cum': 573128, 'wh_dlvd_cum': 1243605, }), 'wattHours': dict({ 'today': 13233, 'week': 86068, 'yesterday': 6432, }), 'watts': dict({ 'max': 5171, 'now': 2675, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385170, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385171, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), ]), 'devName': 'eim', 'modGone': True, 'sn': '122446001637EIM1', }), '704643584': dict({ 'active': True, 'channels': list([ dict({ 'chanEid': 1778385425, 'created': 1748576700, 'lastReading': dict({ 'curr_w': 419, 'duration': 900, 'eid': 1778385425, 'endDate': 1748576700, 'freq_mhz': 50062, 'interval_type': 0, 'rms_mamp': 1974, 'rms_mvolt': 246944, 'vah_cum': 2017794, 'varh_lag_cum': 174130, 'varh_lead_cum': -109660, 'wh_dlvd_cum': 1007981, 'wh_neg': 883785, 'wh_pos': 648196, }), 'lifetime': dict({ 'createdTime': 1744817400, 'duration': 6211500, 'vah_cum': 2017794, 'varh_lag_cum': 174130, 'varh_lead_cum': -109660, 'wh_dlvd_cum': 1007981, }), 'wattHours': dict({ 'today': 14467, 'week': 136796, 'yesterday': 25760, }), 'watts': dict({ 'max': 5726, 'now': 419, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385426, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), dict({ 'chanEid': 1778385427, 'created': 0, 'lastReading': dict({ }), 'lifetime': dict({ }), 'wattHours': dict({ 'today': 0, 'week': 0, 'yesterday': 0, }), 'watts': dict({ 'max': 0, 'now': 0, 'nowUsed': 0, }), }), ]), 'devName': 'eim', 'modGone': True, 'sn': '122446001637EIM2', }), 'deviceCount': 17, 'deviceDataLimit': 50, }), '/ivp/ss/dry_contact_settings': dict({ 'dry_contacts': list([ dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 1.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NC2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 2.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO1', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 3.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), dict({ 'black_s_start': 5.0, 'essential_end_time': 57600.0, 'essential_start_time': 32400.0, 'gen_action': 'none', 'grid_action': 'none', 'id': 'NO2', 'load_name': '', 'manual_override': 'true', 'micro_grid_action': 'none', 'mode': 'manual', 'override': 'false', 'priority': 4.0, 'pv_serial_nb': list([ ]), 'soc_high': 40.0, 'soc_low': 30.0, 'type': 'NONE', }), ]), }), '/production.json?details=1': dict({ 'consumption': list([ dict({ 'activeCount': 1, 'apprntPwr': 2265.958, 'measurementType': 'total-consumption', 'pwrFactor': 0.45, 'reactPwr': 19.832, 'readingTime': 1748577048, 'rmsCurrent': 9.279, 'rmsVoltage': 244.195, 'type': 'eim', 'vahLifetime': 2017963.456, 'vahToday': 16554.456, 'varhLagLifetime': 174234.39, 'varhLagToday': 670.39, 'varhLeadLifetime': -109764.113, 'varhLeadToday': 0.0, 'wNow': 1008.957, 'whLastSevenDays': 136895.923, 'whLifetime': 1008080.923, 'whToday': 14566.923, }), dict({ 'activeCount': 1, 'apprntPwr': 996.717, 'measurementType': 'net-consumption', 'pwrFactor': 0.23, 'reactPwr': 898.838, 'readingTime': 1748577048, 'rmsCurrent': 4.082, 'rmsVoltage': 244.195, 'type': 'eim', 'vahLifetime': 2017963.456, 'vahToday': 0, 'varhLagLifetime': 430153.893, 'varhLagToday': 0, 'varhLeadLifetime': 463468.848, 'varhLeadToday': 0, 'wNow': 231.561, 'whLastSevenDays': 0, 'whLifetime': -235661.6, 'whToday': 0, }), ]), 'production': list([ dict({ 'activeCount': 15, 'readingTime': 1748577038, 'type': 'inverters', 'wNow': 2594, 'whLifetime': 1264180, }), dict({ 'activeCount': 1, 'apprntPwr': 1258.19, 'measurementType': 'production', 'pwrFactor': 0.63, 'reactPwr': -879.006, 'readingTime': 1748577048, 'rmsCurrent': 5.198, 'rmsVoltage': 243.975, 'type': 'eim', 'vahLifetime': 1776751.697, 'vahToday': 16484.697, 'varhLagLifetime': 255919.503, 'varhLagToday': 1824.503, 'varhLeadLifetime': 573232.961, 'varhLeadToday': 3458.961, 'wNow': 777.395, 'whLastSevenDays': 86274.993, 'whLifetime': 1243811.993, 'whToday': 13439.993, }), ]), 'storage': list([ dict({ 'activeCount': 0, 'readingTime': 0, 'state': 'idle', 'type': 'acb', 'wNow': 0, 'whNow': 0, }), ]), }), }), 'system_consumption': dict({ 'watt_hours_last_7_days': 136896, 'watt_hours_lifetime': 1008081, 'watt_hours_today': 14567, 'watts_now': 1009, }), 'system_consumption_phases': None, 'system_net_consumption': dict({ 'watt_hours_last_7_days': 0, 'watt_hours_lifetime': -235662, 'watt_hours_today': 0, 'watts_now': 232, }), 'system_net_consumption_phases': None, 'system_production': dict({ 'watt_hours_last_7_days': 86275, 'watt_hours_lifetime': 1243812, 'watt_hours_today': 13440, 'watts_now': 777, }), 'system_production_phases': None, 'tariff': dict({ 'currency': dict({ 'code': 'AUD', }), 'date': '1743840002', 'logger': 'mylogger', 'seasons': list([ ]), 'seasons_sell': list([ ]), 'single_rate': dict({ 'rate': 0.2579500079154968, 'sell': 0.07000000029802322, }), 'storage_settings': dict({ 'charge_from_grid': False, 'date': '1742364587', 'mode': , 'operation_mode_sub_type': '', 'opt_schedules': False, 'reserved_soc': 43.0, 'very_low_soc': 10, }), }), }) # --- pyenphase-2.3.1/tests/common.py000066400000000000000000000354241505013723300165240ustar00rootroot00000000000000"""common test functions for pyenphase.""" import asyncio import json import logging from collections.abc import Generator from contextlib import contextmanager from os import listdir from os.path import isfile, join from pathlib import Path from typing import Any import aiohttp import orjson from aioresponses import aioresponses from awesomeversion import AwesomeVersion from pyenphase import AUTH_TOKEN_MIN_VERSION, Envoy from pyenphase.envoy import SupportedFeatures from pyenphase.updaters.base import EnvoyUpdater @contextmanager def temporary_log_level(logger_name: str, level: int) -> Generator[None, None, None]: """Temporarily change the log level of a logger.""" logger = logging.getLogger(logger_name) original_level = logger.level logger.setLevel(level) try: yield finally: logger.setLevel(original_level) def _fixtures_dir() -> Path: """Return location of fixture folder.""" return Path(__file__).parent / "fixtures" def _load_fixture(path: str) -> str: """Return fixture file content as text.""" with open(path) as read_in: return read_in.read() async def load_fixture(version: str, name: str) -> str: """Return fixture file content as text in executor.""" path: str = f"{_fixtures_dir()}/{version}/{name}" content: str = await asyncio.get_running_loop().run_in_executor( None, _load_fixture, path ) return content async def load_json_fixture(version: str, name: str) -> dict[str, Any]: """Return fixture file content as JSON.""" json: str = await load_fixture(version, name) return orjson.loads(json) async def load_json_list_fixture(version: str, name: str) -> list[dict[str, Any]]: """Return list[json] fixture file content as json""" json: str = await load_fixture(version, name) return orjson.loads(json) def _fixture_files(path: str) -> list[str]: """Get fixture files list""" return [f for f in listdir(path) if isfile(join(path, f))] async def fixture_files(version: str) -> list[str]: """Get fixture files list in executor""" path: str = f"{_fixtures_dir()}/{version}" files: list[str] = await asyncio.get_running_loop().run_in_executor( None, _fixture_files, path ) return files def start_7_firmware_mock(mock_aioresponse: aioresponses) -> None: """Setup response mocks for Enlighten and Envoy token requests.""" # Use repeat=True since auth might create its own session # Mock both with and without the trailing ? mock_aioresponse.post( "https://enlighten.enphaseenergy.com/login/login.json?", status=200, payload={ "session_id": "1234567890", "user_id": "1234567890", "user_name": "test", "first_name": "Test", "is_consumer": True, "manager_token": "1234567890", }, repeat=True, ) mock_aioresponse.post( "https://enlighten.enphaseenergy.com/login/login.json", status=200, payload={ "session_id": "1234567890", "user_id": "1234567890", "user_name": "test", "first_name": "Test", "is_consumer": True, "manager_token": "1234567890", }, repeat=True, ) mock_aioresponse.post( "https://entrez.enphaseenergy.com/tokens", status=200, body="token", repeat=True, ) # Mock the JWT check endpoint on the Envoy mock_aioresponse.get("https://127.0.0.1/auth/check_jwt", status=200, repeat=True) async def get_mock_envoy( client_session: aiohttp.ClientSession | None, update: bool = True ) -> Envoy: """Return a mock Envoy.""" host = "127.0.0.1" envoy = Envoy(host, client=client_session) await envoy.setup() await envoy.authenticate("username", "password") if update: await envoy.update() await envoy.update() # make sure we can update twice return envoy def latest_request( mock_aioresponse: aioresponses, method: str, url: str ) -> tuple[int, bytes]: """Return count of matched request and last request data.""" requests = [ req for req in mock_aioresponse.requests if req[0] == method and url in str(req[1]) ] if not requests: return 0, b"" return len(requests), mock_aioresponse.requests[requests[-1]][-1].kwargs.get("data") def override_mock( mock_aioresponse: aioresponses, method: str, url: str, **kwargs: Any ) -> None: """Override an existing mock by removing it first and adding a new one.""" from yarl import URL url_obj = URL(url) # Remove existing mocks for this URL and method from _matches keys_to_remove = [] for key, matcher in mock_aioresponse._matches.items(): # Check if this matches our URL and method url_matches = False if hasattr(matcher.url_or_pattern, "match"): # It's a regex pattern url_matches = bool(matcher.url_or_pattern.match(str(url_obj))) else: # It's a URL url_matches = str(matcher.url_or_pattern).rstrip("/") == str( url_obj ).rstrip("/") if url_matches and matcher.method.lower() == method.lower(): keys_to_remove.append(key) # Remove the matching mocks for key in keys_to_remove: del mock_aioresponse._matches[key] # Add the new mock getattr(mock_aioresponse, method.lower())(url, **kwargs) def endpoint_path(version: str, host: str) -> str: return f"http{'s' if AwesomeVersion(version.split('_')[0]) >= AUTH_TOKEN_MIN_VERSION else ''}://{host}" async def prep_envoy( mock_aioresponse: aioresponses, host: str, version: str, #: name of version folder to read fixtures from ) -> list[str]: """Setup response mocks for envoy requests and return list of found mock files.""" files: list[str] = await fixture_files(version) # Helper to create full URLs full_host = endpoint_path(version, host) def url(path: str) -> str: return f"{full_host}{path}" def url_https(path: str) -> str: return f"https://{host}{path}" def url_http(path: str) -> str: return f"http://{host}{path}" mock_aioresponse.get( url_http("/info"), status=200, body=await load_fixture(version, "info"), repeat=True, ) mock_aioresponse.get( url_https("/info"), status=200, body=await load_fixture(version, "info"), repeat=True, ) mock_aioresponse.get(url("/info.xml"), status=200, body="", repeat=True) if "ivp_meters" in files: try: mock_aioresponse.get( url("/ivp/meters"), status=200, payload=(await load_json_fixture(version, "ivp_meters")), repeat=True, ) except json.decoder.JSONDecodeError: # v3 fw with html return 401 mock_aioresponse.get(url("/ivp/meters"), status=401, repeat=True) # mock_aioresponse.get(url_http("/ivp/meters"), status=401, repeat=True) else: mock_aioresponse.get(url("/ivp/meters"), status=404, repeat=True) # mock_aioresponse.get(url_http("/ivp/meters"), status=404, repeat=True) if "ivp_meters_readings" in files: mock_aioresponse.get( url("/ivp/meters/readings"), status=200, payload=await load_json_fixture(version, "ivp_meters_readings"), repeat=True, ) else: mock_aioresponse.get(url("/ivp/meters/readings"), status=404, repeat=True) # mock_aioresponse.get(url_http("/ivp/meters/readings"), status=404, repeat=True) if "production" in files: try: json_data = await load_json_fixture(version, "production") mock_aioresponse.get( url("/production"), status=200, payload=json_data, repeat=True ) except json.decoder.JSONDecodeError: # v3 fw reports production in html format mock_aioresponse.get( url("/production"), status=200, body=await load_fixture(version, "production"), repeat=True, ) else: mock_aioresponse.get(url("/production"), status=404, repeat=True) # mock_aioresponse.get(url_http("/production"), status=404, repeat=True) if "production.json" in files: try: json_data = await load_json_fixture(version, "production.json") mock_aioresponse.get( url("/production.json"), status=200, payload=json_data, repeat=True ) mock_aioresponse.get( url("/production.json?details=1"), status=200, payload=json_data, repeat=True, ) except json.decoder.JSONDecodeError: mock_aioresponse.get(url("/production.json"), status=404, repeat=True) # mock_aioresponse.get(url_http("/production.json"), status=404, repeat=True) mock_aioresponse.get( url("/production.json?details=1"), status=404, repeat=True ) else: mock_aioresponse.get(url("/production.json"), status=404, repeat=True) if "api_v1_production" in files: # Check if this is a bad_auth version by looking at the fixture content api_v1_prod_data = await load_json_fixture(version, "api_v1_production") status = ( 401 if "status" in api_v1_prod_data and api_v1_prod_data["status"] == 401 else 200 ) mock_aioresponse.get( url("/api/v1/production"), status=status, payload=api_v1_prod_data, repeat=True, ) else: mock_aioresponse.get(url("/api/v1/production"), status=404, repeat=True) if "api_v1_production_inverters" in files: # Check if this is a bad_auth version by looking at the fixture content api_v1_inv_data = await load_json_fixture( version, "api_v1_production_inverters" ) status = ( 401 if isinstance(api_v1_inv_data, dict) and "status" in api_v1_inv_data and api_v1_inv_data["status"] == 401 else 200 ) mock_aioresponse.get( url("/api/v1/production/inverters"), status=status, payload=api_v1_inv_data, repeat=True, ) else: mock_aioresponse.get( url("/api/v1/production/inverters"), status=404, repeat=True ) if "ivp_ensemble_inventory" in files: mock_aioresponse.get( url("/ivp/ensemble/inventory"), status=200, payload=await load_json_fixture(version, "ivp_ensemble_inventory"), repeat=True, ) mock_aioresponse.get( url_http("/ivp/ensemble/inventory"), status=200, payload=await load_json_fixture(version, "ivp_ensemble_inventory"), repeat=True, ) else: mock_aioresponse.get(url("/ivp/ensemble/inventory"), status=404, repeat=True) mock_aioresponse.get( url_http("/ivp/ensemble/inventory"), status=404, repeat=True ) if "ivp_ensemble_dry_contacts" in files: try: json_data = await load_json_fixture(version, "ivp_ensemble_dry_contacts") except json.decoder.JSONDecodeError: json_data = {} mock_aioresponse.get( url("/ivp/ensemble/dry_contacts"), status=200, payload=json_data, repeat=True, ) mock_aioresponse.post( url("/ivp/ensemble/dry_contacts"), status=200, payload=json_data, repeat=True, ) if "ivp_ss_dry_contact_settings" in files: try: json_data = await load_json_fixture(version, "ivp_ss_dry_contact_settings") except json.decoder.JSONDecodeError: json_data = {} mock_aioresponse.get( url("/ivp/ss/dry_contact_settings"), status=200, payload=json_data, repeat=True, ) mock_aioresponse.post( url("/ivp/ss/dry_contact_settings"), status=200, payload=json_data, repeat=True, ) if "ivp_ensemble_power" in files: try: json_data = await load_json_fixture(version, "ivp_ensemble_power") except json.decoder.JSONDecodeError: json_data = {} mock_aioresponse.get( url("/ivp/ensemble/power"), status=200, payload=json_data, repeat=True ) if "ivp_ensemble_secctrl" in files: try: json_data = await load_json_fixture(version, "ivp_ensemble_secctrl") except json.decoder.JSONDecodeError: json_data = {} mock_aioresponse.get( url("/ivp/ensemble/secctrl"), status=200, payload=json_data, repeat=True ) if "admin_lib_tariff" in files: try: json_data = await load_json_fixture(version, "admin_lib_tariff") except json.decoder.JSONDecodeError: json_data = {} mock_aioresponse.get( url("/admin/lib/tariff"), status=200, payload=json_data, repeat=True ) mock_aioresponse.get( url_http("/admin/lib/tariff"), status=200, payload=json_data, repeat=True ) mock_aioresponse.put( url("/admin/lib/tariff"), status=200, payload=json_data, repeat=True ) else: mock_aioresponse.get(url("/admin/lib/tariff"), status=404, repeat=True) if "ivp_ss_gen_config" in files: try: json_data = await load_json_fixture(version, "ivp_ss_gen_config") except json.decoder.JSONDecodeError: json_data = {} mock_aioresponse.get( url("/ivp/ss/gen_config"), status=200, payload=json_data, repeat=True ) else: mock_aioresponse.get( url("/ivp/ss/gen_config"), status=200, payload={}, repeat=True ) if "home" in files: mock_aioresponse.get( url("/home"), status=200, payload=await load_json_fixture(version, "home"), repeat=True, ) else: mock_aioresponse.get(url("/home"), status=404, repeat=True) if "ivp_pdm_device_data" in files: mock_aioresponse.get( url("/ivp/pdm/device_data"), status=200, payload=await load_json_fixture(version, "ivp_pdm_device_data"), repeat=True, ) else: mock_aioresponse.get(url("/ivp/pdm/device_data"), status=404, repeat=True) return files def updater_features(updaters: list[EnvoyUpdater]) -> dict[str, SupportedFeatures]: """Return the updater supported features flags""" return {type(updater).__name__: updater._supported_features for updater in updaters} pyenphase-2.3.1/tests/conftest.py000066400000000000000000000026761505013723300170640ustar00rootroot00000000000000import logging from unittest.mock import patch import aiohttp import pytest import pytest_asyncio from aioresponses import aioresponses from syrupy import SnapshotAssertion from pyenphase.ssl import NO_VERIFY_SSL_CONTEXT from tests.syrupy import EnphaseSnapshotExtension @pytest.fixture def mock_aioresponse(): """Return aioresponses fixture.""" # Note: aioresponses will mock all ClientSession instances by default with aioresponses(passthrough=["http://127.0.0.1:8123"]) as m: yield m @pytest_asyncio.fixture async def test_client_session(): """Create an aiohttp ClientSession with low timeout for tests.""" timeout = aiohttp.ClientTimeout(total=5.0, connect=1.0, sock_read=1.0) connector = aiohttp.TCPConnector(ssl=NO_VERIFY_SSL_CONTEXT) session = aiohttp.ClientSession(timeout=timeout, connector=connector) yield session await session.close() @pytest.fixture def snapshot(snapshot: SnapshotAssertion) -> SnapshotAssertion: """Return snapshot assertion fixture with the Enphase extension.""" return snapshot.use_extension(EnphaseSnapshotExtension) @pytest.fixture(autouse=True) def fast_tenacity(): """Make tenacity retries fast by mocking time.sleep.""" with patch("tenacity.nap.time"), patch("asyncio.sleep", return_value=None): yield @pytest.fixture(autouse=True) def setup_logging(): """Set up logging for all tests.""" logging.getLogger("pyenphase").setLevel(logging.DEBUG) pyenphase-2.3.1/tests/fixtures/000077500000000000000000000000001505013723300165235ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/3.17.3/000077500000000000000000000000001505013723300172545ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/3.17.3/api_v1_production000066400000000000000000000001621505013723300226230ustar00rootroot00000000000000{ "wattHoursToday": 5481, "wattHoursSevenDays": 389581, "wattHoursLifetime": 93706280, "wattsNow": 5463 } pyenphase-2.3.1/tests/fixtures/3.17.3/api_v1_production_inverters000066400000000000000000000125031505013723300247260ustar00rootroot00000000000000[ { "serialNumber": "121512041640", "lastReportDate": 1618082927, "lastReportWatts": 200, "maxReportWatts": 249 }, { "serialNumber": "121512036336", "lastReportDate": 1618082932, "lastReportWatts": 199, "maxReportWatts": 247 }, { "serialNumber": "121512043093", "lastReportDate": 1618082928, "lastReportWatts": 208, "maxReportWatts": 255 }, { "serialNumber": "121512039005", "lastReportDate": 1618082933, "lastReportWatts": 55, "maxReportWatts": 254 }, { "serialNumber": "121512041456", "lastReportDate": 1618082937, "lastReportWatts": 13, "maxReportWatts": 79 }, { "serialNumber": "121512043153", "lastReportDate": 1618082935, "lastReportWatts": 18, "maxReportWatts": 146 }, { "serialNumber": "121512038691", "lastReportDate": 1618082942, "lastReportWatts": 26, "maxReportWatts": 247 }, { "serialNumber": "121512039090", "lastReportDate": 1618082946, "lastReportWatts": 32, "maxReportWatts": 194 }, { "serialNumber": "121512038982", "lastReportDate": 1618082950, "lastReportWatts": 203, "maxReportWatts": 253 }, { "serialNumber": "121512042344", "lastReportDate": 1618082952, "lastReportWatts": 205, "maxReportWatts": 253 }, { "serialNumber": "121512039143", "lastReportDate": 1618082956, "lastReportWatts": 104, "maxReportWatts": 245 }, { "serialNumber": "121512009183", "lastReportDate": 1618082961, "lastReportWatts": 204, "maxReportWatts": 253 }, { "serialNumber": "121512039093", "lastReportDate": 1618082966, "lastReportWatts": 209, "maxReportWatts": 256 }, { "serialNumber": "121512042132", "lastReportDate": 1618082924, "lastReportWatts": 200, "maxReportWatts": 250 }, { "serialNumber": "121512043135", "lastReportDate": 1618082923, "lastReportWatts": 205, "maxReportWatts": 254 }, { "serialNumber": "121512043173", "lastReportDate": 1618082966, "lastReportWatts": 200, "maxReportWatts": 247 }, { "serialNumber": "121512039018", "lastReportDate": 1618082964, "lastReportWatts": 27, "maxReportWatts": 252 }, { "serialNumber": "121512036221", "lastReportDate": 1618082963, "lastReportWatts": 8, "maxReportWatts": 116 }, { "serialNumber": "121512038619", "lastReportDate": 1618082962, "lastReportWatts": 203, "maxReportWatts": 252 }, { "serialNumber": "121512038919", "lastReportDate": 1618082959, "lastReportWatts": 102, "maxReportWatts": 238 }, { "serialNumber": "121512006273", "lastReportDate": 1618082959, "lastReportWatts": 206, "maxReportWatts": 254 }, { "serialNumber": "121512043222", "lastReportDate": 1618082957, "lastReportWatts": 207, "maxReportWatts": 254 }, { "serialNumber": "121512038416", "lastReportDate": 1618082953, "lastReportWatts": 151, "maxReportWatts": 251 }, { "serialNumber": "121512043200", "lastReportDate": 1618082955, "lastReportWatts": 203, "maxReportWatts": 253 }, { "serialNumber": "121512044424", "lastReportDate": 1618082954, "lastReportWatts": 106, "maxReportWatts": 239 }, { "serialNumber": "121512041747", "lastReportDate": 1618082925, "lastReportWatts": 64, "maxReportWatts": 248 }, { "serialNumber": "121512039075", "lastReportDate": 1618082930, "lastReportWatts": 102, "maxReportWatts": 237 }, { "serialNumber": "121512043587", "lastReportDate": 1618082934, "lastReportWatts": 202, "maxReportWatts": 253 }, { "serialNumber": "121512043086", "lastReportDate": 1618082942, "lastReportWatts": 202, "maxReportWatts": 250 }, { "serialNumber": "121512039091", "lastReportDate": 1618082939, "lastReportWatts": 27, "maxReportWatts": 252 }, { "serialNumber": "121512039181", "lastReportDate": 1618082943, "lastReportWatts": 101, "maxReportWatts": 238 }, { "serialNumber": "121512033008", "lastReportDate": 1618082947, "lastReportWatts": 101, "maxReportWatts": 243 }, { "serialNumber": "121512037453", "lastReportDate": 1618082949, "lastReportWatts": 205, "maxReportWatts": 255 }, { "serialNumber": "121512038421", "lastReportDate": 1618082949, "lastReportWatts": 14, "maxReportWatts": 233 }, { "serialNumber": "121512038845", "lastReportDate": 1618082945, "lastReportWatts": 203, "maxReportWatts": 253 }, { "serialNumber": "121512038901", "lastReportDate": 1618082944, "lastReportWatts": 102, "maxReportWatts": 245 }, { "serialNumber": "121512039124", "lastReportDate": 1618082938, "lastReportWatts": 205, "maxReportWatts": 254 }, { "serialNumber": "121512036220", "lastReportDate": 1618082927, "lastReportWatts": 198, "maxReportWatts": 245 }, { "serialNumber": "121512038762", "lastReportDate": 1618082930, "lastReportWatts": 203, "maxReportWatts": 253 }, { "serialNumber": "121512043574", "lastReportDate": 1618082936, "lastReportWatts": 203, "maxReportWatts": 253 }, { "serialNumber": "121512036250", "lastReportDate": 1618082940, "lastReportWatts": 20, "maxReportWatts": 190 } ] pyenphase-2.3.1/tests/fixtures/3.17.3/api_v1_production_inverters_log.json000066400000000000000000000002021505013723300265300ustar00rootroot00000000000000{"headers": {"date": "Wed, 09 Aug 2023 01:11:03 GMT", "content-type": "application/json", "content-length": "5456"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.17.3/api_v1_production_log.json000066400000000000000000000002011505013723300244260ustar00rootroot00000000000000{"headers": {"date": "Wed, 09 Aug 2023 01:11:03 GMT", "content-type": "application/json", "content-length": "116"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.17.3/info000066400000000000000000000023531505013723300201350ustar00rootroot00000000000000 121430030548 800-00069-r05 D3.17.3 4c8675 0 1 033b78 01.02.245 500-00004-r01 702db9 02.01.22 500-00008-r01 ad8746 02.01.15 500-00010-r01 0b54c5 02.00.01 590-00015-r01 0e8c7a 03.17.03 500-00002-r01 54a6dc 02.00.00 500-00016-r01 80e63f 02.04.00 500-00003-r01 802 01.02.00 500-00001-r01 pyenphase-2.3.1/tests/fixtures/3.17.3/info_log.json000066400000000000000000000002021505013723300217350ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.17.3/ivp_ensemble_dry_contacts000066400000000000000000000000401505013723300244150ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.17.3/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531505013723300262330ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.17.3/ivp_ensemble_inventory000066400000000000000000000000401505013723300237560ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.17.3/ivp_ensemble_inventory_log.json000066400000000000000000000001531505013723300255740ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.17.3/ivp_ss_dry_contact_settings000066400000000000000000000000401505013723300250050ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.17.3/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531505013723300266230ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.17.3/production000066400000000000000000000007431505013723300213710ustar00rootroot00000000000000

System Energy Production

System has been live since
Tue Nov 17, 2015 11:05 AM HST
Currently 6.63 kW
Today 53.6 kWh
Past Week 405 kWh
Since Installation 133 MWh

pyenphase-2.3.1/tests/fixtures/3.17.3/production.json000066400000000000000000000010431505013723300223330ustar00rootroot00000000000000
Emu

Page Not Found

The page you tried to view does not exist Try the home page

pyenphase-2.3.1/tests/fixtures/3.17.3/production.json_log.json000066400000000000000000000002421505013723300241440ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.17.3/production_log.json000066400000000000000000000002421505013723300231740ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.7.0/000077500000000000000000000000001505013723300171705ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/3.7.0/info000066400000000000000000000023521505013723300200500ustar00rootroot00000000000000 121430030548 800-00069-r05 D3.7.0 4c8675 0 1 033b78 01.02.245 500-00004-r01 702db9 02.01.22 500-00008-r01 ad8746 02.01.15 500-00010-r01 0b54c5 02.00.01 590-00015-r01 0e8c7a 03.17.03 500-00002-r01 54a6dc 02.00.00 500-00016-r01 80e63f 02.04.00 500-00003-r01 802 01.02.00 500-00001-r01 pyenphase-2.3.1/tests/fixtures/3.7.0/info_log.json000066400000000000000000000002021505013723300216510ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.7.0/ivp_ensemble_dry_contacts000066400000000000000000000000401505013723300243310ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.7.0/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531505013723300261470ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.7.0/ivp_ensemble_inventory000066400000000000000000000000401505013723300236720ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.7.0/ivp_ensemble_inventory_log.json000066400000000000000000000001531505013723300255100ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.7.0/ivp_ss_dry_contact_settings000066400000000000000000000000401505013723300247210ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.7.0/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531505013723300265370ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.7.0/production000066400000000000000000000007431505013723300213050ustar00rootroot00000000000000

System Energy Production

System has been live since
Tue Nov 17, 2015 11:05 AM HST
Currently 6.63 kW
Today 53.6 kWh
Past Week 405 kWh
Since Installation 133 MWh

pyenphase-2.3.1/tests/fixtures/3.7.0/production.json000066400000000000000000000010431505013723300222470ustar00rootroot00000000000000
Emu

Page Not Found

The page you tried to view does not exist Try the home page

pyenphase-2.3.1/tests/fixtures/3.7.0/production.json_log.json000066400000000000000000000002421505013723300240600ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.7.0/production_log.json000066400000000000000000000002421505013723300231100ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.8.10/000077500000000000000000000000001505013723300172525ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/3.8.10/admin_lib_tariff000066400000000000000000000010431505013723300224440ustar00rootroot00000000000000
Emu

Page Not Found

The page you tried to view does not exist Try the home page

pyenphase-2.3.1/tests/fixtures/3.8.10/admin_lib_tariff_log.json000066400000000000000000000002421505013723300242550ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.8.10/api_v1_production000066400000000000000000000001641505013723300226230ustar00rootroot00000000000000{ "wattHoursToday": 25151, "wattHoursSevenDays": 240671, "wattHoursLifetime": 138475913, "wattsNow": 4324 } pyenphase-2.3.1/tests/fixtures/3.8.10/api_v1_production_inverters000066400000000000000000000125111505013723300247230ustar00rootroot00000000000000[ { "serialNumber": "121512041640", "lastReportDate": 1703033509, "lastReportWatts": 99, "maxReportWatts": 177 }, { "serialNumber": "121512036336", "lastReportDate": 1703033514, "lastReportWatts": 102, "maxReportWatts": 179 }, { "serialNumber": "121512043093", "lastReportDate": 1703033511, "lastReportWatts": 106, "maxReportWatts": 190 }, { "serialNumber": "121512039005", "lastReportDate": 1703033514, "lastReportWatts": 102, "maxReportWatts": 178 }, { "serialNumber": "121512041456", "lastReportDate": 1703033519, "lastReportWatts": 35, "maxReportWatts": 48 }, { "serialNumber": "121512043153", "lastReportDate": 1703033517, "lastReportWatts": 53, "maxReportWatts": 99 }, { "serialNumber": "121512038691", "lastReportDate": 1703033524, "lastReportWatts": 101, "maxReportWatts": 170 }, { "serialNumber": "121512039090", "lastReportDate": 1703033529, "lastReportWatts": 77, "maxReportWatts": 93 }, { "serialNumber": "121512038982", "lastReportDate": 1703033490, "lastReportWatts": 102, "maxReportWatts": 180 }, { "serialNumber": "121512042344", "lastReportDate": 1703033491, "lastReportWatts": 100, "maxReportWatts": 180 }, { "serialNumber": "121512039143", "lastReportDate": 1703033495, "lastReportWatts": 141, "maxReportWatts": 163 }, { "serialNumber": "121512009183", "lastReportDate": 1703033499, "lastReportWatts": 106, "maxReportWatts": 189 }, { "serialNumber": "121512039093", "lastReportDate": 1703033503, "lastReportWatts": 107, "maxReportWatts": 190 }, { "serialNumber": "121512042132", "lastReportDate": 1703033507, "lastReportWatts": 102, "maxReportWatts": 137 }, { "serialNumber": "121512043135", "lastReportDate": 1703033506, "lastReportWatts": 106, "maxReportWatts": 189 }, { "serialNumber": "121512043173", "lastReportDate": 1703033506, "lastReportWatts": 104, "maxReportWatts": 182 }, { "serialNumber": "121512039018", "lastReportDate": 1703033503, "lastReportWatts": 100, "maxReportWatts": 155 }, { "serialNumber": "121512036221", "lastReportDate": 1703033501, "lastReportWatts": 102, "maxReportWatts": 159 }, { "serialNumber": "121512038619", "lastReportDate": 1703033500, "lastReportWatts": 103, "maxReportWatts": 183 }, { "serialNumber": "121512038919", "lastReportDate": 1703033498, "lastReportWatts": 137, "maxReportWatts": 158 }, { "serialNumber": "121512006273", "lastReportDate": 1703033497, "lastReportWatts": 105, "maxReportWatts": 188 }, { "serialNumber": "121512043222", "lastReportDate": 1703033496, "lastReportWatts": 105, "maxReportWatts": 186 }, { "serialNumber": "121512038416", "lastReportDate": 1703033492, "lastReportWatts": 103, "maxReportWatts": 179 }, { "serialNumber": "121512043200", "lastReportDate": 1703033494, "lastReportWatts": 102, "maxReportWatts": 179 }, { "serialNumber": "121512044424", "lastReportDate": 1703033493, "lastReportWatts": 137, "maxReportWatts": 157 }, { "serialNumber": "121512041747", "lastReportDate": 1703033507, "lastReportWatts": 100, "maxReportWatts": 174 }, { "serialNumber": "121512039075", "lastReportDate": 1703033511, "lastReportWatts": 136, "maxReportWatts": 157 }, { "serialNumber": "121512043587", "lastReportDate": 1703033516, "lastReportWatts": 102, "maxReportWatts": 124 }, { "serialNumber": "121512043086", "lastReportDate": 1703033523, "lastReportWatts": 104, "maxReportWatts": 184 }, { "serialNumber": "121512039091", "lastReportDate": 1703033521, "lastReportWatts": 100, "maxReportWatts": 175 }, { "serialNumber": "121512039181", "lastReportDate": 1703033525, "lastReportWatts": 138, "maxReportWatts": 158 }, { "serialNumber": "121512033008", "lastReportDate": 1703033487, "lastReportWatts": 141, "maxReportWatts": 161 }, { "serialNumber": "121512037453", "lastReportDate": 1703033489, "lastReportWatts": 107, "maxReportWatts": 188 }, { "serialNumber": "121512038421", "lastReportDate": 1703033488, "lastReportWatts": 103, "maxReportWatts": 177 }, { "serialNumber": "121512038845", "lastReportDate": 1703033527, "lastReportWatts": 103, "maxReportWatts": 182 }, { "serialNumber": "121512038901", "lastReportDate": 1703033527, "lastReportWatts": 140, "maxReportWatts": 161 }, { "serialNumber": "121512039124", "lastReportDate": 1703033520, "lastReportWatts": 101, "maxReportWatts": 180 }, { "serialNumber": "121512036220", "lastReportDate": 1703033508, "lastReportWatts": 102, "maxReportWatts": 176 }, { "serialNumber": "121512038762", "lastReportDate": 1703033513, "lastReportWatts": 105, "maxReportWatts": 185 }, { "serialNumber": "121512043574", "lastReportDate": 1703033518, "lastReportWatts": 103, "maxReportWatts": 182 }, { "serialNumber": "121512036250", "lastReportDate": 1703033522, "lastReportWatts": 102, "maxReportWatts": 153 } ] pyenphase-2.3.1/tests/fixtures/3.8.10/api_v1_production_inverters_log.json000066400000000000000000000002021505013723300265260ustar00rootroot00000000000000{"headers": {"date": "Wed, 20 Dec 2023 00:57:11 GMT", "content-type": "application/json", "content-length": "5449"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.8.10/api_v1_production_log.json000066400000000000000000000002011505013723300244240ustar00rootroot00000000000000{"headers": {"date": "Wed, 20 Dec 2023 00:57:11 GMT", "content-type": "application/json", "content-length": "116"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.8.10/info000066400000000000000000000023541505013723300201340ustar00rootroot00000000000000 121430030548 800-00069-r05 D3.18.10 4c8675 0 1 0b54c5 02.00.01 590-00015-r01 f0855e 03.18.10 500-00002-r01 033b78 01.02.245 500-00004-r01 ad8746 02.01.15 500-00010-r01 54a6dc 02.00.00 500-00016-r01 80e63f 02.04.00 500-00003-r01 807 01.02.00 500-00001-r01 702db9 02.01.22 500-00008-r01 pyenphase-2.3.1/tests/fixtures/3.8.10/info_log.json000066400000000000000000000002021505013723300217330ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_dry_contacts000066400000000000000000000000401505013723300244130ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531505013723300262310ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_generator000066400000000000000000000000401505013723300237050ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_generator_log.json000066400000000000000000000001531505013723300255230ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_inventory000066400000000000000000000000401505013723300237540ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_inventory_log.json000066400000000000000000000001531505013723300255720ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_power000066400000000000000000000000401505013723300230530ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_power_log.json000066400000000000000000000001531505013723300246710ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_secctrl000066400000000000000000000000401505013723300233560ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_secctrl_log.json000066400000000000000000000001531505013723300251740ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_status000066400000000000000000000000401505013723300232420ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ensemble_status_log.json000066400000000000000000000001531505013723300250600ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_meters000066400000000000000000000000131505013723300213440ustar00rootroot00000000000000Error: 401 pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_meters_log.json000066400000000000000000000002571505013723300231670ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"1703033831\"", "content-type": "text/plain", "content-length": "10"}, "code": 401} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_meters_readings000066400000000000000000000000401505013723300232200ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_meters_readings_log.json000066400000000000000000000001531505013723300250360ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_sc_pvlimit000066400000000000000000000000401505013723300222160ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_sc_pvlimit_log.json000066400000000000000000000001531505013723300240340ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_dry_contact_settings000066400000000000000000000000401505013723300250030ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531505013723300266210ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_gen_config000066400000000000000000000000401505013723300226500ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_gen_config_log.json000066400000000000000000000001531505013723300244660ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_gen_schedule000066400000000000000000000000401505013723300231770ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_gen_schedule_log.json000066400000000000000000000001531505013723300250150ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_pel_settings000066400000000000000000000000401505013723300232520ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.8.10/ivp_ss_pel_settings_log.json000066400000000000000000000001531505013723300250700ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.8.10/production000066400000000000000000000007431505013723300213670ustar00rootroot00000000000000

System Energy Production

System has been live since
Tue Nov 17, 2015 11:05 AM HST
Currently 4.32 kW
Today 25.2 kWh
Past Week 241 kWh
Since Installation 138 MWh

pyenphase-2.3.1/tests/fixtures/3.8.10/production.json000066400000000000000000000010431505013723300223310ustar00rootroot00000000000000
Emu

Page Not Found

The page you tried to view does not exist Try the home page

pyenphase-2.3.1/tests/fixtures/3.8.10/production.json_log.json000066400000000000000000000002421505013723300241420ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.8.10/production_log.json000066400000000000000000000002421505013723300231720ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.9.36/000077500000000000000000000000001505013723300172635ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/3.9.36/api_v1_production000066400000000000000000000001611505013723300226310ustar00rootroot00000000000000{ "wattHoursToday": 1460, "wattHoursSevenDays": 130349, "wattHoursLifetime": 6012540, "wattsNow": 1271 } pyenphase-2.3.1/tests/fixtures/3.9.36/api_v1_production_inverters000066400000000000000000000030771505013723300247430ustar00rootroot00000000000000[ { "serialNumber": "121547058993", "lastReportDate": 1618083961, "lastReportWatts": 138, "maxReportWatts": 231 }, { "serialNumber": "121547060394", "lastReportDate": 1618083966, "lastReportWatts": 138, "maxReportWatts": 238 }, { "serialNumber": "121603034267", "lastReportDate": 1618083956, "lastReportWatts": 138, "maxReportWatts": 244 }, { "serialNumber": "121547060402", "lastReportDate": 1618083962, "lastReportWatts": 138, "maxReportWatts": 240 }, { "serialNumber": "121547060638", "lastReportDate": 1618083966, "lastReportWatts": 139, "maxReportWatts": 241 }, { "serialNumber": "121547060646", "lastReportDate": 1618083957, "lastReportWatts": 139, "maxReportWatts": 240 }, { "serialNumber": "121603025842", "lastReportDate": 1618083963, "lastReportWatts": 139, "maxReportWatts": 260 }, { "serialNumber": "121603039216", "lastReportDate": 1618083968, "lastReportWatts": 139, "maxReportWatts": 273 }, { "serialNumber": "121547060652", "lastReportDate": 1618083959, "lastReportWatts": 140, "maxReportWatts": 245 }, { "serialNumber": "121547060495", "lastReportDate": 1618083959, "lastReportWatts": 135, "maxReportWatts": 228 }, { "serialNumber": "121603038867", "lastReportDate": 1618083964, "lastReportWatts": 138, "maxReportWatts": 242 }, { "serialNumber": "121547058983", "lastReportDate": 1618083969, "lastReportWatts": 137, "maxReportWatts": 238 } ] pyenphase-2.3.1/tests/fixtures/3.9.36/api_v1_production_inverters_log.json000066400000000000000000000002301505013723300265400ustar00rootroot00000000000000{ "headers": { "date": "Wed, 09 Aug 2023 00:58:22 GMT", "content-type": "application/json", "content-length": "1491" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/3.9.36/api_v1_production_log.json000066400000000000000000000002271505013723300244450ustar00rootroot00000000000000{ "headers": { "date": "Wed, 09 Aug 2023 00:58:22 GMT", "content-type": "application/json", "content-length": "103" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/3.9.36/info000066400000000000000000000021541505013723300201430ustar00rootroot00000000000000 121426016034 800-00069-r05 R3.9.36 4c8675 0 1 01.01.15 500-00004-r01 a5d803 00.01.15 590-00015-r01 360a7d 01.02.00 500-00001-r01 782 03.09.36 500-00002-r01 a1a93f 01.00.14 500-00008-r01 c14a6d 02.03.00 500-00003-r01 7a4eaa 01.00.01 500-00010-r01 1533e7 pyenphase-2.3.1/tests/fixtures/3.9.36/info_log.json000066400000000000000000000002241505013723300217500ustar00rootroot00000000000000{ "headers": { "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/xml" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ensemble_dry_contacts000066400000000000000000000000401505013723300244240ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001751505013723300262460ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ensemble_inventory000066400000000000000000000000401505013723300237650ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ensemble_inventory_log.json000066400000000000000000000001751505013723300256070ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ensemble_power000066400000000000000000000000401505013723300230640ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ensemble_power_log.json000066400000000000000000000001751505013723300247060ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ss_dry_contact_settings000066400000000000000000000000401505013723300250140ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001751505013723300266360ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-2.3.1/tests/fixtures/3.9.36/production000066400000000000000000000347221505013723300214040ustar00rootroot00000000000000 production

System Energy Production

System has been live since
Wed Mar 04, 2020 01:09 PM HST
Currently 0 W
Today 0 Wh
Past Week 0 Wh
Since Installation 14.6 MWh


© 2007-2014, [e] Enphase Energy, Inc. All rights reserved. | Licenses

pyenphase-2.3.1/tests/fixtures/3.9.36/production.json000066400000000000000000000350131505013723300223460ustar00rootroot00000000000000 error

Emu

Page Not Found

The page you tried to view does not exist Try the home page


© 2007-2014, [e] Enphase Energy, Inc. All rights reserved. | Licenses

pyenphase-2.3.1/tests/fixtures/3.9.36/production.json_log.json000066400000000000000000000002711505013723300241550ustar00rootroot00000000000000{ "headers": { "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/3.9.36/production_log.json000066400000000000000000000002711505013723300232050ustar00rootroot00000000000000{ "headers": { "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/000077500000000000000000000000001505013723300211125ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/admin_lib_tariff000066400000000000000000000000131505013723300243000ustar00rootroot00000000000000Error: 401 pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/admin_lib_tariff_log.json000066400000000000000000000002571505013723300261230ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"1694046744\"", "content-type": "text/plain", "content-length": "10"}, "code": 401} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/api_v1_production000066400000000000000000000001471505013723300244640ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 14578520, "wattsNow": 0 } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/api_v1_production_inverters000066400000000000000000000001321505013723300265570ustar00rootroot00000000000000{ "status": 401, "error": "", "info": "Authentication required", "moreInfo": "" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/api_v1_production_inverters_log.json000066400000000000000000000002531505013723300303740ustar00rootroot00000000000000{"headers": {"date": "Thu, 07 Sep 2023 00:32:21 GMT", "www-authenticate": "\u00d8\u00c9\u00c6A", "content-type": "application/json", "content-length": "90"}, "code": 401} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/api_v1_production_log.json000066400000000000000000000002011505013723300262640ustar00rootroot00000000000000{"headers": {"date": "Thu, 07 Sep 2023 00:32:20 GMT", "content-type": "application/json", "content-length": "103"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/info000066400000000000000000000021541505013723300217720ustar00rootroot00000000000000 121426016034 800-00069-r05 R3.9.36 4c8675 0 1 500-00001-r01 01.02.00 782 500-00010-r01 01.00.01 1533e7 500-00003-r01 02.03.00 7a4eaa 590-00015-r01 00.01.15 360a7d 500-00004-r01 01.01.15 a5d803 500-00002-r01 03.09.36 a1a93f 500-00008-r01 01.00.14 c14a6d pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/info_log.json000066400000000000000000000001721505013723300236010ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/xml"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_dry_contacts000066400000000000000000000000401505013723300262530ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531505013723300300710ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_generator000066400000000000000000000000401505013723300255450ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_generator_log.json000066400000000000000000000001531505013723300273630ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_inventory000066400000000000000000000000401505013723300256140ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_inventory_log.json000066400000000000000000000001531505013723300274320ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_secctrl000066400000000000000000000000401505013723300252160ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_secctrl_log.json000066400000000000000000000001531505013723300270340ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_status000066400000000000000000000000401505013723300251020ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_status_log.json000066400000000000000000000001531505013723300267200ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_meters000066400000000000000000000000401505013723300232040ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_meters_log.json000066400000000000000000000001531505013723300250220ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_meters_readings000066400000000000000000000000401505013723300250600ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_meters_readings_log.json000066400000000000000000000001531505013723300266760ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_sc_pvlimit000066400000000000000000000000401505013723300240560ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_sc_pvlimit_log.json000066400000000000000000000001531505013723300256740ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_dry_contact_settings000066400000000000000000000000401505013723300266430ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531505013723300304610ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_config000066400000000000000000000000401505013723300245100ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_config_log.json000066400000000000000000000001531505013723300263260ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_schedule000066400000000000000000000000401505013723300250370ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_schedule_log.json000066400000000000000000000001531505013723300266550ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_pel_settings000066400000000000000000000000401505013723300251120ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/ivp_ss_pel_settings_log.json000066400000000000000000000001531505013723300267300ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/production000066400000000000000000000347221505013723300232330ustar00rootroot00000000000000 production

System Energy Production

System has been live since
Wed Mar 04, 2020 01:09 PM HST
Currently 0 W
Today 0 Wh
Past Week 0 Wh
Since Installation 14.6 MWh


© 2007-2014, [e] Enphase Energy, Inc. All rights reserved. | Licenses

pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/production.json000066400000000000000000000350131505013723300241750ustar00rootroot00000000000000 error

Emu

Page Not Found

The page you tried to view does not exist Try the home page


© 2007-2014, [e] Enphase Energy, Inc. All rights reserved. | Licenses

pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/production.json_log.json000066400000000000000000000002331505013723300260020ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/3.9.36_bad_auth/production_log.json000066400000000000000000000002331505013723300250320ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/000077500000000000000000000000001505013723300173335ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/4.10.35/admin_lib_tariff000066400000000000000000000005341505013723300225310ustar00rootroot00000000000000{"tariff":{"currency":{"code":"USD"},"single_rate":{"rate":0.21835},"seasons":[{"id":"season_1","start":"1/1","days":[],"tiers":[{"id":"tier_1","limit":500,"rate":0.21835},{"id":"tier_2","limit":1200,"rate":0.19587},{"id":"tier_3","limit":-1,"rate":0.15798}]}]},"schedule":{"source":"Tariff","date":"2023-05-11 19:46:56 UTC","version":"00.00.01"}} pyenphase-2.3.1/tests/fixtures/4.10.35/admin_lib_tariff_log.json000066400000000000000000000003021505013723300243330ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:39 GMT", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "connection": "close", "content-type": "application/json"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/api_v1_production000066400000000000000000000001601505013723300227000ustar00rootroot00000000000000{ "wattHoursToday": 126, "wattHoursSevenDays": 179142, "wattHoursLifetime": 26785314, "wattsNow": 231 } pyenphase-2.3.1/tests/fixtures/4.10.35/api_v1_production_inverters000066400000000000000000000054451505013723300250140ustar00rootroot00000000000000[ { "serialNumber": "122002026181", "lastReportDate": 1695301309, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 287 }, { "serialNumber": "122002040286", "lastReportDate": 1695301314, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 299 }, { "serialNumber": "122002010484", "lastReportDate": 1695301305, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 300 }, { "serialNumber": "122002026190", "lastReportDate": 1695301313, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 289 }, { "serialNumber": "122002041618", "lastReportDate": 1695301318, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 292 }, { "serialNumber": "122002021258", "lastReportDate": 1695301327, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 305 }, { "serialNumber": "122002010488", "lastReportDate": 1695301325, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 305 }, { "serialNumber": "122002041626", "lastReportDate": 1695301330, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 306 }, { "serialNumber": "122002017669", "lastReportDate": 1695301327, "devType": 1, "lastReportWatts": 12, "maxReportWatts": 305 }, { "serialNumber": "122002017614", "lastReportDate": 1695301321, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 294 }, { "serialNumber": "122002027876", "lastReportDate": 1695301332, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 306 }, { "serialNumber": "122002011248", "lastReportDate": 1695301330, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 227 }, { "serialNumber": "122002021078", "lastReportDate": 1695301323, "devType": 1, "lastReportWatts": 12, "maxReportWatts": 306 }, { "serialNumber": "122002021381", "lastReportDate": 1695301308, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 305 }, { "serialNumber": "122002041638", "lastReportDate": 1695301314, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 296 }, { "serialNumber": "122002041636", "lastReportDate": 1695301319, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 300 }, { "serialNumber": "122002041621", "lastReportDate": 1695301310, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 197 }, { "serialNumber": "122002010489", "lastReportDate": 1695301317, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 306 }, { "serialNumber": "122002010577", "lastReportDate": 1695301322, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 305 } ] pyenphase-2.3.1/tests/fixtures/4.10.35/api_v1_production_inverters_log.json000066400000000000000000000002701505013723300266140ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:37 GMT, Thu, 21 Sep 2023 13:03:37 GMT", "connection": "close", "content-type": "application/json", "content-length": "2853"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/api_v1_production_log.json000066400000000000000000000002671505013723300245210ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:37 GMT, Thu, 21 Sep 2023 13:03:37 GMT", "connection": "close", "content-type": "application/json", "content-length": "112"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/info000066400000000000000000000032101505013723300202050ustar00rootroot00000000000000 121938119871 800-00555-r03 R4.10.35 4c8675 0 1 true 500-00001-r01 02.00.00 945 500-00011-r01 04.00.00 5bb754 590-00018-r01 02.00.01 426697 500-00002-r01 04.10.35 6ed292 500-00004-r01 01.02.186 d0d70f 500-00008-r01 02.01.22 06e201 500-00010-r01 04.10.25 7b7de5 500-00013-r01 03.02.07 4c9d48 500-00012-r01 02.02.00 c00a8f 500-00016-r01 02.00.00 54a6dc 1542157882 release-4.10.x-103-Nov-12-18-18:25:06 pyenphase-2.3.1/tests/fixtures/4.10.35/info_log.json000066400000000000000000000003241505013723300220210ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:37 GMT", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "connection": "close", "content-type": "text/xml", "content-length": "1672"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_dry_contacts000066400000000000000000000000401505013723300244740ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_dry_contacts_log.json000066400000000000000000000002531505013723300263130ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:39 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_generator000066400000000000000000000000401505013723300237660ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_generator_log.json000066400000000000000000000002531505013723300256050ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_inventory000066400000000000000000000000401505013723300240350ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_inventory_log.json000066400000000000000000000002531505013723300256540ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:39 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_power000066400000000000000000000000401505013723300231340ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_power_log.json000066400000000000000000000002531505013723300247530ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:39 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_secctrl000066400000000000000000000000401505013723300234370ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_secctrl_log.json000066400000000000000000000002531505013723300252560ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:39 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_status000066400000000000000000000000401505013723300233230ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ensemble_status_log.json000066400000000000000000000002531505013723300251420ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:39 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_meters000066400000000000000000000007121505013723300214330ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_meters_log.json000066400000000000000000000001641505013723300232450ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-length": "457"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_meters_readings000066400000000000000000000114171505013723300233130ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1695301419, "actEnergyDlvd": 26785327.449, "actEnergyRcvd": 0.001, "apparentEnergy": 33655488.016, "reactEnergyLagg": 10291993.443, "reactEnergyLead": 0.001, "instantaneousDemand": 166.489, "activePower": 166.489, "apparentPower": 457.211, "reactivePower": 383.325, "pwrFactor": 0.394, "voltage": 247.659, "current": 3.692, "freq": 60.000, "channels": [ { "eid": 1778385169, "timestamp": 1695301419, "actEnergyDlvd": 13398797.544, "actEnergyRcvd": 0.001, "apparentEnergy": 16836537.224, "reactEnergyLagg": 5169167.875, "reactEnergyLead": 0.000, "instantaneousDemand": 82.913, "activePower": 82.913, "apparentPower": 228.406, "reactivePower": 191.751, "pwrFactor": 0.400, "voltage": 123.824, "current": 1.844, "freq": 60.000 }, { "eid": 1778385170, "timestamp": 1695301419, "actEnergyDlvd": 13386529.904, "actEnergyRcvd": 0.000, "apparentEnergy": 16818950.792, "reactEnergyLagg": 5122825.568, "reactEnergyLead": 0.001, "instantaneousDemand": 83.576, "activePower": 83.576, "apparentPower": 228.804, "reactivePower": 191.574, "pwrFactor": 0.387, "voltage": 123.836, "current": 1.848, "freq": 60.000 }, { "eid": 1778385171, "timestamp": 1695301419, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.000 } ] }, { "eid": 704643584, "timestamp": 1695301419, "actEnergyDlvd": 16908208.780, "actEnergyRcvd": 17357690.272, "apparentEnergy": 41943778.605, "reactEnergyLagg": 543219.449, "reactEnergyLead": 13529386.807, "instantaneousDemand": 566.864, "activePower": 566.864, "apparentPower": 1063.035, "reactivePower": -581.018, "pwrFactor": 0.500, "voltage": 247.736, "current": 8.389, "freq": 60.000, "channels": [ { "eid": 1778385425, "timestamp": 1695301419, "actEnergyDlvd": 10220652.219, "actEnergyRcvd": 8001771.780, "apparentEnergy": 22610499.739, "reactEnergyLagg": 87750.153, "reactEnergyLead": 7841689.250, "instantaneousDemand": 393.965, "activePower": 393.965, "apparentPower": 668.739, "reactivePower": -337.072, "pwrFactor": 0.549, "voltage": 123.867, "current": 5.208, "freq": 60.000 }, { "eid": 1778385426, "timestamp": 1695301419, "actEnergyDlvd": 6687556.561, "actEnergyRcvd": 9355918.492, "apparentEnergy": 19333278.866, "reactEnergyLagg": 455469.296, "reactEnergyLead": 5687697.556, "instantaneousDemand": 172.899, "activePower": 172.899, "apparentPower": 394.296, "reactivePower": -243.946, "pwrFactor": 0.426, "voltage": 123.869, "current": 3.181, "freq": 60.000 }, { "eid": 1778385427, "timestamp": 1695301419, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.000 } ] } ] pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_meters_readings_log.json000066400000000000000000000001651505013723300251220ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-length": "4878"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_sc_pvlimit000066400000000000000000000000401505013723300222770ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_sc_pvlimit_log.json000066400000000000000000000002531505013723300241160ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_dry_contact_settings000066400000000000000000000000401505013723300250640ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_dry_contact_settings_log.json000066400000000000000000000002531505013723300267030ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:39 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_gen_config000066400000000000000000000000401505013723300227310ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_gen_config_log.json000066400000000000000000000002531505013723300245500ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_gen_schedule000066400000000000000000000000401505013723300232600ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_gen_schedule_log.json000066400000000000000000000002531505013723300250770ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_pel_settings000066400000000000000000000000401505013723300233330ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/4.10.35/ivp_ss_pel_settings_log.json000066400000000000000000000002531505013723300251520ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/4.10.35/production000066400000000000000000000000641505013723300214440ustar00rootroot00000000000000

401 Unauthorized

pyenphase-2.3.1/tests/fixtures/4.10.35/production.json000066400000000000000000000027001505013723300224130ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":19,"readingTime":1695301333,"wNow":246,"whLifetime":26890410},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1695301418,"wNow":165.53,"whLifetime":26785327.351,"varhLeadLifetime":0.001,"varhLagLifetime":10291993.22,"vahLifetime":33655487.75,"rmsCurrent":3.685,"rmsVoltage":247.631,"reactPwr":381.654,"apprntPwr":457.492,"pwrFactor":0.35,"whToday":139.351,"whLastSevenDays":179155.351,"vahToday":3288.75,"varhLeadToday":0.001,"varhLagToday":3108.22}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1695301418,"wNow":806.405,"whLifetime":26335790.411,"varhLeadLifetime":13529386.465,"varhLagLifetime":10835212.67,"vahLifetime":41943777.997,"rmsCurrent":12.88,"rmsVoltage":247.663,"reactPwr":-959.115,"apprntPwr":3189.788,"pwrFactor":0.25,"whToday":7412.411,"whLastSevenDays":163075.411,"vahToday":9709.997,"varhLeadToday":4281.465,"varhLagToday":3120.67},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1695301418,"wNow":640.874,"whLifetime":16908208.46,"varhLeadLifetime":13529386.464,"varhLagLifetime":543219.449,"vahLifetime":41943777.997,"rmsCurrent":9.195,"rmsVoltage":247.696,"reactPwr":-577.46,"apprntPwr":1155.626,"pwrFactor":0.53,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/4.10.35/production.json_log.json000066400000000000000000000003421505013723300242240ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:38 GMT", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "connection": "close", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/4.10.35/production_log.json000066400000000000000000000003271505013723300232570ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"Kz8MZRV4a9h25Ea4+ikZbKDannY=\"", "connection": "close", "content-type": "text/html", "content-length": "51"}, "code": 401} pyenphase-2.3.1/tests/fixtures/4.2.27/000077500000000000000000000000001505013723300172555ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/4.2.27/api_v1_production000066400000000000000000000001631505013723300226250ustar00rootroot00000000000000{ "wattHoursToday": 17920, "wattHoursSevenDays": 276614, "wattHoursLifetime": 10279087, "wattsNow": 5894 } pyenphase-2.3.1/tests/fixtures/4.2.27/info000066400000000000000000000034211505013723300201330ustar00rootroot00000000000000 121621012167 800-00551-r02 D4.2.27 4c8675 0 1 false 500-00001-r01 02.00.00 953 500-00011-r01 04.01.15 8f3564 590-00018-r01 02.00.01 426697 500-00002-r01 05.00.62 5e57a9 500-00004-r01 01.02.346 b1b724 500-00008-r01 02.01.22 2faa48 500-00010-r01 05.00.02 4fe435 500-00013-r01 03.02.07 276642 500-00012-r01 02.02.00 a81a58 500-00016-r01 02.00.00 54a6dc 500-00001-r01 02.00.00 953 jenkins-envoy_uber-pkg_5.0-build:pkg-Jul-14-21-16:11:44 1626297189 pyenphase-2.3.1/tests/fixtures/4.2.27/production.json000066400000000000000000000035461505013723300223460ustar00rootroot00000000000000{ "consumption": [ { "activeCount": 0, "apprntPwr": 11557.595, "measurementType": "total-consumption", "pwrFactor": 0.5, "reactPwr": -465.213, "readingTime": 1618006624, "rmsCurrent": 47.534, "rmsVoltage": 243.146, "type": "eim", "vahLifetime": 0, "vahToday": 0, "varhLagLifetime": 0, "varhLagToday": 0, "varhLeadLifetime": 0, "varhLeadToday": 0, "wNow": 5811.099, "whLastSevenDays": 0, "whLifetime": 0, "whToday": 0 }, { "activeCount": 0, "apprntPwr": 33.697, "measurementType": "net-consumption", "pwrFactor": 0, "reactPwr": 0, "readingTime": 1618006624, "rmsCurrent": 0.278, "rmsVoltage": 243.015, "type": "eim", "vahLifetime": 0, "vahToday": 0, "varhLagLifetime": 0, "varhLagToday": 0, "varhLeadLifetime": 0, "varhLeadToday": 0, "wNow": -3.769, "whLastSevenDays": 0, "whLifetime": 0, "whToday": 0 } ], "production": [ { "activeCount": 34, "readingTime": 1618005986, "type": "inverters", "wNow": 5891, "whLifetime": 10279087 }, { "activeCount": 0, "apprntPwr": 5816.157, "measurementType": "production", "pwrFactor": 1, "reactPwr": 465.213, "readingTime": 1618006624, "rmsCurrent": 47.811, "rmsVoltage": 243.277, "type": "eim", "vahLifetime": 0, "vahToday": 0, "varhLagLifetime": 0, "varhLagToday": 0, "varhLeadLifetime": 0, "varhLeadToday": 0, "wNow": 5814.869, "whLastSevenDays": 0, "whLifetime": 0, "whToday": 0 } ], "storage": [ { "activeCount": 0, "readingTime": 0, "state": "idle", "type": "acb", "wNow": 0, "whNow": 0 } ] } pyenphase-2.3.1/tests/fixtures/4.2.33/000077500000000000000000000000001505013723300172525ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/4.2.33/api_v1_production000066400000000000000000000001631505013723300226220ustar00rootroot00000000000000{ "wattHoursToday": 17920, "wattHoursSevenDays": 276614, "wattHoursLifetime": 10279087, "wattsNow": 5894 } pyenphase-2.3.1/tests/fixtures/4.2.33/api_v1_production_inverters000066400000000000000000000167631505013723300247400ustar00rootroot00000000000000[ { "serialNumber": "1234567890", "lastReportDate": 1743551631, "lastReportWatts": 3, "maxReportWatts": 131 }, { "serialNumber": "121436049348", "lastReportDate": 1743551620, "lastReportWatts": 3, "maxReportWatts": 116 }, { "serialNumber": "121436049328", "lastReportDate": 1743551627, "lastReportWatts": 3, "maxReportWatts": 115 }, { "serialNumber": "1234", "lastReportDate": 1743551629, "lastReportWatts": 2, "maxReportWatts": 112 }, { "serialNumber": "121436048845", "lastReportDate": 1743551627, "lastReportWatts": 2, "maxReportWatts": 112 }, { "serialNumber": "121436049598", "lastReportDate": 1743551623, "lastReportWatts": 2, "maxReportWatts": 114 }, { "serialNumber": "121436048659", "lastReportDate": 1743551624, "lastReportWatts": 3, "maxReportWatts": 115 }, { "serialNumber": "121622033394", "lastReportDate": 1536668599, "lastReportWatts": 13, "maxReportWatts": 13 }, { "serialNumber": "121622022742", "lastReportDate": 1536668610, "lastReportWatts": 14, "maxReportWatts": 14 }, { "serialNumber": "121622032547", "lastReportDate": 1536665884, "lastReportWatts": 3, "maxReportWatts": 3 }, { "serialNumber": "121622025673", "lastReportDate": 1536619007, "lastReportWatts": 2, "maxReportWatts": 2 }, { "serialNumber": "121622022737", "lastReportDate": 1536667724, "lastReportWatts": 10, "maxReportWatts": 10 }, { "serialNumber": "121622025752", "lastReportDate": 1536668619, "lastReportWatts": 14, "maxReportWatts": 14 }, { "serialNumber": "121622032412", "lastReportDate": 1536667737, "lastReportWatts": 5, "maxReportWatts": 5 }, { "serialNumber": "121622022759", "lastReportDate": 1536668642, "lastReportWatts": 13, "maxReportWatts": 13 }, { "serialNumber": "121622025680", "lastReportDate": 1536667756, "lastReportWatts": 11, "maxReportWatts": 11 }, { "serialNumber": "121622025731", "lastReportDate": 1536668656, "lastReportWatts": 17, "maxReportWatts": 17 }, { "serialNumber": "121622032575", "lastReportDate": 1536668671, "lastReportWatts": 18, "maxReportWatts": 18 }, { "serialNumber": "121436053372", "lastReportDate": 1743551610, "lastReportWatts": 3, "maxReportWatts": 117 }, { "serialNumber": "121436053331", "lastReportDate": 1743551616, "lastReportWatts": 2, "maxReportWatts": 59 }, { "serialNumber": "121436049391", "lastReportDate": 1743551620, "lastReportWatts": 2, "maxReportWatts": 113 }, { "serialNumber": "121436048644", "lastReportDate": 1743551625, "lastReportWatts": 2, "maxReportWatts": 116 }, { "serialNumber": "121436049347", "lastReportDate": 1743551630, "lastReportWatts": 2, "maxReportWatts": 93 }, { "serialNumber": "121436049374", "lastReportDate": 1743551623, "lastReportWatts": 2, "maxReportWatts": 111 }, { "serialNumber": "121436049274", "lastReportDate": 1743551618, "lastReportWatts": 3, "maxReportWatts": 118 }, { "serialNumber": "121436048765", "lastReportDate": 1743551617, "lastReportWatts": 2, "maxReportWatts": 114 }, { "serialNumber": "121436049230", "lastReportDate": 1743551613, "lastReportWatts": 3, "maxReportWatts": 113 }, { "serialNumber": "121436049236", "lastReportDate": 1743551612, "lastReportWatts": 2, "maxReportWatts": 94 }, { "serialNumber": "121436048857", "lastReportDate": 1743551614, "lastReportWatts": 2, "maxReportWatts": 107 }, { "serialNumber": "121436053315", "lastReportDate": 1743551609, "lastReportWatts": 3, "maxReportWatts": 119 }, { "serialNumber": "121622031692", "lastReportDate": 1536668648, "lastReportWatts": 16, "maxReportWatts": 16 }, { "serialNumber": "121622033387", "lastReportDate": 1536667749, "lastReportWatts": 10, "maxReportWatts": 10 }, { "serialNumber": "121622032550", "lastReportDate": 1536618998, "lastReportWatts": 2, "maxReportWatts": 2 }, { "serialNumber": "121622030849", "lastReportDate": 1536618997, "lastReportWatts": 2, "maxReportWatts": 2 }, { "serialNumber": "121622032421", "lastReportDate": 1536618992, "lastReportWatts": 2, "maxReportWatts": 2 }, { "serialNumber": "121622032296", "lastReportDate": 1536666858, "lastReportWatts": 8, "maxReportWatts": 8 }, { "serialNumber": "121622030861", "lastReportDate": 1536668663, "lastReportWatts": 15, "maxReportWatts": 15 }, { "serialNumber": "121622030852", "lastReportDate": 1536665972, "lastReportWatts": 6, "maxReportWatts": 6 }, { "serialNumber": "121622033390", "lastReportDate": 1536668609, "lastReportWatts": 16, "maxReportWatts": 16 }, { "serialNumber": "121622032346", "lastReportDate": 1536668618, "lastReportWatts": 16, "maxReportWatts": 16 }, { "serialNumber": "121622029606", "lastReportDate": 1536668634, "lastReportWatts": 17, "maxReportWatts": 17 }, { "serialNumber": "121622032551", "lastReportDate": 1536666817, "lastReportWatts": 6, "maxReportWatts": 6 }, { "serialNumber": "121622025749", "lastReportDate": 1536668635, "lastReportWatts": 16, "maxReportWatts": 16 }, { "serialNumber": "121622030863", "lastReportDate": 1536668647, "lastReportWatts": 16, "maxReportWatts": 16 }, { "serialNumber": "121622033381", "lastReportDate": 1536668642, "lastReportWatts": 9, "maxReportWatts": 9 }, { "serialNumber": "121622025745", "lastReportDate": 1536619020, "lastReportWatts": 2, "maxReportWatts": 2 }, { "serialNumber": "121622022741", "lastReportDate": 1536619013, "lastReportWatts": 2, "maxReportWatts": 2 }, { "serialNumber": "121622033386", "lastReportDate": 1536668598, "lastReportWatts": 11, "maxReportWatts": 11 }, { "serialNumber": "121622032673", "lastReportDate": 1536668609, "lastReportWatts": 17, "maxReportWatts": 17 }, { "serialNumber": "121622032667", "lastReportDate": 1536668621, "lastReportWatts": 18, "maxReportWatts": 18 }, { "serialNumber": "121622033019", "lastReportDate": 1536668634, "lastReportWatts": 17, "maxReportWatts": 17 } ] pyenphase-2.3.1/tests/fixtures/4.2.33/info000066400000000000000000000030231505013723300201260ustar00rootroot00000000000000 123456789012 800-00547-r05 M4.2.33 4c8675 0 1 500-00001-r01 02.00.00 937 500-00001-r01 02.00.00 937 500-00011-r01 04.00.00 c90fc2 590-00018-r01 02.00.01 79181c 500-00002-r01 04.02.33 b68db1 500-00004-r01 01.01.49 98cbde 500-00008-r01 01.06.05 dfe5e2 500-00010-r01 04.02.45 afc643 500-00013-r01 02.01.04 299acc 500-00012-r01 01.00.00 b13066 500-00016-r01 02.00.00 54a6dc pyenphase-2.3.1/tests/fixtures/4.2.33/ivp_meters000066400000000000000000000006331505013723300213540ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal" }, { "eid": 704643584, "state": "disabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "not-metering" } ] pyenphase-2.3.1/tests/fixtures/4.2.33/ivp_meters_readings000066400000000000000000000045021505013723300232270ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1743563780, "actEnergyDlvd": 8598256.633, "actEnergyRcvd": 15438.97, "apparentEnergy": 12039068.737, "reactEnergyLagg": 4797532.454, "reactEnergyLead": 2.593, "instantaneousDemand": -8.8, "activePower": -8.8, "apparentPower": 213.74, "reactivePower": 206.72, "pwrFactor": -0.04, "voltage": 241.93, "current": 1.77, "freq": 60.0, "channels": [ { "eid": 1778385169, "timestamp": 1743563780, "actEnergyDlvd": 4289410.853, "actEnergyRcvd": 10353.255, "apparentEnergy": 6009955.301, "reactEnergyLagg": 2407341.556, "reactEnergyLead": 1.556, "instantaneousDemand": -4.35, "activePower": -4.35, "apparentPower": 106.03, "reactivePower": 101.68, "pwrFactor": -0.04, "voltage": 121.21, "current": 0.87, "freq": 60.0 }, { "eid": 1778385170, "timestamp": 1743563780, "actEnergyDlvd": 4308845.78, "actEnergyRcvd": 5085.715, "apparentEnergy": 6029113.436, "reactEnergyLagg": 2390190.898, "reactEnergyLead": 1.038, "instantaneousDemand": -4.45, "activePower": -4.45, "apparentPower": 107.71, "reactivePower": 105.04, "pwrFactor": -0.04, "voltage": 120.72, "current": 0.89, "freq": 60.0 }, { "eid": 1778385171, "timestamp": 1743563780, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 } ] } ] pyenphase-2.3.1/tests/fixtures/4.2.33/production.json000066400000000000000000000022431505013723300223340ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "wNow": 0, "whLifetime": 11425504.1275, "readingTime": 1743563782, "activeCount": 19 }, { "type": "eim", "activeCount": 1, "whLifetime": 8598256.633, "whLastSevenDays": 10832.633, "whToday": 10214.633, "wNow": -8.796, "rmsCurrent": 1.767, "rmsVoltage": 241.934, "reactPwr": 206.72, "apprntPwr": 213.736, "pwrFactor": -0.04, "readingTime": 1743563782 } ], "consumption": [ { "type": "eim", "activeCount": 0, "whLifetime": 0, "whLastSevenDays": 0, "whToday": 0, "wNow": 0, "varhLeadToday": 0, "varhLagToday": 0, "vahToday": 0, "varhLeadLifetime": 0, "varhLagLifetime": 0, "vahLifetime": 0, "rmsCurrent": 0, "rmsVoltage": 0, "reactPwr": 0, "apprntPwr": 0, "pwrFactor": 0 } ] } pyenphase-2.3.1/tests/fixtures/5.0.49/000077500000000000000000000000001505013723300172605ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/5.0.49/api_v1_production000066400000000000000000000001621505013723300226270ustar00rootroot00000000000000{ "wattHoursToday": 5046, "wattHoursSevenDays": 445686, "wattHoursLifetime": 88742152, "wattsNow": 4859 } pyenphase-2.3.1/tests/fixtures/5.0.49/api_v1_production_inverters000066400000000000000000000136331505013723300247370ustar00rootroot00000000000000[ { "serialNumber": "121547059079", "lastReportDate": 1618083244, "devType": 1, "lastReportWatts": 130, "maxReportWatts": 257 }, { "serialNumber": "121547059193", "lastReportDate": 1618083250, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547059360", "lastReportDate": 1618083245, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547060384", "lastReportDate": 1618083250, "devType": 1, "lastReportWatts": 134, "maxReportWatts": 257 }, { "serialNumber": "121547059363", "lastReportDate": 1618083255, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547060650", "lastReportDate": 1618083253, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547059128", "lastReportDate": 1618083262, "devType": 1, "lastReportWatts": 135, "maxReportWatts": 257 }, { "serialNumber": "121547059108", "lastReportDate": 1618083266, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547060593", "lastReportDate": 1618083271, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547059102", "lastReportDate": 1618083273, "devType": 1, "lastReportWatts": 134, "maxReportWatts": 257 }, { "serialNumber": "121547060590", "lastReportDate": 1618083277, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547060671", "lastReportDate": 1618083283, "devType": 1, "lastReportWatts": 135, "maxReportWatts": 257 }, { "serialNumber": "121547059354", "lastReportDate": 1618083287, "devType": 1, "lastReportWatts": 132, "maxReportWatts": 257 }, { "serialNumber": "121547059253", "lastReportDate": 1618083289, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547060392", "lastReportDate": 1618083288, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547059112", "lastReportDate": 1618083286, "devType": 1, "lastReportWatts": 132, "maxReportWatts": 257 }, { "serialNumber": "121547060647", "lastReportDate": 1618083285, "devType": 1, "lastReportWatts": 134, "maxReportWatts": 258 }, { "serialNumber": "121547060643", "lastReportDate": 1618083284, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547059217", "lastReportDate": 1618083281, "devType": 1, "lastReportWatts": 137, "maxReportWatts": 257 }, { "serialNumber": "121547055830", "lastReportDate": 1618083280, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547060592", "lastReportDate": 1618083279, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547060758", "lastReportDate": 1618083274, "devType": 1, "lastReportWatts": 130, "maxReportWatts": 255 }, { "serialNumber": "121547059333", "lastReportDate": 1618083277, "devType": 1, "lastReportWatts": 134, "maxReportWatts": 257 }, { "serialNumber": "121547060727", "lastReportDate": 1618083275, "devType": 1, "lastReportWatts": 134, "maxReportWatts": 257 }, { "serialNumber": "121547059008", "lastReportDate": 1618083240, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547060773", "lastReportDate": 1618083247, "devType": 1, "lastReportWatts": 132, "maxReportWatts": 257 }, { "serialNumber": "121547059202", "lastReportDate": 1618083251, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547060761", "lastReportDate": 1618083260, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547060412", "lastReportDate": 1618083258, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 257 }, { "serialNumber": "121547059355", "lastReportDate": 1618083263, "devType": 1, "lastReportWatts": 131, "maxReportWatts": 258 }, { "serialNumber": "121547060415", "lastReportDate": 1618083267, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547060670", "lastReportDate": 1618083270, "devType": 1, "lastReportWatts": 134, "maxReportWatts": 257 }, { "serialNumber": "121547060396", "lastReportDate": 1618083269, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547059107", "lastReportDate": 1618083265, "devType": 1, "lastReportWatts": 132, "maxReportWatts": 257 }, { "serialNumber": "121547059889", "lastReportDate": 1618083264, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547060383", "lastReportDate": 1618083257, "devType": 1, "lastReportWatts": 135, "maxReportWatts": 258 }, { "serialNumber": "121547060766", "lastReportDate": 1618083242, "devType": 1, "lastReportWatts": 132, "maxReportWatts": 257 }, { "serialNumber": "121547059359", "lastReportDate": 1618083247, "devType": 1, "lastReportWatts": 134, "maxReportWatts": 257 }, { "serialNumber": "121547059357", "lastReportDate": 1618083254, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 257 }, { "serialNumber": "121547059381", "lastReportDate": 1618083259, "devType": 1, "lastReportWatts": 132, "maxReportWatts": 257 } ] pyenphase-2.3.1/tests/fixtures/5.0.49/info000066400000000000000000000034211505013723300201360ustar00rootroot00000000000000 121621012167 800-00551-r02 D5.0.62 4c8675 0 1 false 500-00001-r01 02.00.00 953 500-00011-r01 04.01.15 8f3564 590-00018-r01 02.00.01 426697 500-00002-r01 05.00.62 5e57a9 500-00004-r01 01.02.346 b1b724 500-00008-r01 02.01.22 2faa48 500-00010-r01 05.00.02 4fe435 500-00013-r01 03.02.07 276642 500-00012-r01 02.02.00 a81a58 500-00016-r01 02.00.00 54a6dc 500-00001-r01 02.00.00 953 jenkins-envoy_uber-pkg_5.0-build:pkg-Jul-14-21-16:11:44 1626297189 pyenphase-2.3.1/tests/fixtures/5.0.49/production.json000066400000000000000000000005121505013723300223370ustar00rootroot00000000000000{ "production": [ { "activeCount": 40, "readingTime": 1618084193, "type": "inverters", "wNow": 6335, "whLifetime": 88745376 } ], "storage": [ { "activeCount": 0, "readingTime": 0, "state": "idle", "type": "acb", "wNow": 0, "whNow": 0 } ] } pyenphase-2.3.1/tests/fixtures/5.0.62/000077500000000000000000000000001505013723300172535ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/5.0.62/admin_lib_tariff000066400000000000000000000003011505013723300224410ustar00rootroot00000000000000{"tariff":{"currency":{"code":"USD"},"single_rate":{"rate":0.0,"sell":0.0},"seasons":[],"seasons_sell":[]},"schedule":{"source":"Tariff","date":"2023-08-10 17:59:03 UTC","version":"00.00.02"}} pyenphase-2.3.1/tests/fixtures/5.0.62/admin_lib_tariff_log.json000066400000000000000000000003021505013723300242530ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "connection": "close", "content-type": "application/json"}, "code": 200} pyenphase-2.3.1/tests/fixtures/5.0.62/api_v1_production000066400000000000000000000001641505013723300226240ustar00rootroot00000000000000{ "wattHoursToday": 20161, "wattHoursSevenDays": 366671, "wattHoursLifetime": 133798553, "wattsNow": 7907 } pyenphase-2.3.1/tests/fixtures/5.0.62/api_v1_production_inverters000066400000000000000000000136321505013723300247310ustar00rootroot00000000000000[ { "serialNumber": "121547059079", "lastReportDate": 1694554838, "devType": 1, "lastReportWatts": 202, "maxReportWatts": 246 }, { "serialNumber": "121547059193", "lastReportDate": 1694554845, "devType": 1, "lastReportWatts": 201, "maxReportWatts": 244 }, { "serialNumber": "121547059360", "lastReportDate": 1694554839, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 246 }, { "serialNumber": "121547060384", "lastReportDate": 1694554845, "devType": 1, "lastReportWatts": 206, "maxReportWatts": 248 }, { "serialNumber": "121547059363", "lastReportDate": 1694554852, "devType": 1, "lastReportWatts": 198, "maxReportWatts": 242 }, { "serialNumber": "121547060650", "lastReportDate": 1694554848, "devType": 1, "lastReportWatts": 199, "maxReportWatts": 242 }, { "serialNumber": "121547059128", "lastReportDate": 1694554858, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 248 }, { "serialNumber": "121547059108", "lastReportDate": 1694554865, "devType": 1, "lastReportWatts": 202, "maxReportWatts": 246 }, { "serialNumber": "121547060593", "lastReportDate": 1694554871, "devType": 1, "lastReportWatts": 206, "maxReportWatts": 248 }, { "serialNumber": "121547059102", "lastReportDate": 1694554873, "devType": 1, "lastReportWatts": 159, "maxReportWatts": 247 }, { "serialNumber": "121547060590", "lastReportDate": 1694554881, "devType": 1, "lastReportWatts": 180, "maxReportWatts": 234 }, { "serialNumber": "121547060671", "lastReportDate": 1694554887, "devType": 1, "lastReportWatts": 60, "maxReportWatts": 224 }, { "serialNumber": "121547059354", "lastReportDate": 1694554892, "devType": 1, "lastReportWatts": 206, "maxReportWatts": 250 }, { "serialNumber": "121547059253", "lastReportDate": 1694554896, "devType": 1, "lastReportWatts": 202, "maxReportWatts": 249 }, { "serialNumber": "121547060392", "lastReportDate": 1694554895, "devType": 1, "lastReportWatts": 208, "maxReportWatts": 250 }, { "serialNumber": "121547059112", "lastReportDate": 1694554890, "devType": 1, "lastReportWatts": 200, "maxReportWatts": 248 }, { "serialNumber": "121547060647", "lastReportDate": 1694554890, "devType": 1, "lastReportWatts": 207, "maxReportWatts": 249 }, { "serialNumber": "121547060643", "lastReportDate": 1694554888, "devType": 1, "lastReportWatts": 200, "maxReportWatts": 248 }, { "serialNumber": "121547059217", "lastReportDate": 1694554886, "devType": 1, "lastReportWatts": 210, "maxReportWatts": 249 }, { "serialNumber": "121547055830", "lastReportDate": 1694554884, "devType": 1, "lastReportWatts": 201, "maxReportWatts": 247 }, { "serialNumber": "121547060592", "lastReportDate": 1694554881, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 247 }, { "serialNumber": "121547060758", "lastReportDate": 1694554874, "devType": 1, "lastReportWatts": 197, "maxReportWatts": 240 }, { "serialNumber": "121547059333", "lastReportDate": 1694554877, "devType": 1, "lastReportWatts": 202, "maxReportWatts": 248 }, { "serialNumber": "121547060727", "lastReportDate": 1694554877, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 249 }, { "serialNumber": "121547059008", "lastReportDate": 1694554837, "devType": 1, "lastReportWatts": 203, "maxReportWatts": 247 }, { "serialNumber": "121547060773", "lastReportDate": 1694554841, "devType": 1, "lastReportWatts": 202, "maxReportWatts": 246 }, { "serialNumber": "121547059202", "lastReportDate": 1694554848, "devType": 1, "lastReportWatts": 200, "maxReportWatts": 243 }, { "serialNumber": "121547060761", "lastReportDate": 1694554857, "devType": 1, "lastReportWatts": 202, "maxReportWatts": 244 }, { "serialNumber": "121547060412", "lastReportDate": 1694554855, "devType": 1, "lastReportWatts": 197, "maxReportWatts": 220 }, { "serialNumber": "121547059355", "lastReportDate": 1694554861, "devType": 1, "lastReportWatts": 207, "maxReportWatts": 249 }, { "serialNumber": "121547060415", "lastReportDate": 1694554866, "devType": 1, "lastReportWatts": 205, "maxReportWatts": 249 }, { "serialNumber": "121547060670", "lastReportDate": 1694554870, "devType": 1, "lastReportWatts": 199, "maxReportWatts": 243 }, { "serialNumber": "121547060396", "lastReportDate": 1694554867, "devType": 1, "lastReportWatts": 205, "maxReportWatts": 248 }, { "serialNumber": "121547059107", "lastReportDate": 1694554863, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 247 }, { "serialNumber": "121547059889", "lastReportDate": 1694554862, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 247 }, { "serialNumber": "121547060383", "lastReportDate": 1694554853, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 246 }, { "serialNumber": "121547060766", "lastReportDate": 1694554837, "devType": 1, "lastReportWatts": 202, "maxReportWatts": 244 }, { "serialNumber": "121547059359", "lastReportDate": 1694554843, "devType": 1, "lastReportWatts": 205, "maxReportWatts": 249 }, { "serialNumber": "121547059357", "lastReportDate": 1694554850, "devType": 1, "lastReportWatts": 201, "maxReportWatts": 242 }, { "serialNumber": "121547059381", "lastReportDate": 1694554856, "devType": 1, "lastReportWatts": 205, "maxReportWatts": 249 } ] pyenphase-2.3.1/tests/fixtures/5.0.62/api_v1_production_inverters_log.json000066400000000000000000000002701505013723300265340ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:24 GMT, Tue, 12 Sep 2023 21:55:24 GMT", "connection": "close", "content-type": "application/json", "content-length": "6042"}, "code": 200} pyenphase-2.3.1/tests/fixtures/5.0.62/api_v1_production_log.json000066400000000000000000000002671505013723300244410ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:24 GMT, Tue, 12 Sep 2023 21:55:24 GMT", "connection": "close", "content-type": "application/json", "content-length": "116"}, "code": 200} pyenphase-2.3.1/tests/fixtures/5.0.62/info000066400000000000000000000034211505013723300201310ustar00rootroot00000000000000 121621012167 800-00551-r02 D5.0.62 4c8675 0 1 false 500-00001-r01 02.00.00 953 500-00011-r01 04.01.15 8f3564 590-00018-r01 02.00.01 426697 500-00002-r01 05.00.62 5e57a9 500-00004-r01 01.02.346 b1b724 500-00008-r01 02.01.22 2faa48 500-00010-r01 05.00.02 4fe435 500-00013-r01 03.02.07 276642 500-00012-r01 02.02.00 a81a58 500-00016-r01 02.00.00 54a6dc 500-00001-r01 02.00.00 953 jenkins-envoy_uber-pkg_5.0-build:pkg-Jul-14-21-16:11:44 1626297189 pyenphase-2.3.1/tests/fixtures/5.0.62/info_log.json000066400000000000000000000003241505013723300217410ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:24 GMT", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "connection": "close", "content-type": "text/xml", "content-length": "1809"}, "code": 200} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_dry_contacts000066400000000000000000000000401505013723300244140ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_dry_contacts_log.json000066400000000000000000000002531505013723300262330ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_generator000066400000000000000000000000401505013723300237060ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_generator_log.json000066400000000000000000000002531505013723300255250ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_inventory000066400000000000000000000000401505013723300237550ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_inventory_log.json000066400000000000000000000002531505013723300255740ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_power000066400000000000000000000000401505013723300230540ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_power_log.json000066400000000000000000000002531505013723300246730ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_secctrl000066400000000000000000000000401505013723300233570ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_secctrl_log.json000066400000000000000000000002531505013723300251760ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_status000066400000000000000000000000401505013723300232430ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ensemble_status_log.json000066400000000000000000000002531505013723300250620ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "connection": "close", "content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_meters000066400000000000000000000000031505013723300213440ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_meters_log.json000066400000000000000000000001621505013723300231630ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "2"}, "code": 200} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_meters_readings000066400000000000000000000000031505013723300232200ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_meters_readings_log.json000066400000000000000000000001621505013723300250370ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "2"}, "code": 200} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_sc_pvlimit000066400000000000000000000000361505013723300222240ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_sc_pvlimit_log.json000066400000000000000000000001631505013723300240360ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_dry_contact_settings000066400000000000000000000000361505013723300250110ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001631505013723300266230ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_gen_config000066400000000000000000000000361505013723300226560ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_gen_config_log.json000066400000000000000000000001631505013723300244700ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_gen_schedule000066400000000000000000000000361505013723300232050ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_gen_schedule_log.json000066400000000000000000000001631505013723300250170ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_pel_settings000066400000000000000000000000361505013723300232600ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-2.3.1/tests/fixtures/5.0.62/ivp_ss_pel_settings_log.json000066400000000000000000000001631505013723300250720ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-2.3.1/tests/fixtures/5.0.62/production000066400000000000000000000000641505013723300213640ustar00rootroot00000000000000

401 Unauthorized

pyenphase-2.3.1/tests/fixtures/5.0.62/production.json000066400000000000000000000003201505013723300223270ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":40,"readingTime":1694554896,"wNow":7904,"whLifetime":133798554}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/5.0.62/production.json_log.json000066400000000000000000000003421505013723300241440ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:24 GMT", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "connection": "close", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-2.3.1/tests/fixtures/5.0.62/production_log.json000066400000000000000000000003271505013723300231770ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"Td4AZZWMIuPzNdOwn+N1MAFCm9k=\"", "connection": "close", "content-type": "text/html", "content-length": "51"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130/000077500000000000000000000000001505013723300173345ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.3.130/api_v1_production000066400000000000000000000001661505013723300227070ustar00rootroot00000000000000{ "wattHoursLifetime" : 3659478, "wattHoursSevenDays" : 149944, "wattHoursToday" : 58, "wattsNow" : 133 } pyenphase-2.3.1/tests/fixtures/7.3.130/api_v1_production_inverters000066400000000000000000000037241505013723300250130ustar00rootroot00000000000000[ { "devType" : 1, "lastReportDate" : 1691342432, "lastReportWatts" : 13, "maxReportWatts" : 347, "serialNumber" : "202218036214" }, { "devType" : 1, "lastReportDate" : 1691342462, "lastReportWatts" : 17, "maxReportWatts" : 346, "serialNumber" : "202218028926" }, { "devType" : 1, "lastReportDate" : 1691342643, "lastReportWatts" : 12, "maxReportWatts" : 347, "serialNumber" : "202218029586" }, { "devType" : 1, "lastReportDate" : 1691342613, "lastReportWatts" : 17, "maxReportWatts" : 348, "serialNumber" : "202218035988" }, { "devType" : 1, "lastReportDate" : 1691342553, "lastReportWatts" : 8, "maxReportWatts" : 345, "serialNumber" : "202218024705" }, { "devType" : 1, "lastReportDate" : 1691342554, "lastReportWatts" : 14, "maxReportWatts" : 346, "serialNumber" : "202218023114" }, { "devType" : 1, "lastReportDate" : 1691342525, "lastReportWatts" : 16, "maxReportWatts" : 348, "serialNumber" : "202218037990" }, { "devType" : 1, "lastReportDate" : 1691342555, "lastReportWatts" : 14, "maxReportWatts" : 345, "serialNumber" : "202218034002" }, { "devType" : 1, "lastReportDate" : 1691342464, "lastReportWatts" : 9, "maxReportWatts" : 347, "serialNumber" : "202218026521" }, { "devType" : 1, "lastReportDate" : 1691342465, "lastReportWatts" : 10, "maxReportWatts" : 350, "serialNumber" : "202218025399" }, { "devType" : 1, "lastReportDate" : 1691342584, "lastReportWatts" : 9, "maxReportWatts" : 346, "serialNumber" : "202218036386" }, { "devType" : 1, "lastReportDate" : 1691342674, "lastReportWatts" : 20, "maxReportWatts" : 348, "serialNumber" : "202218031593" } ] pyenphase-2.3.1/tests/fixtures/7.3.130/info000066400000000000000000000040071505013723300202130ustar00rootroot00000000000000 121729017746 800-00555-r03 D7.3.130 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00018-r01 02.00.01 426697 500-00002-r01 07.03.130 91f206 500-00004-r01 01.02.413 9c64cd 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 f9ead3 500-00012-r01 02.02.00 848ead 500-00016-r01 02.00.00 54a6dc 500-00020-r01 22.10.09 983d9b 500-00021-r01 01.00.00 19ae14 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-21:46:51 1687470523 02.00.4240 700-GA pyenphase-2.3.1/tests/fixtures/7.3.130/ivp_ensemble_inventory000066400000000000000000000000031505013723300240350ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.3.130/production000066400000000000000000000045351505013723300214540ustar00rootroot00000000000000{ "consumption" : [ { "activeCount" : 1, "apprntPwr" : 5237.703, "measurementType" : "total-consumption", "pwrFactor" : 0.28, "reactPwr" : -1563.916, "readingTime" : 1691342720, "rmsCurrent" : 21.708, "rmsVoltage" : 241.282, "type" : "eim", "vahLifetime" : 14686272.679, "vahToday" : 22487.679, "varhLagLifetime" : 998203.693, "varhLagToday" : 1456.693, "varhLeadLifetime" : 10691668.261, "varhLeadToday" : 13985.261, "wNow" : 1487.654, "whLastSevenDays" : 365477.252, "whLifetime" : 10154384.252, "whToday" : 15181.252 }, { "activeCount" : 1, "apprntPwr" : 2179.847, "measurementType" : "net-consumption", "pwrFactor" : 0.61, "reactPwr" : -1595.09, "readingTime" : 1691342720, "rmsCurrent" : 18.131, "rmsVoltage" : 241.257, "type" : "eim", "vahLifetime" : 14686272.679, "vahToday" : 0, "varhLagLifetime" : 258967.196, "varhLagToday" : 0, "varhLeadLifetime" : 10652521.7, "varhLeadToday" : 0, "wNow" : 1307.413, "whLastSevenDays" : 0, "whLifetime" : 7116678.51, "whToday" : 0 } ], "production" : [ { "activeCount" : 12, "readingTime" : 1691342674, "type" : "inverters", "wNow" : 158, "whLifetime" : 142373 }, { "activeCount" : 1, "apprntPwr" : 430.612, "measurementType" : "production", "pwrFactor" : 0.44, "reactPwr" : -31.173, "readingTime" : 1691342720, "rmsCurrent" : 3.577, "rmsVoltage" : 241.307, "type" : "eim", "vahLifetime" : 4846261.636, "vahToday" : 1978.636, "varhLagLifetime" : 739236.497, "varhLagToday" : 1457.497, "varhLeadLifetime" : 39146.561, "varhLeadToday" : 40.561, "wNow" : 180.24, "whLastSevenDays" : 149972.523, "whLifetime" : 3659506.523, "whToday" : 86.523 } ], "storage" : [ { "activeCount" : 0, "readingTime" : 0, "state" : "idle", "type" : "acb", "wNow" : 0, "whNow" : 0 } ] } pyenphase-2.3.1/tests/fixtures/7.3.130/production.json000066400000000000000000000040611505013723300224160ustar00rootroot00000000000000{ "consumption": [ { "activeCount": 1, "apprntPwr": 5108.445, "measurementType": "total-consumption", "pwrFactor": 0.27, "reactPwr": -1565.844, "readingTime": 1691342712, "rmsCurrent": 21.153, "rmsVoltage": 241.499, "type": "eim", "vahLifetime": 14686267.589, "vahToday": 22482.589, "varhLagLifetime": 998203.693, "varhLagToday": 1456.693, "varhLeadLifetime": 10691664.429, "varhLeadToday": 13981.429, "wNow": 1393.191, "whLastSevenDays": 365473.825, "whLifetime": 10154380.825, "whToday": 15177.825 }, { "activeCount": 1, "apprntPwr": 2118.15, "measurementType": "net-consumption", "pwrFactor": 0.59, "reactPwr": -1596.082, "readingTime": 1691342712, "rmsCurrent": 17.572, "rmsVoltage": 241.437, "type": "eim", "vahLifetime": 14686267.589, "vahToday": 0, "varhLagLifetime": 258967.196, "varhLagToday": 0, "varhLeadLifetime": 10652517.939, "varhLeadToday": 0, "wNow": 1214.696, "whLastSevenDays": 0, "whLifetime": 7116675.502, "whToday": 0 } ], "production": [ { "activeCount": 12, "readingTime": 1691342674, "type": "inverters", "wNow": 158, "whLifetime": 142373 }, { "activeCount": 1, "apprntPwr": 432.848, "measurementType": "production", "pwrFactor": 0.41, "reactPwr": -30.238, "readingTime": 1691342712, "rmsCurrent": 3.581, "rmsVoltage": 241.56, "type": "eim", "vahLifetime": 4846260.619, "vahToday": 1977.619, "varhLagLifetime": 739236.497, "varhLagToday": 1457.497, "varhLeadLifetime": 39146.49, "varhLeadToday": 40.49, "wNow": 178.495, "whLastSevenDays": 149972.105, "whLifetime": 3659506.105, "whToday": 86.105 } ], "storage": [ { "activeCount": 0, "readingTime": 0, "state": "idle", "type": "acb", "wNow": 0, "whNow": 0 } ] } pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/000077500000000000000000000000001505013723300224665ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/admin_lib_tariff000066400000000000000000000030471505013723300256660ustar00rootroot00000000000000{"tariff":{"currency":{"code":"USD"},"logger":"mylogger","date":"1680547193","storage_settings":{"mode":"self-consumption","operation_mode_sub_type":"","reserved_soc":0.0,"very_low_soc":5,"charge_from_grid":false,"date":"1680547193"},"single_rate":{"rate":0.15128,"sell":0.0},"seasons":[{"id":"season_1","start":"1/1","days":[],"tiers":[{"id":"tier_1","limit":1000,"rate":0.15128},{"id":"tier_2","limit":-1,"rate":0.1585}]}],"seasons_sell":[]},"schedule":{"source":"Tariff","date":"2023-07-09 22:07:02 UTC","version":"00.00.02","reserved_soc":0.0,"operation_mode_sub_type":"","very_low_soc":5,"charge_from_grid":false,"battery_mode":"self-consumption","schedule":{"Disable":[{"Sun":[{"start":0,"duration":1440,"setting":"ID"}]},{"Mon":[{"start":0,"duration":1440,"setting":"ID"}]},{"Tue":[{"start":0,"duration":1440,"setting":"ID"}]},{"Wed":[{"start":0,"duration":1440,"setting":"ID"}]},{"Thu":[{"start":0,"duration":1440,"setting":"ID"}]},{"Fri":[{"start":0,"duration":1440,"setting":"ID"}]},{"Sat":[{"start":0,"duration":1440,"setting":"ID"}]}],"tariff":[{"start":"1/1","end":"1/1","Sun":[{"start":0,"duration":1440,"setting":"ZN"}],"Mon":[{"start":0,"duration":1440,"setting":"ZN"}],"Tue":[{"start":0,"duration":1440,"setting":"ZN"}],"Wed":[{"start":0,"duration":1440,"setting":"ZN"}],"Thu":[{"start":0,"duration":1440,"setting":"ZN"}],"Fri":[{"start":0,"duration":1440,"setting":"ZN"}],"Sat":[{"start":0,"duration":1440,"setting":"ZN"}]}]},"override":false,"override_backup_soc":30.0,"override_chg_dischg_rate":0.0,"override_tou_mode":"StorageTouMode_DEFAULT_TOU_MODE"}} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/admin_lib_tariff_log.json000066400000000000000000000006131505013723300274730ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/api_v1_production000066400000000000000000000001621505013723300260350ustar00rootroot00000000000000{ "wattHoursToday": 14498, "wattHoursSevenDays": 185978, "wattHoursLifetime": 4545576, "wattsNow": 4454 } pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/api_v1_production_inverters000066400000000000000000000043341505013723300301430ustar00rootroot00000000000000[ { "serialNumber": "202302073177", "lastReportDate": 1694549622, "devType": 1, "lastReportWatts": 271, "maxReportWatts": 299 }, { "serialNumber": "202302072076", "lastReportDate": 1694549623, "devType": 1, "lastReportWatts": 271, "maxReportWatts": 300 }, { "serialNumber": "202302073203", "lastReportDate": 1694549592, "devType": 1, "lastReportWatts": 276, "maxReportWatts": 301 }, { "serialNumber": "202302075515", "lastReportDate": 1694549531, "devType": 1, "lastReportWatts": 284, "maxReportWatts": 300 }, { "serialNumber": "482236040746", "lastReportDate": 1694549624, "devType": 1, "lastReportWatts": 270, "maxReportWatts": 300 }, { "serialNumber": "202302076392", "lastReportDate": 1694549625, "devType": 1, "lastReportWatts": 271, "maxReportWatts": 301 }, { "serialNumber": "202302077506", "lastReportDate": 1694549561, "devType": 1, "lastReportWatts": 283, "maxReportWatts": 300 }, { "serialNumber": "202302077015", "lastReportDate": 1694549626, "devType": 1, "lastReportWatts": 269, "maxReportWatts": 300 }, { "serialNumber": "202302076838", "lastReportDate": 1694549652, "devType": 1, "lastReportWatts": 266, "maxReportWatts": 300 }, { "serialNumber": "482236040258", "lastReportDate": 1694549627, "devType": 1, "lastReportWatts": 273, "maxReportWatts": 300 }, { "serialNumber": "202302077890", "lastReportDate": 1694549594, "devType": 1, "lastReportWatts": 276, "maxReportWatts": 300 }, { "serialNumber": "202302074252", "lastReportDate": 1694549653, "devType": 1, "lastReportWatts": 269, "maxReportWatts": 300 }, { "serialNumber": "202302077415", "lastReportDate": 1694549654, "devType": 1, "lastReportWatts": 266, "maxReportWatts": 300 }, { "serialNumber": "482236040239", "lastReportDate": 1694549628, "devType": 1, "lastReportWatts": 272, "maxReportWatts": 300 }, { "serialNumber": "202302073606", "lastReportDate": 1694549655, "devType": 1, "lastReportWatts": 269, "maxReportWatts": 300 } ] pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300317450ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:30 GMT", "content-type": "application/json", "content-length": "2268", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/api_v1_production_log.json000066400000000000000000000005011505013723300276430ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:30 GMT", "content-type": "application/json", "content-length": "114", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/info000066400000000000000000000041771505013723300233550ustar00rootroot00000000000000 202305058594 800-00647-r10 D7.3.130 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.03.130 91f206 500-00004-r01 01.02.413 9c64cd 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 f9ead3 500-00012-r01 02.02.00 848ead 500-00020-r01 22.10.09 983d9b 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-21:46:51 1687470523 02.00.4240 700-GA pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/info_log.json000066400000000000000000000005751505013723300251640ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:29 GMT", "content-type": "text/xml", "content-length": "2175", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_dry_contacts000066400000000000000000000010531505013723300276340ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_dry_contacts_log.json000066400000000000000000000002661505013723300314520ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:32 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_generator000066400000000000000000000010531505013723300271260ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_generator_log.json000066400000000000000000000002661505013723300307440ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_inventory000066400000000000000000000000031505013723300271670ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_inventory_log.json000066400000000000000000000004331505013723300310070ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:32 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_power000066400000000000000000000010531505013723300262740ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_power_log.json000066400000000000000000000002661505013723300301120ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:32 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_secctrl000066400000000000000000000010531505013723300265770ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_secctrl_log.json000066400000000000000000000002661505013723300304150ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:32 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_status000066400000000000000000000010531505013723300264630ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_status_log.json000066400000000000000000000002661505013723300303010ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:32 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_meters000066400000000000000000000007131505013723300245670ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "disabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_meters_log.json000066400000000000000000000004351505013723300264010ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-length": "458", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_meters_readings000066400000000000000000000112461505013723300264460ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1694549733, "actEnergyDlvd": 4545929.530, "actEnergyRcvd": 0.637, "apparentEnergy": 5375938.331, "reactEnergyLagg": 730001.916, "reactEnergyLead": 16050.589, "instantaneousDemand": 3624.573, "activePower": 3624.573, "apparentPower": 3675.535, "reactivePower": 25.544, "pwrFactor": 0.988, "voltage": 241.696, "current": 30.223, "freq": 60.000, "channels": [ { "eid": 1778385169, "timestamp": 1694549733, "actEnergyDlvd": 2271793.630, "actEnergyRcvd": 0.300, "apparentEnergy": 2685521.244, "reactEnergyLagg": 365648.234, "reactEnergyLead": 7490.926, "instantaneousDemand": 1810.773, "activePower": 1810.773, "apparentPower": 1836.021, "reactivePower": 13.171, "pwrFactor": 0.988, "voltage": 120.749, "current": 15.110, "freq": 60.000 }, { "eid": 1778385170, "timestamp": 1694549733, "actEnergyDlvd": 2274135.900, "actEnergyRcvd": 0.337, "apparentEnergy": 2690417.087, "reactEnergyLagg": 364353.682, "reactEnergyLead": 8559.662, "instantaneousDemand": 1813.800, "activePower": 1813.800, "apparentPower": 1839.514, "reactivePower": 12.373, "pwrFactor": 0.988, "voltage": 120.946, "current": 15.113, "freq": 60.000 }, { "eid": 1778385171, "timestamp": 1694549733, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.000 } ] }, { "eid": 704643584, "timestamp": 1694549733, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.021, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 34.651, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 241.718, "current": 0.287, "freq": 60.000, "channels": [ { "eid": 1778385425, "timestamp": 1694549733, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.009, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 15.201, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 120.773, "current": 0.126, "freq": 60.000 }, { "eid": 1778385426, "timestamp": 1694549733, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.012, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 19.450, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 120.945, "current": 0.160, "freq": 60.000 }, { "eid": 1778385427, "timestamp": 1694549733, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_meters_readings_log.json000066400000000000000000000004361505013723300302560ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-length": "4773", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_sc_pvlimit000066400000000000000000000010531505013723300254370ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_sc_pvlimit_log.json000066400000000000000000000002661505013723300272550ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_dry_contact_settings000066400000000000000000000010531505013723300302240ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_dry_contact_settings_log.json000066400000000000000000000002661505013723300320420ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:32 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_config000066400000000000000000000010531505013723300260710ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_config_log.json000066400000000000000000000002661505013723300277070ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_schedule000066400000000000000000000010531505013723300264200ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_schedule_log.json000066400000000000000000000002661505013723300302360ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_pel_settings000066400000000000000000000010531505013723300264730ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/ivp_ss_pel_settings_log.json000066400000000000000000000002661505013723300303110ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:33 GMT", "content-type": "text/html", "content-length": "555", "connection": "keep-alive"}, "code": 401} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/production000066400000000000000000000026341505013723300246040ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":15,"readingTime":1694549655,"wNow":4085,"whLifetime":943236},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1694549732,"wNow":3731.248,"whLifetime":4545927.529,"varhLeadLifetime":16050.589,"varhLagLifetime":730001.903,"vahLifetime":5375936.301,"rmsCurrent":31.056,"rmsVoltage":241.728,"reactPwr":28.835,"apprntPwr":3779.803,"pwrFactor":0.99,"whToday":14849.529,"whLastSevenDays":186011.529,"vahToday":17700.301,"varhLeadToday":14.589,"varhLagToday":2831.903}],"consumption":[{"type":"eim","activeCount":0,"measurementType":"total-consumption","readingTime":1694549732,"wNow":3731.248,"whLifetime":4545910.343,"varhLeadLifetime":16050.589,"varhLagLifetime":730001.903,"vahLifetime":0.021,"rmsCurrent":31.345,"rmsVoltage":241.767,"reactPwr":-27.926,"apprntPwr":7578.065,"pwrFactor":0.49,"whToday":4545910.343,"whLastSevenDays":4545910.343,"vahToday":0.021,"varhLeadToday":16050.589,"varhLagToday":730001.903},{"type":"eim","activeCount":0,"measurementType":"net-consumption","readingTime":1694549732,"wNow":0.0,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.021,"rmsCurrent":0.289,"rmsVoltage":241.805,"reactPwr":0.909,"apprntPwr":34.907,"pwrFactor":0.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/production.json000066400000000000000000000026301505013723300255500ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":15,"readingTime":1694549655,"wNow":4085,"whLifetime":943236},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1694549731,"wNow":3780.646,"whLifetime":4545926.403,"varhLeadLifetime":16050.589,"varhLagLifetime":730001.895,"vahLifetime":5375935.161,"rmsCurrent":31.541,"rmsVoltage":241.801,"reactPwr":30.203,"apprntPwr":3826.518,"pwrFactor":0.99,"whToday":14848.403,"whLastSevenDays":186010.403,"vahToday":17699.161,"varhLeadToday":14.589,"varhLagToday":2831.895}],"consumption":[{"type":"eim","activeCount":0,"measurementType":"total-consumption","readingTime":1694549731,"wNow":3780.646,"whLifetime":4545909.217,"varhLeadLifetime":16050.589,"varhLagLifetime":730001.895,"vahLifetime":0.021,"rmsCurrent":31.831,"rmsVoltage":241.85,"reactPwr":-29.295,"apprntPwr":7698.231,"pwrFactor":0.49,"whToday":4545909.217,"whLastSevenDays":4545909.217,"vahToday":0.021,"varhLeadToday":16050.589,"varhLagToday":730001.895},{"type":"eim","activeCount":0,"measurementType":"net-consumption","readingTime":1694549731,"wNow":0.0,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.021,"rmsCurrent":0.29,"rmsVoltage":241.9,"reactPwr":0.909,"apprntPwr":35.041,"pwrFactor":0.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/production.json_log.json000066400000000000000000000006131505013723300273600ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:31 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.130_no_consumption/production_log.json000066400000000000000000000006131505013723300264100ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 20:15:32 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/000077500000000000000000000000001505013723300235555ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/admin_lib_tariff000066400000000000000000000033221505013723300267510ustar00rootroot00000000000000{"tariff":{"currency":{"code":"EUR"},"logger":"mylogger","date":"1688053811","storage_settings":{"mode":"self-consumption","operation_mode_sub_type":"","reserved_soc":0.0,"very_low_soc":5,"charge_from_grid":false,"date":"1688053811"},"single_rate":{"rate":0.01,"sell":0.0},"seasons":[{"id":"all_year_long","start":"1/1","days":[{"id":"all_days","days":"Mon,Tue,Wed,Thu,Fri,Sat,Sun","must_charge_start":0,"must_charge_duration":0,"must_charge_mode":"CG","enable_discharge_to_grid":false,"periods":[{"id":"period_1","start":480,"rate":0.14},{"id":"filler","start":1320,"rate":0.01}]}],"tiers":[]}],"seasons_sell":[]},"schedule":{"source":"Tariff","date":"2023-06-29 15:50:12 UTC","version":"00.00.02","reserved_soc":0.0,"operation_mode_sub_type":"","very_low_soc":5,"charge_from_grid":false,"battery_mode":"self-consumption","schedule":{"Disable":[{"Sun":[{"start":0,"duration":1440,"setting":"ID"}]},{"Mon":[{"start":0,"duration":1440,"setting":"ID"}]},{"Tue":[{"start":0,"duration":1440,"setting":"ID"}]},{"Wed":[{"start":0,"duration":1440,"setting":"ID"}]},{"Thu":[{"start":0,"duration":1440,"setting":"ID"}]},{"Fri":[{"start":0,"duration":1440,"setting":"ID"}]},{"Sat":[{"start":0,"duration":1440,"setting":"ID"}]}],"tariff":[{"start":"1/1","end":"1/1","Sun":[{"start":0,"duration":1440,"setting":"ZN"}],"Mon":[{"start":0,"duration":1440,"setting":"ZN"}],"Tue":[{"start":0,"duration":1440,"setting":"ZN"}],"Wed":[{"start":0,"duration":1440,"setting":"ZN"}],"Thu":[{"start":0,"duration":1440,"setting":"ZN"}],"Fri":[{"start":0,"duration":1440,"setting":"ZN"}],"Sat":[{"start":0,"duration":1440,"setting":"ZN"}]}]},"override":false,"override_backup_soc":30.0,"override_chg_dischg_rate":0.0,"override_tou_mode":"StorageTouMode_DEFAULT_TOU_MODE"}} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/admin_lib_tariff_log.json000066400000000000000000000006131505013723300305620ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/api_v1_production000066400000000000000000000001421505013723300271220ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 0, "wattsNow": 689 } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/api_v1_production_inverters000066400000000000000000000020421505013723300312240ustar00rootroot00000000000000[ { "serialNumber": "121823030072", "lastReportDate": 1693745036, "devType": 1, "lastReportWatts": 58, "maxReportWatts": 253 }, { "serialNumber": "121823035149", "lastReportDate": 1693745066, "devType": 1, "lastReportWatts": 56, "maxReportWatts": 254 }, { "serialNumber": "482243031579", "lastReportDate": 1693744825, "devType": 1, "lastReportWatts": 135, "maxReportWatts": 365 }, { "serialNumber": "482243032888", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 365 }, { "serialNumber": "482250079070", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 130, "maxReportWatts": 365 }, { "serialNumber": "482243033444", "lastReportDate": 1693744829, "devType": 1, "lastReportWatts": 127, "maxReportWatts": 365 }, { "serialNumber": "482243032889", "lastReportDate": 1693744946, "devType": 1, "lastReportWatts": 112, "maxReportWatts": 365 } ] pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300330340ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "application/json", "content-length": "1058", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/api_v1_production_log.json000066400000000000000000000005011505013723300307320ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "application/json", "content-length": "112", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/info000066400000000000000000000041771505013723300244440ustar00rootroot00000000000000 122238082763 800-00654-r08 D7.3.466 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.175 f79c8d 500-00005-r01 01.02.371 373aab 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 40061a 500-00020-r01 21.19.82 667fd7 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/info_log.json000066400000000000000000000005751505013723300262530ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "text/xml", "content-length": "2175", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300307230ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300325370ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_generator000066400000000000000000000002771505013723300302240ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300320310ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_inventory000066400000000000000000000000031505013723300302560ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_inventory_log.json000066400000000000000000000004331505013723300320760ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_power000066400000000000000000000000271505013723300273630ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_power_log.json000066400000000000000000000004341505013723300311760ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "22", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_secctrl000066400000000000000000000013301505013723300276640ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300315020ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "727", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_status000066400000000000000000000045621505013723300275620ustar00rootroot00000000000000{ "inventory": { "serial_nums": {} }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 6254765, "api_ecagtGetDeviceCount": 6321456, "api_ecagtGetDeviceInfo": 6281617, "api_ecagtSetSecCtrlBias": 564094, "api_ecagtGetSecCtrlBias": 38, "api_ecagtGetSecCtrlBiasQ": 38, "api_ecagtGetRelayState": 7505737, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 19, "api_ecagtGetGridFreq": 1250953, "api_ecagtGetGridVolt": 1250953, "api_ecagtGetGridFreq_err_notfound": 1250953, "rest_StatusGet": 20, "rest_InventoryGet": 26915, "rest_SubmodGet": 11141, "rest_SecCtrlGet": 19, "rest_CommCheckGet": 26851, "rest_Power": 1, "ext_zb_send_msg": 564094, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 564094, "zmq_ecaHello": 1, "zmq_streamdata": 1250953, "zmq_eca_live_debug_req": 4, "zmq_ecaSecCtrlMsg": 564094, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "backupSocLimitSet": 564094, "backupSocLimitChanged": 2, "api_ecagtGetGenRelayState": 1250953 }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 0, "der2_state": 0, "Enchg_grid_mode": "grid-tied", "Solar_grid_mode": "unknown" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300313670ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "2417", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters000066400000000000000000000007471505013723300256650ustar00rootroot00000000000000[ { "eid": 704643328, "state": "disabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "check-wiring", "statusFlags": ["negative-production"] }, { "eid": 704643584, "state": "disabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters_log.json000066400000000000000000000004351505013723300274700ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters_readings000066400000000000000000000113541505013723300275350ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000, "channels": [ { "eid": 1778385169, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000 }, { "eid": 1778385170, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 5370.790, "apparentEnergy": 295.364, "reactEnergyLagg": 387.143, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 6.124, "current": 0.000, "freq": 50.000 }, { "eid": 1778385171, "timestamp": 1693745133, "actEnergyDlvd": 0.022, "actEnergyRcvd": 9818.109, "apparentEnergy": 14032.684, "reactEnergyLagg": 391.775, "reactEnergyLead": 2.189, "instantaneousDemand": -1.044, "activePower": -1.044, "apparentPower": 2.602, "reactivePower": -0.000, "pwrFactor": -1.000, "voltage": 11.469, "current": 0.227, "freq": 50.000 } ] }, { "eid": 704643584, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000, "channels": [ { "eid": 1778385425, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000 }, { "eid": 1778385426, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 8279.267, "apparentEnergy": 141.429, "reactEnergyLagg": 378.426, "reactEnergyLead": 0.181, "instantaneousDemand": -0.000, "activePower": -0.000, "apparentPower": -0.000, "reactivePower": 0.000, "pwrFactor": -1.000, "voltage": 2.981, "current": 0.000, "freq": 50.000 }, { "eid": 1778385427, "timestamp": 1693745133, "actEnergyDlvd": 0.013, "actEnergyRcvd": 13980.174, "apparentEnergy": 6016.263, "reactEnergyLagg": 380.215, "reactEnergyLead": 1.245, "instantaneousDemand": -0.451, "activePower": -0.451, "apparentPower": 1.128, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 4.635, "current": 0.242, "freq": 50.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters_readings_log.json000066400000000000000000000004361505013723300313450ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "4843", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_sc_pvlimit000066400000000000000000000000611505013723300265240ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300303410ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300313240ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300331300ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_config000066400000000000000000000000031505013723300271520ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300307720ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_schedule000066400000000000000000000000031505013723300275010ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300313210ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_pel_settings000066400000000000000000000000251505013723300275600ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_pel_settings_log.json000066400000000000000000000004341505013723300313750ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "20", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/production000066400000000000000000000047321505013723300256740ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 7, "readingTime": 1693745066, "wNow": 751, "whLifetime": 702919 }, { "type": "eim", "activeCount": 0, "measurementType": "production", "readingTime": 1693745131, "wNow": 487.903, "whLifetime": 3183793.452, "varhLeadLifetime": 0.021, "varhLagLifetime": 591593.906, "vahLifetime": 3576166.933, "rmsCurrent": 2.165, "rmsVoltage": 235.525, "reactPwr": 114.857, "apprntPwr": 509.895, "pwrFactor": 0.97, "whToday": 4425.452, "whLastSevenDays": 111093.452, "vahToday": 5461.933, "varhLeadToday": 0.021, "varhLagToday": 1483.906 } ], "consumption": [ { "type": "eim", "activeCount": 0, "measurementType": "total-consumption", "readingTime": 1693745131, "wNow": 473.765, "whLifetime": 5145153.764, "varhLeadLifetime": 3174026.62, "varhLagLifetime": -591342.021, "vahLifetime": 7252190.208, "rmsCurrent": -0.607, "rmsVoltage": 235.49, "reactPwr": -457.841, "apprntPwr": -142.942, "pwrFactor": 1, "whToday": 19903.764, "whLastSevenDays": 4.764, "vahToday": 22904.208, "varhLeadToday": 9602.62, "varhLagToday": 0 }, { "type": "eim", "activeCount": 0, "measurementType": "net-consumption", "readingTime": 1693745131, "wNow": -14.138, "whLifetime": 1961512.78, "varhLeadLifetime": 3174026.64, "varhLagLifetime": 251.885, "vahLifetime": 7252190.208, "rmsCurrent": -2.772, "rmsVoltage": 235.49, "reactPwr": -572.698, "apprntPwr": -652.719, "pwrFactor": -1, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/production.json000066400000000000000000000047461505013723300266510ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 7, "readingTime": 1693745066, "wNow": 751, "whLifetime": 702919 }, { "type": "eim", "activeCount": 0, "measurementType": "production", "readingTime": 1693745129, "wNow": 488.154, "whLifetime": 3183793.303, "varhLeadLifetime": 0.021, "varhLagLifetime": 591593.872, "vahLifetime": 3576166.777, "rmsCurrent": 2.162, "rmsVoltage": 235.777, "reactPwr": 115.849, "apprntPwr": 509.902, "pwrFactor": 0.97, "whToday": 4425.303, "whLastSevenDays": 111093.303, "vahToday": 5461.777, "varhLeadToday": 0.021, "varhLagToday": 1483.872 } ], "consumption": [ { "type": "eim", "activeCount": 0, "measurementType": "total-consumption", "readingTime": 1693745129, "wNow": 476.686, "whLifetime": 5145153.621, "varhLeadLifetime": 3174026.446, "varhLagLifetime": -591341.987, "vahLifetime": 7252190.009, "rmsCurrent": -0.615, "rmsVoltage": 235.743, "reactPwr": -456.848, "apprntPwr": -144.999, "pwrFactor": 1.0, "whToday": 19903.621, "whLastSevenDays": 4.621, "vahToday": 22904.009, "varhLeadToday": 9602.446, "varhLagToday": 0.0 }, { "type": "eim", "activeCount": 0, "measurementType": "net-consumption", "readingTime": 1693745129, "wNow": -11.468, "whLifetime": 1961512.786, "varhLeadLifetime": 3174026.466, "varhLagLifetime": 251.885, "vahLifetime": 7252190.009, "rmsCurrent": -2.778, "rmsVoltage": 235.743, "reactPwr": -572.697, "apprntPwr": -654.785, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/production.json_log.json000066400000000000000000000006131505013723300304470ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:29 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_metered_disabled_cts/production_log.json000066400000000000000000000006131505013723300274770ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/000077500000000000000000000000001505013723300225175ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/_readme000066400000000000000000000014141505013723300240360ustar00rootroot000000000000007.3.466_with_cts_3phase UPDATE1: /production.json endpoint only provides phase details when passing parameter details=1 so /production file has phases removed while /production.json file has them included. ORIGINAL: Somewhere between fw 7.3.466 and 7.6.175 /production endpoint stopped reporting phase data for Envoy metered with CT and multi-phase (Split or Three). The (original) test fixture 7.6.175_with_cts_3phase includeded a /production endpoint file with phases included. This fixture set is build from a debug log for a 7.3.466 FW with elements from the original 7.6.175 added. Verified from a 7.3.466 debug log: - api_v1_production - api_v1_production_inverters - ivp_ensemble_inventory - ivp_meters_readings - ivp_meters_reports - production - production.json pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/admin_lib_tariff000066400000000000000000000131621505013723300257160ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "EUR" }, "logger": "mylogger", "date": "1688053811", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "", "reserved_soc": 0, "very_low_soc": 5, "charge_from_grid": false, "date": "1688053811" }, "single_rate": { "rate": 0.01, "sell": 0 }, "seasons": [ { "id": "all_year_long", "start": "1/1", "days": [ { "id": "all_days", "days": "Mon,Tue,Wed,Thu,Fri,Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CG", "enable_discharge_to_grid": false, "periods": [ { "id": "period_1", "start": 480, "rate": 0.14 }, { "id": "filler", "start": 1320, "rate": 0.01 } ] } ], "tiers": [] } ], "seasons_sell": [] }, "schedule": { "source": "Tariff", "date": "2023-06-29 15:50:12 UTC", "version": "00.00.02", "reserved_soc": 0, "operation_mode_sub_type": "", "very_low_soc": 5, "charge_from_grid": false, "battery_mode": "self-consumption", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "1/1", "end": "1/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "ZN" } ] } ] }, "override": false, "override_backup_soc": 30, "override_chg_dischg_rate": 0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE" } } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/api_v1_production000066400000000000000000000001601505013723300260640ustar00rootroot00000000000000{ "wattHoursToday": 4374, "wattHoursSevenDays": 111089, "wattHoursLifetime": 3183742, "wattsNow": 689 } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/api_v1_production_inverters000066400000000000000000000020421505013723300301660ustar00rootroot00000000000000[ { "serialNumber": "121212121201", "lastReportDate": 1693745036, "devType": 1, "lastReportWatts": 58, "maxReportWatts": 253 }, { "serialNumber": "121212121202", "lastReportDate": 1693745066, "devType": 1, "lastReportWatts": 56, "maxReportWatts": 254 }, { "serialNumber": "121212121203", "lastReportDate": 1693744825, "devType": 1, "lastReportWatts": 135, "maxReportWatts": 365 }, { "serialNumber": "121212121204", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 365 }, { "serialNumber": "121212121205", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 130, "maxReportWatts": 365 }, { "serialNumber": "121212121206", "lastReportDate": 1693744829, "devType": 1, "lastReportWatts": 127, "maxReportWatts": 365 }, { "serialNumber": "121212121207", "lastReportDate": 1693744946, "devType": 1, "lastReportWatts": 112, "maxReportWatts": 365 } ] pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/info000066400000000000000000000041771505013723300234060ustar00rootroot00000000000000 123456789012 800-00654-r08 D7.3.466 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.175 f79c8d 500-00005-r01 01.02.371 373aab 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 40061a 500-00020-r01 21.19.82 667fd7 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300276650ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_generator000066400000000000000000000002771505013723300271660ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_inventory000066400000000000000000000000031505013723300272200ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_power000066400000000000000000000000271505013723300263250ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_secctrl000066400000000000000000000013301505013723300266260ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_status000066400000000000000000000045621505013723300265240ustar00rootroot00000000000000{ "inventory": { "serial_nums": {} }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 6254765, "api_ecagtGetDeviceCount": 6321456, "api_ecagtGetDeviceInfo": 6281617, "api_ecagtSetSecCtrlBias": 564094, "api_ecagtGetSecCtrlBias": 38, "api_ecagtGetSecCtrlBiasQ": 38, "api_ecagtGetRelayState": 7505737, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 19, "api_ecagtGetGridFreq": 1250953, "api_ecagtGetGridVolt": 1250953, "api_ecagtGetGridFreq_err_notfound": 1250953, "rest_StatusGet": 20, "rest_InventoryGet": 26915, "rest_SubmodGet": 11141, "rest_SecCtrlGet": 19, "rest_CommCheckGet": 26851, "rest_Power": 1, "ext_zb_send_msg": 564094, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 564094, "zmq_ecaHello": 1, "zmq_streamdata": 1250953, "zmq_eca_live_debug_req": 4, "zmq_ecaSecCtrlMsg": 564094, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "backupSocLimitSet": 564094, "backupSocLimitChanged": 2, "api_ecagtGetGenRelayState": 1250953 }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 0, "der2_state": 0, "Enchg_grid_mode": "grid-tied", "Solar_grid_mode": "unknown" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_meters000066400000000000000000000007121505013723300246170ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_meters_readings000066400000000000000000000113541505013723300264770ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000, "channels": [ { "eid": 1778385169, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000 }, { "eid": 1778385170, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 5370.790, "apparentEnergy": 295.364, "reactEnergyLagg": 387.143, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 6.124, "current": 0.000, "freq": 50.000 }, { "eid": 1778385171, "timestamp": 1693745133, "actEnergyDlvd": 0.022, "actEnergyRcvd": 9818.109, "apparentEnergy": 14032.684, "reactEnergyLagg": 391.775, "reactEnergyLead": 2.189, "instantaneousDemand": -1.044, "activePower": -1.044, "apparentPower": 2.602, "reactivePower": -0.000, "pwrFactor": -1.000, "voltage": 11.469, "current": 0.227, "freq": 50.000 } ] }, { "eid": 704643584, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000, "channels": [ { "eid": 1778385425, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000 }, { "eid": 1778385426, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 8279.267, "apparentEnergy": 141.429, "reactEnergyLagg": 378.426, "reactEnergyLead": 0.181, "instantaneousDemand": -0.000, "activePower": -0.000, "apparentPower": -0.000, "reactivePower": 0.000, "pwrFactor": -1.000, "voltage": 2.981, "current": 0.000, "freq": 50.000 }, { "eid": 1778385427, "timestamp": 1693745133, "actEnergyDlvd": 0.013, "actEnergyRcvd": 13980.174, "apparentEnergy": 6016.263, "reactEnergyLagg": 380.215, "reactEnergyLead": 1.245, "instantaneousDemand": -0.451, "activePower": -0.451, "apparentPower": 1.128, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 4.635, "current": 0.242, "freq": 50.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_sc_pvlimit000066400000000000000000000000611505013723300254660ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300302660ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_gen_config000066400000000000000000000000031505013723300261140ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_gen_schedule000066400000000000000000000000031505013723300264430ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_pel_settings000066400000000000000000000000251505013723300265220ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/production000066400000000000000000000046571505013723300246440ustar00rootroot00000000000000{ "production": [{ "type": "inverters", "activeCount": 7, "readingTime": 0, "wNow": 0, "whLifetime": 4339764 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1693433002, "wNow": -6.481, "whLifetime": 4351113.2, "varhLeadLifetime": 0.005, "varhLagLifetime": 1264880.372, "vahLifetime": 5559527.987, "rmsCurrent": 0.658, "rmsVoltage": 712.588, "reactPwr": 84.546, "apprntPwr": 156.055, "pwrFactor": 0.0, "whToday": 5113.2, "whLastSevenDays": 69492.2, "vahToday": 8296.987, "varhLeadToday": 0.005, "varhLagToday": 2727.372 } ], "consumption": [{ "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1693433002, "wNow": 209.084, "whLifetime": 4074795.368, "varhLeadLifetime": 3936400.269, "varhLagLifetime": 1341552.434, "vahLifetime": 8735086.195, "rmsCurrent": 2.708, "rmsVoltage": 712.725, "reactPwr": -464.776, "apprntPwr": 1929.904, "pwrFactor": 0.11, "whToday": 12423.368, "whLastSevenDays": 68784.368, "vahToday": 18948.195, "varhLeadToday": 8224.269, "varhLagToday": 2802.434 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1693433002, "wNow": 215.565, "whLifetime": 2886562.459, "varhLeadLifetime": 3936400.264, "varhLagLifetime": 76672.062, "vahLifetime": 8735086.195, "rmsCurrent": 2.05, "rmsVoltage": 712.862, "reactPwr": -380.23, "apprntPwr": 487.922, "pwrFactor": 0.46, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [{ "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.466_with_cts_3phase/production.json000066400000000000000000000206341505013723300256050ustar00rootroot00000000000000{ "production": [{ "type": "inverters", "activeCount": 7, "readingTime": 0, "wNow": 0, "whLifetime": 4339764 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1693433002, "wNow": -6.481, "whLifetime": 4351113.2, "varhLeadLifetime": 0.005, "varhLagLifetime": 1264880.372, "vahLifetime": 5559527.987, "rmsCurrent": 0.658, "rmsVoltage": 712.588, "reactPwr": 84.546, "apprntPwr": 156.055, "pwrFactor": 0.0, "whToday": 5113.2, "whLastSevenDays": 69492.2, "vahToday": 8296.987, "varhLeadToday": 0.005, "varhLagToday": 2727.372, "lines": [{ "wNow": -2.864, "whLifetime": 1869678.394, "varhLeadLifetime": 0.002, "varhLagLifetime": 539695.061, "vahLifetime": 2377390.886, "rmsCurrent": 0.286, "rmsVoltage": 236.766, "reactPwr": 50.856, "apprntPwr": 67.699, "pwrFactor": 0.0, "whToday": 2200.394, "whLastSevenDays": 29891.394, "vahToday": 3576.886, "varhLeadToday": 0.002, "varhLagToday": 1163.061 }, { "wNow": 0.0, "whLifetime": 1241245.645, "varhLeadLifetime": 0.001, "varhLagLifetime": 366839.383, "vahLifetime": 1241038.844, "rmsCurrent": -0.0, "rmsVoltage": 237.918, "reactPwr": 0.0, "apprntPwr": -0.0, "pwrFactor": 0.0, "whToday": 1454.645, "whLastSevenDays": 19793.645, "vahToday": 1528.844, "varhLeadToday": 0.001, "varhLagToday": 792.383 }, { "wNow": -3.617, "whLifetime": 1240189.161, "varhLeadLifetime": 0.002, "varhLagLifetime": 358345.928, "vahLifetime": 1941098.256, "rmsCurrent": 0.372, "rmsVoltage": 237.904, "reactPwr": 33.69, "apprntPwr": 88.355, "pwrFactor": 0.0, "whToday": 1458.161, "whLastSevenDays": 19807.161, "vahToday": 3191.256, "varhLeadToday": 0.002, "varhLagToday": 771.928 } ] } ], "consumption": [{ "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1693433002, "wNow": 209.084, "whLifetime": 4074795.368, "varhLeadLifetime": 3936400.269, "varhLagLifetime": 1341552.434, "vahLifetime": 8735086.195, "rmsCurrent": 2.708, "rmsVoltage": 712.725, "reactPwr": -464.776, "apprntPwr": 1929.904, "pwrFactor": 0.11, "whToday": 12423.368, "whLastSevenDays": 68784.368, "vahToday": 18948.195, "varhLeadToday": 8224.269, "varhLagToday": 2802.434, "lines": [{ "wNow": 88.573, "whLifetime": 2293782.928, "varhLeadLifetime": 2114284.979, "varhLagLifetime": 578414.935, "vahLifetime": 4268391.905, "rmsCurrent": 1.295, "rmsVoltage": 236.836, "reactPwr": -257.565, "apprntPwr": 306.73, "pwrFactor": 0.29, "whToday": 8584.928, "whLastSevenDays": 39391.928, "vahToday": 10866.905, "varhLeadToday": 4108.979, "varhLagToday": 1188.935 }, { "wNow": 123.364, "whLifetime": 948057.969, "varhLeadLifetime": 1059082.625, "varhLagLifetime": 383807.966, "vahLifetime": 2331874.944, "rmsCurrent": 0.861, "rmsVoltage": 237.934, "reactPwr": -132.184, "apprntPwr": 204.919, "pwrFactor": 0.6, "whToday": 2154.969, "whLastSevenDays": 18948.969, "vahToday": 4293.944, "varhLeadToday": 2783.625, "varhLagToday": 815.966 }, { "wNow": -2.853, "whLifetime": 832954.471, "varhLeadLifetime": 763032.665, "varhLagLifetime": 379329.532, "vahLifetime": 2134819.346, "rmsCurrent": 0.551, "rmsVoltage": 237.956, "reactPwr": -75.026, "apprntPwr": 131.213, "pwrFactor": -0.02, "whToday": 1683.471, "whLastSevenDays": 10443.471, "vahToday": 3787.346, "varhLeadToday": 1331.665, "varhLagToday": 797.532 } ] }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1693433002, "wNow": 215.565, "whLifetime": 2886562.459, "varhLeadLifetime": 3936400.264, "varhLagLifetime": 76672.062, "vahLifetime": 8735086.195, "rmsCurrent": 2.05, "rmsVoltage": 712.862, "reactPwr": -380.23, "apprntPwr": 487.922, "pwrFactor": 0.46, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0, "lines": [{ "wNow": 91.437, "whLifetime": 1625201.414, "varhLeadLifetime": 2114284.977, "varhLagLifetime": 38719.874, "vahLifetime": 4268391.905, "rmsCurrent": 1.009, "rmsVoltage": 236.905, "reactPwr": -206.71, "apprntPwr": 238.691, "pwrFactor": 0.41, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 123.364, "whLifetime": 629892.171, "varhLeadLifetime": 1059082.624, "varhLagLifetime": 16968.583, "vahLifetime": 2331874.944, "rmsCurrent": 0.861, "rmsVoltage": 237.949, "reactPwr": -132.184, "apprntPwr": 206.35, "pwrFactor": 0.61, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 0.764, "whLifetime": 631468.875, "varhLeadLifetime": 763032.663, "varhLagLifetime": 20983.605, "vahLifetime": 2134819.346, "rmsCurrent": 0.179, "rmsVoltage": 238.007, "reactPwr": -41.336, "apprntPwr": 42.881, "pwrFactor": 0.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ] } ], "storage": [{ "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517/000077500000000000000000000000001505013723300173455ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.3.517/admin_lib_tariff000066400000000000000000000112001505013723300225330ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "USD" }, "logger": "mylogger", "date": "1692471808", "storage_settings": { "mode": "backup", "operation_mode_sub_type": "", "reserved_soc": 100.0, "very_low_soc": 10, "charge_from_grid": true, "date": "1692471808" }, "single_rate": { "rate": 0.0, "sell": 0.0 }, "seasons": [], "seasons_sell": [] }, "schedule": { "source": "Tariff", "date": "2023-08-19 19:04:23 UTC", "version": "00.00.02", "reserved_soc": 100.0, "operation_mode_sub_type": "", "very_low_soc": 10, "charge_from_grid": true, "battery_mode": "backup", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "1/1", "end": "1/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "CG" } ] } ] }, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE" } } pyenphase-2.3.1/tests/fixtures/7.3.517/admin_lib_tariff_log.json000066400000000000000000000006131505013723300243520ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/api_v1_production000066400000000000000000000001631505013723300227150ustar00rootroot00000000000000{ "wattHoursToday": 17645, "wattHoursSevenDays": 217726, "wattHoursLifetime": 19229325, "wattsNow": 5326 } pyenphase-2.3.1/tests/fixtures/7.3.517/api_v1_production_inverters000066400000000000000000000063751505013723300250310ustar00rootroot00000000000000[ { "serialNumber": "202043003473", "lastReportDate": 1692817928, "devType": 1, "lastReportWatts": 209, "maxReportWatts": 243 }, { "serialNumber": "202043003484", "lastReportDate": 1692817869, "devType": 1, "lastReportWatts": 213, "maxReportWatts": 244 }, { "serialNumber": "202043002877", "lastReportDate": 1692817778, "devType": 1, "lastReportWatts": 197, "maxReportWatts": 244 }, { "serialNumber": "202043003803", "lastReportDate": 1692817808, "devType": 1, "lastReportWatts": 210, "maxReportWatts": 244 }, { "serialNumber": "202043001781", "lastReportDate": 1692817838, "devType": 1, "lastReportWatts": 218, "maxReportWatts": 245 }, { "serialNumber": "202043003467", "lastReportDate": 1692817748, "devType": 1, "lastReportWatts": 186, "maxReportWatts": 245 }, { "serialNumber": "202043001326", "lastReportDate": 1692817929, "devType": 1, "lastReportWatts": 205, "maxReportWatts": 244 }, { "serialNumber": "202042085758", "lastReportDate": 1692817781, "devType": 1, "lastReportWatts": 198, "maxReportWatts": 243 }, { "serialNumber": "202106021181", "lastReportDate": 1692817958, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 243 }, { "serialNumber": "202043002733", "lastReportDate": 1692817871, "devType": 1, "lastReportWatts": 212, "maxReportWatts": 244 }, { "serialNumber": "202043002762", "lastReportDate": 1692817752, "devType": 1, "lastReportWatts": 186, "maxReportWatts": 244 }, { "serialNumber": "202106049949", "lastReportDate": 1692817841, "devType": 1, "lastReportWatts": 220, "maxReportWatts": 244 }, { "serialNumber": "202043002943", "lastReportDate": 1692817753, "devType": 1, "lastReportWatts": 187, "maxReportWatts": 242 }, { "serialNumber": "202043001340", "lastReportDate": 1692817840, "devType": 1, "lastReportWatts": 220, "maxReportWatts": 245 }, { "serialNumber": "202043002628", "lastReportDate": 1692817754, "devType": 1, "lastReportWatts": 188, "maxReportWatts": 245 }, { "serialNumber": "202106046737", "lastReportDate": 1692817754, "devType": 1, "lastReportWatts": 187, "maxReportWatts": 244 }, { "serialNumber": "202043003256", "lastReportDate": 1692817841, "devType": 1, "lastReportWatts": 218, "maxReportWatts": 245 }, { "serialNumber": "202106046579", "lastReportDate": 1692817965, "devType": 1, "lastReportWatts": 201, "maxReportWatts": 244 }, { "serialNumber": "202042084581", "lastReportDate": 1692817988, "devType": 1, "lastReportWatts": 199, "maxReportWatts": 245 }, { "serialNumber": "202043003454", "lastReportDate": 1692817816, "devType": 1, "lastReportWatts": 211, "maxReportWatts": 243 }, { "serialNumber": "202043003123", "lastReportDate": 1692817816, "devType": 1, "lastReportWatts": 209, "maxReportWatts": 245 }, { "serialNumber": "202043002631", "lastReportDate": 1692817819, "devType": 1, "lastReportWatts": 212, "maxReportWatts": 243 } ] pyenphase-2.3.1/tests/fixtures/7.3.517/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300266240ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:34 GMT", "content-type": "application/json", "content-length": "3325", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/api_v1_production_log.json000066400000000000000000000005011505013723300245220ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:34 GMT", "content-type": "application/json", "content-length": "115", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/info000066400000000000000000000041771505013723300202340ustar00rootroot00000000000000 122027033238 800-00555-r03 D7.3.517 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 b62bb8 590-00018-r01 02.00.01 426697 500-00002-r01 07.03.517 a5b17f 500-00004-r01 01.02.419 afbd20 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 480872 500-00012-r01 02.02.00 020101 500-00016-r01 02.00.00 54a6dc 500-00020-r01 22.13.09 ab8b4a 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Mar-28-23-21:17:00 1680038329 02.00.3983 700-GA pyenphase-2.3.1/tests/fixtures/7.3.517/info_log.json000066400000000000000000000005751505013723300220430ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:34 GMT", "content-type": "text/xml", "content-length": "2175", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_dry_contacts000066400000000000000000000005231505013723300245140ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300263270ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "338", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_generator000066400000000000000000000002771505013723300240140ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300256210ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:21:56 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_inventory000066400000000000000000000107751505013723300240670ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "830-00703-r67", "installed": 1692651649, "serial_num": "122035013273", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817971, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1692651649, "img_load_date": 1692651649, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 28, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "led_status": 14, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 }, { "part_num": "830-00703-r67", "installed": 1692651650, "serial_num": "122035013278", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817716, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1692651650, "img_load_date": 1692651650, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 29, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "led_status": 14, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 }, { "part_num": "830-00703-r67", "installed": 1692779890, "serial_num": "122035013286", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817944, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1692779890, "img_load_date": 1692779890, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 29, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "led_status": 14, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "860-00276-r28", "installed": 1692651723, "serial_num": "122029016399", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817873, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1692651723, "img_load_date": 1692651723, "img_pnum_running": "1.5.5229_rel/22.13", "zigbee_dongle_fw_version": "100B", "operating": true, "communicating": true, "temperature": 88, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 15664, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300256710ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "4604", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_power000066400000000000000000000007541505013723300231620ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "122035013273", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 100 }, { "serial_num": "122035013278", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 100 }, { "serial_num": "122035013286", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 100 } ] } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_power_log.json000066400000000000000000000004351505013723300247670ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "491", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_secctrl000066400000000000000000000013671505013723300234660ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -1.3200000524520875, "voltage_bias_v": -16.0, "freq_bias_hz_q8": -2123, "voltage_bias_v_q5": -512, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 100, "Max_energy": 10080, "ENC_agg_soc": 100, "ENC_agg_backup_energy": 10080, "ENC_agg_avail_energy": 10080, "Enc_commissioned_capacity": 10080, "Enc_max_available_capacity": 10080, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300252720ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:36 GMT", "content-length": "758", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_status000066400000000000000000000463421505013723300233540ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122029016399": { "device_type": 17, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "msg_retry_count": 2, "part_number": "860-00276-r28", "assembly_number": "880-00981-r28", "app_fw_version": "1.5.5229_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 1, "submodules": { "122028018664": { "device_type": 18, "admin_state": 1, "part_number": "800-01306-r06", "assembly_number": "880-01306-r06", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "1.5.5229_rel/22.13" } } } }, "122035013273": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 0, "part_number": "830-00703-r67", "assembly_number": "890-00020-r42", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122033028286": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122033028845": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } }, "122034045036": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034045262": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034054826": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034054904": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } } } }, "122035013278": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 0, "part_number": "830-00703-r67", "assembly_number": "890-00020-r42", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122033028671": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122033028972": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } }, "122034044640": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034045408": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055224": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055397": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } } } }, "122035013286": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 0, "part_number": "830-00703-r67", "assembly_number": "890-00020-r42", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122033028343": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122033028869": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } }, "122034044651": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034045492": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055464": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055475": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } } } } } }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 598589, "api_ecagtDeviceInsert": 6, "api_ecagtDeviceNetworkStatus": 33251, "api_ecagtGetDeviceCount": 609035, "api_ecagtGetDeviceInfo": 608323, "api_ecagtGetOneDeviceInfo": 1710, "api_ecagtDevIdToSerial": 52526, "api_ecagtHandleMsg": 51808, "api_ecagtGetSubmoduleInv": 16524, "api_ecagtGetDataModelRaw": 47195, "api_ecagtSetSecCtrlBias": 55128, "api_ecagtGetSecCtrlBias": 978, "api_ecagtGetSecCtrlBiasQ": 978, "api_ecagtGetRelayState": 1203323, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 428, "api_ecagtGetGridFreq": 598589, "api_ecagtGetGridVolt": 598589, "api_ecagtGetGridFreq_err_oor": 312, "rest_StatusGet": 429, "rest_InventoryGet": 3019, "rest_SubmodGet": 3524, "rest_SecCtrlGet": 550, "rest_RelayGet": 2520, "rest_CommCheckGet": 2520, "rest_Power": 1772, "ext_zb_send_msg": 76593, "ext_cfg_save_device": 6, "ext_cfg_save_device_err": 6, "ext_send_perf_data": 33804, "ext_event_set_stateful": 210, "ext_event_set_modgone": 16, "rxmsg_OBJ_MDL_META_RSP": 5, "rxmsg_OBJ_MDL_INV_UPD_RSP": 440, "rxmsg_OBJ_MDL_POLL_RSP": 45551, "rxmsg_OBJ_MDL_RELAY_CTRL_RSP": 3, "rxmsg_OBJ_MDL_RELAY_STATUS_REQ": 5513, "rxmsg_OBJ_MDL_GRID_STATUS_RSP": 7, "rxmsg_OBJ_MDL_EVENTS_MSG": 147, "rxmsg_OBJ_MDL_SOC_CONFIG_RSP": 7, "rxmsg_OBJ_MDL_ERROR_DRY_CTRL_RSP": 16, "rxmsg_OBJ_MDL_ERROR_DRY_STATUS_RSP": 96, "txmsg_OBJ_MDL_META_REQ": 5, "txmsg_OBJ_MDL_ENP_RT_POLL_REQ": 12718, "txmsg_OBJ_MDL_BMU_POLL_REQ": 1493, "txmsg_OBJ_MDL_PCU_POLL_REQ": 1495, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 55098, "txmsg_OBJ_MDL_RELAY_CTRL_REQ": 3, "txmsg_OBJ_MDL_GRID_STATUS_REQ": 7, "txmsg_OBJ_MDL_RELAY_STATUS_RSP": 5500, "txmsg_OBJ_MDL_EVENTS_ACK": 147, "txmsg_OBJ_MDL_SOC_CONFIG_REQ": 7, "txmsg_OBJ_MDL_TNS_START": 8, "rxmsg_OBJ_MDL_TNS_START_RSP": 9, "txmsg_OBJ_MDL_SET_UDMIR": 8, "rxmsg_OBJ_MDL_SET_UDMIR_RSP": 6, "txmsg_OBJ_MDL_TNS_END": 8, "rxmsg_OBJ_MDL_TNS_END_RSP": 8, "zmq_ecaHello": 1, "zmq_ecaDevInfo": 9, "zmq_ecaNetworkStatus": 33251, "zmq_ecaAppMsg": 51814, "zmq_streamdata": 598589, "zmq_nameplate": 5, "zmq_ecaSecCtrlMsg": 55128, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "devPollMissing": 5243, "gridProfileTransaction": 16, "secctrlNotReady": 30, "profile_txn_ack": 8, "dry_contact_txn_retry_failure": 4, "dry_contact_txn_ack": 16, "backupSocLimitSet": 56208, "backupSocLimitChanged": 2, "api_ecagtGetGenRelayState": 598589 }, "secctrl": { "shutdown": false, "freq_bias_hz": -1.3200000524520875, "voltage_bias_v": -16.0, "freq_bias_hz_q8": -2123, "voltage_bias_v_q5": -512, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 100, "Max_energy": 10080, "ENC_agg_soc": 100, "ENC_agg_backup_energy": 10080, "ENC_agg_avail_energy": 10080, "Enc_commissioned_capacity": 10080, "Enc_max_available_capacity": 10080, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 1, "der2_state": 0, "Enchg_grid_mode": "multimode-ongrid", "Solar_grid_mode": "multimode-ongrid" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ensemble_status_log.json000066400000000000000000000004371505013723300251600ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "19681", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_sc_pvlimit000066400000000000000000000000611505013723300223140ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300241310ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_dry_contact_settings000066400000000000000000000043421505013723300251070ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "LOAD", "grid_action": "apply", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 1.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "NC1 Test", "mode": "manual", "soc_low": 25.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "LOAD", "grid_action": "apply", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 2.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "NC2", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "LOAD", "grid_action": "shed", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 3.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "No1", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "LOAD", "grid_action": "shed", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 4.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "NO2", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300267200ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:36 GMT", "content-length": "2273", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_gen_config000066400000000000000000000000031505013723300227420ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300245620ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_gen_schedule000066400000000000000000000000031505013723300232710ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300251110ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_pel_settings000066400000000000000000000004621505013723300233550ustar00rootroot00000000000000{ "PEL": false, "Hard_PEL": false, "Soft_PEL": false, "Export_Limit_Type": "Aggregate", "percent": false, "apparent": false, "PEL_Limit": 0.0, "Comm_Time_Loss": 0.0, "Resp_Time_SoftPEL": 0.0, "Resp_Time_HardPEL": 0.0, "msReset_HardPEL": 0.0, "PEL_db": 0.0 } pyenphase-2.3.1/tests/fixtures/7.3.517/ivp_ss_pel_settings_log.json000066400000000000000000000004351505013723300251660ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "305", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/production000066400000000000000000000047721505013723300214700ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 22, "readingTime": 1692817988, "wNow": 4490, "whLifetime": 183353 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1692818015, "wNow": 4300.164, "whLifetime": 19230314.735, "varhLeadLifetime": 0.446, "varhLagLifetime": 9375571.84, "vahLifetime": 25459516.463, "rmsCurrent": 34.896, "rmsVoltage": 243.325, "reactPwr": 404.183, "apprntPwr": 4377.722, "pwrFactor": 0.99, "whToday": 18634.735, "whLastSevenDays": 218715.735, "vahToday": 22750.463, "varhLeadToday": 0.446, "varhLagToday": 6529.84 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1692818015, "wNow": 3802.98, "whLifetime": 27629800.274, "varhLeadLifetime": 13182910.902, "varhLagLifetime": -9185383.822, "vahLifetime": 35703441.771, "rmsCurrent": 24.973, "rmsVoltage": 243.174, "reactPwr": 119.982, "apprntPwr": 3036.232, "pwrFactor": 1.0, "whToday": 24293.274, "whLastSevenDays": 853.274, "vahToday": 20422.771, "varhLeadToday": 8438.902, "varhLagToday": 0.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1692818015, "wNow": -497.185, "whLifetime": 8436418.786, "varhLeadLifetime": 13182911.347, "varhLagLifetime": 190188.018, "vahLifetime": 35703441.771, "rmsCurrent": -9.923, "rmsVoltage": 243.174, "reactPwr": -284.201, "apprntPwr": -1206.704, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517/production.json000066400000000000000000000047751505013723300224430ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 22, "readingTime": 1692817988, "wNow": 4490, "whLifetime": 183353 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1692818014, "wNow": 4556.139, "whLifetime": 19230313.461, "varhLeadLifetime": 0.446, "varhLagLifetime": 9375571.716, "vahLifetime": 25459515.173, "rmsCurrent": 36.856, "rmsVoltage": 243.341, "reactPwr": 407.762, "apprntPwr": 4646.052, "pwrFactor": 0.98, "whToday": 18633.461, "whLastSevenDays": 218714.461, "vahToday": 22749.173, "varhLeadToday": 0.446, "varhLagToday": 6529.716 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1692818014, "wNow": 3791.075, "whLifetime": 27629799.104, "varhLeadLifetime": 13182910.813, "varhLagLifetime": -9185383.698, "vahLifetime": 35703441.404, "rmsCurrent": 25.982, "rmsVoltage": 243.198, "reactPwr": 120.73, "apprntPwr": 3159.183, "pwrFactor": 1.0, "whToday": 24292.104, "whLastSevenDays": 852.104, "vahToday": 20422.404, "varhLeadToday": 8438.813, "varhLagToday": 0.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1692818014, "wNow": -765.064, "whLifetime": 8436418.891, "varhLeadLifetime": 13182911.259, "varhLagLifetime": 190188.018, "vahLifetime": 35703441.404, "rmsCurrent": -10.874, "rmsVoltage": 243.198, "reactPwr": -287.032, "apprntPwr": -1322.483, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517/production.json_log.json000066400000000000000000000006131505013723300242370ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517/production_log.json000066400000000000000000000006131505013723300232670ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/000077500000000000000000000000001505013723300234275ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/admin_lib_tariff000066400000000000000000000112061505013723300266230ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "USD" }, "logger": "mylogger", "date": "1692471808", "storage_settings": { "mode": "savings-mode", "operation_mode_sub_type": "", "reserved_soc": 100.0, "very_low_soc": 10, "charge_from_grid": true, "date": "1692471808" }, "single_rate": { "rate": 0.0, "sell": 0.0 }, "seasons": [], "seasons_sell": [] }, "schedule": { "source": "Tariff", "date": "2023-08-19 19:04:23 UTC", "version": "00.00.02", "reserved_soc": 100.0, "operation_mode_sub_type": "", "very_low_soc": 10, "charge_from_grid": true, "battery_mode": "backup", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "1/1", "end": "1/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "CG" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "CG" } ] } ] }, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE" } } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/admin_lib_tariff_log.json000066400000000000000000000006131505013723300304340ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/api_v1_production000066400000000000000000000001631505013723300267770ustar00rootroot00000000000000{ "wattHoursToday": 17645, "wattHoursSevenDays": 217726, "wattHoursLifetime": 19229325, "wattsNow": 5326 } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/api_v1_production_inverters000066400000000000000000000063751505013723300311130ustar00rootroot00000000000000[ { "serialNumber": "202043003473", "lastReportDate": 1692817928, "devType": 1, "lastReportWatts": 209, "maxReportWatts": 243 }, { "serialNumber": "202043003484", "lastReportDate": 1692817869, "devType": 1, "lastReportWatts": 213, "maxReportWatts": 244 }, { "serialNumber": "202043002877", "lastReportDate": 1692817778, "devType": 1, "lastReportWatts": 197, "maxReportWatts": 244 }, { "serialNumber": "202043003803", "lastReportDate": 1692817808, "devType": 1, "lastReportWatts": 210, "maxReportWatts": 244 }, { "serialNumber": "202043001781", "lastReportDate": 1692817838, "devType": 1, "lastReportWatts": 218, "maxReportWatts": 245 }, { "serialNumber": "202043003467", "lastReportDate": 1692817748, "devType": 1, "lastReportWatts": 186, "maxReportWatts": 245 }, { "serialNumber": "202043001326", "lastReportDate": 1692817929, "devType": 1, "lastReportWatts": 205, "maxReportWatts": 244 }, { "serialNumber": "202042085758", "lastReportDate": 1692817781, "devType": 1, "lastReportWatts": 198, "maxReportWatts": 243 }, { "serialNumber": "202106021181", "lastReportDate": 1692817958, "devType": 1, "lastReportWatts": 204, "maxReportWatts": 243 }, { "serialNumber": "202043002733", "lastReportDate": 1692817871, "devType": 1, "lastReportWatts": 212, "maxReportWatts": 244 }, { "serialNumber": "202043002762", "lastReportDate": 1692817752, "devType": 1, "lastReportWatts": 186, "maxReportWatts": 244 }, { "serialNumber": "202106049949", "lastReportDate": 1692817841, "devType": 1, "lastReportWatts": 220, "maxReportWatts": 244 }, { "serialNumber": "202043002943", "lastReportDate": 1692817753, "devType": 1, "lastReportWatts": 187, "maxReportWatts": 242 }, { "serialNumber": "202043001340", "lastReportDate": 1692817840, "devType": 1, "lastReportWatts": 220, "maxReportWatts": 245 }, { "serialNumber": "202043002628", "lastReportDate": 1692817754, "devType": 1, "lastReportWatts": 188, "maxReportWatts": 245 }, { "serialNumber": "202106046737", "lastReportDate": 1692817754, "devType": 1, "lastReportWatts": 187, "maxReportWatts": 244 }, { "serialNumber": "202043003256", "lastReportDate": 1692817841, "devType": 1, "lastReportWatts": 218, "maxReportWatts": 245 }, { "serialNumber": "202106046579", "lastReportDate": 1692817965, "devType": 1, "lastReportWatts": 201, "maxReportWatts": 244 }, { "serialNumber": "202042084581", "lastReportDate": 1692817988, "devType": 1, "lastReportWatts": 199, "maxReportWatts": 245 }, { "serialNumber": "202043003454", "lastReportDate": 1692817816, "devType": 1, "lastReportWatts": 211, "maxReportWatts": 243 }, { "serialNumber": "202043003123", "lastReportDate": 1692817816, "devType": 1, "lastReportWatts": 209, "maxReportWatts": 245 }, { "serialNumber": "202043002631", "lastReportDate": 1692817819, "devType": 1, "lastReportWatts": 212, "maxReportWatts": 243 } ] pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300327060ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:34 GMT", "content-type": "application/json", "content-length": "3325", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/api_v1_production_log.json000066400000000000000000000005011505013723300306040ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:34 GMT", "content-type": "application/json", "content-length": "115", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/info000066400000000000000000000041771505013723300243160ustar00rootroot00000000000000 122027033238 800-00555-r03 D7.3.517 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 b62bb8 590-00018-r01 02.00.01 426697 500-00002-r01 07.03.517 a5b17f 500-00004-r01 01.02.419 afbd20 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 480872 500-00012-r01 02.02.00 020101 500-00016-r01 02.00.00 54a6dc 500-00020-r01 22.13.09 ab8b4a 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Mar-28-23-21:17:00 1680038329 02.00.3983 700-GA pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/info_log.json000066400000000000000000000005751505013723300261250ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:34 GMT", "content-type": "text/xml", "content-length": "2175", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_dry_contacts000066400000000000000000000005231505013723300305760ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300324110ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "338", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_generator000066400000000000000000000002771505013723300300760ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300317030ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:21:56 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_inventory000066400000000000000000000107751505013723300301510ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "830-00703-r67", "installed": 1692651649, "serial_num": "122035013273", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817971, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1692651649, "img_load_date": 1692651649, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 28, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "led_status": 14, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 }, { "part_num": "830-00703-r67", "installed": 1692651650, "serial_num": "122035013278", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817716, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1692651650, "img_load_date": 1692651650, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 29, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "led_status": 14, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 }, { "part_num": "830-00703-r67", "installed": 1692779890, "serial_num": "122035013286", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817944, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1692779890, "img_load_date": 1692779890, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 29, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "led_status": 14, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "860-00276-r28", "installed": 1692651723, "serial_num": "122029016399", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692817873, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1692651723, "img_load_date": 1692651723, "img_pnum_running": "1.5.5229_rel/22.13", "zigbee_dongle_fw_version": "100B", "operating": true, "communicating": true, "temperature": 88, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 15664, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300317530ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "4604", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_power000066400000000000000000000007541505013723300272440ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "122035013273", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 100 }, { "serial_num": "122035013278", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 100 }, { "serial_num": "122035013286", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 100 } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_power_log.json000066400000000000000000000004351505013723300310510ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "491", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_secctrl000066400000000000000000000013671505013723300275500ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -1.3200000524520875, "voltage_bias_v": -16.0, "freq_bias_hz_q8": -2123, "voltage_bias_v_q5": -512, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 100, "Max_energy": 10080, "ENC_agg_soc": 100, "ENC_agg_backup_energy": 10080, "ENC_agg_avail_energy": 10080, "Enc_commissioned_capacity": 10080, "Enc_max_available_capacity": 10080, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300313540ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:36 GMT", "content-length": "758", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_status000066400000000000000000000463421505013723300274360ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122029016399": { "device_type": 17, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "msg_retry_count": 2, "part_number": "860-00276-r28", "assembly_number": "880-00981-r28", "app_fw_version": "1.5.5229_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 1, "submodules": { "122028018664": { "device_type": 18, "admin_state": 1, "part_number": "800-01306-r06", "assembly_number": "880-01306-r06", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "1.5.5229_rel/22.13" } } } }, "122035013273": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 0, "part_number": "830-00703-r67", "assembly_number": "890-00020-r42", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122033028286": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122033028845": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } }, "122034045036": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034045262": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034054826": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034054904": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } } } }, "122035013278": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 0, "part_number": "830-00703-r67", "assembly_number": "890-00020-r42", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122033028671": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122033028972": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } }, "122034044640": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034045408": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055224": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055397": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } } } }, "122035013286": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 0, "part_number": "830-00703-r67", "assembly_number": "890-00020-r42", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122033028343": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122033028869": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } }, "122034044651": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034045492": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055464": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122034055475": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } } } } } }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 598589, "api_ecagtDeviceInsert": 6, "api_ecagtDeviceNetworkStatus": 33251, "api_ecagtGetDeviceCount": 609035, "api_ecagtGetDeviceInfo": 608323, "api_ecagtGetOneDeviceInfo": 1710, "api_ecagtDevIdToSerial": 52526, "api_ecagtHandleMsg": 51808, "api_ecagtGetSubmoduleInv": 16524, "api_ecagtGetDataModelRaw": 47195, "api_ecagtSetSecCtrlBias": 55128, "api_ecagtGetSecCtrlBias": 978, "api_ecagtGetSecCtrlBiasQ": 978, "api_ecagtGetRelayState": 1203323, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 428, "api_ecagtGetGridFreq": 598589, "api_ecagtGetGridVolt": 598589, "api_ecagtGetGridFreq_err_oor": 312, "rest_StatusGet": 429, "rest_InventoryGet": 3019, "rest_SubmodGet": 3524, "rest_SecCtrlGet": 550, "rest_RelayGet": 2520, "rest_CommCheckGet": 2520, "rest_Power": 1772, "ext_zb_send_msg": 76593, "ext_cfg_save_device": 6, "ext_cfg_save_device_err": 6, "ext_send_perf_data": 33804, "ext_event_set_stateful": 210, "ext_event_set_modgone": 16, "rxmsg_OBJ_MDL_META_RSP": 5, "rxmsg_OBJ_MDL_INV_UPD_RSP": 440, "rxmsg_OBJ_MDL_POLL_RSP": 45551, "rxmsg_OBJ_MDL_RELAY_CTRL_RSP": 3, "rxmsg_OBJ_MDL_RELAY_STATUS_REQ": 5513, "rxmsg_OBJ_MDL_GRID_STATUS_RSP": 7, "rxmsg_OBJ_MDL_EVENTS_MSG": 147, "rxmsg_OBJ_MDL_SOC_CONFIG_RSP": 7, "rxmsg_OBJ_MDL_ERROR_DRY_CTRL_RSP": 16, "rxmsg_OBJ_MDL_ERROR_DRY_STATUS_RSP": 96, "txmsg_OBJ_MDL_META_REQ": 5, "txmsg_OBJ_MDL_ENP_RT_POLL_REQ": 12718, "txmsg_OBJ_MDL_BMU_POLL_REQ": 1493, "txmsg_OBJ_MDL_PCU_POLL_REQ": 1495, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 55098, "txmsg_OBJ_MDL_RELAY_CTRL_REQ": 3, "txmsg_OBJ_MDL_GRID_STATUS_REQ": 7, "txmsg_OBJ_MDL_RELAY_STATUS_RSP": 5500, "txmsg_OBJ_MDL_EVENTS_ACK": 147, "txmsg_OBJ_MDL_SOC_CONFIG_REQ": 7, "txmsg_OBJ_MDL_TNS_START": 8, "rxmsg_OBJ_MDL_TNS_START_RSP": 9, "txmsg_OBJ_MDL_SET_UDMIR": 8, "rxmsg_OBJ_MDL_SET_UDMIR_RSP": 6, "txmsg_OBJ_MDL_TNS_END": 8, "rxmsg_OBJ_MDL_TNS_END_RSP": 8, "zmq_ecaHello": 1, "zmq_ecaDevInfo": 9, "zmq_ecaNetworkStatus": 33251, "zmq_ecaAppMsg": 51814, "zmq_streamdata": 598589, "zmq_nameplate": 5, "zmq_ecaSecCtrlMsg": 55128, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "devPollMissing": 5243, "gridProfileTransaction": 16, "secctrlNotReady": 30, "profile_txn_ack": 8, "dry_contact_txn_retry_failure": 4, "dry_contact_txn_ack": 16, "backupSocLimitSet": 56208, "backupSocLimitChanged": 2, "api_ecagtGetGenRelayState": 598589 }, "secctrl": { "shutdown": false, "freq_bias_hz": -1.3200000524520875, "voltage_bias_v": -16.0, "freq_bias_hz_q8": -2123, "voltage_bias_v_q5": -512, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 100, "Max_energy": 10080, "ENC_agg_soc": 100, "ENC_agg_backup_energy": 10080, "ENC_agg_avail_energy": 10080, "Enc_commissioned_capacity": 10080, "Enc_max_available_capacity": 10080, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 1, "der2_state": 0, "Enchg_grid_mode": "multimode-ongrid", "Solar_grid_mode": "multimode-ongrid" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_status_log.json000066400000000000000000000004371505013723300312420ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-length": "19681", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_sc_pvlimit000066400000000000000000000000611505013723300263760ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300302130ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_dry_contact_settings000066400000000000000000000043421505013723300311710ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "LOAD", "grid_action": "apply", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 1.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "NC1 Test", "mode": "manual", "soc_low": 25.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "LOAD", "grid_action": "apply", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 2.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "NC2", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "LOAD", "grid_action": "shed", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 3.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "No1", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "LOAD", "grid_action": "shed", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 4.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "NO2", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300330020ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:36 GMT", "content-length": "2273", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_config000066400000000000000000000000031505013723300270240ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300306440ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_schedule000066400000000000000000000000031505013723300273530ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300311730ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_pel_settings000066400000000000000000000004621505013723300274370ustar00rootroot00000000000000{ "PEL": false, "Hard_PEL": false, "Soft_PEL": false, "Export_Limit_Type": "Aggregate", "percent": false, "apparent": false, "PEL_Limit": 0.0, "Comm_Time_Loss": 0.0, "Resp_Time_SoftPEL": 0.0, "Resp_Time_HardPEL": 0.0, "msReset_HardPEL": 0.0, "PEL_db": 0.0 } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_pel_settings_log.json000066400000000000000000000004351505013723300312500ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:37 GMT", "content-length": "305", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/production000066400000000000000000000047721505013723300255520ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 22, "readingTime": 1692817988, "wNow": 4490, "whLifetime": 183353 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1692818015, "wNow": 4300.164, "whLifetime": 19230314.735, "varhLeadLifetime": 0.446, "varhLagLifetime": 9375571.84, "vahLifetime": 25459516.463, "rmsCurrent": 34.896, "rmsVoltage": 243.325, "reactPwr": 404.183, "apprntPwr": 4377.722, "pwrFactor": 0.99, "whToday": 18634.735, "whLastSevenDays": 218715.735, "vahToday": 22750.463, "varhLeadToday": 0.446, "varhLagToday": 6529.84 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1692818015, "wNow": 3802.98, "whLifetime": 27629800.274, "varhLeadLifetime": 13182910.902, "varhLagLifetime": -9185383.822, "vahLifetime": 35703441.771, "rmsCurrent": 24.973, "rmsVoltage": 243.174, "reactPwr": 119.982, "apprntPwr": 3036.232, "pwrFactor": 1.0, "whToday": 24293.274, "whLastSevenDays": 853.274, "vahToday": 20422.771, "varhLeadToday": 8438.902, "varhLagToday": 0.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1692818015, "wNow": -497.185, "whLifetime": 8436418.786, "varhLeadLifetime": 13182911.347, "varhLagLifetime": 190188.018, "vahLifetime": 35703441.771, "rmsCurrent": -9.923, "rmsVoltage": 243.174, "reactPwr": -284.201, "apprntPwr": -1206.704, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/production.json000066400000000000000000000047751505013723300265250ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 22, "readingTime": 1692817988, "wNow": 4490, "whLifetime": 183353 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1692818014, "wNow": 4556.139, "whLifetime": 19230313.461, "varhLeadLifetime": 0.446, "varhLagLifetime": 9375571.716, "vahLifetime": 25459515.173, "rmsCurrent": 36.856, "rmsVoltage": 243.341, "reactPwr": 407.762, "apprntPwr": 4646.052, "pwrFactor": 0.98, "whToday": 18633.461, "whLastSevenDays": 218714.461, "vahToday": 22749.173, "varhLeadToday": 0.446, "varhLagToday": 6529.716 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1692818014, "wNow": 3791.075, "whLifetime": 27629799.104, "varhLeadLifetime": 13182910.813, "varhLagLifetime": -9185383.698, "vahLifetime": 35703441.404, "rmsCurrent": 25.982, "rmsVoltage": 243.198, "reactPwr": 120.73, "apprntPwr": 3159.183, "pwrFactor": 1.0, "whToday": 24292.104, "whLastSevenDays": 852.104, "vahToday": 20422.404, "varhLeadToday": 8438.813, "varhLagToday": 0.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1692818014, "wNow": -765.064, "whLifetime": 8436418.891, "varhLeadLifetime": 13182911.259, "varhLagLifetime": 190188.018, "vahLifetime": 35703441.404, "rmsCurrent": -10.874, "rmsVoltage": 243.198, "reactPwr": -287.032, "apprntPwr": -1322.483, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/production.json_log.json000066400000000000000000000006131505013723300303210ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_legacy_savings_mode/production_log.json000066400000000000000000000006131505013723300273510ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 23 Aug 2023 19:13:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/000077500000000000000000000000001505013723300211725ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/admin_lib_tariff000066400000000000000000000324561505013723300244000ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "USD" }, "logger": "mylogger", "date": "1693461802", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "", "reserved_soc": 20.0, "very_low_soc": 10, "charge_from_grid": false, "date": "1693461802" }, "single_rate": { "rate": 0.183109, "sell": 0.183109 }, "seasons": [ { "id": "summer", "start": "6/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.183109 }, { "id": "period_1", "start": 1020, "rate": 0.24488 }, { "id": "filler", "start": 1200, "rate": 0.183109 } ] }, { "id": "weekend", "days": "Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "enable_discharge_to_grid": false, "periods": [ { "id": "period_1", "start": 0, "rate": 0.183109 }, { "id": "filler", "start": 1439, "rate": 0.0 } ] } ], "tiers": [] }, { "id": "winter", "start": "10/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.185529 }, { "id": "period_1", "start": 1020, "rate": 0.196829 }, { "id": "filler", "start": 1200, "rate": 0.185529 } ] }, { "id": "weekend", "days": "Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "enable_discharge_to_grid": false, "periods": [ { "id": "period_1", "start": 0, "rate": 0.185529 }, { "id": "filler", "start": 1439, "rate": 0.0 } ] } ], "tiers": [] } ], "seasons_sell": [ { "id": "summer", "start": "6/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "periods": [ { "id": "filler", "start": 0, "rate": 0.183109 }, { "id": "period_1", "start": 1020, "rate": 0.24488 }, { "id": "filler", "start": 1200, "rate": 0.183109 } ] }, { "id": "weekend", "days": "Sat,Sun", "periods": [ { "id": "period_1", "start": 0, "rate": 0.183109 }, { "id": "filler", "start": 1439, "rate": 0.0 } ] } ] }, { "id": "winter", "start": "10/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "periods": [ { "id": "filler", "start": 0, "rate": 0.185529 }, { "id": "period_1", "start": 1020, "rate": 0.196829 }, { "id": "filler", "start": 1200, "rate": 0.185529 } ] }, { "id": "weekend", "days": "Sat,Sun", "periods": [ { "id": "period_1", "start": 0, "rate": 0.185529 }, { "id": "filler", "start": 1439, "rate": 0.0 } ] } ] } ] }, "schedule": { "source": "Tariff", "date": "2023-08-31 06:04:08 UTC", "version": "00.00.02", "reserved_soc": 20.0, "operation_mode_sub_type": "", "very_low_soc": 10, "charge_from_grid": false, "battery_mode": "self-consumption", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "6/1", "end": "10/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "ZN" } ] }, { "start": "10/1", "end": "6/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "ZN" } ] } ] }, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE" } } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/admin_lib_tariff_log.json000066400000000000000000000006131505013723300261770ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:45 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/api_v1_production000066400000000000000000000001651505013723300245440ustar00rootroot00000000000000{ "wattHoursToday": 11149, "wattHoursSevenDays": 18431000, "wattHoursLifetime": 18442149, "wattsNow": 2683 } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/api_v1_production_inverters000066400000000000000000000036551505013723300266540ustar00rootroot00000000000000[ { "serialNumber": "122004028996", "lastReportDate": 1694553546, "devType": 1, "lastReportWatts": 232, "maxReportWatts": 296 }, { "serialNumber": "122004027913", "lastReportDate": 1694553576, "devType": 1, "lastReportWatts": 230, "maxReportWatts": 296 }, { "serialNumber": "122004028206", "lastReportDate": 1694553697, "devType": 1, "lastReportWatts": 129, "maxReportWatts": 295 }, { "serialNumber": "122004039060", "lastReportDate": 1694553698, "devType": 1, "lastReportWatts": 231, "maxReportWatts": 296 }, { "serialNumber": "122004028288", "lastReportDate": 1694553606, "devType": 1, "lastReportWatts": 263, "maxReportWatts": 296 }, { "serialNumber": "122004028991", "lastReportDate": 1694553699, "devType": 1, "lastReportWatts": 268, "maxReportWatts": 297 }, { "serialNumber": "122004028286", "lastReportDate": 1694553702, "devType": 1, "lastReportWatts": 229, "maxReportWatts": 296 }, { "serialNumber": "122004028091", "lastReportDate": 1694553426, "devType": 1, "lastReportWatts": 13, "maxReportWatts": 296 }, { "serialNumber": "122004032100", "lastReportDate": 1694553549, "devType": 1, "lastReportWatts": 170, "maxReportWatts": 244 }, { "serialNumber": "122004028400", "lastReportDate": 1694553427, "devType": 1, "lastReportWatts": 177, "maxReportWatts": 286 }, { "serialNumber": "122004028989", "lastReportDate": 1694553456, "devType": 1, "lastReportWatts": 266, "maxReportWatts": 296 }, { "serialNumber": "122004031655", "lastReportDate": 1694553607, "devType": 1, "lastReportWatts": 268, "maxReportWatts": 296 }, { "serialNumber": "122004032124", "lastReportDate": 1694553457, "devType": 1, "lastReportWatts": 199, "maxReportWatts": 297 } ] pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300304510ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:41 GMT", "content-type": "application/json", "content-length": "1965", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/api_v1_production_log.json000066400000000000000000000005011505013723300263470ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:41 GMT", "content-type": "application/json", "content-length": "117", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/info000066400000000000000000000041771505013723300220610ustar00rootroot00000000000000 122024013725 800-00555-r03 D7.3.517 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 b62bb8 590-00018-r01 02.00.01 426697 500-00002-r01 07.03.517 a5b17f 500-00004-r01 01.02.419 afbd20 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 480872 500-00012-r01 02.02.00 020101 500-00016-r01 02.00.00 54a6dc 500-00020-r01 22.13.09 ab8b4a 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Mar-28-23-21:17:00 1680038329 02.00.3983 700-GA pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/info_log.json000066400000000000000000000005751505013723300236700ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:41 GMT", "content-type": "text/xml", "content-length": "2175", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300263400ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300301540ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:44 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_generator000066400000000000000000000002771505013723300256410ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300274460ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:46 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_inventory000066400000000000000000000107701505013723300257070ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "830-00703-r64", "installed": 1693554929, "serial_num": "122031000212", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1694553651, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1693554929, "img_load_date": 1693554929, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 96, "temperature": 25, "maxCellTemp": 25, "comm_level_sub_ghz": 3, "comm_level_2_4_ghz": 3, "led_status": 12, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 }, { "part_num": "830-00703-r64", "installed": 1693576648, "serial_num": "122031000215", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1694553547, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1693576648, "img_load_date": 1693576648, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 97, "temperature": 25, "maxCellTemp": 26, "comm_level_sub_ghz": 3, "comm_level_2_4_ghz": 3, "led_status": 12, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 }, { "part_num": "830-00703-r64", "installed": 1694098472, "serial_num": "122031023943", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1694553574, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1694098472, "img_load_date": 1694098472, "img_pnum_running": "2.0.5663_rel/22.13", "zigbee_dongle_fw_version": "100B", "bmu_fw_version": "2.1.27", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 96, "temperature": 25, "maxCellTemp": 26, "comm_level_sub_ghz": 4, "comm_level_2_4_ghz": 4, "led_status": 12, "dc_switch_off": false, "encharge_rev": 1, "encharge_capacity": 3360 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "860-00276-r33", "installed": 1688303357, "serial_num": "122036058363", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1694553566, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1688303357, "img_load_date": 1688303357, "img_pnum_running": "1.5.5229_rel/22.13", "zigbee_dongle_fw_version": "100B", "operating": true, "communicating": true, "temperature": 78, "comm_level_sub_ghz": 2, "comm_level_2_4_ghz": 2, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 304, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300275160ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:44 GMT", "content-length": "4599", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_power000066400000000000000000000010151505013723300247760ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "122031000212", "real_power_mw": -676000, "apparent_power_mva": -676000, "soc": 96 }, { "serial_num": "122031000215", "real_power_mw": -680000, "apparent_power_mva": -680000, "soc": 97 }, { "serial_num": "122031023943", "real_power_mw": -676000, "apparent_power_mva": -676000, "soc": 96 } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_power_log.json000066400000000000000000000004351505013723300266140ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:44 GMT", "content-length": "524", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_secctrl000066400000000000000000000013761505013723300253130ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -0.6863999962806702, "voltage_bias_v": -8.319999694824219, "freq_bias_hz_q8": -1104, "voltage_bias_v_q5": -266, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 20, "adjusted_backup_soc": 20, "agg_soc": 96, "Max_energy": 10080, "ENC_agg_soc": 96, "ENC_agg_backup_energy": 2016, "ENC_agg_avail_energy": 9710, "Enc_commissioned_capacity": 10080, "Enc_max_available_capacity": 10080, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300271170ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:44 GMT", "content-length": "765", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_status000066400000000000000000000471211505013723300251750ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122031000212": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 3, "part_number": "830-00703-r64", "assembly_number": "890-00020-r38", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122029042019": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122029053332": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122029057798": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122029057913": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122029058447": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122030052698": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } } } }, "122031000215": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 1, "part_number": "830-00703-r64", "assembly_number": "890-00020-r38", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122029042177": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122029053372": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122029053640": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122029058477": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122029058689": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122030052697": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } } } }, "122031023943": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": 1, "encharge_revision": 1, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 4, "part_number": "830-00703-r64", "assembly_number": "890-00020-r38", "app_fw_version": "2.0.5663_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.27", "submodule_count": 6, "submodules": { "122031005827": { "device_type": 15, "admin_state": 1, "part_number": "800-01304-r06", "assembly_number": "880-01304-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.5663_rel/22.13" } }, "122031008748": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122031008801": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122031008829": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122031008920": { "device_type": 14, "admin_state": 1, "part_number": "800-01318-r01", "assembly_number": "880-00973-r10", "dmir": { "part_number": "549-00008-r00", "assembly_number": "3.24.4-D40" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.24.1-D40" } }, "122031014312": { "device_type": 16, "admin_state": 1, "part_number": "620-00283-r06", "assembly_number": "800-00283-r06", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.27" } } } }, "122036058363": { "device_type": 17, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "msg_retry_count": 4, "part_number": "860-00276-r33", "assembly_number": "880-00981-r33", "app_fw_version": "1.5.5229_rel/22.13", "zb_fw_version": "100B", "zb_bootloader_vers": "1.8.1", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 1, "submodules": { "122035051385": { "device_type": 18, "admin_state": 1, "part_number": "800-01306-r06", "assembly_number": "880-01306-r06", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "1.5.5229_rel/22.13" } } } } } }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 22579528, "api_ecagtDeviceInsert": 13, "api_ecagtDeviceNetworkStatus": 1249353, "api_ecagtGetDeviceCount": 22683300, "api_ecagtGetDeviceInfo": 22657104, "api_ecagtGetOneDeviceInfo": 64475, "api_ecagtDevIdToSerial": 1955692, "api_ecagtHandleMsg": 1929493, "api_ecagtGetSubmoduleInv": 245248, "api_ecagtGetDataModelRaw": 1106007, "api_ecagtSetSecCtrlBias": 2071262, "api_ecagtGetSecCtrlBias": 32297, "api_ecagtGetSecCtrlBiasQ": 32297, "api_ecagtGetRelayState": 45197926, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 16119, "api_ecagtGetGridFreq": 22579528, "api_ecagtGetGridVolt": 22579528, "api_ecagtGetGridFreq_err_oor": 11041, "rest_StatusGet": 16120, "rest_InventoryGet": 16190, "rest_SubmodGet": 38643, "rest_SecCtrlGet": 16178, "rest_RelayGet": 12, "rest_CommCheckGet": 12, "rest_Power": 64535, "ext_zb_send_msg": 2875502, "ext_cfg_save_device": 13, "ext_cfg_save_device_err": 13, "ext_send_perf_data": 1271522, "ext_notify_grid_outage": 2, "ext_event_set_stateful": 975, "ext_event_set_modgone": 66, "rxmsg_OBJ_MDL_META_RSP": 13, "rxmsg_OBJ_MDL_INV_UPD_RSP": 2038, "rxmsg_OBJ_MDL_POLL_RSP": 1718856, "rxmsg_OBJ_MDL_RELAY_CTRL_RSP": 9, "rxmsg_OBJ_MDL_RELAY_STATUS_REQ": 207725, "rxmsg_OBJ_MDL_GRID_STATUS_RSP": 29, "rxmsg_OBJ_MDL_EVENTS_MSG": 541, "rxmsg_OBJ_MDL_SOC_CONFIG_RSP": 46, "rxmsg_OBJ_MDL_ERROR_DRY_CTRL_RSP": 2, "rxmsg_OBJ_MDL_ERROR_DRY_STATUS_RSP": 63, "txmsg_OBJ_MDL_META_REQ": 19, "txmsg_OBJ_MDL_ENC_RT_POLL_REQ": 41, "txmsg_OBJ_MDL_ENP_RT_POLL_REQ": 482830, "txmsg_OBJ_MDL_BMU_POLL_REQ": 56390, "txmsg_OBJ_MDL_PCU_POLL_REQ": 56392, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 2071242, "txmsg_OBJ_MDL_RELAY_CTRL_REQ": 12, "txmsg_OBJ_MDL_GRID_STATUS_REQ": 35, "txmsg_OBJ_MDL_RELAY_STATUS_RSP": 207718, "txmsg_OBJ_MDL_EVENTS_ACK": 541, "txmsg_OBJ_MDL_SOC_CONFIG_REQ": 46, "txmsg_OBJ_MDL_TNS_START": 16, "rxmsg_OBJ_MDL_TNS_START_RSP": 16, "txmsg_OBJ_MDL_SET_UDMIR": 6, "rxmsg_OBJ_MDL_SET_UDMIR_RSP": 7, "txmsg_OBJ_MDL_TNS_END": 17, "rxmsg_OBJ_MDL_TNS_END_RSP": 16, "zmq_ecaHello": 1, "zmq_ecaDevInfo": 51, "zmq_ecaNetworkStatus": 1249353, "zmq_ecaAppMsg": 1929496, "zmq_streamdata": 22579528, "zmq_eca_live_debug_req": 24, "zmq_nameplate": 2242, "zmq_ecaSecCtrlMsg": 2071262, "zmq_meterlog_ok": 5, "dmdl_FILES_INDEXED": 3, "devPollMissing": 98517, "devMsgRspMissing": 2, "gridProfileTransaction": 33, "secctrlNotReady": 20, "fsm_retry_timeout": 20, "profile_txn_ack": 16, "dry_contact_txn_retry_failure": 2, "dry_contact_txn_ack": 2, "backupSocLimitSet": 2112082, "backupSocLimitChanged": 8, "api_ecagtGetGenRelayState": 22579528, "rxmsg_OBJ_MDL_SAMPLE_TAPE_RSP": 132, "txmsg_OBJ_MDL_SAMPLE_TAPE_RSP_ACK": 132 }, "secctrl": { "shutdown": false, "freq_bias_hz": -0.6863999962806702, "voltage_bias_v": -8.319999694824219, "freq_bias_hz_q8": -1104, "voltage_bias_v_q5": -266, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 20, "adjusted_backup_soc": 20, "agg_soc": 96, "Max_energy": 10080, "ENC_agg_soc": 96, "ENC_agg_backup_energy": 2016, "ENC_agg_avail_energy": 9710, "Enc_commissioned_capacity": 10080, "Enc_max_available_capacity": 10080, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 1, "der2_state": 0, "Enchg_grid_mode": "multimode-ongrid", "Solar_grid_mode": "multimode-ongrid" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ensemble_status_log.json000066400000000000000000000004371505013723300270050ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:44 GMT", "content-length": "20048", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_meters000066400000000000000000000007121505013723300232720ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_meters_log.json000066400000000000000000000004351505013723300251050ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:46 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_meters_readings000066400000000000000000000114331505013723300251500ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1694553765, "actEnergyDlvd": 18442496.933, "actEnergyRcvd": 0.069, "apparentEnergy": 21988447.961, "reactEnergyLagg": 3641536.995, "reactEnergyLead": 236029.320, "instantaneousDemand": 2659.845, "activePower": 2659.845, "apparentPower": 2661.490, "reactivePower": 16.667, "pwrFactor": 1.000, "voltage": 244.845, "current": 21.736, "freq": 60.000, "channels": [ { "eid": 1778385169, "timestamp": 1694553765, "actEnergyDlvd": 9224604.961, "actEnergyRcvd": 0.018, "apparentEnergy": 10992997.506, "reactEnergyLagg": 1823613.307, "reactEnergyLead": 113311.010, "instantaneousDemand": 1330.866, "activePower": 1330.866, "apparentPower": 1331.981, "reactivePower": 8.891, "pwrFactor": 1.000, "voltage": 122.565, "current": 10.865, "freq": 60.000 }, { "eid": 1778385170, "timestamp": 1694553765, "actEnergyDlvd": 9217891.972, "actEnergyRcvd": 0.051, "apparentEnergy": 10995450.455, "reactEnergyLagg": 1817923.688, "reactEnergyLead": 122718.310, "instantaneousDemand": 1328.979, "activePower": 1328.979, "apparentPower": 1329.509, "reactivePower": 7.776, "pwrFactor": 1.000, "voltage": 122.280, "current": 10.871, "freq": 60.000 }, { "eid": 1778385171, "timestamp": 1694553765, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.000 } ] }, { "eid": 704643584, "timestamp": 1694553765, "actEnergyDlvd": 4873881.221, "actEnergyRcvd": 7554062.483, "apparentEnergy": 18779628.396, "reactEnergyLagg": 499906.036, "reactEnergyLead": 7629596.279, "instantaneousDemand": 23.172, "activePower": 23.172, "apparentPower": 364.999, "reactivePower": -240.223, "pwrFactor": 0.031, "voltage": 245.008, "current": 2.985, "freq": 60.000, "channels": [ { "eid": 1778385425, "timestamp": 1694553765, "actEnergyDlvd": 3374056.076, "actEnergyRcvd": 3340639.336, "apparentEnergy": 9863909.676, "reactEnergyLagg": 50177.337, "reactEnergyLead": 4264141.719, "instantaneousDemand": -17.438, "activePower": -17.438, "apparentPower": 143.478, "reactivePower": -95.235, "pwrFactor": -0.154, "voltage": 122.634, "current": 1.180, "freq": 60.000 }, { "eid": 1778385426, "timestamp": 1694553765, "actEnergyDlvd": 1499825.145, "actEnergyRcvd": 4213423.147, "apparentEnergy": 8915718.719, "reactEnergyLagg": 449728.699, "reactEnergyLead": 3365454.560, "instantaneousDemand": 40.610, "activePower": 40.610, "apparentPower": 221.521, "reactivePower": -144.988, "pwrFactor": 0.150, "voltage": 122.375, "current": 1.806, "freq": 60.000 }, { "eid": 1778385427, "timestamp": 1694553765, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_meters_readings_log.json000066400000000000000000000004361505013723300267620ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:46 GMT", "content-length": "4890", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_sc_pvlimit000066400000000000000000000000611505013723300241410ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300257560ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:46 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300267410ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300305450ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:44 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_gen_config000066400000000000000000000000031505013723300245670ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300264070ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:46 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_gen_schedule000066400000000000000000000000031505013723300251160ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300267360ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:46 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_pel_settings000066400000000000000000000000251505013723300251750ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/ivp_ss_pel_settings_log.json000066400000000000000000000004341505013723300270120ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:46 GMT", "content-length": "20", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/production000066400000000000000000000027041505013723300233060ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":13,"readingTime":1694553761,"wNow":2675,"whLifetime":640883},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1694553764,"wNow":2662.759,"whLifetime":18442495.381,"varhLeadLifetime":236029.32,"varhLagLifetime":3641536.985,"vahLifetime":21988446.409,"rmsCurrent":21.74,"rmsVoltage":245.013,"reactPwr":17.607,"apprntPwr":2663.609,"pwrFactor":1.0,"whToday":11495.381,"whLastSevenDays":18431346.381,"vahToday":13610.409,"varhLeadToday":0.32,"varhLagToday":2248.985}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1694553764,"wNow":2710.147,"whLifetime":15745051.466,"varhLeadLifetime":7393566.818,"varhLagLifetime":-3141630.95,"vahLifetime":18779628.184,"rmsCurrent":22.409,"rmsVoltage":245.123,"reactPwr":-223.281,"apprntPwr":2746.045,"pwrFactor":0.99,"whToday":12902.466,"whLastSevenDays":349.466,"vahToday":7275.184,"varhLeadToday":5177.818,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1694553764,"wNow":47.388,"whLifetime":-2662918.623,"varhLeadLifetime":7629596.139,"varhLagLifetime":499906.036,"vahLifetime":18779628.184,"rmsCurrent":0.669,"rmsVoltage":245.123,"reactPwr":-240.888,"apprntPwr":81.535,"pwrFactor":0.55,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/production.json000066400000000000000000000027051505013723300242570ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":13,"readingTime":1694553761,"wNow":2675,"whLifetime":640883},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1694553763,"wNow":2663.075,"whLifetime":18442494.567,"varhLeadLifetime":236029.32,"varhLagLifetime":3641536.981,"vahLifetime":21988445.596,"rmsCurrent":21.736,"rmsVoltage":245.138,"reactPwr":18.766,"apprntPwr":2664.473,"pwrFactor":1.0,"whToday":11494.567,"whLastSevenDays":18431345.567,"vahToday":13609.596,"varhLeadToday":0.32,"varhLagToday":2248.981}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1694553763,"wNow":2712.776,"whLifetime":15745050.638,"varhLeadLifetime":7393566.746,"varhLagLifetime":-3141630.945,"vahLifetime":18779628.073,"rmsCurrent":22.422,"rmsVoltage":245.187,"reactPwr":-221.854,"apprntPwr":2748.29,"pwrFactor":0.99,"whToday":12901.638,"whLastSevenDays":348.638,"vahToday":7275.073,"varhLeadToday":5177.746,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1694553763,"wNow":49.701,"whLifetime":-2662918.637,"varhLeadLifetime":7629596.066,"varhLagLifetime":499906.036,"vahLifetime":18779628.073,"rmsCurrent":0.686,"rmsVoltage":245.187,"reactPwr":-240.621,"apprntPwr":83.613,"pwrFactor":0.56,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/production.json_log.json000066400000000000000000000006131505013723300260640ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:43 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.3.517_system_2/production_log.json000066400000000000000000000006131505013723300251140ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 12 Sep 2023 21:22:44 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/000077500000000000000000000000001505013723300217755ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/api_v1_production000066400000000000000000000001611505013723300253430ustar00rootroot00000000000000{ "wattHoursToday": 10363, "wattHoursSevenDays": 101742, "wattHoursLifetime": 1544282, "wattsNow": 586 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/api_v1_production_inverters000066400000000000000000000036411505013723300274520ustar00rootroot00000000000000[ { "serialNumber": "482305021663", "lastReportDate": 1691412935, "devType": 1, "lastReportWatts": 48, "maxReportWatts": 329 }, { "serialNumber": "482305022836", "lastReportDate": 1691412935, "devType": 1, "lastReportWatts": 39, "maxReportWatts": 330 }, { "serialNumber": "482305023640", "lastReportDate": 1691412965, "devType": 1, "lastReportWatts": 50, "maxReportWatts": 330 }, { "serialNumber": "482306060958", "lastReportDate": 1691412754, "devType": 1, "lastReportWatts": 47, "maxReportWatts": 330 }, { "serialNumber": "482306074560", "lastReportDate": 1691412755, "devType": 1, "lastReportWatts": 48, "maxReportWatts": 330 }, { "serialNumber": "482306075432", "lastReportDate": 1691412757, "devType": 1, "lastReportWatts": 46, "maxReportWatts": 330 }, { "serialNumber": "482306075729", "lastReportDate": 1691412758, "devType": 1, "lastReportWatts": 48, "maxReportWatts": 330 }, { "serialNumber": "482306076034", "lastReportDate": 1691412759, "devType": 1, "lastReportWatts": 48, "maxReportWatts": 330 }, { "serialNumber": "482306083701", "lastReportDate": 1691412936, "devType": 1, "lastReportWatts": 48, "maxReportWatts": 330 }, { "serialNumber": "482306083705", "lastReportDate": 1691412937, "devType": 1, "lastReportWatts": 33, "maxReportWatts": 329 }, { "serialNumber": "482306083763", "lastReportDate": 1691412760, "devType": 1, "lastReportWatts": 47, "maxReportWatts": 330 }, { "serialNumber": "482306083851", "lastReportDate": 1691412938, "devType": 1, "lastReportWatts": 44, "maxReportWatts": 330 }, { "serialNumber": "482306101590", "lastReportDate": 1691412939, "devType": 1, "lastReportWatts": 40, "maxReportWatts": 330 } ] pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/api_v1_production_inverters_log.json000066400000000000000000000005541505013723300312630ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:01 GMT", "content-type": "application/json", "content-length": "1953", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/api_v1_production_log.json000066400000000000000000000005531505013723300271610ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:01 GMT", "content-type": "application/json", "content-length": "113", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/info000066400000000000000000000040101505013723300226460ustar00rootroot00000000000000 122309122530 800-00656-r06 D7.6.114 4c8675 0 1 false true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.114 43769e 500-00005-r01 01.02.425 4903b9 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 c40e9c 500-00020-r01 22.11.03 ded018 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 ec2-user-envoy_uber-pkg_master:pkg-Feb-03-23-05:45:21 1675403272 02.00.3704 700-GA pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/info_log.json000066400000000000000000000006631505013723300244710ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:01 GMT", "content-type": "text/xml", "content-length": "2056", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300271430ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005031505013723300307530ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:02 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ensemble_inventory000066400000000000000000000000031505013723300264760ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ensemble_inventory_log.json000066400000000000000000000005011505013723300303120ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:02 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ensemble_power000066400000000000000000000000271505013723300256030ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ensemble_power_log.json000066400000000000000000000005021505013723300274120ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:02 GMT", "content-length": "22", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300275440ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005041505013723300313440ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:02 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/production000066400000000000000000000006411505013723300241070ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 13, "readingTime": 1691413056, "wNow": 586, "whLifetime": 351236 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/production.json000066400000000000000000000005071505013723300250600ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 13, "readingTime": 1691413056, "wNow": 586, "whLifetime": 351236 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/production.json_log.json000066400000000000000000000007011505013723300266650ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:02 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.114_without_cts/production_log.json000066400000000000000000000007011505013723300257150ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 12:58:02 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175/000077500000000000000000000000001505013723300173505ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.6.175/api_v1_production000066400000000000000000000001711505013723300227170ustar00rootroot00000000000000{ "wattHoursLifetime" : 8717473, "wattHoursSevenDays" : 107011, "wattHoursToday" : 7883, "wattsNow" : 3391 } pyenphase-2.3.1/tests/fixtures/7.6.175/api_v1_production_inverters000066400000000000000000000042131505013723300250210ustar00rootroot00000000000000[ { "devType" : 1, "lastReportDate" : 1691318583, "lastReportWatts" : 273, "maxReportWatts" : 297, "serialNumber" : "122146078718" }, { "devType" : 1, "lastReportDate" : 1691318584, "lastReportWatts" : 270, "maxReportWatts" : 296, "serialNumber" : "122146075749" }, { "devType" : 1, "lastReportDate" : 1691318612, "lastReportWatts" : 260, "maxReportWatts" : 297, "serialNumber" : "122146076488" }, { "devType" : 1, "lastReportDate" : 1691318643, "lastReportWatts" : 250, "maxReportWatts" : 297, "serialNumber" : "122146076618" }, { "devType" : 1, "lastReportDate" : 1691318462, "lastReportWatts" : 290, "maxReportWatts" : 297, "serialNumber" : "122146076518" }, { "devType" : 1, "lastReportDate" : 1691318523, "lastReportWatts" : 275, "maxReportWatts" : 296, "serialNumber" : "122146076336" }, { "devType" : 1, "lastReportDate" : 1691318704, "lastReportWatts" : 229, "maxReportWatts" : 297, "serialNumber" : "122146076125" }, { "devType" : 1, "lastReportDate" : 1691318672, "lastReportWatts" : 243, "maxReportWatts" : 297, "serialNumber" : "122146076272" }, { "devType" : 1, "lastReportDate" : 1691318556, "lastReportWatts" : 273, "maxReportWatts" : 297, "serialNumber" : "122146076492" }, { "devType" : 1, "lastReportDate" : 1691318613, "lastReportWatts" : 259, "maxReportWatts" : 297, "serialNumber" : "122146076500" }, { "devType" : 1, "lastReportDate" : 1691318494, "lastReportWatts" : 281, "maxReportWatts" : 297, "serialNumber" : "122146076029" }, { "devType" : 1, "lastReportDate" : 1691318673, "lastReportWatts" : 243, "maxReportWatts" : 297, "serialNumber" : "122146078769" }, { "devType" : 1, "lastReportDate" : 1691318674, "lastReportWatts" : 245, "maxReportWatts" : 297, "serialNumber" : "122146076128" } ] pyenphase-2.3.1/tests/fixtures/7.6.175/home000066400000000000000000000027171505013723300202320ustar00rootroot00000000000000{ "software_build_epoch": 1719503966, "timezone": "Europe/Amsterdam", "current_date": "04/24/2025", "current_time": "14:53", "network": { "web_comm": true, "ever_reported_to_enlighten": true, "last_enlighten_report_time": 1745499043, "primary_interface": "eth0", "interfaces": [ { "type": "ethernet", "interface": "eth0", "mac": "00:1D:C0:7F:B6:3B", "dhcp": true, "ip": "192.168.3.112", "signal_strength": 1, "signal_strength_max": 1, "carrier": true }, { "signal_strength": 0, "signal_strength_max": 0, "type": "wifi", "interface": "wlan0", "mac": "60:E8:5B:AB:9D:64", "dhcp": true, "ip": null, "carrier": false, "supported": true, "present": true, "configured": false, "status": "connecting" } ] }, "tariff": "single_rate", "comm": { "num": 24, "level": 5, "pcu": { "num": 24, "level": 5 }, "acb": { "num": 0, "level": 0 }, "nsrb": { "num": 1, "level": 5 }, "esub": { "num": 0, "level": 0 }, "encharge": [ { "num": 0, "level": 0, "level_24g": 0, "level_subg": 0 } ] }, "wireless_connection": [ { "signal_strength": 0, "signal_strength_max": 0, "type": "BLE", "connected": true } ] } pyenphase-2.3.1/tests/fixtures/7.6.175/info000066400000000000000000000040071505013723300202270ustar00rootroot00000000000000 121729017746 800-00555-r03 D7.6.175 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00018-r01 02.00.01 426697 500-00002-r01 07.03.130 91f206 500-00004-r01 01.02.413 9c64cd 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 f9ead3 500-00012-r01 02.02.00 848ead 500-00016-r01 02.00.00 54a6dc 500-00020-r01 22.10.09 983d9b 500-00021-r01 01.00.00 19ae14 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-21:46:51 1687470523 02.00.4240 700-GA pyenphase-2.3.1/tests/fixtures/7.6.175/ivp_ensemble_dry_contacts000066400000000000000000000005231505013723300245170ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175/ivp_ensemble_inventory000066400000000000000000000000031505013723300240510ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.6.175/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300251170ustar00rootroot00000000000000{ "dry_contacts": [ { "gen_action": "none", "grid_action": "none", "id": "NC1", "load_name": "", "micro_grid_action": "none", "mode": "manual", "override": "false", "pv_serial_nb": [], "soc_high": 70.0, "soc_low": 30.0, "type": "NONE" }, { "gen_action": "none", "grid_action": "none", "id": "NC2", "load_name": "", "micro_grid_action": "none", "mode": "manual", "override": "false", "pv_serial_nb": [], "soc_high": 70.0, "soc_low": 30.0, "type": "NONE" }, { "gen_action": "none", "grid_action": "none", "id": "NO1", "load_name": "", "micro_grid_action": "none", "mode": "manual", "override": "false", "pv_serial_nb": [], "soc_high": 70.0, "soc_low": 30.0, "type": "NONE" }, { "gen_action": "none", "grid_action": "none", "id": "NO2", "load_name": "", "micro_grid_action": "none", "mode": "manual", "override": "false", "pv_serial_nb": [], "soc_high": 70.0, "soc_low": 30.0, "type": "NONE" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175/production000066400000000000000000000006021505013723300214570ustar00rootroot00000000000000{ "production" : [ { "activeCount" : 13, "readingTime" : 1691318732, "type" : "inverters", "wNow" : 3413, "whLifetime" : 366148 } ], "storage" : [ { "activeCount" : 0, "readingTime" : 0, "state" : "idle", "type" : "acb", "wNow" : 0, "whNow" : 0 } ] } pyenphase-2.3.1/tests/fixtures/7.6.175/production.json000066400000000000000000000005101505013723300224250ustar00rootroot00000000000000{ "production": [ { "activeCount": 13, "readingTime": 1691318732, "type": "inverters", "wNow": 3413, "whLifetime": 366148 } ], "storage": [ { "activeCount": 0, "readingTime": 0, "state": "idle", "type": "acb", "wNow": 0, "whNow": 0 } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/000077500000000000000000000000001505013723300212305ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.6.175_standard/api_v1_production000066400000000000000000000001621505013723300245770ustar00rootroot00000000000000{ "wattHoursToday": 36462, "wattHoursSevenDays": 189712, "wattHoursLifetime": 6139406, "wattsNow": 5740 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/api_v1_production_inverters000066400000000000000000000070531505013723300267060ustar00rootroot00000000000000[ { "serialNumber": "122219085275", "lastReportDate": 1691416241, "devType": 1, "lastReportWatts": 209, "maxReportWatts": 314 }, { "serialNumber": "122219085086", "lastReportDate": 1691416453, "devType": 1, "lastReportWatts": 248, "maxReportWatts": 339 }, { "serialNumber": "122219083015", "lastReportDate": 1691416509, "devType": 1, "lastReportWatts": 158, "maxReportWatts": 312 }, { "serialNumber": "122219082033", "lastReportDate": 1691416299, "devType": 1, "lastReportWatts": 211, "maxReportWatts": 324 }, { "serialNumber": "122220004338", "lastReportDate": 1691416271, "devType": 1, "lastReportWatts": 212, "maxReportWatts": 323 }, { "serialNumber": "122219084557", "lastReportDate": 1691416330, "devType": 1, "lastReportWatts": 219, "maxReportWatts": 312 }, { "serialNumber": "122220009431", "lastReportDate": 1691416210, "devType": 1, "lastReportWatts": 267, "maxReportWatts": 340 }, { "serialNumber": "122219085710", "lastReportDate": 1691416210, "devType": 1, "lastReportWatts": 207, "maxReportWatts": 327 }, { "serialNumber": "122218040027", "lastReportDate": 1691416390, "devType": 1, "lastReportWatts": 299, "maxReportWatts": 345 }, { "serialNumber": "122219083049", "lastReportDate": 1691416242, "devType": 1, "lastReportWatts": 214, "maxReportWatts": 315 }, { "serialNumber": "122219083804", "lastReportDate": 1691416420, "devType": 1, "lastReportWatts": 268, "maxReportWatts": 338 }, { "serialNumber": "122219086026", "lastReportDate": 1691416301, "devType": 1, "lastReportWatts": 222, "maxReportWatts": 319 }, { "serialNumber": "122219084937", "lastReportDate": 1691416359, "devType": 1, "lastReportWatts": 244, "maxReportWatts": 312 }, { "serialNumber": "122218043128", "lastReportDate": 1691416301, "devType": 1, "lastReportWatts": 292, "maxReportWatts": 354 }, { "serialNumber": "122218052484", "lastReportDate": 1691416275, "devType": 1, "lastReportWatts": 284, "maxReportWatts": 348 }, { "serialNumber": "122219085199", "lastReportDate": 1691416421, "devType": 1, "lastReportWatts": 213, "maxReportWatts": 326 }, { "serialNumber": "122218051640", "lastReportDate": 1691416484, "devType": 1, "lastReportWatts": 231, "maxReportWatts": 345 }, { "serialNumber": "122219084578", "lastReportDate": 1691416303, "devType": 1, "lastReportWatts": 275, "maxReportWatts": 338 }, { "serialNumber": "122219083053", "lastReportDate": 1691416331, "devType": 1, "lastReportWatts": 226, "maxReportWatts": 315 }, { "serialNumber": "122219084138", "lastReportDate": 1691416304, "devType": 1, "lastReportWatts": 211, "maxReportWatts": 307 }, { "serialNumber": "122218054157", "lastReportDate": 1691416304, "devType": 1, "lastReportWatts": 286, "maxReportWatts": 349 }, { "serialNumber": "122218042847", "lastReportDate": 1691416211, "devType": 1, "lastReportWatts": 272, "maxReportWatts": 341 }, { "serialNumber": "122220004813", "lastReportDate": 1691416212, "devType": 1, "lastReportWatts": 267, "maxReportWatts": 336 }, { "serialNumber": "122218044477", "lastReportDate": 1691416513, "devType": 1, "lastReportWatts": 205, "maxReportWatts": 346 } ] pyenphase-2.3.1/tests/fixtures/7.6.175_standard/api_v1_production_inverters_log.json000066400000000000000000000005541505013723300305160ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:33 GMT", "content-type": "application/json", "content-length": "3627", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/api_v1_production_log.json000066400000000000000000000005531505013723300264140ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:33 GMT", "content-type": "application/json", "content-length": "114", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/info000066400000000000000000000042001505013723300221020ustar00rootroot00000000000000 122302045041 800-00656-r06 D7.6.175 4c8675 0 1 false true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.175 f79c8d 500-00005-r01 01.02.371 373aab 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 40061a 500-00020-r01 21.19.82 667fd7 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/7.6.175_standard/info_log.json000066400000000000000000000006631505013723300237240ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:33 GMT", "content-type": "text/xml", "content-length": "2176", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300263760ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005031505013723300302060ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:36 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ensemble_inventory000066400000000000000000000000031505013723300257310ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ensemble_inventory_log.json000066400000000000000000000005011505013723300275450ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:36 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ensemble_power000066400000000000000000000000271505013723300250360ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ensemble_power_log.json000066400000000000000000000005021505013723300266450ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:36 GMT", "content-length": "22", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300267770ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005041505013723300305770ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:36 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/production000066400000000000000000000005101505013723300233350ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 24, "readingTime": 1691416513, "wNow": 5739, "whLifetime": 174174 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/production.json000066400000000000000000000005101505013723300243050ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 24, "readingTime": 1691416513, "wNow": 5739, "whLifetime": 174174 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/production.json_log.json000066400000000000000000000007011505013723300261200ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_standard/production_log.json000066400000000000000000000007011505013723300251500ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Mon, 07 Aug 2023 13:55:36 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/7.6.175_total/000077500000000000000000000000001505013723300205535ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.6.175_total/admin_lib_tariff000066400000000000000000000034071505013723300237530ustar00rootroot00000000000000{"tariff":{"currency":{"code":"EUR"},"logger":"mylogger","date":"1688623885","storage_settings":{"mode":"self-consumption","operation_mode_sub_type":"","reserved_soc":30.0,"very_low_soc":10,"charge_from_grid":false,"date":"1688623885"},"single_rate":{"rate":0.38914,"sell":0.0},"seasons":[{"id":"all_year_long","start":"1/1","days":[{"id":"all_days","days":"Mon,Tue,Wed,Thu,Fri,Sat,Sun","must_charge_start":0,"must_charge_duration":0,"must_charge_mode":"CG","enable_discharge_to_grid":false,"periods":[{"id":"filler","start":0,"rate":0.38914},{"id":"period_1","start":420,"rate":0.4424},{"id":"filler","start":1381,"rate":0.38914}]}],"tiers":[]}],"seasons_sell":[]},"schedule":{"source":"Tariff","date":"2023-07-06 06:11:26 UTC","version":"00.00.02","reserved_soc":30.0,"operation_mode_sub_type":"","very_low_soc":10,"charge_from_grid":false,"battery_mode":"self-consumption","schedule":{"Disable":[{"Sun":[{"start":0,"duration":1440,"setting":"ID"}]},{"Mon":[{"start":0,"duration":1440,"setting":"ID"}]},{"Tue":[{"start":0,"duration":1440,"setting":"ID"}]},{"Wed":[{"start":0,"duration":1440,"setting":"ID"}]},{"Thu":[{"start":0,"duration":1440,"setting":"ID"}]},{"Fri":[{"start":0,"duration":1440,"setting":"ID"}]},{"Sat":[{"start":0,"duration":1440,"setting":"ID"}]}],"tariff":[{"start":"1/1","end":"1/1","Sun":[{"start":0,"duration":1440,"setting":"ZN"}],"Mon":[{"start":0,"duration":1440,"setting":"ZN"}],"Tue":[{"start":0,"duration":1440,"setting":"ZN"}],"Wed":[{"start":0,"duration":1440,"setting":"ZN"}],"Thu":[{"start":0,"duration":1440,"setting":"ZN"}],"Fri":[{"start":0,"duration":1440,"setting":"ZN"}],"Sat":[{"start":0,"duration":1440,"setting":"ZN"}]}]},"override":false,"override_backup_soc":30.0,"override_chg_dischg_rate":0.0,"override_tou_mode":"StorageTouMode_DEFAULT_TOU_MODE"}} pyenphase-2.3.1/tests/fixtures/7.6.175_total/admin_lib_tariff_log.json000066400000000000000000000006131505013723300255600ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:46 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/api_v1_production000066400000000000000000000001401505013723300241160ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 0, "wattsNow": 0 } pyenphase-2.3.1/tests/fixtures/7.6.175_total/api_v1_production_inverters000066400000000000000000000040751505013723300262320ustar00rootroot00000000000000[ { "serialNumber": "122107031694", "lastReportDate": 1694182111, "devType": 1, "lastReportWatts": 193, "maxReportWatts": 289 }, { "serialNumber": "122107031731", "lastReportDate": 1694182200, "devType": 1, "lastReportWatts": 22, "maxReportWatts": 296 }, { "serialNumber": "122107033673", "lastReportDate": 1694182140, "devType": 1, "lastReportWatts": 21, "maxReportWatts": 296 }, { "serialNumber": "122107033629", "lastReportDate": 1694182081, "devType": 1, "lastReportWatts": 194, "maxReportWatts": 289 }, { "serialNumber": "122107035554", "lastReportDate": 1694182170, "devType": 1, "lastReportWatts": 21, "maxReportWatts": 296 }, { "serialNumber": "122107033602", "lastReportDate": 1694181992, "devType": 1, "lastReportWatts": 22, "maxReportWatts": 296 }, { "serialNumber": "122107035597", "lastReportDate": 1694182052, "devType": 1, "lastReportWatts": 21, "maxReportWatts": 296 }, { "serialNumber": "122107032623", "lastReportDate": 1694181960, "devType": 1, "lastReportWatts": 190, "maxReportWatts": 279 }, { "serialNumber": "122107035544", "lastReportDate": 1694182140, "devType": 1, "lastReportWatts": 191, "maxReportWatts": 283 }, { "serialNumber": "122107035551", "lastReportDate": 1694182111, "devType": 1, "lastReportWatts": 191, "maxReportWatts": 287 }, { "serialNumber": "122107032918", "lastReportDate": 1694181930, "devType": 1, "lastReportWatts": 21, "maxReportWatts": 296 }, { "serialNumber": "122107032940", "lastReportDate": 1694182172, "devType": 1, "lastReportWatts": 21, "maxReportWatts": 296 }, { "serialNumber": "122107025358", "lastReportDate": 1694181961, "devType": 1, "lastReportWatts": 190, "maxReportWatts": 279 }, { "serialNumber": "122107032484", "lastReportDate": 1694182142, "devType": 1, "lastReportWatts": 21, "maxReportWatts": 296 } ] pyenphase-2.3.1/tests/fixtures/7.6.175_total/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300300320ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:10:45 GMT", "content-type": "application/json", "content-length": "2109", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/api_v1_production_log.json000066400000000000000000000005001505013723300257270ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:10:45 GMT", "content-type": "application/json", "content-length": "96", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/info000066400000000000000000000036071505013723300214370ustar00rootroot00000000000000 122041077756 800-00654-r06 D7.6.175 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.175 f79c8d 500-00005-r01 01.02.346 b1b724 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 40061a 500-00016-r01 02.00.00 54a6dc 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/7.6.175_total/info_log.json000066400000000000000000000005751505013723300232510ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:10:45 GMT", "content-type": "text/xml", "content-length": "1927", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300257210ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300275350ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:47 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_generator000066400000000000000000000002771505013723300252220ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300270270ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:49 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_inventory000066400000000000000000000000031505013723300252540ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_inventory_log.json000066400000000000000000000004331505013723300270740ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:47 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_power000066400000000000000000000000271505013723300243610ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_power_log.json000066400000000000000000000004341505013723300261740ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:47 GMT", "content-length": "22", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_secctrl000066400000000000000000000013321505013723300246640ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 30, "adjusted_backup_soc": 30, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300265000ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:47 GMT", "content-length": "729", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_status000066400000000000000000000044771505013723300245650ustar00rootroot00000000000000{ "inventory": { "serial_nums": {} }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 8171232, "api_ecagtGetDeviceCount": 8188279, "api_ecagtGetDeviceInfo": 8171233, "api_ecagtSetSecCtrlBias": 739615, "api_ecagtGetSecCtrlBias": 50, "api_ecagtGetSecCtrlBiasQ": 50, "api_ecagtGetRelayState": 9805503, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 25, "api_ecagtGetGridFreq": 1634246, "api_ecagtGetGridVolt": 1634246, "api_ecagtGetGridFreq_err_notfound": 1634246, "rest_StatusGet": 26, "rest_InventoryGet": 51, "rest_SubmodGet": 14658, "rest_SecCtrlGet": 25, "rest_Power": 1, "ext_zb_send_msg": 5, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 5, "zmq_ecaHello": 1, "zmq_streamdata": 1634246, "zmq_ecaSecCtrlMsg": 739615, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "secctrlNotReady": 739610, "backupSocLimitSet": 739615, "backupSocLimitChanged": 1, "api_ecagtGetGenRelayState": 1634246 }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 30, "adjusted_backup_soc": 30, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 0, "der2_state": 0, "Enchg_grid_mode": "unknown", "Solar_grid_mode": "unknown" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300263650ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:47 GMT", "content-length": "2366", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_meters000066400000000000000000000007141505013723300226550ustar00rootroot00000000000000[ { "eid": 704643328, "state": "disabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "disabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_meters_log.json000066400000000000000000000004351505013723300244660ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:49 GMT", "content-length": "459", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_meters_readings000066400000000000000000000111211505013723300245230ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.605, "activePower": 0.605, "apparentPower": 1.345, "reactivePower": 0.073, "pwrFactor": 0.188, "voltage": 236.068, "current": 0.519, "freq": 50.000, "channels": [ { "eid": 1778385169, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": -0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 230.966, "current": 0.000, "freq": 50.000 }, { "eid": 1778385170, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.167, "activePower": 0.167, "apparentPower": 0.251, "reactivePower": -0.000, "pwrFactor": 1.000, "voltage": 0.990, "current": 0.252, "freq": 50.000 }, { "eid": 1778385171, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.437, "activePower": 0.437, "apparentPower": 1.094, "reactivePower": 0.073, "pwrFactor": 0.000, "voltage": 4.112, "current": 0.266, "freq": 50.000 } ] }, { "eid": 704643584, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": -1.459, "activePower": -1.459, "apparentPower": 1.752, "reactivePower": 0.000, "pwrFactor": -1.000, "voltage": 239.518, "current": 0.248, "freq": 50.000, "channels": [ { "eid": 1778385425, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": -0.000, "reactivePower": -0.000, "pwrFactor": -1.000, "voltage": 230.993, "current": 0.000, "freq": 50.000 }, { "eid": 1778385426, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": -1.459, "activePower": -1.459, "apparentPower": 1.752, "reactivePower": 0.000, "pwrFactor": -1.000, "voltage": 7.076, "current": 0.248, "freq": 50.000 }, { "eid": 1778385427, "timestamp": 1694182368, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": -0.000, "activePower": -0.000, "apparentPower": 0.000, "reactivePower": -0.000, "pwrFactor": -1.000, "voltage": 1.449, "current": -0.000, "freq": 50.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_meters_readings_log.json000066400000000000000000000004361505013723300263430ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:49 GMT", "content-length": "4688", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_sc_pvlimit000066400000000000000000000000611505013723300235220ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300253370ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:49 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300263220ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300301260ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:47 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_gen_config000066400000000000000000000000031505013723300241500ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300257700ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:49 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_gen_schedule000066400000000000000000000000031505013723300244770ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300263170ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:49 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_pel_settings000066400000000000000000000000251505013723300245560ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/7.6.175_total/ivp_ss_pel_settings_log.json000066400000000000000000000004341505013723300263730ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:12:49 GMT", "content-length": "20", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/production000066400000000000000000000024311505013723300226640ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":14,"readingTime":1694182292,"wNow":1317,"whLifetime":1152900},{"type":"eim","activeCount":0,"measurementType":"production","readingTime":1694182307,"wNow":0.71,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.521,"rmsVoltage":236.127,"reactPwr":0.0,"apprntPwr":1.353,"pwrFactor":0.81,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0}],"consumption":[{"type":"eim","activeCount":0,"measurementType":"total-consumption","readingTime":1694182307,"wNow":-0.749,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.274,"rmsVoltage":239.62,"reactPwr":0.0,"apprntPwr":0.436,"pwrFactor":-1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"type":"eim","activeCount":0,"measurementType":"net-consumption","readingTime":1694182307,"wNow":-1.459,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.247,"rmsVoltage":239.62,"reactPwr":0.0,"apprntPwr":-1.752,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.6.175_total/production.json000066400000000000000000000024321505013723300236350ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":14,"readingTime":1694182262,"wNow":1322,"whLifetime":1152866},{"type":"eim","activeCount":0,"measurementType":"production","readingTime":1694182274,"wNow":0.641,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.516,"rmsVoltage":235.291,"reactPwr":0.0,"apprntPwr":1.335,"pwrFactor":1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0}],"consumption":[{"type":"eim","activeCount":0,"measurementType":"total-consumption","readingTime":1694182274,"wNow":-0.768,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.27,"rmsVoltage":238.786,"reactPwr":0.0,"apprntPwr":0.412,"pwrFactor":-1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"type":"eim","activeCount":0,"measurementType":"net-consumption","readingTime":1694182274,"wNow":-1.409,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.247,"rmsVoltage":238.786,"reactPwr":0.0,"apprntPwr":-1.746,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.6.175_total/production.json_log.json000066400000000000000000000006131505013723300254450ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:14 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_total/production_log.json000066400000000000000000000006131505013723300244750ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 08 Sep 2023 14:11:47 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/000077500000000000000000000000001505013723300212545ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/admin_lib_tariff000066400000000000000000000033221505013723300244500ustar00rootroot00000000000000{"tariff":{"currency":{"code":"EUR"},"logger":"mylogger","date":"1688053811","storage_settings":{"mode":"self-consumption","operation_mode_sub_type":"","reserved_soc":0.0,"very_low_soc":5,"charge_from_grid":false,"date":"1688053811"},"single_rate":{"rate":0.01,"sell":0.0},"seasons":[{"id":"all_year_long","start":"1/1","days":[{"id":"all_days","days":"Mon,Tue,Wed,Thu,Fri,Sat,Sun","must_charge_start":0,"must_charge_duration":0,"must_charge_mode":"CG","enable_discharge_to_grid":false,"periods":[{"id":"period_1","start":480,"rate":0.14},{"id":"filler","start":1320,"rate":0.01}]}],"tiers":[]}],"seasons_sell":[]},"schedule":{"source":"Tariff","date":"2023-06-29 15:50:12 UTC","version":"00.00.02","reserved_soc":0.0,"operation_mode_sub_type":"","very_low_soc":5,"charge_from_grid":false,"battery_mode":"self-consumption","schedule":{"Disable":[{"Sun":[{"start":0,"duration":1440,"setting":"ID"}]},{"Mon":[{"start":0,"duration":1440,"setting":"ID"}]},{"Tue":[{"start":0,"duration":1440,"setting":"ID"}]},{"Wed":[{"start":0,"duration":1440,"setting":"ID"}]},{"Thu":[{"start":0,"duration":1440,"setting":"ID"}]},{"Fri":[{"start":0,"duration":1440,"setting":"ID"}]},{"Sat":[{"start":0,"duration":1440,"setting":"ID"}]}],"tariff":[{"start":"1/1","end":"1/1","Sun":[{"start":0,"duration":1440,"setting":"ZN"}],"Mon":[{"start":0,"duration":1440,"setting":"ZN"}],"Tue":[{"start":0,"duration":1440,"setting":"ZN"}],"Wed":[{"start":0,"duration":1440,"setting":"ZN"}],"Thu":[{"start":0,"duration":1440,"setting":"ZN"}],"Fri":[{"start":0,"duration":1440,"setting":"ZN"}],"Sat":[{"start":0,"duration":1440,"setting":"ZN"}]}]},"override":false,"override_backup_soc":30.0,"override_chg_dischg_rate":0.0,"override_tou_mode":"StorageTouMode_DEFAULT_TOU_MODE"}} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/admin_lib_tariff_log.json000066400000000000000000000006131505013723300262610ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/api_v1_production000066400000000000000000000001601505013723300246210ustar00rootroot00000000000000{ "wattHoursToday": 4374, "wattHoursSevenDays": 111089, "wattHoursLifetime": 3183742, "wattsNow": 689 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/api_v1_production_inverters000066400000000000000000000020421505013723300267230ustar00rootroot00000000000000[ { "serialNumber": "121823030072", "lastReportDate": 1693745036, "devType": 1, "lastReportWatts": 58, "maxReportWatts": 253 }, { "serialNumber": "121823035149", "lastReportDate": 1693745066, "devType": 1, "lastReportWatts": 56, "maxReportWatts": 254 }, { "serialNumber": "482243031579", "lastReportDate": 1693744825, "devType": 1, "lastReportWatts": 135, "maxReportWatts": 365 }, { "serialNumber": "482243032888", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 365 }, { "serialNumber": "482250079070", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 130, "maxReportWatts": 365 }, { "serialNumber": "482243033444", "lastReportDate": 1693744829, "devType": 1, "lastReportWatts": 127, "maxReportWatts": 365 }, { "serialNumber": "482243032889", "lastReportDate": 1693744946, "devType": 1, "lastReportWatts": 112, "maxReportWatts": 365 } ] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300305330ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "application/json", "content-length": "1058", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/api_v1_production_log.json000066400000000000000000000005011505013723300264310ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "application/json", "content-length": "112", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/info000066400000000000000000000041771505013723300221430ustar00rootroot00000000000000 122238082763 800-00654-r08 D7.6.175 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.175 f79c8d 500-00005-r01 01.02.371 373aab 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 40061a 500-00020-r01 21.19.82 667fd7 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/info_log.json000066400000000000000000000005751505013723300237520ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "text/xml", "content-length": "2175", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300264220ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300302360ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_generator000066400000000000000000000002771505013723300257230ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300275300ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_inventory000066400000000000000000000000031505013723300257550ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_inventory_log.json000066400000000000000000000004331505013723300275750ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_power000066400000000000000000000000271505013723300250620ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_power_log.json000066400000000000000000000004341505013723300266750ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "22", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_secctrl000066400000000000000000000013301505013723300253630ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300272010ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "727", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_status000066400000000000000000000045621505013723300252610ustar00rootroot00000000000000{ "inventory": { "serial_nums": {} }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 6254765, "api_ecagtGetDeviceCount": 6321456, "api_ecagtGetDeviceInfo": 6281617, "api_ecagtSetSecCtrlBias": 564094, "api_ecagtGetSecCtrlBias": 38, "api_ecagtGetSecCtrlBiasQ": 38, "api_ecagtGetRelayState": 7505737, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 19, "api_ecagtGetGridFreq": 1250953, "api_ecagtGetGridVolt": 1250953, "api_ecagtGetGridFreq_err_notfound": 1250953, "rest_StatusGet": 20, "rest_InventoryGet": 26915, "rest_SubmodGet": 11141, "rest_SecCtrlGet": 19, "rest_CommCheckGet": 26851, "rest_Power": 1, "ext_zb_send_msg": 564094, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 564094, "zmq_ecaHello": 1, "zmq_streamdata": 1250953, "zmq_eca_live_debug_req": 4, "zmq_ecaSecCtrlMsg": 564094, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "backupSocLimitSet": 564094, "backupSocLimitChanged": 2, "api_ecagtGetGenRelayState": 1250953 }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 0, "der2_state": 0, "Enchg_grid_mode": "grid-tied", "Solar_grid_mode": "unknown" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300270660ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "2417", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_meters000066400000000000000000000007121505013723300233540ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_meters_log.json000066400000000000000000000004351505013723300251670ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_meters_readings000066400000000000000000000113541505013723300252340ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000, "channels": [ { "eid": 1778385169, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000 }, { "eid": 1778385170, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 5370.790, "apparentEnergy": 295.364, "reactEnergyLagg": 387.143, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 6.124, "current": 0.000, "freq": 50.000 }, { "eid": 1778385171, "timestamp": 1693745133, "actEnergyDlvd": 0.022, "actEnergyRcvd": 9818.109, "apparentEnergy": 14032.684, "reactEnergyLagg": 391.775, "reactEnergyLead": 2.189, "instantaneousDemand": -1.044, "activePower": -1.044, "apparentPower": 2.602, "reactivePower": -0.000, "pwrFactor": -1.000, "voltage": 11.469, "current": 0.227, "freq": 50.000 } ] }, { "eid": 704643584, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000, "channels": [ { "eid": 1778385425, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000 }, { "eid": 1778385426, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 8279.267, "apparentEnergy": 141.429, "reactEnergyLagg": 378.426, "reactEnergyLead": 0.181, "instantaneousDemand": -0.000, "activePower": -0.000, "apparentPower": -0.000, "reactivePower": 0.000, "pwrFactor": -1.000, "voltage": 2.981, "current": 0.000, "freq": 50.000 }, { "eid": 1778385427, "timestamp": 1693745133, "actEnergyDlvd": 0.013, "actEnergyRcvd": 13980.174, "apparentEnergy": 6016.263, "reactEnergyLagg": 380.215, "reactEnergyLead": 1.245, "instantaneousDemand": -0.451, "activePower": -0.451, "apparentPower": 1.128, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 4.635, "current": 0.242, "freq": 50.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_meters_readings_log.json000066400000000000000000000004361505013723300270440ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "4843", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_sc_pvlimit000066400000000000000000000000611505013723300242230ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300260400ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300270230ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300306270ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_config000066400000000000000000000000031505013723300246510ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300264710ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_schedule000066400000000000000000000000031505013723300252000ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300270200ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_pel_settings000066400000000000000000000000251505013723300252570ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/ivp_ss_pel_settings_log.json000066400000000000000000000004341505013723300270740ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "20", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/production000066400000000000000000000026541505013723300233740ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":7,"readingTime":1693745066,"wNow":751,"whLifetime":702919},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1693745131,"wNow":487.903,"whLifetime":3183793.452,"varhLeadLifetime":0.021,"varhLagLifetime":591593.906,"vahLifetime":3576166.933,"rmsCurrent":2.165,"rmsVoltage":235.525,"reactPwr":114.857,"apprntPwr":509.895,"pwrFactor":0.97,"whToday":4425.452,"whLastSevenDays":111093.452,"vahToday":5461.933,"varhLeadToday":0.021,"varhLagToday":1483.906}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1693745131,"wNow":473.765,"whLifetime":5145153.764,"varhLeadLifetime":3174026.62,"varhLagLifetime":-591342.021,"vahLifetime":7252190.208,"rmsCurrent":-0.607,"rmsVoltage":235.49,"reactPwr":-457.841,"apprntPwr":-142.942,"pwrFactor":1.0,"whToday":19903.764,"whLastSevenDays":4.764,"vahToday":22904.208,"varhLeadToday":9602.62,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1693745131,"wNow":-14.138,"whLifetime":1961512.78,"varhLeadLifetime":3174026.64,"varhLagLifetime":251.885,"vahLifetime":7252190.208,"rmsCurrent":-2.772,"rmsVoltage":235.49,"reactPwr":-572.698,"apprntPwr":-652.719,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/production.json000066400000000000000000000026621505013723300243430ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":7,"readingTime":1693745066,"wNow":751,"whLifetime":702919},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1693745129,"wNow":488.154,"whLifetime":3183793.303,"varhLeadLifetime":0.021,"varhLagLifetime":591593.872,"vahLifetime":3576166.777,"rmsCurrent":2.162,"rmsVoltage":235.777,"reactPwr":115.849,"apprntPwr":509.902,"pwrFactor":0.97,"whToday":4425.303,"whLastSevenDays":111093.303,"vahToday":5461.777,"varhLeadToday":0.021,"varhLagToday":1483.872}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1693745129,"wNow":476.686,"whLifetime":5145153.621,"varhLeadLifetime":3174026.446,"varhLagLifetime":-591341.987,"vahLifetime":7252190.009,"rmsCurrent":-0.615,"rmsVoltage":235.743,"reactPwr":-456.848,"apprntPwr":-144.999,"pwrFactor":1.0,"whToday":19903.621,"whLastSevenDays":4.621,"vahToday":22904.009,"varhLeadToday":9602.446,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1693745129,"wNow":-11.468,"whLifetime":1961512.786,"varhLeadLifetime":3174026.466,"varhLagLifetime":251.885,"vahLifetime":7252190.009,"rmsCurrent":-2.778,"rmsVoltage":235.743,"reactPwr":-572.697,"apprntPwr":-654.785,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/production.json_log.json000066400000000000000000000006131505013723300261460ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:29 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts/production_log.json000066400000000000000000000006131505013723300251760ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/000077500000000000000000000000001505013723300225175ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/_readme000066400000000000000000000015301505013723300240350ustar00rootroot000000000000007.6.175_with_cts_3phase UPDATE1: /production.json endpoint only provides phase details when passing parameter details=1 so /production file has phases removed while /production.json file has them included. ORIGINAL: Somewhere between fw 7.3.466 and 7.6.175 /production endpoint stopped reporting phase data for Envoy metered with CT and multi-phase (Split or Three). The original test fixture 7.6.175_with_cts_3phase includeded a /production endpoint file with phases included. To reflect actual firmware behavior the production and production.json files are updated to the pattern without phase details (lines:) as verified by ones from a diagnostics and debug log file for a 7.6.175 fw. Verified with 7.6.175 diagnostics: - admin_lib_tariff - api_v1_production_inverters - ivp_ensemble_inventory - ivp_meters - ivp_meters_readings - production pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/admin_lib_tariff000066400000000000000000000033221505013723300257130ustar00rootroot00000000000000{"tariff":{"currency":{"code":"EUR"},"logger":"mylogger","date":"1688053811","storage_settings":{"mode":"self-consumption","operation_mode_sub_type":"","reserved_soc":0.0,"very_low_soc":5,"charge_from_grid":false,"date":"1688053811"},"single_rate":{"rate":0.01,"sell":0.0},"seasons":[{"id":"all_year_long","start":"1/1","days":[{"id":"all_days","days":"Mon,Tue,Wed,Thu,Fri,Sat,Sun","must_charge_start":0,"must_charge_duration":0,"must_charge_mode":"CG","enable_discharge_to_grid":false,"periods":[{"id":"period_1","start":480,"rate":0.14},{"id":"filler","start":1320,"rate":0.01}]}],"tiers":[]}],"seasons_sell":[]},"schedule":{"source":"Tariff","date":"2023-06-29 15:50:12 UTC","version":"00.00.02","reserved_soc":0.0,"operation_mode_sub_type":"","very_low_soc":5,"charge_from_grid":false,"battery_mode":"self-consumption","schedule":{"Disable":[{"Sun":[{"start":0,"duration":1440,"setting":"ID"}]},{"Mon":[{"start":0,"duration":1440,"setting":"ID"}]},{"Tue":[{"start":0,"duration":1440,"setting":"ID"}]},{"Wed":[{"start":0,"duration":1440,"setting":"ID"}]},{"Thu":[{"start":0,"duration":1440,"setting":"ID"}]},{"Fri":[{"start":0,"duration":1440,"setting":"ID"}]},{"Sat":[{"start":0,"duration":1440,"setting":"ID"}]}],"tariff":[{"start":"1/1","end":"1/1","Sun":[{"start":0,"duration":1440,"setting":"ZN"}],"Mon":[{"start":0,"duration":1440,"setting":"ZN"}],"Tue":[{"start":0,"duration":1440,"setting":"ZN"}],"Wed":[{"start":0,"duration":1440,"setting":"ZN"}],"Thu":[{"start":0,"duration":1440,"setting":"ZN"}],"Fri":[{"start":0,"duration":1440,"setting":"ZN"}],"Sat":[{"start":0,"duration":1440,"setting":"ZN"}]}]},"override":false,"override_backup_soc":30.0,"override_chg_dischg_rate":0.0,"override_tou_mode":"StorageTouMode_DEFAULT_TOU_MODE"}} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/admin_lib_tariff_log.json000066400000000000000000000006131505013723300275240ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/api_v1_production000066400000000000000000000001601505013723300260640ustar00rootroot00000000000000{ "wattHoursToday": 4374, "wattHoursSevenDays": 111089, "wattHoursLifetime": 3183742, "wattsNow": 689 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/api_v1_production_inverters000066400000000000000000000020421505013723300301660ustar00rootroot00000000000000[ { "serialNumber": "121823030072", "lastReportDate": 1693745036, "devType": 1, "lastReportWatts": 58, "maxReportWatts": 253 }, { "serialNumber": "121823035149", "lastReportDate": 1693745066, "devType": 1, "lastReportWatts": 56, "maxReportWatts": 254 }, { "serialNumber": "482243031579", "lastReportDate": 1693744825, "devType": 1, "lastReportWatts": 135, "maxReportWatts": 365 }, { "serialNumber": "482243032888", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 133, "maxReportWatts": 365 }, { "serialNumber": "482250079070", "lastReportDate": 1693744828, "devType": 1, "lastReportWatts": 130, "maxReportWatts": 365 }, { "serialNumber": "482243033444", "lastReportDate": 1693744829, "devType": 1, "lastReportWatts": 127, "maxReportWatts": 365 }, { "serialNumber": "482243032889", "lastReportDate": 1693744946, "devType": 1, "lastReportWatts": 112, "maxReportWatts": 365 } ] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300317760ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "application/json", "content-length": "1058", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/api_v1_production_log.json000066400000000000000000000005011505013723300276740ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "application/json", "content-length": "112", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/info000066400000000000000000000041771505013723300234060ustar00rootroot00000000000000 122238082763 800-00654-r08 D7.6.175 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.175 f79c8d 500-00005-r01 01.02.371 373aab 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 40061a 500-00020-r01 21.19.82 667fd7 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00001-r01 02.00.00 1210 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/info_log.json000066400000000000000000000005751505013723300252150ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:27 GMT", "content-type": "text/xml", "content-length": "2175", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300276650ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300315010ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_generator000066400000000000000000000002771505013723300271660ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300307730ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_inventory000066400000000000000000000000031505013723300272200ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_inventory_log.json000066400000000000000000000004331505013723300310400ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_power000066400000000000000000000000271505013723300263250ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_power_log.json000066400000000000000000000004341505013723300301400ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "22", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_secctrl000066400000000000000000000013301505013723300266260ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300304440ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "727", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_status000066400000000000000000000045621505013723300265240ustar00rootroot00000000000000{ "inventory": { "serial_nums": {} }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 6254765, "api_ecagtGetDeviceCount": 6321456, "api_ecagtGetDeviceInfo": 6281617, "api_ecagtSetSecCtrlBias": 564094, "api_ecagtGetSecCtrlBias": 38, "api_ecagtGetSecCtrlBiasQ": 38, "api_ecagtGetRelayState": 7505737, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 19, "api_ecagtGetGridFreq": 1250953, "api_ecagtGetGridVolt": 1250953, "api_ecagtGetGridFreq_err_notfound": 1250953, "rest_StatusGet": 20, "rest_InventoryGet": 26915, "rest_SubmodGet": 11141, "rest_SecCtrlGet": 19, "rest_CommCheckGet": 26851, "rest_Power": 1, "ext_zb_send_msg": 564094, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 564094, "zmq_ecaHello": 1, "zmq_streamdata": 1250953, "zmq_eca_live_debug_req": 4, "zmq_ecaSecCtrlMsg": 564094, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "backupSocLimitSet": 564094, "backupSocLimitChanged": 2, "api_ecagtGetGenRelayState": 1250953 }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 0, "der2_state": 0, "Enchg_grid_mode": "grid-tied", "Solar_grid_mode": "unknown" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300303310ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "2417", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters000066400000000000000000000007121505013723300246170ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters_log.json000066400000000000000000000004351505013723300264320ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters_readings000066400000000000000000000113541505013723300264770ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000, "channels": [ { "eid": 1778385169, "timestamp": 1693745133, "actEnergyDlvd": 3183793.885, "actEnergyRcvd": 8851.704, "apparentEnergy": 3576167.385, "reactEnergyLagg": 591594.008, "reactEnergyLead": 0.021, "instantaneousDemand": 488.925, "activePower": 488.925, "apparentPower": 510.003, "reactivePower": 114.596, "pwrFactor": 0.957, "voltage": 235.236, "current": 2.169, "freq": 50.000 }, { "eid": 1778385170, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 5370.790, "apparentEnergy": 295.364, "reactEnergyLagg": 387.143, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 6.124, "current": 0.000, "freq": 50.000 }, { "eid": 1778385171, "timestamp": 1693745133, "actEnergyDlvd": 0.022, "actEnergyRcvd": 9818.109, "apparentEnergy": 14032.684, "reactEnergyLagg": 391.775, "reactEnergyLead": 2.189, "instantaneousDemand": -1.044, "activePower": -1.044, "apparentPower": 2.602, "reactivePower": -0.000, "pwrFactor": -1.000, "voltage": 11.469, "current": 0.227, "freq": 50.000 } ] }, { "eid": 704643584, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000, "channels": [ { "eid": 1778385425, "timestamp": 1693745133, "actEnergyDlvd": 3738205.282, "actEnergyRcvd": 1776768.769, "apparentEnergy": 7252190.779, "reactEnergyLagg": 251.885, "reactEnergyLead": 3174027.145, "instantaneousDemand": -36.162, "activePower": -36.162, "apparentPower": 645.376, "reactivePower": -568.304, "pwrFactor": -0.060, "voltage": 235.201, "current": 2.745, "freq": 50.000 }, { "eid": 1778385426, "timestamp": 1693745133, "actEnergyDlvd": 0.000, "actEnergyRcvd": 8279.267, "apparentEnergy": 141.429, "reactEnergyLagg": 378.426, "reactEnergyLead": 0.181, "instantaneousDemand": -0.000, "activePower": -0.000, "apparentPower": -0.000, "reactivePower": 0.000, "pwrFactor": -1.000, "voltage": 2.981, "current": 0.000, "freq": 50.000 }, { "eid": 1778385427, "timestamp": 1693745133, "actEnergyDlvd": 0.013, "actEnergyRcvd": 13980.174, "apparentEnergy": 6016.263, "reactEnergyLagg": 380.215, "reactEnergyLead": 1.245, "instantaneousDemand": -0.451, "activePower": -0.451, "apparentPower": 1.128, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 4.635, "current": 0.242, "freq": 50.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters_readings_log.json000066400000000000000000000004361505013723300303070ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "4843", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_sc_pvlimit000066400000000000000000000000611505013723300254660ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300273030ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300302660ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300320720ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_config000066400000000000000000000000031505013723300261140ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300277340ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_schedule000066400000000000000000000000031505013723300264430ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300302630ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_pel_settings000066400000000000000000000000251505013723300265220ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_pel_settings_log.json000066400000000000000000000004341505013723300303370ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:33 GMT", "content-length": "20", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/production000066400000000000000000000046571505013723300246440ustar00rootroot00000000000000{ "production": [{ "type": "inverters", "activeCount": 7, "readingTime": 0, "wNow": 0, "whLifetime": 4339764 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1693433002, "wNow": -6.481, "whLifetime": 4351113.2, "varhLeadLifetime": 0.005, "varhLagLifetime": 1264880.372, "vahLifetime": 5559527.987, "rmsCurrent": 0.658, "rmsVoltage": 712.588, "reactPwr": 84.546, "apprntPwr": 156.055, "pwrFactor": 0.0, "whToday": 5113.2, "whLastSevenDays": 69492.2, "vahToday": 8296.987, "varhLeadToday": 0.005, "varhLagToday": 2727.372 } ], "consumption": [{ "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1693433002, "wNow": 209.084, "whLifetime": 4074795.368, "varhLeadLifetime": 3936400.269, "varhLagLifetime": 1341552.434, "vahLifetime": 8735086.195, "rmsCurrent": 2.708, "rmsVoltage": 712.725, "reactPwr": -464.776, "apprntPwr": 1929.904, "pwrFactor": 0.11, "whToday": 12423.368, "whLastSevenDays": 68784.368, "vahToday": 18948.195, "varhLeadToday": 8224.269, "varhLagToday": 2802.434 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1693433002, "wNow": 215.565, "whLifetime": 2886562.459, "varhLeadLifetime": 3936400.264, "varhLagLifetime": 76672.062, "vahLifetime": 8735086.195, "rmsCurrent": 2.05, "rmsVoltage": 712.862, "reactPwr": -380.23, "apprntPwr": 487.922, "pwrFactor": 0.46, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [{ "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/production.json000066400000000000000000000205401505013723300256010ustar00rootroot00000000000000{ "production": [{ "type": "inverters", "activeCount": 7, "readingTime": 0, "wNow": 0, "whLifetime": 4339764 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1693433002, "wNow": -6.481, "whLifetime": 4351113.2, "varhLeadLifetime": 0.005, "varhLagLifetime": 1264880.372, "vahLifetime": 5559527.987, "rmsCurrent": 0.658, "rmsVoltage": 712.588, "reactPwr": 84.546, "apprntPwr": 156.055, "pwrFactor": 0.0, "whToday": 5113.2, "whLastSevenDays": 69492.2, "vahToday": 8296.987, "varhLeadToday": 0.005, "varhLagToday": 2727.372, "lines": [{ "wNow": -2.864, "whLifetime": 1869678.394, "varhLeadLifetime": 0.002, "varhLagLifetime": 539695.061, "vahLifetime": 2377390.886, "rmsCurrent": 0.286, "rmsVoltage": 236.766, "reactPwr": 50.856, "apprntPwr": 67.699, "pwrFactor": 0.0, "whToday": 2200.394, "whLastSevenDays": 29891.394, "vahToday": 3576.886, "varhLeadToday": 0.002, "varhLagToday": 1163.061 }, { "wNow": 0.0, "whLifetime": 1241245.645, "varhLeadLifetime": 0.001, "varhLagLifetime": 366839.383, "vahLifetime": 1241038.844, "rmsCurrent": -0.0, "rmsVoltage": 237.918, "reactPwr": 0.0, "apprntPwr": -0.0, "pwrFactor": 0.0, "whToday": 1454.645, "whLastSevenDays": 19793.645, "vahToday": 1528.844, "varhLeadToday": 0.001, "varhLagToday": 792.383 }, { "wNow": -3.617, "whLifetime": 1240189.161, "varhLeadLifetime": 0.002, "varhLagLifetime": 358345.928, "vahLifetime": 1941098.256, "rmsCurrent": 0.372, "rmsVoltage": 237.904, "reactPwr": 33.69, "apprntPwr": 88.355, "pwrFactor": 0.0, "whToday": 1458.161, "whLastSevenDays": 19807.161, "vahToday": 3191.256, "varhLeadToday": 0.002, "varhLagToday": 771.928 } ] } ], "consumption": [{ "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1693433002, "wNow": 209.084, "whLifetime": 4074795.368, "varhLeadLifetime": 3936400.269, "varhLagLifetime": 1341552.434, "vahLifetime": 8735086.195, "rmsCurrent": 2.708, "rmsVoltage": 712.725, "reactPwr": -464.776, "apprntPwr": 1929.904, "pwrFactor": 0.11, "whToday": 12423.368, "whLastSevenDays": 68784.368, "vahToday": 18948.195, "varhLeadToday": 8224.269, "varhLagToday": 2802.434, "lines": [{ "wNow": 88.573, "whLifetime": 2293782.928, "varhLeadLifetime": 2114284.979, "varhLagLifetime": 578414.935, "vahLifetime": 4268391.905, "rmsCurrent": 1.295, "rmsVoltage": 236.836, "reactPwr": -257.565, "apprntPwr": 306.73, "pwrFactor": 0.29, "whToday": 8584.928, "whLastSevenDays": 39391.928, "vahToday": 10866.905, "varhLeadToday": 4108.979, "varhLagToday": 1188.935 }, { "wNow": 123.364, "whLifetime": 948057.969, "varhLeadLifetime": 1059082.625, "varhLagLifetime": 383807.966, "vahLifetime": 2331874.944, "rmsCurrent": 0.861, "rmsVoltage": 237.934, "reactPwr": -132.184, "apprntPwr": 204.919, "pwrFactor": 0.6, "whToday": 2154.969, "whLastSevenDays": 18948.969, "vahToday": 4293.944, "varhLeadToday": 2783.625, "varhLagToday": 815.966 }, { "wNow": -2.853, "whLifetime": 832954.471, "varhLeadLifetime": 763032.665, "varhLagLifetime": 379329.532, "vahLifetime": 2134819.346, "rmsCurrent": 0.551, "rmsVoltage": 237.956, "reactPwr": -75.026, "apprntPwr": 131.213, "pwrFactor": -0.02, "whToday": 1683.471, "whLastSevenDays": 10443.471, "vahToday": 3787.346, "varhLeadToday": 1331.665, "varhLagToday": 797.532 } ] }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1693433002, "wNow": 215.565, "whLifetime": 2886562.459, "varhLeadLifetime": 3936400.264, "varhLagLifetime": 76672.062, "vahLifetime": 8735086.195, "rmsCurrent": 2.05, "rmsVoltage": 712.862, "reactPwr": -380.23, "apprntPwr": 487.922, "pwrFactor": 0.46, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0, "lines": [{ "wNow": 91.437, "whLifetime": 1625201.414, "varhLeadLifetime": 2114284.977, "varhLagLifetime": 38719.874, "vahLifetime": 4268391.905, "rmsCurrent": 1.009, "rmsVoltage": 236.905, "reactPwr": -206.71, "apprntPwr": 238.691, "pwrFactor": 0.41, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 123.364, "whLifetime": 629892.171, "varhLeadLifetime": 1059082.624, "varhLagLifetime": 16968.583, "vahLifetime": 2331874.944, "rmsCurrent": 0.861, "rmsVoltage": 237.949, "reactPwr": -132.184, "apprntPwr": 206.35, "pwrFactor": 0.61, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 0.764, "whLifetime": 631468.875, "varhLeadLifetime": 763032.663, "varhLagLifetime": 20983.605, "vahLifetime": 2134819.346, "rmsCurrent": 0.179, "rmsVoltage": 238.007, "reactPwr": -41.336, "apprntPwr": 42.881, "pwrFactor": 0.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ] } ], "storage": [{ "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/production.json_log.json000066400000000000000000000006131505013723300274110ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:29 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.175_with_cts_3phase/production_log.json000066400000000000000000000006131505013723300264410ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Sun, 03 Sep 2023 12:45:31 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/000077500000000000000000000000001505013723300242375ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/admin_lib_tariff000066400000000000000000000044541505013723300274420ustar00rootroot00000000000000{"tariff":{"currency":{"code":"EUR"},"logger":"mylogger","date":"1695744220","storage_settings":{"mode":"self-consumption","operation_mode_sub_type":"","reserved_soc":15.0,"very_low_soc":5,"charge_from_grid":true,"date":"1695598084"},"single_rate":{"rate":0.0,"sell":0.0},"seasons":[{"id":"season_1","start":"1/1","days":[{"id":"all_days","days":"Mon,Tue,Wed,Thu,Fri,Sat,Sun","must_charge_start":444,"must_charge_duration":35,"must_charge_mode":"CG","enable_discharge_to_grid":true,"periods":[{"id":"period_1","start":480,"rate":0.1898},{"id":"filler","start":1320,"rate":0.1034}]}],"tiers":[]}],"seasons_sell":[]},"schedule":{"source":"Tariff","date":"2023-09-26 16:03:40 UTC","version":"00.00.02","reserved_soc":15.0,"operation_mode_sub_type":"","very_low_soc":5,"charge_from_grid":true,"battery_mode":"self-consumption","schedule":{"Disable":[{"Sun":[{"start":0,"duration":1440,"setting":"ID"}]},{"Mon":[{"start":0,"duration":1440,"setting":"ID"}]},{"Tue":[{"start":0,"duration":1440,"setting":"ID"}]},{"Wed":[{"start":0,"duration":1440,"setting":"ID"}]},{"Thu":[{"start":0,"duration":1440,"setting":"ID"}]},{"Fri":[{"start":0,"duration":1440,"setting":"ID"}]},{"Sat":[{"start":0,"duration":1440,"setting":"ID"}]}],"tariff":[{"start":"1/1","end":"1/1","Sun":[{"start":0,"duration":444,"setting":"ZN"},{"start":444,"duration":35,"setting":"CG"},{"start":479,"duration":961,"setting":"ZN"}],"Mon":[{"start":0,"duration":444,"setting":"ZN"},{"start":444,"duration":35,"setting":"CG"},{"start":479,"duration":961,"setting":"ZN"}],"Tue":[{"start":0,"duration":444,"setting":"ZN"},{"start":444,"duration":35,"setting":"CG"},{"start":479,"duration":961,"setting":"ZN"}],"Wed":[{"start":0,"duration":444,"setting":"ZN"},{"start":444,"duration":35,"setting":"CG"},{"start":479,"duration":961,"setting":"ZN"}],"Thu":[{"start":0,"duration":444,"setting":"ZN"},{"start":444,"duration":35,"setting":"CG"},{"start":479,"duration":961,"setting":"ZN"}],"Fri":[{"start":0,"duration":444,"setting":"ZN"},{"start":444,"duration":35,"setting":"CG"},{"start":479,"duration":961,"setting":"ZN"}],"Sat":[{"start":0,"duration":444,"setting":"ZN"},{"start":444,"duration":35,"setting":"CG"},{"start":479,"duration":961,"setting":"ZN"}]}]},"override":false,"override_backup_soc":30.0,"override_chg_dischg_rate":0.0,"override_tou_mode":"StorageTouMode_DEFAULT_TOU_MODE"}} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/admin_lib_tariff_log.json000066400000000000000000000006131505013723300312440ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:11 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/api_v1_production000066400000000000000000000001521505013723300276050ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 73002, "wattHoursLifetime": 2432969, "wattsNow": 0 } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/api_v1_production_inverters000066400000000000000000000013541505013723300317130ustar00rootroot00000000000000[ { "serialNumber": "482243033113", "lastReportDate": 1695752919, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 361 }, { "serialNumber": "482246043645", "lastReportDate": 1695752947, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 361 }, { "serialNumber": "482246047675", "lastReportDate": 1695752865, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 361 }, { "serialNumber": "482246047880", "lastReportDate": 1695752936, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 360 }, { "serialNumber": "482243033093", "lastReportDate": 1695752940, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 362 } ] pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/api_v1_production_inverters_log.json000066400000000000000000000005011505013723300335150ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:08 GMT", "content-type": "application/json", "content-length": "748", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/api_v1_production_log.json000066400000000000000000000005011505013723300314140ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:08 GMT", "content-type": "application/json", "content-length": "106", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/info000066400000000000000000000040071505013723300251160ustar00rootroot00000000000000 122238082690 800-00654-r08 D7.6.185 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.185 97768a 500-00005-r01 01.02.439 a930df 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 f41c50 500-00020-r01 22.11.46 5ffaa1 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/info_log.json000066400000000000000000000005751505013723300267350ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:08 GMT", "content-type": "text/xml", "content-length": "2055", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300314050ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300332210ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_generator000066400000000000000000000002771505013723300307060ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300325130ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_inventory000066400000000000000000000022461505013723300307530ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "830-01760-r37", "installed": 1695330323, "serial_num": "122249097612", "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1695769447, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1695330323, "img_load_date": 1695330323, "img_pnum_running": "2.6.5973_rel/22.11", "zigbee_dongle_fw_version": "100F", "bmu_fw_version": "2.1.34", "operating": true, "communicating": true, "sleep_enabled": false, "percentFull": 15, "temperature": 29, "maxCellTemp": 30, "comm_level_sub_ghz": 4, "comm_level_2_4_ghz": 4, "led_status": 17, "dc_switch_off": false, "encharge_rev": 2, "encharge_capacity": 3500 } ] } ] pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300325630ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "1189", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_power000066400000000000000000000002651505013723300300510ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "122249097612", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 15 } ] } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_power_log.json000066400000000000000000000004351505013723300316610ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "180", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_secctrl000066400000000000000000000014161505013723300303530ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 1.3899999856948853, "voltage_bias_v": 16.899999618530275, "freq_bias_hz_q8": 2235, "voltage_bias_v_q5": 540, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 15, "adjusted_backup_soc": 15, "agg_soc": 15, "Max_energy": 3500, "ENC_agg_soc": 15, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 525, "ENC_agg_avail_energy": 525, "Enc_commissioned_capacity": 3500, "Enc_max_available_capacity": 3500, "ACB_agg_soc": 0, "ACB_agg_energy": 0 } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300321640ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "781", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_status000066400000000000000000000212501505013723300302350ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122249097612": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "grid-tied", "phase": 1, "encharge_revision": 2, "encharge_capacity": 3500, "encharge_rated_power": 1280, "msg_retry_count": 1, "part_number": "830-01760-r37", "assembly_number": "890-00023-r39", "app_fw_version": "2.6.5973_rel/22.11", "zb_fw_version": "100F", "zb_bootloader_vers": "1.B.5", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.34", "submodule_count": 6, "submodules": { "122248094067": { "device_type": 16, "admin_state": 1, "part_number": "620-00291-r02", "assembly_number": "800-00291-r02", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.34" } }, "122249004224": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249016424": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249017193": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249017363": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249045297": { "device_type": 15, "admin_state": 1, "part_number": "800-01854-r06", "assembly_number": "800-01854-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.6.5973_rel/22.11" } } } } } }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 4271944, "api_ecagtDeviceInsert": 4, "api_ecagtDeviceNetworkStatus": 57950, "api_ecagtDeviceCommissionStatus": 25, "api_ecagtDeviceRemoved": 2, "api_ecagtGetDeviceCount": 4325203, "api_ecagtGetDeviceInfo": 4323962, "api_ecagtGetOneDeviceInfo": 14, "api_ecagtDevIdToSerial": 82006, "api_ecagtHandleMsg": 80765, "api_ecagtGetSubmoduleInv": 8929, "api_ecagtGetDataModelRaw": 23255, "api_ecagtSetSecCtrlBias": 387023, "api_ecagtGetSecCtrlBias": 26704, "api_ecagtGetSecCtrlBiasQ": 23498, "api_ecagtGetRelayState": 5127595, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 14, "api_ecagtGetGridFreq": 854388, "api_ecagtGetGridVolt": 854388, "api_ecagtGetGridFreq_err_notfound": 854388, "rest_StatusGet": 18, "rest_SleepGet": 1, "rest_InventoryGet": 19843, "rest_SubmodGet": 7670, "rest_SecCtrlGet": 23481, "rest_RelayGet": 6, "rest_RelayPost": 1, "rest_CommCheckGet": 599, "rest_Power": 19252, "ext_zb_send_msg": 397049, "ext_cfg_save_device": 4, "ext_cfg_save_device_err": 4, "ext_send_perf_data": 77997, "ext_event_set_stateful": 7087, "ext_event_set_modgone": 28, "rxmsg_OBJ_MDL_META_RSP": 4, "rxmsg_OBJ_MDL_INV_UPD_RSP": 305, "rxmsg_OBJ_MDL_POLL_RSP": 77997, "rxmsg_OBJ_MDL_GRID_STATUS_RSP": 8, "rxmsg_OBJ_MDL_EVENTS_MSG": 2387, "rxmsg_OBJ_MDL_SOC_CONFIG_RSP": 14, "txmsg_OBJ_MDL_META_REQ": 8, "txmsg_OBJ_MDL_ENC_RT_POLL_REQ": 17, "txmsg_OBJ_MDL_BMU_POLL_REQ": 3553, "txmsg_OBJ_MDL_PCU_POLL_REQ": 3553, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 387023, "txmsg_OBJ_MDL_GRID_STATUS_REQ": 8, "txmsg_OBJ_MDL_EVENTS_ACK": 2387, "txmsg_OBJ_MDL_SOC_CONFIG_REQ": 14, "txmsg_OBJ_MDL_TNS_START": 16, "rxmsg_OBJ_MDL_TNS_START_RSP": 16, "txmsg_OBJ_MDL_SET_UDMIR": 19, "rxmsg_OBJ_MDL_SET_UDMIR_RSP": 18, "txmsg_OBJ_MDL_TNS_END": 16, "rxmsg_OBJ_MDL_TNS_END_RSP": 16, "txmsg_lvs_poll": 435, "zmq_ecaHello": 1, "zmq_ecaDevInfo": 33, "zmq_ecaNetworkStatus": 57950, "zmq_ecaAppMsg": 80765, "zmq_streamdata": 854388, "zmq_live_debug": 3206, "zmq_eca_live_debug_req": 160, "zmq_nameplate": 138, "zmq_ecaSecCtrlMsg": 387023, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "devPollMissing": 12056, "gridProfileTransaction": 32, "fsm_retry_timeout": 8, "profile_txn_ack": 16, "backupSocLimitSet": 388486, "backupSocLimitChanged": 8, "api_ecagtGetGenRelayState": 854390 }, "secctrl": { "shutdown": false, "freq_bias_hz": 1.3899999856948853, "voltage_bias_v": 16.899999618530275, "freq_bias_hz_q8": 2235, "voltage_bias_v_q5": 540, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 15, "adjusted_backup_soc": 15, "agg_soc": 15, "Max_energy": 3500, "ENC_agg_soc": 15, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 525, "ENC_agg_avail_energy": 525, "Enc_commissioned_capacity": 3500, "Enc_max_available_capacity": 3500, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 0, "der2_state": 0, "Enchg_grid_mode": "grid-tied", "Solar_grid_mode": "unknown" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300320510ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "8871", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_meters000066400000000000000000000007121505013723300263370ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_meters_log.json000066400000000000000000000004351505013723300301520ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_meters_readings000066400000000000000000000113441505013723300302160ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1695769632, "actEnergyDlvd": 2432969.956, "actEnergyRcvd": 1795.013, "apparentEnergy": 2709025.378, "reactEnergyLagg": 392075.354, "reactEnergyLead": 7.266, "instantaneousDemand": -0.661, "activePower": -0.661, "apparentPower": 92.126, "reactivePower": 82.942, "pwrFactor": 0.000, "voltage": 238.524, "current": 0.386, "freq": 50.000, "channels": [ { "eid": 1778385169, "timestamp": 1695769632, "actEnergyDlvd": 2432969.956, "actEnergyRcvd": 1795.013, "apparentEnergy": 2709025.378, "reactEnergyLagg": 392075.354, "reactEnergyLead": 7.266, "instantaneousDemand": -0.661, "activePower": -0.661, "apparentPower": 92.126, "reactivePower": 82.942, "pwrFactor": 0.000, "voltage": 238.524, "current": 0.386, "freq": 50.000 }, { "eid": 1778385170, "timestamp": 1695769632, "actEnergyDlvd": 0.013, "actEnergyRcvd": 8248.228, "apparentEnergy": 140.353, "reactEnergyLagg": 355.453, "reactEnergyLead": 1.715, "instantaneousDemand": -0.000, "activePower": -0.000, "apparentPower": -0.000, "reactivePower": -0.000, "pwrFactor": 0.000, "voltage": 7.648, "current": -0.000, "freq": 50.000 }, { "eid": 1778385171, "timestamp": 1695769632, "actEnergyDlvd": 0.000, "actEnergyRcvd": 12408.486, "apparentEnergy": 898.304, "reactEnergyLagg": 419.396, "reactEnergyLead": 0.000, "instantaneousDemand": -0.077, "activePower": -0.077, "apparentPower": 0.178, "reactivePower": -0.000, "pwrFactor": -1.000, "voltage": 1.176, "current": 0.152, "freq": 50.000 } ] }, { "eid": 704643584, "timestamp": 1695769632, "actEnergyDlvd": 2404339.266, "actEnergyRcvd": 1125590.088, "apparentEnergy": 4833861.616, "reactEnergyLagg": 22501.684, "reactEnergyLead": 1935715.220, "instantaneousDemand": 522.043, "activePower": 522.043, "apparentPower": 746.438, "reactivePower": -458.984, "pwrFactor": 0.706, "voltage": 238.282, "current": 3.138, "freq": 50.000, "channels": [ { "eid": 1778385425, "timestamp": 1695769632, "actEnergyDlvd": 2404339.266, "actEnergyRcvd": 1125590.088, "apparentEnergy": 4833861.616, "reactEnergyLagg": 22501.684, "reactEnergyLead": 1935715.220, "instantaneousDemand": 522.043, "activePower": 522.043, "apparentPower": 746.438, "reactivePower": -458.984, "pwrFactor": 0.706, "voltage": 238.282, "current": 3.138, "freq": 50.000 }, { "eid": 1778385426, "timestamp": 1695769632, "actEnergyDlvd": 0.000, "actEnergyRcvd": 1099.941, "apparentEnergy": 54.285, "reactEnergyLagg": 356.336, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 3.447, "current": 0.000, "freq": 50.000 }, { "eid": 1778385427, "timestamp": 1695769632, "actEnergyDlvd": 0.000, "actEnergyRcvd": 5670.302, "apparentEnergy": 8802.177, "reactEnergyLagg": 361.519, "reactEnergyLead": 0.367, "instantaneousDemand": -0.351, "activePower": -0.351, "apparentPower": 1.761, "reactivePower": -0.000, "pwrFactor": 0.000, "voltage": 8.942, "current": 0.197, "freq": 50.000 } ] } ] pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_meters_readings_log.json000066400000000000000000000004361505013723300320270ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "4835", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_sc_pvlimit000066400000000000000000000000611505013723300272060ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300310230ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300320060ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300336120ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_gen_config000066400000000000000000000000031505013723300276340ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300314540ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_gen_schedule000066400000000000000000000000031505013723300301630ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300320030ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_pel_settings000066400000000000000000000000251505013723300302420ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_pel_settings_log.json000066400000000000000000000004341505013723300320570ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "20", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/production000066400000000000000000000026051505013723300263530ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":5,"readingTime":0,"wNow":0,"whLifetime":45349},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1695769630,"wNow":-0.0,"whLifetime":2432969.956,"varhLeadLifetime":7.266,"varhLagLifetime":392075.308,"vahLifetime":2709025.327,"rmsCurrent":0.387,"rmsVoltage":238.473,"reactPwr":83.545,"apprntPwr":92.2,"pwrFactor":0.0,"whToday":0.956,"whLastSevenDays":73002.956,"vahToday":11.327,"varhLeadToday":0.266,"varhLagToday":10.308}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1695769630,"wNow":519.156,"whLifetime":3711429.458,"varhLeadLifetime":1935707.698,"varhLagLifetime":-369573.624,"vahLifetime":4833861.2,"rmsCurrent":3.504,"rmsVoltage":238.335,"reactPwr":-374.948,"apprntPwr":835.18,"pwrFactor":0.62,"whToday":63.458,"whLastSevenDays":19.458,"vahToday":89.2,"varhLeadToday":54.698,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1695769630,"wNow":519.156,"whLifetime":1279038.272,"varhLeadLifetime":1935714.965,"varhLagLifetime":22501.684,"vahLifetime":4833861.2,"rmsCurrent":3.117,"rmsVoltage":238.335,"reactPwr":-458.493,"apprntPwr":742.91,"pwrFactor":0.7,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/production.json000066400000000000000000000026201505013723300273200ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":5,"readingTime":0,"wNow":0,"whLifetime":45349},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1695769629,"wNow":-0.957,"whLifetime":2432969.956,"varhLeadLifetime":7.266,"varhLagLifetime":392075.259,"vahLifetime":2709025.274,"rmsCurrent":0.387,"rmsVoltage":238.522,"reactPwr":83.521,"apprntPwr":92.383,"pwrFactor":0.0,"whToday":0.956,"whLastSevenDays":73002.956,"vahToday":11.274,"varhLeadToday":0.266,"varhLagToday":10.259}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1695769629,"wNow":523.579,"whLifetime":3711429.155,"varhLeadLifetime":1935707.431,"varhLagLifetime":-369573.576,"vahLifetime":4833860.766,"rmsCurrent":3.513,"rmsVoltage":238.507,"reactPwr":-374.915,"apprntPwr":837.87,"pwrFactor":0.62,"whToday":63.155,"whLastSevenDays":19.155,"vahToday":88.766,"varhLeadToday":54.431,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1695769629,"wNow":524.536,"whLifetime":1279037.969,"varhLeadLifetime":1935714.697,"varhLagLifetime":22501.684,"vahLifetime":4833860.766,"rmsCurrent":3.126,"rmsVoltage":238.507,"reactPwr":-458.436,"apprntPwr":745.663,"pwrFactor":0.7,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/production.json_log.json000066400000000000000000000006131505013723300311310ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:09 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/7.6.185_with_cts_and_battery_3t/production_log.json000066400000000000000000000006131505013723300301610ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/000077500000000000000000000000001505013723300172545ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.1.41/api_v1_production000066400000000000000000000001641505013723300226250ustar00rootroot00000000000000{ "wattHoursToday": 54042, "wattHoursSevenDays": 1455161, "wattHoursLifetime": 1509203, "wattsNow": 12997 } pyenphase-2.3.1/tests/fixtures/8.1.41/api_v1_production_inverters000066400000000000000000000147671505013723300247440ustar00rootroot00000000000000[ { "serialNumber": "202314072546", "lastReportDate": 1692385844, "devType": 1, "lastReportWatts": 307, "maxReportWatts": 319 }, { "serialNumber": "202314071516", "lastReportDate": 1692386025, "devType": 1, "lastReportWatts": 308, "maxReportWatts": 321 }, { "serialNumber": "202314058203", "lastReportDate": 1692385784, "devType": 1, "lastReportWatts": 310, "maxReportWatts": 321 }, { "serialNumber": "202314060891", "lastReportDate": 1692385785, "devType": 1, "lastReportWatts": 305, "maxReportWatts": 321 }, { "serialNumber": "202314068272", "lastReportDate": 1692385786, "devType": 1, "lastReportWatts": 311, "maxReportWatts": 324 }, { "serialNumber": "202314077078", "lastReportDate": 1692385935, "devType": 1, "lastReportWatts": 302, "maxReportWatts": 317 }, { "serialNumber": "202314065062", "lastReportDate": 1692385935, "devType": 1, "lastReportWatts": 277, "maxReportWatts": 334 }, { "serialNumber": "202314073012", "lastReportDate": 1692385787, "devType": 1, "lastReportWatts": 308, "maxReportWatts": 323 }, { "serialNumber": "202314070713", "lastReportDate": 1692385936, "devType": 1, "lastReportWatts": 309, "maxReportWatts": 326 }, { "serialNumber": "202314071845", "lastReportDate": 1692385846, "devType": 1, "lastReportWatts": 308, "maxReportWatts": 324 }, { "serialNumber": "202314069065", "lastReportDate": 1692385847, "devType": 1, "lastReportWatts": 303, "maxReportWatts": 320 }, { "serialNumber": "202314068868", "lastReportDate": 1692385904, "devType": 1, "lastReportWatts": 304, "maxReportWatts": 318 }, { "serialNumber": "202314066216", "lastReportDate": 1692385965, "devType": 1, "lastReportWatts": 309, "maxReportWatts": 319 }, { "serialNumber": "202314073251", "lastReportDate": 1692385937, "devType": 1, "lastReportWatts": 307, "maxReportWatts": 323 }, { "serialNumber": "202314073205", "lastReportDate": 1692385938, "devType": 1, "lastReportWatts": 304, "maxReportWatts": 321 }, { "serialNumber": "202314050286", "lastReportDate": 1692385966, "devType": 1, "lastReportWatts": 312, "maxReportWatts": 327 }, { "serialNumber": "202314072420", "lastReportDate": 1692385967, "devType": 1, "lastReportWatts": 305, "maxReportWatts": 321 }, { "serialNumber": "202314073257", "lastReportDate": 1692385907, "devType": 1, "lastReportWatts": 309, "maxReportWatts": 322 }, { "serialNumber": "202314070647", "lastReportDate": 1692385939, "devType": 1, "lastReportWatts": 301, "maxReportWatts": 319 }, { "serialNumber": "202314071660", "lastReportDate": 1692385995, "devType": 1, "lastReportWatts": 310, "maxReportWatts": 322 }, { "serialNumber": "202314069086", "lastReportDate": 1692385968, "devType": 1, "lastReportWatts": 313, "maxReportWatts": 323 }, { "serialNumber": "202314055790", "lastReportDate": 1692385969, "devType": 1, "lastReportWatts": 305, "maxReportWatts": 321 }, { "serialNumber": "202314071753", "lastReportDate": 1692385996, "devType": 1, "lastReportWatts": 276, "maxReportWatts": 337 }, { "serialNumber": "202314061330", "lastReportDate": 1692385997, "devType": 1, "lastReportWatts": 269, "maxReportWatts": 336 }, { "serialNumber": "202314073428", "lastReportDate": 1692385942, "devType": 1, "lastReportWatts": 311, "maxReportWatts": 324 }, { "serialNumber": "202314065647", "lastReportDate": 1692385969, "devType": 1, "lastReportWatts": 303, "maxReportWatts": 319 }, { "serialNumber": "202314062558", "lastReportDate": 1692385971, "devType": 1, "lastReportWatts": 301, "maxReportWatts": 322 }, { "serialNumber": "202314070107", "lastReportDate": 1692385971, "devType": 1, "lastReportWatts": 308, "maxReportWatts": 317 }, { "serialNumber": "202314059855", "lastReportDate": 1692385973, "devType": 1, "lastReportWatts": 309, "maxReportWatts": 322 }, { "serialNumber": "202314063524", "lastReportDate": 1692385998, "devType": 1, "lastReportWatts": 276, "maxReportWatts": 337 }, { "serialNumber": "202314062880", "lastReportDate": 1692386026, "devType": 1, "lastReportWatts": 275, "maxReportWatts": 335 }, { "serialNumber": "202314070988", "lastReportDate": 1692386027, "devType": 1, "lastReportWatts": 275, "maxReportWatts": 334 }, { "serialNumber": "202314065032", "lastReportDate": 1692386029, "devType": 1, "lastReportWatts": 273, "maxReportWatts": 336 }, { "serialNumber": "202314062224", "lastReportDate": 1692385974, "devType": 1, "lastReportWatts": 304, "maxReportWatts": 318 }, { "serialNumber": "202314064007", "lastReportDate": 1692386029, "devType": 1, "lastReportWatts": 307, "maxReportWatts": 325 }, { "serialNumber": "202314067482", "lastReportDate": 1692385977, "devType": 1, "lastReportWatts": 302, "maxReportWatts": 318 }, { "serialNumber": "202314070321", "lastReportDate": 1692386030, "devType": 1, "lastReportWatts": 271, "maxReportWatts": 329 }, { "serialNumber": "202314070523", "lastReportDate": 1692385978, "devType": 1, "lastReportWatts": 305, "maxReportWatts": 320 }, { "serialNumber": "202314071599", "lastReportDate": 1692385978, "devType": 1, "lastReportWatts": 307, "maxReportWatts": 317 }, { "serialNumber": "202314068438", "lastReportDate": 1692385979, "devType": 1, "lastReportWatts": 293, "maxReportWatts": 324 }, { "serialNumber": "202314069944", "lastReportDate": 1692385814, "devType": 1, "lastReportWatts": 277, "maxReportWatts": 336 }, { "serialNumber": "202314075069", "lastReportDate": 1692385999, "devType": 1, "lastReportWatts": 308, "maxReportWatts": 319 }, { "serialNumber": "202314070295", "lastReportDate": 1692386032, "devType": 1, "lastReportWatts": 275, "maxReportWatts": 335 }, { "serialNumber": "202314069092", "lastReportDate": 1692385980, "devType": 1, "lastReportWatts": 309, "maxReportWatts": 319 } ] pyenphase-2.3.1/tests/fixtures/8.1.41/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300265330ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:41 GMT", "content-type": "application/json", "content-length": "6647", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/api_v1_production_log.json000066400000000000000000000005011505013723300244310ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:41 GMT", "content-type": "application/json", "content-length": "116", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/info000066400000000000000000000036611505013723300201400ustar00rootroot00000000000000 xxxxxxxxxxxx 800-00664-r05 D8.1.41 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 08.01.41 7d531e 500-00004-r01 01.02.436 3faed5 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 90916f 500-00012-r01 02.02.00 e3a10d 500-00020-r01 31.07.09 59f6df 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 1684430967 ec2-user-envoy_uber-pkg_master:pkg-May-18-23-17:27:28 pyenphase-2.3.1/tests/fixtures/8.1.41/info_log.json000066400000000000000000000005751505013723300217520ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:41 GMT", "content-type": "text/xml", "content-length": "1969", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_dry_contacts000066400000000000000000000005171505013723300244260ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300262360ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:45 GMT", "content-length": "334", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_inventory000066400000000000000000000064341505013723300237730ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "836-01826-r76", "serial_num": "492319002585", "installed": 1691560591, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692385816, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1691560591, "img_load_date": 1691560591, "img_pnum_running": "3.0.5949_rel/31.07", "bmu_fw_version": "3.8.53", "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 42, "maxCellTemp": 42, "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 14, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 4960, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r76", "serial_num": "492319002593", "installed": 1691560590, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692386075, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1691560590, "img_load_date": 1691560590, "img_pnum_running": "3.0.5949_rel/31.07", "bmu_fw_version": "3.8.53", "communicating": true, "sleep_enabled": false, "percentFull": 85, "temperature": 42, "maxCellTemp": 42, "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 14, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 4960, "phase": "ph-a", "der_index": 2 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "865-00377-r28", "serial_num": "482326083757", "installed": 1691648499, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1692386076, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1691648499, "img_load_date": 1691648499, "img_pnum_running": "3.0.5177_rel/31.07", "communicating": true, "temperature": 113, "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 3568, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300256000ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:45 GMT", "content-length": "3355", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_power000066400000000000000000000005401505013723300230620ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "492319002585", "real_power_mw": 24000, "apparent_power_mva": 24000, "soc": 100 }, { "serial_num": "492319002593", "real_power_mw": 16000, "apparent_power_mva": 16000, "soc": 85 } ] } pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_power_log.json000066400000000000000000000004351505013723300246760ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:45 GMT", "content-length": "351", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_secctrl000066400000000000000000000015571505013723300233760ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -1.348230004310608, "voltage_bias_v": -16.190109252929689, "freq_bias_hz_q8": -2168, "voltage_bias_v_q5": -518, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 30, "adjusted_backup_soc": 30, "agg_soc": 92, "Max_energy": 9920, "ENC_agg_soc": 92, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 2976, "ENC_agg_avail_energy": 9176, "Enc_commissioned_capacity": 9920, "Enc_max_available_capacity": 9920, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "Recovery_threshold_soc": 13, "Commission_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300252010ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:45 GMT", "content-length": "878", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_status000066400000000000000000000361171505013723300232620ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "202323119466": { "device_type": 22, "com_interface_str": "USB", "device_id": "202323119466", "admin_state": 43, "admin_state_str": "ENS_DEVICE_STATE_READY", "msg_retry_count": 0, "part_number": "800-01821-r05", "assembly_number": "880-01821-r05", "app_fw_version": "3.0.203_rel/31.07", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 1, "submodules": { "202323119466": { "device_type": 24, "admin_state": 1, "part_number": "800-01821-r05", "assembly_number": "880-01821-r05", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "3.0.203_rel/31.07" } } } }, "482326083757": { "device_type": 17, "com_interface_str": "CAN", "device_id": "482326083757", "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "msg_retry_count": 0, "part_number": "865-00377-r28", "assembly_number": "885-00377-r29", "app_fw_version": "3.0.5177_rel/31.07", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 2, "submodules": { "482325046860": { "device_type": 18, "admin_state": 1, "part_number": "800-01820-r05", "assembly_number": "800-01820-r05", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "3.0.5177_rel/31.07" } }, "482325061898": { "device_type": 20, "admin_state": 1, "part_number": "800-01861-r01", "assembly_number": "800-01861-r01", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "", "assembly_number": "" } } } }, "492319002585": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492319002585", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 3, "encharge_capacity": 4960, "encharge_rated_power": 3840, "msg_retry_count": 2, "part_number": "836-01826-r76", "assembly_number": "892-00024-r78", "app_fw_version": "3.0.5949_rel/31.07", "ibl_fw_version": "3.1.739-b352e2", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "3.8.53", "submodule_count": 7, "submodules": { "122316087241": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316087307": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316095294": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316103880": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316104646": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316105765": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "492318006311": { "device_type": 15, "admin_state": 1, "part_number": "800-00329-r06", "assembly_number": "880-00329-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "3.0.5949_rel/31.07" } } } }, "492319002593": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492319002593", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 3, "encharge_capacity": 4960, "encharge_rated_power": 3840, "msg_retry_count": 2, "part_number": "836-01826-r76", "assembly_number": "892-00024-r78", "app_fw_version": "3.0.5949_rel/31.07", "ibl_fw_version": "3.1.739-b352e2", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "3.8.53", "submodule_count": 7, "submodules": { "122316086919": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316087121": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316095271": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316103381": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316104060": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "122316105394": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r01", "assembly_number": "004.031.001-D00031" }, "procload": { "part_number": "52100008R001", "assembly_number": "004.031.001-D00031" } }, "492319000225": { "device_type": 15, "admin_state": 1, "part_number": "800-00329-r06", "assembly_number": "880-00329-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "3.0.5949_rel/31.07" } } } } } }, "secctrl": { "shutdown": false, "freq_bias_hz": -1.348230004310608, "voltage_bias_v": -16.190109252929689, "freq_bias_hz_q8": -2168, "voltage_bias_v_q5": -518, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 30, "adjusted_backup_soc": 30, "agg_soc": 92, "Max_energy": 9920, "ENC_agg_soc": 92, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 2976, "ENC_agg_avail_energy": 9176, "Enc_commissioned_capacity": 9920, "Enc_max_available_capacity": 9920, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "Recovery_threshold_soc": 13, "Commission_in_progress": false }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 1, "der2_state": 1, "der3_state": 0, "Enchg_grid_mode": "multimode-ongrid", "Solar_grid_mode": "multimode-ongrid" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ensemble_status_log.json000066400000000000000000000004371505013723300250670ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:45 GMT", "content-length": "15438", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ss_dry_contact_settings000066400000000000000000000043261505013723300250200ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "LOAD", "grid_action": "apply", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 1.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "Furnace", "mode": "soc", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "LOAD", "grid_action": "apply", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 2.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "AC", "mode": "soc", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 3.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 4.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/8.1.41/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300266270ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:45 GMT", "content-length": "2261", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/production000066400000000000000000000026751505013723300213770ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":44,"readingTime":1692386032,"wNow":13163,"whLifetime":348363},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1692386085,"wNow":13028.191,"whLifetime":1510205.886,"varhLeadLifetime":857.879,"varhLagLifetime":204751.113,"vahLifetime":1746691.161,"rmsCurrent":108.273,"rmsVoltage":246.903,"reactPwr":76.03,"apprntPwr":13365.877,"pwrFactor":0.97,"whToday":55044.886,"whLastSevenDays":1456163.886,"vahToday":64285.161,"varhLeadToday":33.879,"varhLagToday":8551.113}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1692386085,"wNow":5210.062,"whLifetime":1757946.028,"varhLeadLifetime":108784.489,"varhLagLifetime":29678.386,"vahLifetime":1607139.674,"rmsCurrent":40.644,"rmsVoltage":246.9,"reactPwr":1402.145,"apprntPwr":5016.45,"pwrFactor":1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":1190803.674,"varhLeadToday":104827.489,"varhLagToday":17207.386},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1692386085,"wNow":-7818.129,"whLifetime":247925.322,"varhLeadLifetime":109642.368,"varhLagLifetime":234429.5,"vahLifetime":1607139.674,"rmsCurrent":-67.629,"rmsVoltage":246.9,"reactPwr":1326.115,"apprntPwr":-8349.832,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/8.1.41/production.json000066400000000000000000000027041505013723300223400ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":44,"readingTime":1692386032,"wNow":13163,"whLifetime":348363},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1692386083,"wNow":13028.54,"whLifetime":1510198.655,"varhLeadLifetime":857.879,"varhLagLifetime":204751.071,"vahLifetime":1746683.744,"rmsCurrent":108.274,"rmsVoltage":246.894,"reactPwr":77.802,"apprntPwr":13367.009,"pwrFactor":0.97,"whToday":55037.655,"whLastSevenDays":1456156.655,"vahToday":64277.744,"varhLeadToday":33.879,"varhLagToday":8551.071}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1692386083,"wNow":5216.083,"whLifetime":1757943.133,"varhLeadLifetime":108784.489,"varhLagLifetime":29677.693,"vahLifetime":1607135.036,"rmsCurrent":40.571,"rmsVoltage":246.894,"reactPwr":1407.058,"apprntPwr":5007.246,"pwrFactor":1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":1190799.036,"varhLeadToday":104827.489,"varhLagToday":17206.693},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1692386083,"wNow":-7812.457,"whLifetime":247929.658,"varhLeadLifetime":109642.368,"varhLagLifetime":234428.764,"vahLifetime":1607135.036,"rmsCurrent":-67.703,"rmsVoltage":246.894,"reactPwr":1329.256,"apprntPwr":-8358.792,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/8.1.41/production.json_log.json000066400000000000000000000006131505013723300241460ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:43 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.1.41/production_log.json000066400000000000000000000006131505013723300231760ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 18 Aug 2023 19:14:45 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/000077500000000000000000000000001505013723300251205ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/admin_lib_tariff000066400000000000000000000314111505013723300303140ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "USD" }, "logger": "mylogger", "date": "1709367413", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "prioritize-energy", "reserved_soc": 20, "very_low_soc": 10, "charge_from_grid": false, "date": "1709339757" }, "single_rate": { "rate": 0.321370005607605, "sell": 0.00009899999713525176 }, "seasons": [ { "id": "summer", "start": "6/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.321370005607605 }, { "id": "period_2", "start": 900, "rate": 0.5212500095367432 }, { "id": "period_1", "start": 960, "rate": 0.6300299763679504 }, { "id": "period_3", "start": 1260, "rate": 0.5212500095367432 }, { "id": "filler", "start": 1439, "rate": 0.321370005607605 } ] }, { "id": "weekend", "days": "Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.321370005607605 }, { "id": "period_2", "start": 900, "rate": 0.5212500095367432 }, { "id": "period_1", "start": 960, "rate": 0.6300299763679504 }, { "id": "period_3", "start": 1260, "rate": 0.5212500095367432 }, { "id": "filler", "start": 1439, "rate": 0.321370005607605 } ] } ], "tiers": [] }, { "id": "winter", "start": "10/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.3213590085506439 }, { "id": "period_2", "start": 900, "rate": 0.4895789921283722 }, { "id": "period_1", "start": 960, "rate": 0.5047900080680847 }, { "id": "period_3", "start": 1260, "rate": 0.4895789921283722 }, { "id": "filler", "start": 1439, "rate": 0.3213590085506439 } ] }, { "id": "weekend", "days": "Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.3213590085506439 }, { "id": "period_2", "start": 900, "rate": 0.4895789921283722 }, { "id": "period_1", "start": 960, "rate": 0.5047900080680847 }, { "id": "period_3", "start": 1260, "rate": 0.4895789921283722 }, { "id": "filler", "start": 1439, "rate": 0.3213590085506439 } ] } ], "tiers": [] } ], "seasons_sell": [] }, "schedule": { "filename": "Tariff", "source": "Tariff", "date": "2024-03-06 22:58:46 UTC", "version": "00.00.02", "reserved_soc": 20, "very_low_soc": 10, "charge_from_grid": false, "batt_mode": "self-consumption", "battery_mode": "self-consumption", "operation_mode_sub_type": "prioritize-energy", "override": false, "override_backup_soc": 30, "override_chg_dischg_rate": 0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "6/1", "end": "10/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "ZN" } ] }, { "start": "10/1", "end": "6/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "ZN" } ] } ] } } } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/admin_lib_tariff_log.json000066400000000000000000000006131505013723300321250ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:11 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/api_v1_production000066400000000000000000000001521505013723300304660ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 73002, "wattHoursLifetime": 2432969, "wattsNow": 0 } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/api_v1_production_inverters000066400000000000000000000013541505013723300325740ustar00rootroot00000000000000[ { "serialNumber": "482243033113", "lastReportDate": 1695752919, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 361 }, { "serialNumber": "482246043645", "lastReportDate": 1695752947, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 361 }, { "serialNumber": "482246047675", "lastReportDate": 1695752865, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 361 }, { "serialNumber": "482246047880", "lastReportDate": 1695752936, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 360 }, { "serialNumber": "482243033093", "lastReportDate": 1695752940, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 362 } ] api_v1_production_inverters_log.json000066400000000000000000000005011505013723300343170ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:08 GMT", "content-type": "application/json", "content-length": "748", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/api_v1_production_log.json000066400000000000000000000005011505013723300322750ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:08 GMT", "content-type": "application/json", "content-length": "106", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/info000066400000000000000000000040071505013723300257770ustar00rootroot00000000000000 123456789012 800-00654-r08 D8.2.127 4c8675 0 1 true true 500-00001-r01 02.00.00 1210 500-00011-r02 04.04.225 3eb4d3 590-00019-r01 02.00.01 1f421b 500-00002-r01 07.06.185 97768a 500-00005-r01 01.02.439 a930df 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 eaa252 500-00012-r01 02.02.00 f41c50 500-00020-r01 22.11.46 5ffaa1 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 ec2-user-envoy_uber-pkg_master:pkg-Jun-22-23-18:55:22 1687460237 02.00.4238 700-GA pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/info_log.json000066400000000000000000000005751505013723300276160ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:08 GMT", "content-type": "text/xml", "content-length": "2055", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_dry_contacts000066400000000000000000000005231505013723300322670ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300340230ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_generator000066400000000000000000000002771505013723300315670ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300333740ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_inventory000066400000000000000000000154211505013723300316330ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "836-01826-r76", "serial_num": "12345678901006", "installed": 1709749530, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1709829434, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1709749530, "img_load_date": 1709749530, "img_pnum_running": "3.0.6614_rel/31.13", "bmu_fw_version": "3.8.63", "communicating": true, "sleep_enabled": false, "percentFull": 21, "temperature": 12, "maxCellTemp": 12, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r76", "serial_num": "12345678901005", "installed": 1709410199, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1709829256, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1709410199, "img_load_date": 1709410199, "img_pnum_running": "3.0.6614_rel/31.13", "bmu_fw_version": "3.8.63", "communicating": true, "sleep_enabled": false, "percentFull": 21, "temperature": 11, "maxCellTemp": 12, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r76", "serial_num": "12345678901004", "installed": 1707622567, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1709829437, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1707622567, "img_load_date": 1707622567, "img_pnum_running": "3.0.6614_rel/31.13", "bmu_fw_version": "3.8.63", "communicating": true, "sleep_enabled": false, "percentFull": 21, "temperature": 12, "maxCellTemp": 12, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r76", "serial_num": "12345678901003", "installed": 1706749292, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1709829288, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1706749292, "img_load_date": 1706749292, "img_pnum_running": "3.0.6614_rel/31.13", "bmu_fw_version": "3.8.63", "communicating": true, "sleep_enabled": false, "percentFull": 21, "temperature": 12, "maxCellTemp": 12, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r81", "serial_num": "12345678901002", "installed": 1707197622, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1709829328, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1707197622, "img_load_date": 1707197622, "img_pnum_running": "3.0.6614_rel/31.13", "bmu_fw_version": "3.8.63", "communicating": true, "sleep_enabled": false, "percentFull": 21, "temperature": 13, "maxCellTemp": 13, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 3 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "865-00378-r27", "serial_num": "12345678901001", "installed": 1709657837, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1709829514, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1709657837, "img_load_date": 1709657837, "img_pnum_running": "3.0.5654_rel/31.13", "communicating": true, "temperature": 72, "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 15868, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300334440ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "1189", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_power000066400000000000000000000014011505013723300307230ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "12345678901006", "real_power_mw": -136000, "apparent_power_mva": -136000, "soc": 21 }, { "serial_num": "12345678901005", "real_power_mw": -128000, "apparent_power_mva": -128000, "soc": 21 }, { "serial_num": "12345678901004", "real_power_mw": -128000, "apparent_power_mva": -128000, "soc": 21 }, { "serial_num": "12345678901003", "real_power_mw": -128000, "apparent_power_mva": -128000, "soc": 21 }, { "serial_num": "12345678901002", "real_power_mw": -121000, "apparent_power_mva": -121000, "soc": 21 } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_power_log.json000066400000000000000000000004351505013723300325420ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "180", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_secctrl000066400000000000000000000017071505013723300312370ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -0.06000090762972832, "voltage_bias_v": -0.7205159664154053, "freq_bias_hz_q8": -96, "voltage_bias_v_q5": -23, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 20, "adjusted_backup_soc": 20, "agg_soc": 21, "Max_energy": 25000, "ENC_agg_soc": 21, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 5000, "ENC_agg_avail_energy": 5250, "Enc_commissioned_capacity": 25000, "Enc_max_available_capacity": 25000, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": false, "soc_recovery_entry": 2, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300330450ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "781", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_status000066400000000000000000000212501505013723300311160ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122249097612": { "device_type": 13, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "grid-tied", "phase": 1, "encharge_revision": 2, "encharge_capacity": 3500, "encharge_rated_power": 1280, "msg_retry_count": 1, "part_number": "830-01760-r37", "assembly_number": "890-00023-r39", "app_fw_version": "2.6.5973_rel/22.11", "zb_fw_version": "100F", "zb_bootloader_vers": "1.B.5", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.34", "submodule_count": 6, "submodules": { "122248094067": { "device_type": 16, "admin_state": 1, "part_number": "620-00291-r02", "assembly_number": "800-00291-r02", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.34" } }, "122249004224": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249016424": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249017193": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249017363": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r10", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.28.2-D48" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.28.2-D48" } }, "122249045297": { "device_type": 15, "admin_state": 1, "part_number": "800-01854-r06", "assembly_number": "800-01854-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.6.5973_rel/22.11" } } } } } }, "counters": { "api_ecagtInit": 1, "api_ecagtTick": 4271944, "api_ecagtDeviceInsert": 4, "api_ecagtDeviceNetworkStatus": 57950, "api_ecagtDeviceCommissionStatus": 25, "api_ecagtDeviceRemoved": 2, "api_ecagtGetDeviceCount": 4325203, "api_ecagtGetDeviceInfo": 4323962, "api_ecagtGetOneDeviceInfo": 14, "api_ecagtDevIdToSerial": 82006, "api_ecagtHandleMsg": 80765, "api_ecagtGetSubmoduleInv": 8929, "api_ecagtGetDataModelRaw": 23255, "api_ecagtSetSecCtrlBias": 387023, "api_ecagtGetSecCtrlBias": 26704, "api_ecagtGetSecCtrlBiasQ": 23498, "api_ecagtGetRelayState": 5127595, "api_ecagtSetDataModelCache": 1, "api_AggNameplate": 14, "api_ecagtGetGridFreq": 854388, "api_ecagtGetGridVolt": 854388, "api_ecagtGetGridFreq_err_notfound": 854388, "rest_StatusGet": 18, "rest_SleepGet": 1, "rest_InventoryGet": 19843, "rest_SubmodGet": 7670, "rest_SecCtrlGet": 23481, "rest_RelayGet": 6, "rest_RelayPost": 1, "rest_CommCheckGet": 599, "rest_Power": 19252, "ext_zb_send_msg": 397049, "ext_cfg_save_device": 4, "ext_cfg_save_device_err": 4, "ext_send_perf_data": 77997, "ext_event_set_stateful": 7087, "ext_event_set_modgone": 28, "rxmsg_OBJ_MDL_META_RSP": 4, "rxmsg_OBJ_MDL_INV_UPD_RSP": 305, "rxmsg_OBJ_MDL_POLL_RSP": 77997, "rxmsg_OBJ_MDL_GRID_STATUS_RSP": 8, "rxmsg_OBJ_MDL_EVENTS_MSG": 2387, "rxmsg_OBJ_MDL_SOC_CONFIG_RSP": 14, "txmsg_OBJ_MDL_META_REQ": 8, "txmsg_OBJ_MDL_ENC_RT_POLL_REQ": 17, "txmsg_OBJ_MDL_BMU_POLL_REQ": 3553, "txmsg_OBJ_MDL_PCU_POLL_REQ": 3553, "txmsg_OBJ_MDL_SECONDARY_CTRL_REQ": 387023, "txmsg_OBJ_MDL_GRID_STATUS_REQ": 8, "txmsg_OBJ_MDL_EVENTS_ACK": 2387, "txmsg_OBJ_MDL_SOC_CONFIG_REQ": 14, "txmsg_OBJ_MDL_TNS_START": 16, "rxmsg_OBJ_MDL_TNS_START_RSP": 16, "txmsg_OBJ_MDL_SET_UDMIR": 19, "rxmsg_OBJ_MDL_SET_UDMIR_RSP": 18, "txmsg_OBJ_MDL_TNS_END": 16, "rxmsg_OBJ_MDL_TNS_END_RSP": 16, "txmsg_lvs_poll": 435, "zmq_ecaHello": 1, "zmq_ecaDevInfo": 33, "zmq_ecaNetworkStatus": 57950, "zmq_ecaAppMsg": 80765, "zmq_streamdata": 854388, "zmq_live_debug": 3206, "zmq_eca_live_debug_req": 160, "zmq_nameplate": 138, "zmq_ecaSecCtrlMsg": 387023, "zmq_meterlog_ok": 1, "dmdl_FILES_INDEXED": 3, "devPollMissing": 12056, "gridProfileTransaction": 32, "fsm_retry_timeout": 8, "profile_txn_ack": 16, "backupSocLimitSet": 388486, "backupSocLimitChanged": 8, "api_ecagtGetGenRelayState": 854390 }, "secctrl": { "shutdown": false, "freq_bias_hz": 1.3899999856948853, "voltage_bias_v": 16.899999618530275, "freq_bias_hz_q8": 2235, "voltage_bias_v_q5": 540, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 15, "adjusted_backup_soc": 15, "agg_soc": 15, "Max_energy": 3500, "ENC_agg_soc": 15, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 525, "ENC_agg_avail_energy": 525, "Enc_commissioned_capacity": 3500, "Enc_max_available_capacity": 3500, "ACB_agg_soc": 0, "ACB_agg_energy": 0 }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "der1_state": 0, "der2_state": 0, "Enchg_grid_mode": "grid-tied", "Solar_grid_mode": "unknown" }, "profile": { "message": "Obsolete API, please use ivp/arf/profile" }, "fakeit": { "fake_inventory_mode": false } } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300327320ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "8871", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_meters000066400000000000000000000012501505013723300272160ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643840, "state": "enabled", "measurementType": "storage", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_meters_log.json000066400000000000000000000004351505013723300310330ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_meters_readings000066400000000000000000000142551505013723300311030ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1709829517, "actEnergyDlvd": 3165834.272, "actEnergyRcvd": 75.689, "apparentEnergy": 5529628.28, "reactEnergyLagg": 1607325.212, "reactEnergyLead": 68551.981, "instantaneousDemand": 1714.424, "activePower": 1714.424, "apparentPower": 2100.04, "reactivePower": 20.865, "pwrFactor": 0.817, "voltage": 242.367, "current": 17.326, "freq": 60.0, "channels": [ { "eid": 1778385169, "timestamp": 1709829517, "actEnergyDlvd": 1581746.293, "actEnergyRcvd": 45.89, "apparentEnergy": 2763520.42, "reactEnergyLagg": 803725.479, "reactEnergyLead": 33935.538, "instantaneousDemand": 856.031, "activePower": 856.031, "apparentPower": 1049.732, "reactivePower": 8.366, "pwrFactor": 0.822, "voltage": 121.224, "current": 8.658, "freq": 60.0 }, { "eid": 1778385170, "timestamp": 1709829517, "actEnergyDlvd": 1584087.979, "actEnergyRcvd": 29.799, "apparentEnergy": 2766107.86, "reactEnergyLagg": 803599.733, "reactEnergyLead": 34616.443, "instantaneousDemand": 858.394, "activePower": 858.394, "apparentPower": 1050.307, "reactivePower": 12.499, "pwrFactor": 0.812, "voltage": 121.143, "current": 8.668, "freq": 60.0 }, { "eid": 1778385171, "timestamp": 1709829517, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 } ] }, { "eid": 704643584, "timestamp": 1709829517, "actEnergyDlvd": 4998251.825, "actEnergyRcvd": 253960.783, "apparentEnergy": 12810156.532, "reactEnergyLagg": 185.037, "reactEnergyLead": 9170599.668, "instantaneousDemand": 129.407, "activePower": 129.407, "apparentPower": 2578.068, "reactivePower": -2230.583, "pwrFactor": 0.034, "voltage": 242.553, "current": 21.241, "freq": 60.0, "channels": [ { "eid": 1778385425, "timestamp": 1709829517, "actEnergyDlvd": 2631217.196, "actEnergyRcvd": 93777.056, "apparentEnergy": 6787276.689, "reactEnergyLagg": 79.572, "reactEnergyLead": 5042497.945, "instantaneousDemand": -201.39, "activePower": -201.39, "apparentPower": 1130.056, "reactivePower": -935.571, "pwrFactor": -0.193, "voltage": 121.334, "current": 9.316, "freq": 60.0 }, { "eid": 1778385426, "timestamp": 1709829517, "actEnergyDlvd": 2367034.629, "actEnergyRcvd": 160183.727, "apparentEnergy": 6022879.843, "reactEnergyLagg": 105.465, "reactEnergyLead": 4128101.723, "instantaneousDemand": 330.797, "activePower": 330.797, "apparentPower": 1448.012, "reactivePower": -1295.012, "pwrFactor": 0.212, "voltage": 121.219, "current": 11.925, "freq": 60.0 }, { "eid": 1778385427, "timestamp": 1709829517, "actEnergyDlvd": 1137498.944, "actEnergyRcvd": 1486121.902, "apparentEnergy": 3935472.955, "reactEnergyLagg": 1355134.893, "reactEnergyLead": 31326.355, "instantaneousDemand": -464.966, "activePower": -464.966, "apparentPower": 640.741, "reactivePower": 377.197, "pwrFactor": -0.713, "voltage": 121.248, "current": 5.259, "freq": 60.0 } ] }, { "eid": 704643840, "timestamp": 1709829517, "actEnergyDlvd": 2274358.602, "actEnergyRcvd": 2971414.344, "apparentEnergy": 7881024.906, "reactEnergyLagg": 2713630.41, "reactEnergyLead": 62717.621, "instantaneousDemand": -2579.823, "activePower": -2579.823, "apparentPower": 461.253, "reactivePower": 676.781, "pwrFactor": -1.0, "voltage": 242.582, "current": 14.575, "freq": 60.0, "channels": [ { "eid": 1778385681, "timestamp": 1709829517, "actEnergyDlvd": 1136859.658, "actEnergyRcvd": 1485292.441, "apparentEnergy": 3945551.951, "reactEnergyLagg": 1358495.518, "reactEnergyLead": 31391.267, "instantaneousDemand": -2114.856, "activePower": -2114.856, "apparentPower": -179.488, "reactivePower": 299.583, "pwrFactor": -0.193, "voltage": 121.334, "current": 9.316, "freq": 60.0 }, { "eid": 1778385682, "timestamp": 1709829517, "actEnergyDlvd": 1137498.944, "actEnergyRcvd": 1486121.902, "apparentEnergy": 3935472.955, "reactEnergyLagg": 1355134.893, "reactEnergyLead": 31326.355, "instantaneousDemand": -464.966, "activePower": -464.966, "apparentPower": 640.741, "reactivePower": 377.197, "pwrFactor": -0.713, "voltage": 121.248, "current": 5.259, "freq": 60.0 }, { "eid": 1778385683, "timestamp": 1709829517, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_meters_readings_log.json000066400000000000000000000004361505013723300327100ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "4835", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_sc_pvlimit000066400000000000000000000000611505013723300300670ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300317040ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_dry_contact_settings000066400000000000000000000042371505013723300326650ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400, "essential_end_time": 57600, "priority": 1, "black_s_start": 5, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30, "soc_high": 40, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400, "essential_end_time": 57600, "priority": 2, "black_s_start": 5, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30, "soc_high": 40, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400, "essential_end_time": 57600, "priority": 3, "black_s_start": 5, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30, "soc_high": 40, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400, "essential_end_time": 57600, "priority": 4, "black_s_start": 5, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30, "soc_high": 40, "pv_serial_nb": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300344140ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_gen_config000066400000000000000000000000031505013723300305150ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300323350ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_gen_schedule000066400000000000000000000000031505013723300310440ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_gen_schedule_log.json000066400000000000000000000004331505013723300326640ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_pel_settings000066400000000000000000000000251505013723300311230ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_pel_settings_log.json000066400000000000000000000004341505013723300327400ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:12 GMT", "content-length": "20", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/production000066400000000000000000000043231505013723300272330ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 35, "readingTime": 1709829490, "wNow": 1592, "whLifetime": 821819 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1709829518, "wNow": 1714.424, "whLifetime": 3165834.272, "varhLeadLifetime": 68551.981, "varhLagLifetime": 1607325.212, "vahLifetime": 5529628.28, "rmsCurrent": 17.326, "rmsVoltage": 242.367, "reactPwr": 20.865, "apprntPwr": 2100.04, "pwrFactor": 0.82, "whToday": 1475.272, "whLastSevenDays": 3164458.272, "vahToday": 8010.28, "varhLeadToday": 0.981, "varhLagToday": 5202.212 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1709829518, "wNow": 1843.831, "whLifetime": 7909866.491, "varhLeadLifetime": 9102047.686, "varhLagLifetime": -1607140.175, "vahLifetime": 12810156.532, "rmsCurrent": 19.934, "rmsVoltage": 242.553, "reactPwr": -2209.719, "apprntPwr": 2416.339, "pwrFactor": 0.75, "whToday": 7596.0, "whLastSevenDays": 0.0, "vahToday": 4946716.532, "varhLeadToday": 9039334.686, "varhLagToday": 9360.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1709829518, "wNow": 129.407, "whLifetime": 4744549.864, "varhLeadLifetime": 9170599.668, "varhLagLifetime": 185.037, "vahLifetime": 12810156.532, "rmsCurrent": 2.609, "rmsVoltage": 242.553, "reactPwr": -2230.583, "apprntPwr": 315.151, "pwrFactor": 0.28, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/production.json000066400000000000000000000043231505013723300302030ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 35, "readingTime": 1709829490, "wNow": 1592, "whLifetime": 821819 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1709829518, "wNow": 1714.424, "whLifetime": 3165834.272, "varhLeadLifetime": 68551.981, "varhLagLifetime": 1607325.212, "vahLifetime": 5529628.28, "rmsCurrent": 17.326, "rmsVoltage": 242.367, "reactPwr": 20.865, "apprntPwr": 2100.04, "pwrFactor": 0.82, "whToday": 1475.272, "whLastSevenDays": 3164458.272, "vahToday": 8010.28, "varhLeadToday": 0.981, "varhLagToday": 5202.212 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1709829518, "wNow": 1843.831, "whLifetime": 7909866.491, "varhLeadLifetime": 9102047.686, "varhLagLifetime": -1607140.175, "vahLifetime": 12810156.532, "rmsCurrent": 19.934, "rmsVoltage": 242.553, "reactPwr": -2209.719, "apprntPwr": 2416.339, "pwrFactor": 0.75, "whToday": 7596.0, "whLastSevenDays": 0.0, "vahToday": 4946716.532, "varhLeadToday": 9039334.686, "varhLagToday": 9360.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1709829518, "wNow": 129.407, "whLifetime": 4744549.864, "varhLeadLifetime": 9170599.668, "varhLagLifetime": 185.037, "vahLifetime": 12810156.532, "rmsCurrent": 2.609, "rmsVoltage": 242.553, "reactPwr": -2230.583, "apprntPwr": 315.151, "pwrFactor": 0.28, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/production.json_log.json000066400000000000000000000006131505013723300320120ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:09 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_3cts_and_battery_split/production_log.json000066400000000000000000000006131505013723300310420ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Tue, 26 Sep 2023 23:07:10 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/000077500000000000000000000000001505013723300242035ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/_readme000066400000000000000000000002511505013723300255200ustar00rootroot000000000000008.2.127_with_generator_running https://github.com/pyenphase/pyenphase/issues/106#issuecomment-2163569516 Snapshot taken when generator was running during power outage pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/admin_lib_tariff000066400000000000000000000130511505013723300273770ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "USD" }, "logger": "mylogger", "date": "1716803909", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "", "reserved_soc": 50, "very_low_soc": 10, "charge_from_grid": false, "date": "1716803909" }, "single_rate": { "rate": 0, "sell": 0.03999900072813034 }, "seasons": [ { "id": "all_year_long", "start": "1/1", "days": [ { "id": "all_days", "days": "Mon,Tue,Wed,Thu,Fri,Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "period_1", "start": 0, "rate": 0 } ] } ], "tiers": [] } ], "seasons_sell": [] }, "schedule": { "filename": "Tariff", "source": "Tariff", "date": "2024-05-27 10:06:36 UTC", "version": "00.00.02", "reserved_soc": 50, "very_low_soc": 10, "charge_from_grid": false, "batt_mode": "self-consumption", "battery_mode": "self-consumption", "operation_mode_sub_type": "", "override": false, "override_backup_soc": 30, "override_chg_dischg_rate": 0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "1/1", "end": "1/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "ZN" } ] } ] } } } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/admin_lib_tariff_log.json000066400000000000000000000004361505013723300312130ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "1788", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/api_v1_production000066400000000000000000000001621505013723300275520ustar00rootroot00000000000000{ "wattHoursToday": 2135, "wattHoursSevenDays": 359546, "wattHoursLifetime": 15096793, "wattsNow": 2248 } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/api_v1_production_inverters000066400000000000000000000075021505013723300316600ustar00rootroot00000000000000[ { "serialNumber": "482218039091", "lastReportDate": 1718213113, "devType": 1, "lastReportWatts": 67, "maxReportWatts": 122 }, { "serialNumber": "482218039209", "lastReportDate": 1718213114, "devType": 1, "lastReportWatts": 61, "maxReportWatts": 115 }, { "serialNumber": "482218039304", "lastReportDate": 1718213115, "devType": 1, "lastReportWatts": 69, "maxReportWatts": 132 }, { "serialNumber": "482218039386", "lastReportDate": 1718213116, "devType": 1, "lastReportWatts": 64, "maxReportWatts": 112 }, { "serialNumber": "482218039390", "lastReportDate": 1718213117, "devType": 1, "lastReportWatts": 63, "maxReportWatts": 123 }, { "serialNumber": "482218039529", "lastReportDate": 1718213143, "devType": 1, "lastReportWatts": 75, "maxReportWatts": 120 }, { "serialNumber": "482218039700", "lastReportDate": 1718213203, "devType": 1, "lastReportWatts": 89, "maxReportWatts": 135 }, { "serialNumber": "482218039736", "lastReportDate": 1718213204, "devType": 1, "lastReportWatts": 84, "maxReportWatts": 118 }, { "serialNumber": "482218039788", "lastReportDate": 1718213234, "devType": 1, "lastReportWatts": 95, "maxReportWatts": 100 }, { "serialNumber": "482218039880", "lastReportDate": 1718213235, "devType": 1, "lastReportWatts": 96, "maxReportWatts": 134 }, { "serialNumber": "482218039911", "lastReportDate": 1718213236, "devType": 1, "lastReportWatts": 97, "maxReportWatts": 133 }, { "serialNumber": "482218039918", "lastReportDate": 1718213237, "devType": 1, "lastReportWatts": 99, "maxReportWatts": 136 }, { "serialNumber": "482218042609", "lastReportDate": 1718213237, "devType": 1, "lastReportWatts": 95, "maxReportWatts": 107 }, { "serialNumber": "482218042662", "lastReportDate": 1718213239, "devType": 1, "lastReportWatts": 90, "maxReportWatts": 116 }, { "serialNumber": "482218042737", "lastReportDate": 1718213240, "devType": 1, "lastReportWatts": 96, "maxReportWatts": 130 }, { "serialNumber": "482218042901", "lastReportDate": 1718213242, "devType": 1, "lastReportWatts": 96, "maxReportWatts": 103 }, { "serialNumber": "482218043030", "lastReportDate": 1718213242, "devType": 1, "lastReportWatts": 95, "maxReportWatts": 102 }, { "serialNumber": "482218043257", "lastReportDate": 1718213243, "devType": 1, "lastReportWatts": 98, "maxReportWatts": 137 }, { "serialNumber": "482218043590", "lastReportDate": 1718213245, "devType": 1, "lastReportWatts": 95, "maxReportWatts": 108 }, { "serialNumber": "482218043592", "lastReportDate": 1718213264, "devType": 1, "lastReportWatts": 98, "maxReportWatts": 106 }, { "serialNumber": "482218043652", "lastReportDate": 1718213265, "devType": 1, "lastReportWatts": 101, "maxReportWatts": 107 }, { "serialNumber": "482218043981", "lastReportDate": 1718213266, "devType": 1, "lastReportWatts": 96, "maxReportWatts": 121 }, { "serialNumber": "482218047061", "lastReportDate": 1718213267, "devType": 1, "lastReportWatts": 100, "maxReportWatts": 125 }, { "serialNumber": "482218047087", "lastReportDate": 1718213268, "devType": 1, "lastReportWatts": 101, "maxReportWatts": 101 }, { "serialNumber": "482218047088", "lastReportDate": 1718213269, "devType": 1, "lastReportWatts": 98, "maxReportWatts": 104 }, { "serialNumber": "482218047099", "lastReportDate": 1718212938, "devType": 1, "lastReportWatts": 74, "maxReportWatts": 107 } ] pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300334620ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:48 GMT", "content-type": "application/json", "content-length": "3906", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/api_v1_production_log.json000066400000000000000000000005011505013723300313600ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:48 GMT", "content-type": "application/json", "content-length": "114", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/info000066400000000000000000000045621505013723300250700ustar00rootroot00000000000000 123456789012 800-00647-r09 D8.2.127 4c8675 0 1 true true 500-00001-r01 02.00.00 1211 500-00011-r02 04.04.225 473e45 590-00019-r01 02.00.01 1f421b 500-00002-r01 08.02.127 b9a901 500-00004-r01 01.02.475 0b79d6 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 c6cc1e 500-00012-r01 02.02.00 46a50f 500-00020-r01 31.13.24 fca566 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00022-r01 01.00.04 2cd3479 500-00001-r01 02.00.00 1211 500-00016-r01 01.00.00 8 ec2-user-envoy_uber-pkg_master:pkg-Mar-28-23-21:17:00 1680038329 02.00.3983 700-GA pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/info_log.json000066400000000000000000000005751505013723300267010ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:48 GMT", "content-type": "text/xml", "content-length": "2418", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_dry_contacts000066400000000000000000000005231505013723300313520ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300331650ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:52 GMT", "content-length": "338", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_generator000066400000000000000000000002761505013723300306510ustar00rootroot00000000000000{ "admin_state": "close", "oper_state": "close", "admin_mode": 2, "schedule": 1, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 1 } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300324570ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "189", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_inventory000066400000000000000000000044221505013723300307150ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "836-00750-r32", "serial_num": "492234001350", "installed": 1718210586, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1718213052, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1718210586, "img_load_date": 1718210586, "img_pnum_running": "2.0.6727_rel/22.15", "bmu_fw_version": "2.1.34", "communicating": true, "sleep_enabled": false, "percentFull": 98, "temperature": 27, "maxCellTemp": 27, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 2, "comm_level_2_4_ghz": 2, "led_status": 12, "dc_switch_off": false, "encharge_rev": 2, "encharge_capacity": 3360, "phase": "ph-a", "der_index": 2 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "860-00376-r37", "serial_num": "122210043898", "installed": 1718209911, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1718213328, "admin_state": 30, "admin_state_str": "ENPWR_STATE_OPER_GEN_CLOSE", "created_date": 1718209911, "img_load_date": 1718209911, "img_pnum_running": "2.0.5729_rel/22.15", "communicating": true, "temperature": 91, "comm_level_sub_ghz": 5, "comm_level_2_4_ghz": 5, "mains_admin_state": "closed", "mains_oper_state": "open", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-generator", "Enpwr_relay_state_bm": 16124, "Enpwr_curr_state_id": 128 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300325270ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:52 GMT", "content-length": "2321", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_power000066400000000000000000000003031505013723300300060ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "492234001350", "real_power_mw": -1250000, "apparent_power_mva": -1250000, "soc": 98 } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_power_log.json000066400000000000000000000004351505013723300316250ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:52 GMT", "content-length": "194", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_secctrl000066400000000000000000000017031505013723300303160ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -1.3200000524520875, "voltage_bias_v": -15.69999885559082, "freq_bias_hz_q8": -2123, "voltage_bias_v_q5": -502, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 50, "adjusted_backup_soc": 50, "agg_soc": 98, "Max_energy": 3360, "ENC_agg_soc": 98, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 1680, "ENC_agg_avail_energy": 3292, "Enc_commissioned_capacity": 3360, "Enc_max_available_capacity": 3360, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": false, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300321300ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:52 GMT", "content-length": "962", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_status000066400000000000000000000176041505013723300302110ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122210043898": { "device_type": 17, "com_interface_str": "ZigBee", "device_id": "122210043898", "admin_state": 30, "admin_state_str": "ENPWR_STATE_OPER_GEN_CLOSE", "msg_retry_count": 4, "part_number": "860-00376-r37", "assembly_number": "880-00376-r39", "app_fw_version": "2.0.5729_rel/22.15", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 2, "submodules": { "122210001626": { "device_type": 20, "admin_state": 1, "part_number": "800-01612-r04", "assembly_number": "800-01612-r04", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "", "assembly_number": "" } }, "122210036280": { "device_type": 18, "admin_state": 1, "part_number": "800-01346-r02", "assembly_number": "800-01346-r02", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "2.0.5729_rel/22.15" } } } }, "492234001350": { "device_type": 13, "com_interface_str": "ZigBee", "device_id": "492234001350", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-generator", "phase": "ph-a", "der_index": 2, "encharge_revision": 2, "encharge_capacity": 3360, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 4, "part_number": "836-00750-r32", "assembly_number": "892-00026-r33", "app_fw_version": "2.0.6727_rel/22.15", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.34", "submodule_count": 6, "submodules": { "122231063227": { "device_type": 14, "admin_state": 1, "part_number": "800-01337-r01", "assembly_number": "880-00995-r14", "dmir": { "part_number": "549-00031-r00", "assembly_number": "3.26.2-D45" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.26.1-D45" } }, "122231080486": { "device_type": 14, "admin_state": 1, "part_number": "800-01337-r01", "assembly_number": "880-00995-r14", "dmir": { "part_number": "549-00031-r00", "assembly_number": "3.26.2-D45" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.26.1-D45" } }, "122231086320": { "device_type": 14, "admin_state": 1, "part_number": "800-01337-r01", "assembly_number": "880-00995-r14", "dmir": { "part_number": "549-00031-r00", "assembly_number": "3.26.2-D45" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.26.1-D45" } }, "122231087161": { "device_type": 14, "admin_state": 1, "part_number": "800-01337-r01", "assembly_number": "880-00995-r14", "dmir": { "part_number": "549-00031-r00", "assembly_number": "3.26.2-D45" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.26.1-D45" } }, "492233001611": { "device_type": 15, "admin_state": 1, "part_number": "800-01853-r06", "assembly_number": "800-01853-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.0.6727_rel/22.15" } }, "492233010425": { "device_type": 16, "admin_state": 1, "part_number": "620-00292-r02", "assembly_number": "800-00292-r02", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "", "assembly_number": "002.001.034" } } } } } }, "secctrl": { "shutdown": false, "freq_bias_hz": -1.3200000524520875, "voltage_bias_v": -15.69999885559082, "freq_bias_hz_q8": -2123, "voltage_bias_v_q5": -502, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 50, "adjusted_backup_soc": 50, "agg_soc": 98, "Max_energy": 3360, "ENC_agg_soc": 98, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 1680, "ENC_agg_avail_energy": 3292, "Enc_commissioned_capacity": 3360, "Enc_max_available_capacity": 3360, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": false, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "open", "der1_state": 1, "der2_state": 1, "der3_state": 0, "Enchg_grid_mode": "multimode-generator", "Solar_grid_mode": "multimode-generator" } } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300320150ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:52 GMT", "content-length": "8067", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_meters000066400000000000000000000007121505013723300263030ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_meters_log.json000066400000000000000000000004351505013723300301160ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_meters_readings000066400000000000000000000114421505013723300301610ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1718213332, "actEnergyDlvd": 15097304.670, "actEnergyRcvd": 15.392, "apparentEnergy": 18631234.536, "reactEnergyLagg": 4116021.375, "reactEnergyLead": 7144.913, "instantaneousDemand": 2336.093, "activePower": 2336.093, "apparentPower": 2643.758, "reactivePower": -1111.839, "pwrFactor": 0.880, "voltage": 242.887, "current": 21.222, "freq": 60.062, "channels": [ { "eid": 1778385169, "timestamp": 1718213332, "actEnergyDlvd": 7551632.356, "actEnergyRcvd": 7.790, "apparentEnergy": 9315712.558, "reactEnergyLagg": 2061239.812, "reactEnergyLead": 2910.699, "instantaneousDemand": 1172.624, "activePower": 1172.624, "apparentPower": 1324.867, "reactivePower": -557.096, "pwrFactor": 0.883, "voltage": 121.774, "current": 10.607, "freq": 60.062 }, { "eid": 1778385170, "timestamp": 1718213332, "actEnergyDlvd": 7545672.313, "actEnergyRcvd": 7.603, "apparentEnergy": 9315521.977, "reactEnergyLagg": 2054781.564, "reactEnergyLead": 4234.214, "instantaneousDemand": 1163.469, "activePower": 1163.469, "apparentPower": 1318.892, "reactivePower": -554.743, "pwrFactor": 0.877, "voltage": 121.113, "current": 10.615, "freq": 60.062 }, { "eid": 1778385171, "timestamp": 1718213332, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.062 } ] }, { "eid": 704643584, "timestamp": 1718213332, "actEnergyDlvd": 13632727.119, "actEnergyRcvd": 6336017.380, "apparentEnergy": 23220664.459, "reactEnergyLagg": 485728.442, "reactEnergyLead": 7723369.387, "instantaneousDemand": 195.575, "activePower": 195.575, "apparentPower": 1088.544, "reactivePower": 938.575, "pwrFactor": 0.398, "voltage": 243.047, "current": 9.098, "freq": 60.000, "channels": [ { "eid": 1778385425, "timestamp": 1718213332, "actEnergyDlvd": 7037858.755, "actEnergyRcvd": 2542489.025, "apparentEnergy": 11417171.695, "reactEnergyLagg": 417029.372, "reactEnergyLead": 4242565.474, "instantaneousDemand": 267.695, "activePower": 267.695, "apparentPower": 574.709, "reactivePower": 474.518, "pwrFactor": 0.637, "voltage": 121.856, "current": 4.859, "freq": 60.000 }, { "eid": 1778385426, "timestamp": 1718213332, "actEnergyDlvd": 6594868.364, "actEnergyRcvd": 3793528.355, "apparentEnergy": 11803492.765, "reactEnergyLagg": 68699.070, "reactEnergyLead": 3480803.913, "instantaneousDemand": -72.120, "activePower": -72.120, "apparentPower": 513.834, "reactivePower": 464.057, "pwrFactor": 0.081, "voltage": 121.192, "current": 4.239, "freq": 60.000 }, { "eid": 1778385427, "timestamp": 1718213332, "actEnergyDlvd": 0.000, "actEnergyRcvd": 0.000, "apparentEnergy": 0.000, "reactEnergyLagg": 0.000, "reactEnergyLead": 0.000, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 0.000, "current": 0.000, "freq": 60.000 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_meters_readings_log.json000066400000000000000000000004361505013723300317730ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "4897", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_sc_pvlimit000066400000000000000000000000611505013723300271520ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300307670ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_dry_contact_settings000066400000000000000000000043661505013723300317530ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "apply", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 1.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "apply", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 2.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "LOAD", "grid_action": "shed", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 1.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "Fridge and Freezer", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "LOAD", "grid_action": "shed", "micro_grid_action": "apply", "gen_action": "shed", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 4.0, "black_s_start": 5.0, "override": "true", "manual_override": "true", "load_name": "HVAC and Furnace", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300335560ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:52 GMT", "content-length": "2293", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_gen_config000066400000000000000000000006361505013723300276140ustar00rootroot00000000000000{ "max_cont_gen_amps": 58.3, "min_gen_loading_perc": 5, "max_gen_efficiency_perc": 100, "name_plate_rating_wat": 14.0, "start_method": "Auto", "warm_up_mins": 0, "cool_down_mins": 0, "gen_type": "Standby", "model": "G007223-0, G007224-0, G007225-0 (14kW)", "manufacturer": "Generac", "last_updated_by": "ITK", "generator_id": "", "charge_from_generator": true } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_gen_config_log.json000066400000000000000000000004351505013723300314220ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "413", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_gen_schedule000066400000000000000000000020171505013723300301360ustar00rootroot00000000000000{ "exercise_config": { "freq_in_weeks": 1, "start": 750, "duration": 30, "day": "Sun" }, "default_soc": { "start_soc": 30, "stop_soc": 70 }, "schedule": { "default": [ { "id": "always_on", "start": "1/1", "end": "12/31", "days": [ { "id": "all_days", "week_days": "Mon,Tue,Wed,Thu,Fri,Sat,Sun", "periods": [ { "id": "normal_1", "start": 0.0, "duration": 1440.0, "start_soc": 100.0, "stop_soc": -1.0, "setting": "AON" } ] } ] } ] }, "last_updated_by": "ITK" } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_gen_schedule_log.json000066400000000000000000000004361505013723300317520ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "1038", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_pel_settings000066400000000000000000000004621505013723300302130ustar00rootroot00000000000000{ "PEL": false, "Hard_PEL": false, "Soft_PEL": false, "Export_Limit_Type": "Aggregate", "percent": false, "apparent": false, "PEL_Limit": 0.0, "Comm_Time_Loss": 0.0, "Resp_Time_SoftPEL": 0.0, "Resp_Time_HardPEL": 0.0, "msReset_HardPEL": 0.0, "PEL_db": 0.0 } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/ivp_ss_pel_settings_log.json000066400000000000000000000004351505013723300320240ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:53 GMT", "content-length": "305", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/production000066400000000000000000000047521505013723300263240ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 26, "readingTime": 1718213270, "wNow": 2317, "whLifetime": 1107526 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1718213332, "wNow": 2437.721, "whLifetime": 15097304.021, "varhLeadLifetime": 7144.584, "varhLagLifetime": 4116021.375, "vahLifetime": 18631233.77, "rmsCurrent": 22.613, "rmsVoltage": 242.804, "reactPwr": -1107.42, "apprntPwr": 2717.651, "pwrFactor": 0.92, "whToday": 2646.021, "whLastSevenDays": 360057.021, "vahToday": 2965.77, "varhLeadToday": 959.584, "varhLagToday": 3.375 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1718213332, "wNow": 2617.159, "whLifetime": 22392009.154, "varhLeadLifetime": 7716224.803, "varhLagLifetime": -3630293.203, "vahLifetime": 23220664.118, "rmsCurrent": 22.863, "rmsVoltage": 242.997, "reactPwr": -190.291, "apprntPwr": 2780.716, "pwrFactor": 0.93, "whToday": 3334.154, "whLastSevenDays": 883.154, "vahToday": 1586.118, "varhLeadToday": 0, "varhLagToday": 598 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1718213332, "wNow": 179.438, "whLifetime": 7298714.106, "varhLeadLifetime": 7723369.387, "varhLagLifetime": 485728.172, "vahLifetime": 23220664.118, "rmsCurrent": 0.25, "rmsVoltage": 242.997, "reactPwr": 917.129, "apprntPwr": 33.312, "pwrFactor": 1, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/production.json000066400000000000000000000047541505013723300272760ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 26, "readingTime": 1718213270, "wNow": 2317, "whLifetime": 1107526 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1718213330, "wNow": 2429.661, "whLifetime": 15097303.35, "varhLeadLifetime": 7144.262, "varhLagLifetime": 4116021.375, "vahLifetime": 18631233.018, "rmsCurrent": 22.389, "rmsVoltage": 242.897, "reactPwr": -1090.238, "apprntPwr": 2707.323, "pwrFactor": 0.92, "whToday": 2645.35, "whLastSevenDays": 360056.35, "vahToday": 2965.018, "varhLeadToday": 959.262, "varhLagToday": 3.375 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1718213330, "wNow": 2670.058, "whLifetime": 22392008.448, "varhLeadLifetime": 7716225.126, "varhLagLifetime": -3630293.476, "vahLifetime": 23220663.814, "rmsCurrent": 22.811, "rmsVoltage": 243.1, "reactPwr": -197.689, "apprntPwr": 2775.526, "pwrFactor": 0.92, "whToday": 3333.448, "whLastSevenDays": 882.448, "vahToday": 1585.814, "varhLeadToday": 0.0, "varhLagToday": 598.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1718213330, "wNow": 240.397, "whLifetime": 7298714.07, "varhLeadLifetime": 7723369.387, "varhLagLifetime": 485727.899, "vahLifetime": 23220663.814, "rmsCurrent": 0.422, "rmsVoltage": 243.1, "reactPwr": 892.549, "apprntPwr": 54.157, "pwrFactor": 1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/production.json_log.json000066400000000000000000000006131505013723300310750ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:50 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.127_with_generator_running/production_log.json000066400000000000000000000006131505013723300301250ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Wed, 12 Jun 2024 17:28:52 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/000077500000000000000000000000001505013723300221605ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/admin_lib_tariff000066400000000000000000000114351505013723300253600ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "EUR" }, "logger": "mylogger", "date": "1743427085", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "", "reserved_soc": 30.0, "very_low_soc": 5, "charge_from_grid": false, "date": "1746645538", "opt_schedules": false }, "single_rate": { "rate": 0.0, "sell": 0.0 }, "seasons": [], "seasons_sell": [] }, "schedule": { "filename": "Tariff", "source": "Tariff", "date": "2025-05-07 19:18:12 UTC", "version": "00.00.02", "reserved_soc": 30.0, "very_low_soc": 5, "charge_from_grid": false, "batt_mode": "self-consumption", "battery_mode": "self-consumption", "operation_mode_sub_type": "", "opt_schedules": false, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "1/1", "end": "1/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "ZN" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "ZN" } ] } ] } } } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/api_v1_production000066400000000000000000000001561505013723300255320ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 1583, "wattHoursLifetime": 1583, "wattsNow": 4 } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/api_v1_production_inverters000066400000000000000000000005411505013723300276310ustar00rootroot00000000000000[ { "serialNumber": "121734002573", "lastReportDate": 1746702346, "devType": 1, "lastReportWatts": 169, "maxReportWatts": 255 }, { "serialNumber": "121734002908", "lastReportDate": 1746702376, "devType": 1, "lastReportWatts": 167, "maxReportWatts": 255 } ] pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/info000066400000000000000000000043611505013723300230420ustar00rootroot00000000000000 envoyserial 800-00554-r03 D8.2.4264 4c8675 0 1 true true 500-00001-r01 02.00.00 1211 500-00011-r02 04.04.225 08bedf 590-00018-r01 02.00.01 426697 500-00002-r01 08.02.4264 882efd 500-00005-r01 01.02.500 c973ae 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 2aeb16 500-00012-r01 02.02.00 b473a5 500-00016-r01 02.00.00 54a6dc 500-00020-r01 31.33.32 7a3feb 500-00022-r01 01.00.04 2cd3479 500-00001-r01 02.00.00 1211 500-00016-r01 01.00.00 384 -envoy_uber-pkg_master:pkg-Jul-16-24-16:04:25 1721146183 02.00.5338 700-GA pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300273260ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_generator000066400000000000000000000002771505013723300266270ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 0, "type": 1 } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_inventory000066400000000000000000000000031505013723300266610ustar00rootroot00000000000000[] pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_power000066400000000000000000000000271505013723300257660ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_secctrl000066400000000000000000000016101505013723300262700ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 30, "adjusted_backup_soc": 30, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 5, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_status000066400000000000000000000026061505013723300261620ustar00rootroot00000000000000{ "inventory": { "serial_nums": {} }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 30, "adjusted_backup_soc": 30, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 5, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "srt12_state": "open", "srt13_state": "open", "der1_state": 0, "der2_state": 0, "der3_state": 0, "Enchg_grid_mode": "unknown", "Solar_grid_mode": "unknown" } } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_meters000066400000000000000000000007141505013723300242620ustar00rootroot00000000000000[ { "eid": 704643328, "state": "disabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "disabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_meters_readings000066400000000000000000000111111505013723300261270ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1746702920, "actEnergyDlvd": 1586.658, "actEnergyRcvd": 0.0, "apparentEnergy": 29325.215, "reactEnergyLagg": 116.526, "reactEnergyLead": 34.976, "instantaneousDemand": 4.19, "activePower": 4.19, "apparentPower": 114.544, "reactivePower": -0.0, "pwrFactor": 0.0, "voltage": 713.266, "current": 0.479, "freq": 50.125, "channels": [ { "eid": 1778385169, "timestamp": 1746702920, "actEnergyDlvd": 508.407, "actEnergyRcvd": 0.0, "apparentEnergy": 11902.303, "reactEnergyLagg": 0.632, "reactEnergyLead": 3.614, "instantaneousDemand": 2.311, "activePower": 2.311, "apparentPower": 47.889, "reactivePower": -0.0, "pwrFactor": 0.0, "voltage": 238.537, "current": 0.2, "freq": 50.125 }, { "eid": 1778385170, "timestamp": 1746702920, "actEnergyDlvd": 597.104, "actEnergyRcvd": 0.0, "apparentEnergy": 875.964, "reactEnergyLagg": 115.894, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": -0.0, "reactivePower": -0.0, "pwrFactor": 0.0, "voltage": 236.443, "current": -0.0, "freq": 50.125 }, { "eid": 1778385171, "timestamp": 1746702920, "actEnergyDlvd": 481.147, "actEnergyRcvd": 0.0, "apparentEnergy": 16546.948, "reactEnergyLagg": 0.0, "reactEnergyLead": 31.361, "instantaneousDemand": 1.879, "activePower": 1.879, "apparentPower": 66.655, "reactivePower": -0.0, "pwrFactor": 0.0, "voltage": 238.287, "current": 0.279, "freq": 50.125 } ] }, { "eid": 704643584, "timestamp": 1746702920, "actEnergyDlvd": 0.0, "actEnergyRcvd": 1914.228, "apparentEnergy": 17556.27, "reactEnergyLagg": 115.611, "reactEnergyLead": 29.727, "instantaneousDemand": -4.863, "activePower": -4.863, "apparentPower": 69.162, "reactivePower": 0.779, "pwrFactor": 0.0, "voltage": 713.502, "current": 0.291, "freq": 50.062, "channels": [ { "eid": 1778385425, "timestamp": 1746702920, "actEnergyDlvd": 0.0, "actEnergyRcvd": 658.332, "apparentEnergy": 9382.18, "reactEnergyLagg": 0.521, "reactEnergyLead": 3.279, "instantaneousDemand": -2.85, "activePower": -2.85, "apparentPower": 37.998, "reactivePower": -0.0, "pwrFactor": 0.0, "voltage": 238.487, "current": 0.16, "freq": 50.062 }, { "eid": 1778385426, "timestamp": 1746702920, "actEnergyDlvd": 0.0, "actEnergyRcvd": 557.94, "apparentEnergy": 7784.254, "reactEnergyLagg": 115.089, "reactEnergyLead": 0.0, "instantaneousDemand": -2.013, "activePower": -2.013, "apparentPower": 31.163, "reactivePower": 0.779, "pwrFactor": 0.0, "voltage": 236.677, "current": 0.131, "freq": 50.062 }, { "eid": 1778385427, "timestamp": 1746702920, "actEnergyDlvd": 0.0, "actEnergyRcvd": 697.956, "apparentEnergy": 389.836, "reactEnergyLagg": 0.001, "reactEnergyLead": 26.448, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 238.339, "current": 0.0, "freq": 50.062 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_sc_pvlimit000066400000000000000000000000611505013723300251270ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300277270ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ss_gen_config000066400000000000000000000000031505013723300255550ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ss_gen_schedule000066400000000000000000000000031505013723300261040ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/ivp_ss_pel_settings000066400000000000000000000000251505013723300261630ustar00rootroot00000000000000{ "PEL": false } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/production000066400000000000000000000046341505013723300243000ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 38, "readingTime": 1746702889, "wNow": 5521, "whLifetime": 32465106 }, { "type": "eim", "activeCount": 0, "measurementType": "production", "readingTime": 1746702919, "wNow": 4.44, "whLifetime": 1586.658, "varhLeadLifetime": 34.976, "varhLagLifetime": 116.526, "vahLifetime": 29325.215, "rmsCurrent": 0.481, "rmsVoltage": 713.491, "reactPwr": -0.0, "apprntPwr": 114.476, "pwrFactor": 0.0, "whToday": 69.658, "whLastSevenDays": 1520.658, "vahToday": 1235.215, "varhLeadToday": 1.976, "varhLagToday": 5.526 } ], "consumption": [ { "type": "eim", "activeCount": 0, "measurementType": "total-consumption", "readingTime": 1746702919, "wNow": -0.965, "whLifetime": -18.153, "varhLeadLifetime": -5.249, "varhLagLifetime": -0.915, "vahLifetime": 17556.27, "rmsCurrent": 0.19, "rmsVoltage": 713.729, "reactPwr": 0.805, "apprntPwr": 45.593, "pwrFactor": 0.0, "whToday": 1.0, "whLastSevenDays": 0.0, "vahToday": 741.27, "varhLeadToday": 0.0, "varhLagToday": 0.0 }, { "type": "eim", "activeCount": 0, "measurementType": "net-consumption", "readingTime": 1746702919, "wNow": -5.404, "whLifetime": -2223.645, "varhLeadLifetime": 29.727, "varhLagLifetime": 115.611, "vahLifetime": 17556.27, "rmsCurrent": -0.291, "rmsVoltage": 713.729, "reactPwr": 0.805, "apprntPwr": -69.155, "pwrFactor": 0.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.4264_metered_noct/production.json000066400000000000000000000204351505013723300252450ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 38, "readingTime": 1746702889, "wNow": 5521, "whLifetime": 32465106 }, { "type": "eim", "activeCount": 0, "measurementType": "production", "readingTime": 1746702913, "wNow": 3.659, "whLifetime": 1586.658, "varhLeadLifetime": 34.976, "varhLagLifetime": 116.526, "vahLifetime": 29325.215, "rmsCurrent": 0.484, "rmsVoltage": 714.399, "reactPwr": -0.0, "apprntPwr": 115.121, "pwrFactor": 0.0, "whToday": 69.658, "whLastSevenDays": 1520.658, "vahToday": 1235.215, "varhLeadToday": 1.976, "varhLagToday": 5.526, "lines": [ { "wNow": 2.325, "whLifetime": 508.407, "varhLeadLifetime": 3.614, "varhLagLifetime": 0.632, "vahLifetime": 11902.303, "rmsCurrent": 0.202, "rmsVoltage": 238.77, "reactPwr": -0.0, "apprntPwr": 48.155, "pwrFactor": 0.0, "whToday": 22.407, "whLastSevenDays": 487.407, "vahToday": 502.303, "varhLeadToday": 0.614, "varhLagToday": 0.632 }, { "wNow": 0.0, "whLifetime": 597.104, "varhLeadLifetime": 0.0, "varhLagLifetime": 115.894, "vahLifetime": 875.964, "rmsCurrent": -0.0, "rmsVoltage": 236.917, "reactPwr": -0.0, "apprntPwr": -0.0, "pwrFactor": 0.0, "whToday": 26.104, "whLastSevenDays": 572.104, "vahToday": 37.964, "varhLeadToday": 0.0, "varhLagToday": 4.894 }, { "wNow": 1.334, "whLifetime": 481.147, "varhLeadLifetime": 31.361, "varhLagLifetime": 0.0, "vahLifetime": 16546.948, "rmsCurrent": 0.281, "rmsVoltage": 238.712, "reactPwr": -0.0, "apprntPwr": 66.966, "pwrFactor": 0.0, "whToday": 21.147, "whLastSevenDays": 461.147, "vahToday": 694.948, "varhLeadToday": 1.361, "varhLagToday": 0.0 } ] } ], "consumption": [ { "type": "eim", "activeCount": 0, "measurementType": "total-consumption", "readingTime": 1746702913, "wNow": -1.837, "whLifetime": -18.153, "varhLeadLifetime": -5.249, "varhLagLifetime": -0.915, "vahLifetime": 17556.27, "rmsCurrent": 0.193, "rmsVoltage": 714.57, "reactPwr": 0.595, "apprntPwr": 46.343, "pwrFactor": -0.32, "whToday": 1.0, "whLastSevenDays": 0.0, "vahToday": 741.27, "varhLeadToday": 0.0, "varhLagToday": 0.0, "lines": [ { "wNow": -0.319, "whLifetime": -7.908, "varhLeadLifetime": -0.335, "varhLagLifetime": -0.111, "vahLifetime": 9382.18, "rmsCurrent": 0.044, "rmsVoltage": 238.896, "reactPwr": -0.0, "apprntPwr": 10.608, "pwrFactor": -0.03, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 396.18, "varhLeadToday": 0.0, "varhLagToday": 0.0 }, { "wNow": -2.851, "whLifetime": 1.946, "varhLeadLifetime": 0.0, "varhLagLifetime": -0.805, "vahLifetime": 7784.254, "rmsCurrent": -0.133, "rmsVoltage": 236.932, "reactPwr": 0.595, "apprntPwr": -31.399, "pwrFactor": -1.0, "whToday": 1.946, "whLastSevenDays": 0.946, "vahToday": 328.254, "varhLeadToday": 0.0, "varhLagToday": 0.0 }, { "wNow": 1.334, "whLifetime": -12.192, "varhLeadLifetime": -4.914, "varhLagLifetime": 0.001, "vahLifetime": 389.836, "rmsCurrent": 0.281, "rmsVoltage": 238.742, "reactPwr": 0.0, "apprntPwr": 67.134, "pwrFactor": 0.02, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 16.836, "varhLeadToday": 0.0, "varhLagToday": 0.001 } ] }, { "type": "eim", "activeCount": 0, "measurementType": "net-consumption", "readingTime": 1746702913, "wNow": -5.495, "whLifetime": -2223.645, "varhLeadLifetime": 29.727, "varhLagLifetime": 115.611, "vahLifetime": 17556.27, "rmsCurrent": -0.291, "rmsVoltage": 714.57, "reactPwr": 0.595, "apprntPwr": -69.159, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0, "lines": [ { "wNow": -2.644, "whLifetime": -800.35, "varhLeadLifetime": 3.279, "varhLagLifetime": 0.521, "vahLifetime": 9382.18, "rmsCurrent": -0.158, "rmsVoltage": 238.896, "reactPwr": -0.0, "apprntPwr": -37.76, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": -2.851, "whLifetime": -520.723, "varhLeadLifetime": 0.0, "varhLagLifetime": 115.089, "vahLifetime": 7784.254, "rmsCurrent": -0.133, "rmsVoltage": 236.932, "reactPwr": 0.595, "apprntPwr": -31.399, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 0.0, "whLifetime": -902.572, "varhLeadLifetime": 26.448, "varhLagLifetime": 0.001, "vahLifetime": 389.836, "rmsCurrent": 0.0, "rmsVoltage": 238.742, "reactPwr": 0.0, "apprntPwr": 0.0, "pwrFactor": 0.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ] } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/000077500000000000000000000000001505013723300252125ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/admin_lib_tariff000066400000000000000000000225461505013723300304170ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "USD" }, "logger": "mylogger", "date": "1722602347", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "prioritize-energy", "reserved_soc": 20.0, "very_low_soc": 10, "charge_from_grid": false, "date": "1722551964", "opt_schedules": true }, "single_rate": { "rate": 0.36445000767707825, "sell": 0.0 }, "seasons": [ { "id": "summer", "start": "6/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.36445000767707825 }, { "id": "period_2", "start": 900, "rate": 0.42302998900413513 }, { "id": "period_1", "start": 960, "rate": 0.5878000259399414 }, { "id": "period_3", "start": 1260, "rate": 0.42302998900413513 }, { "id": "filler", "start": 1439, "rate": 0.36445000767707825 } ] }, { "id": "weekend", "days": "Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.36445000767707825 }, { "id": "period_2", "start": 900, "rate": 0.42302998900413513 }, { "id": "period_1", "start": 960, "rate": 0.5878000259399414 }, { "id": "period_3", "start": 1260, "rate": 0.42302998900413513 }, { "id": "filler", "start": 1439, "rate": 0.36445000767707825 } ] } ], "tiers": [] }, { "id": "winter", "start": "10/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.31376999616622925 }, { "id": "period_2", "start": 900, "rate": 0.3282800018787384 }, { "id": "period_1", "start": 960, "rate": 0.3513999879360199 }, { "id": "period_3", "start": 1260, "rate": 0.3282800018787384 }, { "id": "filler", "start": 1439, "rate": 0.31376999616622925 } ] }, { "id": "weekend", "days": "Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CP", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.31376999616622925 }, { "id": "period_2", "start": 900, "rate": 0.3282800018787384 }, { "id": "period_1", "start": 960, "rate": 0.3513999879360199 }, { "id": "period_3", "start": 1260, "rate": 0.3282800018787384 }, { "id": "filler", "start": 1439, "rate": 0.31376999616622925 } ] } ], "tiers": [] } ], "seasons_sell": [] }, "schedule": { "filename": "", "source": "", "date": "2024-08-06 17:56:47 UTC", "version": "", "reserved_soc": 30.0, "very_low_soc": 10, "charge_from_grid": false, "batt_mode": "self-consumption", "battery_mode": "self-consumption", "operation_mode_sub_type": "", "opt_schedules": false, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ] } } } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/admin_lib_tariff_log.json000066400000000000000000000005461505013723300322240ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "3059", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/api_v1_production000066400000000000000000000001751505013723300305650ustar00rootroot00000000000000{ "wattHoursToday": 12364, "wattHoursSevenDays": 13418759, "wattHoursLifetime": 13431123, "wattsNow": 7081 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/api_v1_production_inverters000066400000000000000000000137561505013723300326770ustar00rootroot00000000000000[ { "serialNumber": "202330057549", "lastReportDate": 1722966851, "devType": 1, "lastReportWatts": 184, "maxReportWatts": 335 }, { "serialNumber": "202330061346", "lastReportDate": 1722966761, "devType": 1, "lastReportWatts": 181, "maxReportWatts": 333 }, { "serialNumber": "202330061485", "lastReportDate": 1722966882, "devType": 1, "lastReportWatts": 15, "maxReportWatts": 332 }, { "serialNumber": "202330048668", "lastReportDate": 1722966762, "devType": 1, "lastReportWatts": 155, "maxReportWatts": 247 }, { "serialNumber": "202330056742", "lastReportDate": 1722966763, "devType": 1, "lastReportWatts": 295, "maxReportWatts": 296 }, { "serialNumber": "202330048813", "lastReportDate": 1722966671, "devType": 1, "lastReportWatts": 291, "maxReportWatts": 293 }, { "serialNumber": "202330058398", "lastReportDate": 1722966822, "devType": 1, "lastReportWatts": 302, "maxReportWatts": 337 }, { "serialNumber": "202330048928", "lastReportDate": 1722966672, "devType": 1, "lastReportWatts": 290, "maxReportWatts": 292 }, { "serialNumber": "202330058090", "lastReportDate": 1722966823, "devType": 1, "lastReportWatts": 180, "maxReportWatts": 333 }, { "serialNumber": "202330061749", "lastReportDate": 1722966823, "devType": 1, "lastReportWatts": 184, "maxReportWatts": 337 }, { "serialNumber": "202330059996", "lastReportDate": 1722966825, "devType": 1, "lastReportWatts": 182, "maxReportWatts": 337 }, { "serialNumber": "202330066965", "lastReportDate": 1722966826, "devType": 1, "lastReportWatts": 153, "maxReportWatts": 242 }, { "serialNumber": "202330058066", "lastReportDate": 1722966826, "devType": 1, "lastReportWatts": 156, "maxReportWatts": 249 }, { "serialNumber": "202330054362", "lastReportDate": 1722966701, "devType": 1, "lastReportWatts": 291, "maxReportWatts": 294 }, { "serialNumber": "202330056305", "lastReportDate": 1722966827, "devType": 1, "lastReportWatts": 181, "maxReportWatts": 335 }, { "serialNumber": "202330067698", "lastReportDate": 1722966828, "devType": 1, "lastReportWatts": 305, "maxReportWatts": 340 }, { "serialNumber": "202330061684", "lastReportDate": 1722966829, "devType": 1, "lastReportWatts": 186, "maxReportWatts": 338 }, { "serialNumber": "202330062816", "lastReportDate": 1722966791, "devType": 1, "lastReportWatts": 184, "maxReportWatts": 335 }, { "serialNumber": "202330056471", "lastReportDate": 1722966792, "devType": 1, "lastReportWatts": 293, "maxReportWatts": 293 }, { "serialNumber": "202330062671", "lastReportDate": 1722966793, "devType": 1, "lastReportWatts": 155, "maxReportWatts": 246 }, { "serialNumber": "202330062411", "lastReportDate": 1722966830, "devType": 1, "lastReportWatts": 181, "maxReportWatts": 333 }, { "serialNumber": "202330063659", "lastReportDate": 1722966794, "devType": 1, "lastReportWatts": 179, "maxReportWatts": 331 }, { "serialNumber": "202330057375", "lastReportDate": 1722966795, "devType": 1, "lastReportWatts": 292, "maxReportWatts": 292 }, { "serialNumber": "202330058599", "lastReportDate": 1722966702, "devType": 1, "lastReportWatts": 155, "maxReportWatts": 245 }, { "serialNumber": "202330059925", "lastReportDate": 1722966831, "devType": 1, "lastReportWatts": 182, "maxReportWatts": 334 }, { "serialNumber": "202330061497", "lastReportDate": 1722966853, "devType": 1, "lastReportWatts": 184, "maxReportWatts": 335 }, { "serialNumber": "202330062327", "lastReportDate": 1722966854, "devType": 1, "lastReportWatts": 185, "maxReportWatts": 337 }, { "serialNumber": "202330068303", "lastReportDate": 1722966882, "devType": 1, "lastReportWatts": 30, "maxReportWatts": 336 }, { "serialNumber": "202330061061", "lastReportDate": 1722966855, "devType": 1, "lastReportWatts": 302, "maxReportWatts": 333 }, { "serialNumber": "202330052050", "lastReportDate": 1722966883, "devType": 1, "lastReportWatts": 182, "maxReportWatts": 337 }, { "serialNumber": "202330052070", "lastReportDate": 1722966856, "devType": 1, "lastReportWatts": 155, "maxReportWatts": 245 }, { "serialNumber": "202330062263", "lastReportDate": 1722966796, "devType": 1, "lastReportWatts": 181, "maxReportWatts": 333 }, { "serialNumber": "202330057882", "lastReportDate": 1722966857, "devType": 1, "lastReportWatts": 154, "maxReportWatts": 243 }, { "serialNumber": "202330061595", "lastReportDate": 1722966858, "devType": 1, "lastReportWatts": 303, "maxReportWatts": 338 }, { "serialNumber": "202330062100", "lastReportDate": 1722966859, "devType": 1, "lastReportWatts": 182, "maxReportWatts": 336 } ] api_v1_production_inverters_log.json000066400000000000000000000006221505013723300344150ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:39 GMT", "content-type": "application/json", "content-length": "5286", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/api_v1_production_log.json000066400000000000000000000006211505013723300323720ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:39 GMT", "content-type": "application/json", "content-length": "117", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/info000066400000000000000000000045541505013723300261000ustar00rootroot00000000000000 123456789012 800-00664-r05 D8.2.4286 4c8675 0 1 true true 500-00001-r01 02.00.00 1211 500-00011-r02 04.04.225 08bedf 590-00019-r01 02.00.01 1f421b 500-00002-r01 08.02.4286 5f4d83 500-00004-r01 01.02.488 c973ae 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 bc6548 500-00012-r01 02.02.00 bc6548 500-00020-r01 31.33.36 c427b6 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 19ae14 500-00022-r01 01.00.04 2cd3479 500-00016-r01 01.00.00 8 500-00001-r01 02.00.00 1211 -envoy_uber-pkg_master:pkg-Jul-31-24-15:29:57 1722440021 02.00.5388 700-GA pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/info_log.json000066400000000000000000000007451505013723300277070ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:39 GMT", "content-type": "text/xml", "content-length": "2412", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_dry_contacts000066400000000000000000000005231505013723300323610ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000005451505013723300341170ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "338", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_generator000066400000000000000000000002771505013723300316610ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 0, "type": 1 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_generator_log.json000066400000000000000000000005451505013723300334700ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_inventory000066400000000000000000000154051505013723300317270ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "836-01826-r76", "serial_num": "492320000140", "installed": 1722887725, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1722966950, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1722887725, "img_load_date": 1722887725, "img_pnum_running": "3.0.7545_rel/31.33", "bmu_fw_version": "3.8.63", "communicating": true, "sleep_enabled": false, "percentFull": 39, "temperature": 18, "maxCellTemp": 19, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r76", "serial_num": "492320000148", "installed": 1722887786, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1722966985, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1722887786, "img_load_date": 1722887786, "img_pnum_running": "3.0.7545_rel/31.33", "bmu_fw_version": "3.8.69", "communicating": true, "sleep_enabled": false, "percentFull": 48, "temperature": 19, "maxCellTemp": 19, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r76", "serial_num": "492320000149", "installed": 1722887766, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1722966742, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1722887766, "img_load_date": 1722887766, "img_pnum_running": "3.0.7545_rel/31.33", "bmu_fw_version": "3.8.69", "communicating": true, "sleep_enabled": false, "percentFull": 48, "temperature": 19, "maxCellTemp": 19, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r76", "serial_num": "492320000158", "installed": 1722887775, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1722966878, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1722887775, "img_load_date": 1722887775, "img_pnum_running": "3.0.7545_rel/31.33", "bmu_fw_version": "3.8.69", "communicating": true, "sleep_enabled": false, "percentFull": 49, "temperature": 19, "maxCellTemp": 19, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01826-r81", "serial_num": "492335008361", "installed": 1722887827, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1722966808, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1722887827, "img_load_date": 1722887827, "img_pnum_running": "3.0.7545_rel/31.33", "bmu_fw_version": "3.8.69", "communicating": true, "sleep_enabled": false, "percentFull": 48, "temperature": 23, "maxCellTemp": 23, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 3 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "865-00378-r27", "serial_num": "482326107450", "installed": 1722887831, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1722967000, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1722887831, "img_load_date": 1722887831, "img_pnum_running": "3.0.6297_rel/31.33", "communicating": true, "temperature": 83, "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 15868, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_inventory_log.json000066400000000000000000000005461505013723300335400ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "6916", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_power000066400000000000000000000015431505013723300310240ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "492320000140", "real_power_mw": -1324000, "apparent_power_mva": -1324000, "soc": 39 }, { "serial_num": "492320000148", "real_power_mw": -1324000, "apparent_power_mva": -1324000, "soc": 48 }, { "serial_num": "492320000149", "real_power_mw": -1316000, "apparent_power_mva": -1316000, "soc": 48 }, { "serial_num": "492320000158", "real_power_mw": -1317000, "apparent_power_mva": -1317000, "soc": 49 }, { "serial_num": "492335008361", "real_power_mw": -1311000, "apparent_power_mva": -1311000, "soc": 48 } ] } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_power_log.json000066400000000000000000000005451505013723300326360ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "866", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_secctrl000066400000000000000000000017111505013723300313240ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -0.4749099016189575, "voltage_bias_v": -5.702916622161865, "freq_bias_hz_q8": -763, "voltage_bias_v_q5": -182, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 46, "Max_energy": 25000, "ENC_agg_soc": 46, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 25000, "ENC_agg_avail_energy": 11600, "Enc_commissioned_capacity": 25000, "Enc_max_available_capacity": 25000, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": false, "soc_recovery_entry": 2, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_secctrl_log.json000066400000000000000000000005451505013723300331410ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "968", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_status000066400000000000000000000757011505013723300312220ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "202320016844": { "device_type": 22, "com_interface_str": "USB", "device_id": "202320016844", "admin_state": 43, "admin_state_str": "ENS_DEVICE_STATE_READY", "msg_retry_count": 0, "part_number": "800-01821-r05", "assembly_number": "880-01821-r05", "app_fw_version": "3.0.356_rel/31.33", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 1, "submodules": { "202320016844": { "device_type": 24, "admin_state": 1, "part_number": "800-01821-r05", "assembly_number": "880-01821-r05", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00004-01", "assembly_number": "3.0.356_rel/31.33" } } } }, "482326107450": { "device_type": 17, "com_interface_str": "CAN", "device_id": "482326107450", "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "msg_retry_count": 8, "part_number": "865-00378-r27", "assembly_number": "885-00378-r29", "app_fw_version": "3.0.6297_rel/31.33", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 2, "submodules": { "482325046389": { "device_type": 18, "admin_state": 1, "part_number": "800-01820-r05", "assembly_number": "800-01820-r05", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "3.0.6297_rel/31.33" } }, "482325061805": { "device_type": 20, "admin_state": 1, "part_number": "800-01861-r01", "assembly_number": "800-01861-r01", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "", "assembly_number": "" } } } }, "492320000140": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492320000140", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 3, "encharge_capacity": 5000, "encharge_rated_power": 3840, "reported_enc_grid_state": "multimode-ongrid", "msg_retry_count": 10, "part_number": "836-01826-r76", "assembly_number": "892-00024-r78", "app_fw_version": "3.0.7545_rel/31.33", "ibl_fw_version": "3.1.813-8c003b", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "3.8.63", "submodule_count": 7, "submodules": { "122317019705": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317051271": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317051291": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317051462": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317051637": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317051736": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "492319003611": { "device_type": 15, "admin_state": 1, "part_number": "800-00329-r06", "assembly_number": "880-00329-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "3.0.7545_rel/31.33" } } } }, "492320000148": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492320000148", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 3, "encharge_capacity": 5000, "encharge_rated_power": 3840, "reported_enc_grid_state": "multimode-ongrid", "msg_retry_count": 11, "part_number": "836-01826-r76", "assembly_number": "892-00024-r78", "app_fw_version": "3.0.7545_rel/31.33", "ibl_fw_version": "3.1.813-8c003b", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "3.8.69", "submodule_count": 7, "submodules": { "122317051695": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317051716": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317063692": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317105035": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122318007870": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122318008119": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "492319003534": { "device_type": 15, "admin_state": 1, "part_number": "800-00329-r06", "assembly_number": "880-00329-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "3.0.7545_rel/31.33" } } } }, "492320000149": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492320000149", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 3, "encharge_capacity": 5000, "encharge_rated_power": 3840, "reported_enc_grid_state": "multimode-ongrid", "msg_retry_count": 11, "part_number": "836-01826-r76", "assembly_number": "892-00024-r78", "app_fw_version": "3.0.7545_rel/31.33", "ibl_fw_version": "3.1.813-8c003b", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "3.8.69", "submodule_count": 7, "submodules": { "122317051503": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317063576": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317063635": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317104970": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122318008252": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122318008283": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "492319003457": { "device_type": 15, "admin_state": 1, "part_number": "800-00329-r06", "assembly_number": "880-00329-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "3.0.7545_rel/31.33" } } } }, "492320000158": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492320000158", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 3, "encharge_capacity": 5000, "encharge_rated_power": 3840, "reported_enc_grid_state": "multimode-ongrid", "msg_retry_count": 11, "part_number": "836-01826-r76", "assembly_number": "892-00024-r78", "app_fw_version": "3.0.7545_rel/31.33", "ibl_fw_version": "3.1.813-8c003b", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "3.8.69", "submodule_count": 7, "submodules": { "122317051680": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317051706": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317063671": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317104966": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122317104984": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122318007500": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r31", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "492319003692": { "device_type": 15, "admin_state": 1, "part_number": "800-00329-r06", "assembly_number": "880-00329-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "3.0.7545_rel/31.33" } } } }, "492335008361": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492335008361", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 3, "encharge_revision": 3, "encharge_capacity": 5000, "encharge_rated_power": 3840, "reported_enc_grid_state": "multimode-ongrid", "msg_retry_count": 9, "part_number": "836-01826-r81", "assembly_number": "892-00024-r83", "app_fw_version": "3.0.7545_rel/31.33", "ibl_fw_version": "3.1.813-8c003b", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "3.8.69", "submodule_count": 7, "submodules": { "122333046440": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r36", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122333046545": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r36", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122333046570": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r36", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122333046574": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r36", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122333046620": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r36", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "122333046641": { "device_type": 14, "admin_state": 1, "part_number": "800-01729-r02", "assembly_number": "880-01691-r36", "dmir": { "part_number": "549-00056-r00", "assembly_number": "4.36.1-D36" }, "procload": { "part_number": "521-00008-r00", "assembly_number": "4.36.1-D36" } }, "492335004844": { "device_type": 15, "admin_state": 1, "part_number": "800-00329-r06", "assembly_number": "880-00329-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "3.0.7545_rel/31.33" } } } } } }, "secctrl": { "shutdown": false, "freq_bias_hz": -0.4749099016189575, "voltage_bias_v": -5.702916622161865, "freq_bias_hz_q8": -763, "voltage_bias_v_q5": -182, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 46, "Max_energy": 25000, "ENC_agg_soc": 46, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 25000, "ENC_agg_avail_energy": 11600, "Enc_commissioned_capacity": 25000, "Enc_max_available_capacity": 25000, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": false, "soc_recovery_entry": 2, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "srt12_state": "open", "srt13_state": "open", "der1_state": 1, "der2_state": 1, "der3_state": 1, "Enchg_grid_mode": "multimode-ongrid", "Solar_grid_mode": "multimode-ongrid" } } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_status_log.json000066400000000000000000000005471505013723300330270ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "31680", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_meters000066400000000000000000000012501505013723300273100ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643840, "state": "enabled", "measurementType": "storage", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_meters_log.json000066400000000000000000000005451505013723300311270ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "679", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_meters_readings000066400000000000000000000162371505013723300311770ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1722967007, "actEnergyDlvd": 13431336.968, "actEnergyRcvd": 164.852, "apparentEnergy": 17695037.667, "reactEnergyLagg": 2870787.07, "reactEnergyLead": 197885.914, "instantaneousDemand": 7131.017, "activePower": 7131.017, "apparentPower": 7237.365, "reactivePower": -3.719, "pwrFactor": 0.985, "voltage": 247.307, "current": 58.537, "freq": 60.0, "channels": [ { "eid": 1778385169, "timestamp": 1722967007, "actEnergyDlvd": 6709437.261, "actEnergyRcvd": 92.996, "apparentEnergy": 8841528.936, "reactEnergyLagg": 1433208.527, "reactEnergyLead": 100991.799, "instantaneousDemand": 3562.174, "activePower": 3562.174, "apparentPower": 3615.485, "reactivePower": 2.24, "pwrFactor": 0.984, "voltage": 123.571, "current": 29.262, "freq": 60.0 }, { "eid": 1778385170, "timestamp": 1722967007, "actEnergyDlvd": 6721899.707, "actEnergyRcvd": 71.856, "apparentEnergy": 8853508.731, "reactEnergyLagg": 1437578.543, "reactEnergyLead": 96894.114, "instantaneousDemand": 3568.843, "activePower": 3568.843, "apparentPower": 3621.88, "reactivePower": -5.959, "pwrFactor": 0.986, "voltage": 123.736, "current": 29.276, "freq": 60.0 }, { "eid": 1778385171, "timestamp": 1722967007, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 } ] }, { "eid": 704643584, "timestamp": 1722967007, "actEnergyDlvd": 5855939.23, "actEnergyRcvd": 4173334.272, "apparentEnergy": 25731843.679, "reactEnergyLagg": 13884.226, "reactEnergyLead": 18899511.617, "instantaneousDemand": 1749.504, "activePower": 1749.504, "apparentPower": 2826.5, "reactivePower": -1381.858, "pwrFactor": 0.618, "voltage": 247.172, "current": 22.923, "freq": 60.0, "channels": [ { "eid": 1778385425, "timestamp": 1722967007, "actEnergyDlvd": 2817654.26, "actEnergyRcvd": 2329054.288, "apparentEnergy": 12904982.372, "reactEnergyLagg": 8801.054, "reactEnergyLead": 9410020.986, "instantaneousDemand": 809.907, "activePower": 809.907, "apparentPower": 1438.017, "reactivePower": -851.171, "pwrFactor": 0.563, "voltage": 123.482, "current": 11.642, "freq": 60.0 }, { "eid": 1778385426, "timestamp": 1722967007, "actEnergyDlvd": 3038284.97, "actEnergyRcvd": 1844279.984, "apparentEnergy": 12826861.306, "reactEnergyLagg": 5083.172, "reactEnergyLead": 9489490.631, "instantaneousDemand": 939.597, "activePower": 939.597, "apparentPower": 1388.484, "reactivePower": -530.687, "pwrFactor": 0.674, "voltage": 123.69, "current": 11.281, "freq": 60.0 }, { "eid": 1778385427, "timestamp": 1722967007, "actEnergyDlvd": 2037731.459, "actEnergyRcvd": 2706201.405, "apparentEnergy": 7469208.32, "reactEnergyLagg": 3071742.732, "reactEnergyLead": 73803.42, "instantaneousDemand": -3545.209, "activePower": -3545.209, "apparentPower": 3563.706, "reactivePower": 22.091, "pwrFactor": -0.994, "voltage": 123.696, "current": 28.813, "freq": 60.0 } ] }, { "eid": 704643840, "timestamp": 1722967007, "actEnergyDlvd": 4073871.031, "actEnergyRcvd": 5409935.465, "apparentEnergy": 14939666.293, "reactEnergyLagg": 6143996.517, "reactEnergyLead": 147616.472, "instantaneousDemand": -7083.656, "activePower": -7083.656, "apparentPower": 7210.614, "reactivePower": 49.385, "pwrFactor": -0.962, "voltage": 247.392, "current": 57.627, "freq": 60.0, "channels": [ { "eid": 1778385681, "timestamp": 1722967007, "actEnergyDlvd": 2036139.572, "actEnergyRcvd": 2703734.06, "apparentEnergy": 7470457.973, "reactEnergyLagg": 3072253.785, "reactEnergyLead": 73813.053, "instantaneousDemand": -3538.447, "activePower": -3538.447, "apparentPower": 3646.908, "reactivePower": 27.294, "pwrFactor": -0.994, "voltage": 123.696, "current": 28.813, "freq": 60.0 }, { "eid": 1778385682, "timestamp": 1722967007, "actEnergyDlvd": 2037731.459, "actEnergyRcvd": 2706201.405, "apparentEnergy": 7469208.32, "reactEnergyLagg": 3071742.732, "reactEnergyLead": 73803.42, "instantaneousDemand": -3545.209, "activePower": -3545.209, "apparentPower": 3563.706, "reactivePower": 22.091, "pwrFactor": -0.994, "voltage": 123.696, "current": 28.813, "freq": 60.0 }, { "eid": 1778385683, "timestamp": 1722967007, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_meters_readings_log.json000066400000000000000000000005461505013723300330040ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "7412", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_sc_pvlimit000066400000000000000000000000611505013723300301610ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_sc_pvlimit_log.json000066400000000000000000000005441505013723300320000ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_dry_contact_settings000066400000000000000000000043251505013723300327550ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "apply", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 1.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "apply", "micro_grid_action": "apply", "gen_action": "apply", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 2.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "shed", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 3.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "shed", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 4.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000005461505013723300345100ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "2260", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_gen_config000066400000000000000000000000031505013723300306070ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_gen_config_log.json000066400000000000000000000005431505013723300324310ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_gen_schedule000066400000000000000000000000031505013723300311360ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_gen_schedule_log.json000066400000000000000000000005431505013723300327600ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_pel_settings000066400000000000000000000004621505013723300312220ustar00rootroot00000000000000{ "PEL": false, "Hard_PEL": false, "Soft_PEL": false, "Export_Limit_Type": "Aggregate", "percent": false, "apparent": false, "PEL_Limit": 0.0, "Comm_Time_Loss": 0.0, "Resp_Time_SoftPEL": 0.0, "Resp_Time_HardPEL": 0.0, "msReset_HardPEL": 0.0, "PEL_db": 0.0 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_pel_settings_log.json000066400000000000000000000005451505013723300330350ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-length": "305", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/production000066400000000000000000000050051505013723300273230ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 35, "readingTime": 1722967004, "wNow": 7013, "whLifetime": 13504841 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1722967006, "wNow": 7129.149, "whLifetime": 13431334.793, "varhLeadLifetime": 197885.911, "varhLagLifetime": 2870787.07, "vahLifetime": 17695035.46, "rmsCurrent": 58.531, "rmsVoltage": 247.269, "reactPwr": -2.135, "apprntPwr": 7235.784, "pwrFactor": 0.99, "whToday": 12575.793, "whLastSevenDays": 13418970.793, "vahToday": 19014.46, "varhLeadToday": 155.911, "varhLagToday": 4415.07 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1722967006, "wNow": 8883.85, "whLifetime": 15113481.693, "varhLeadLifetime": 18701625.286, "varhLagLifetime": -2856902.844, "vahLifetime": 25731842.814, "rmsCurrent": 81.382, "rmsVoltage": 247.133, "reactPwr": -1386.98, "apprntPwr": 10056.031, "pwrFactor": 0.88, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 10810456.814, "varhLeadToday": 18554395.286, "varhLagToday": 10114.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1722967006, "wNow": 1754.701, "whLifetime": 1683061.944, "varhLeadLifetime": 18899511.197, "varhLagLifetime": 13884.226, "vahLifetime": 25731842.814, "rmsCurrent": 22.851, "rmsVoltage": 247.133, "reactPwr": -1384.845, "apprntPwr": 2823.548, "pwrFactor": 0.63, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/production.json000066400000000000000000000152631505013723300303020ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 35, "readingTime": 1722966883, "wNow": 7012, "whLifetime": 13504814 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1722967003, "wNow": 7123.097, "whLifetime": 13431328.665, "varhLeadLifetime": 197885.906, "varhLagLifetime": 2870787.067, "vahLifetime": 17695029.241, "rmsCurrent": 58.506, "rmsVoltage": 247.211, "reactPwr": -1.829, "apprntPwr": 7230.713, "pwrFactor": 0.98, "whToday": 12569.665, "whLastSevenDays": 13418964.665, "vahToday": 19008.241, "varhLeadToday": 155.906, "varhLagToday": 4415.067, "lines": [ { "wNow": 3558.648, "whLifetime": 6709433.113, "varhLeadLifetime": 100991.799, "varhLagLifetime": 1433208.524, "vahLifetime": 8841524.726, "rmsCurrent": 29.245, "rmsVoltage": 123.539, "reactPwr": 3.837, "apprntPwr": 3612.416, "pwrFactor": 0.98, "whToday": 6277.113, "whLastSevenDays": 6703259.113, "vahToday": 9490.726, "varhLeadToday": 74.799, "varhLagToday": 2205.524 }, { "wNow": 3564.449, "whLifetime": 6721895.553, "varhLeadLifetime": 96894.107, "varhLagLifetime": 1437578.543, "vahLifetime": 8853504.515, "rmsCurrent": 29.261, "rmsVoltage": 123.672, "reactPwr": -5.665, "apprntPwr": 3618.297, "pwrFactor": 0.99, "whToday": 6292.553, "whLastSevenDays": 6715705.553, "vahToday": 9517.515, "varhLeadToday": 81.107, "varhLagToday": 2209.543 } ] } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1722967003, "wNow": 8884.72, "whLifetime": 15113474.057, "varhLeadLifetime": 18701624.099, "varhLagLifetime": -2856902.841, "vahLifetime": 25731840.384, "rmsCurrent": 81.305, "rmsVoltage": 247.098, "reactPwr": -1380.305, "apprntPwr": 10045.047, "pwrFactor": 0.89, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 10810454.384, "varhLeadToday": 18554394.099, "varhLagToday": 10114.0, "lines": [ { "wNow": 4407.017, "whLifetime": 7197820.664, "varhLeadLifetime": 9309028.193, "varhLagLifetime": -1424407.47, "vahLifetime": 12904980.692, "rmsCurrent": 40.957, "rmsVoltage": 123.455, "reactPwr": -845.076, "apprntPwr": 5056.383, "pwrFactor": 0.87, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 5443650.692, "varhLeadToday": 9235408.193, "varhLagToday": 5048.0 }, { "wNow": 4477.703, "whLifetime": 7915653.393, "varhLeadLifetime": 9392595.906, "varhLagLifetime": -1432495.371, "vahLifetime": 12826859.692, "rmsCurrent": 40.347, "rmsVoltage": 123.643, "reactPwr": -535.229, "apprntPwr": 4988.664, "pwrFactor": 0.9, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 5366803.692, "varhLeadToday": 9318985.906, "varhLagToday": 5066.0 } ] }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1722967003, "wNow": 1761.624, "whLifetime": 1683060.434, "varhLeadLifetime": 18899510.005, "varhLagLifetime": 13884.226, "vahLifetime": 25731840.384, "rmsCurrent": 22.798, "rmsVoltage": 247.098, "reactPwr": -1378.477, "apprntPwr": 2816.647, "pwrFactor": 0.63, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0, "lines": [ { "wNow": 848.37, "whLifetime": 488810.481, "varhLeadLifetime": 9410019.992, "varhLagLifetime": 8801.054, "vahLifetime": 12904980.692, "rmsCurrent": 11.712, "rmsVoltage": 123.455, "reactPwr": -848.913, "apprntPwr": 1445.905, "pwrFactor": 0.59, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 913.254, "whLifetime": 1194249.954, "varhLeadLifetime": 9489490.013, "varhLagLifetime": 5083.172, "vahLifetime": 12826859.692, "rmsCurrent": 11.086, "rmsVoltage": 123.643, "reactPwr": -529.564, "apprntPwr": 1370.742, "pwrFactor": 0.67, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ] } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/production.json_log.json000066400000000000000000000007631505013723300321120ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:44 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4286_with_3cts_and_battery_split/production_log.json000066400000000000000000000007631505013723300311420ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Tue, 06 Aug 2024 17:56:47 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/000077500000000000000000000000001505013723300227735ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/admin_lib_tariff000066400000000000000000000030351505013723300261700ustar00rootroot00000000000000{"tariff":{"currency":{"code":"AUD"},"logger":"mylogger","date":"1743840002","storage_settings":{"mode":"self-consumption","operation_mode_sub_type":"","reserved_soc":43.0,"very_low_soc":10,"charge_from_grid":false,"date":"1742364587","opt_schedules":false},"single_rate":{"rate":0.2579500079154968,"sell":0.07000000029802323},"seasons":[],"seasons_sell":[]},"schedule":{"filename":"Tariff","source":"Tariff","date":"2025-04-16 15:14:25 UTC","version":"00.00.02","reserved_soc":43.0,"very_low_soc":10,"charge_from_grid":false,"batt_mode":"self-consumption","battery_mode":"self-consumption","operation_mode_sub_type":"","opt_schedules":false,"override":false,"override_backup_soc":30.0,"override_chg_dischg_rate":0.0,"override_tou_mode":"StorageTouMode_DEFAULT_TOU_MODE","schedule":{"Disable":[{"Sun":[{"start":0,"duration":1440,"setting":"ID"}]},{"Mon":[{"start":0,"duration":1440,"setting":"ID"}]},{"Tue":[{"start":0,"duration":1440,"setting":"ID"}]},{"Wed":[{"start":0,"duration":1440,"setting":"ID"}]},{"Thu":[{"start":0,"duration":1440,"setting":"ID"}]},{"Fri":[{"start":0,"duration":1440,"setting":"ID"}]},{"Sat":[{"start":0,"duration":1440,"setting":"ID"}]}],"tariff":[{"start":"1/1","end":"1/1","Sun":[{"start":0,"duration":1440,"setting":"ZN"}],"Mon":[{"start":0,"duration":1440,"setting":"ZN"}],"Tue":[{"start":0,"duration":1440,"setting":"ZN"}],"Wed":[{"start":0,"duration":1440,"setting":"ZN"}],"Thu":[{"start":0,"duration":1440,"setting":"ZN"}],"Fri":[{"start":0,"duration":1440,"setting":"ZN"}],"Sat":[{"start":0,"duration":1440,"setting":"ZN"}]}]}}} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/admin_lib_tariff_log.json000066400000000000000000000004361505013723300300030ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "1564", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/api_v1_production000066400000000000000000000001611505013723300263410ustar00rootroot00000000000000{ "wattHoursToday": 13233, "wattHoursSevenDays": 86068, "wattHoursLifetime": 1243605, "wattsNow": 2675 } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/api_v1_production_inverters000066400000000000000000000043271505013723300304520ustar00rootroot00000000000000[ { "serialNumber": "122344043197", "lastReportDate": 1748576887, "devType": 1, "lastReportWatts": 255, "maxReportWatts": 371 }, { "serialNumber": "122344044368", "lastReportDate": 1748576917, "devType": 1, "lastReportWatts": 78, "maxReportWatts": 309 }, { "serialNumber": "122344044385", "lastReportDate": 1748576977, "devType": 1, "lastReportWatts": 255, "maxReportWatts": 370 }, { "serialNumber": "122344044392", "lastReportDate": 1748577008, "devType": 1, "lastReportWatts": 239, "maxReportWatts": 367 }, { "serialNumber": "122344044656", "lastReportDate": 1748577037, "devType": 1, "lastReportWatts": 130, "maxReportWatts": 341 }, { "serialNumber": "122344046030", "lastReportDate": 1748577038, "devType": 1, "lastReportWatts": 227, "maxReportWatts": 349 }, { "serialNumber": "122344046450", "lastReportDate": 1748576165, "devType": 1, "lastReportWatts": 85, "maxReportWatts": 308 }, { "serialNumber": "122344046574", "lastReportDate": 1748576166, "devType": 1, "lastReportWatts": 34, "maxReportWatts": 362 }, { "serialNumber": "122344047608", "lastReportDate": 1748576194, "devType": 1, "lastReportWatts": 64, "maxReportWatts": 299 }, { "serialNumber": "122344047620", "lastReportDate": 1748576196, "devType": 1, "lastReportWatts": 232, "maxReportWatts": 364 }, { "serialNumber": "122344047645", "lastReportDate": 1748576197, "devType": 1, "lastReportWatts": 236, "maxReportWatts": 365 }, { "serialNumber": "122344047687", "lastReportDate": 1748576224, "devType": 1, "lastReportWatts": 227, "maxReportWatts": 365 }, { "serialNumber": "122344047713", "lastReportDate": 1748576226, "devType": 1, "lastReportWatts": 232, "maxReportWatts": 365 }, { "serialNumber": "122344047722", "lastReportDate": 1748576255, "devType": 1, "lastReportWatts": 216, "maxReportWatts": 338 }, { "serialNumber": "122344048305", "lastReportDate": 1748576256, "devType": 1, "lastReportWatts": 84, "maxReportWatts": 324 } ] pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/api_v1_production_inverters_log.json000066400000000000000000000005021505013723300322520ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:41 GMT", "content-type": "application/json", "content-length": "2263", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/api_v1_production_log.json000066400000000000000000000005011505013723300301500ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:41 GMT", "content-type": "application/json", "content-length": "113", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/info000066400000000000000000000042421505013723300236530ustar00rootroot00000000000000 122446001637 800-00649-r01 D8.2.4345 4c8675 0 1 true true 500-00001-r01 02.00.00 1211 500-00011-r02 04.04.225 08bedf 590-00019-r01 02.00.01 1f421b 500-00002-r01 08.02.4345 3f3de0 500-00005-r01 01.02.502 355b53 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 7165c0 500-00012-r01 02.02.00 7012ed 500-00020-r01 31.33.47 9fd31a 500-00022-r01 01.00.04 2cd3479 500-00016-r01 02.00.00 54a6dc 500-00021-r01 01.00.00 0fdc14 500-00016-r01 01.00.00 768 1725031207 -envoy_uber-pkg_master:pkg-Aug-30-24-15:14:57 pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/info_log.json000066400000000000000000000005751505013723300254710ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:41 GMT", "content-type": "text/xml", "content-length": "2210", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300301410ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351505013723300317550ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_generator000066400000000000000000000002771505013723300274420ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 0, "type": 1 } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_generator_log.json000066400000000000000000000004351505013723300312470ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_inventory000066400000000000000000000021761505013723300275110ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [] }, { "type": "ENPOWER", "devices": [ { "part_num": "860-01801-r70", "serial_num": "122446012073", "installed": 1744816473, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1748577041, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1744816473, "img_load_date": 1744816473, "img_pnum_running": "2.7.6360_rel/31.33", "communicating": true, "temperature": 76, "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "grid-tied", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 975, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_inventory_log.json000066400000000000000000000004361505013723300313170ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "1149", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_power000066400000000000000000000000271505013723300266010ustar00rootroot00000000000000{ "devices:": [] } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_power_log.json000066400000000000000000000004341505013723300304140ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "22", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_secctrl000066400000000000000000000016111505013723300271040ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 43, "adjusted_backup_soc": 43, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_secctrl_log.json000066400000000000000000000004351505013723300307200ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "904", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_status000066400000000000000000000064171505013723300270010ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122446012073": { "device_type": 17, "com_interface_str": "USB", "device_id": "122446012073", "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "msg_retry_count": 1, "part_number": "860-01801-r70", "assembly_number": "880-01801-r71", "app_fw_version": "2.7.6360_rel/31.33", "ibl_fw_version": "3.1.813-8c003b", "swift_asic_fw_version": "", "bmu_fw_version": "", "submodule_count": 2, "submodules": { "122446001211": { "device_type": 18, "admin_state": 1, "part_number": "800-01323-r04", "assembly_number": "880-01323-r04", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "2.7.6360_rel/31.33" } }, "122446003888": { "device_type": 20, "admin_state": 1, "part_number": "800-01616-r07", "assembly_number": "880-01616-r07", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "", "assembly_number": "" } } } } } }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 43, "adjusted_backup_soc": 43, "agg_soc": 0, "Max_energy": 0, "ENC_agg_soc": 0, "ENC_agg_soh": 0, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 0, "Enc_commissioned_capacity": 0, "Enc_max_available_capacity": 0, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "srt12_state": "open", "srt13_state": "open", "der1_state": 1, "der2_state": 1, "der3_state": 1, "Enchg_grid_mode": "multimode-ongrid", "Solar_grid_mode": "multimode-ongrid" } } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_status_log.json000066400000000000000000000004361505013723300306050ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "3342", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_meters000066400000000000000000000007121505013723300250730ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_meters_log.json000066400000000000000000000004351505013723300267060ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_meters_readings000066400000000000000000000113521505013723300267510ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1748577049, "actEnergyDlvd": 1243812.228, "actEnergyRcvd": 11.600, "apparentEnergy": 1776752.059, "reactEnergyLagg": 255919.503, "reactEnergyLead": 573233.207, "instantaneousDemand": 807.326, "activePower": 807.326, "apparentPower": 1282.057, "reactivePower": -886.389, "pwrFactor": 0.654, "voltage": 244.062, "current": 5.299, "freq": 50.062, "channels": [ { "eid": 1778385169, "timestamp": 1748577049, "actEnergyDlvd": 1243812.228, "actEnergyRcvd": 11.600, "apparentEnergy": 1776752.059, "reactEnergyLagg": 255919.503, "reactEnergyLead": 573233.207, "instantaneousDemand": 807.326, "activePower": 807.326, "apparentPower": 1282.057, "reactivePower": -886.389, "pwrFactor": 0.654, "voltage": 244.062, "current": 5.299, "freq": 50.062 }, { "eid": 1778385170, "timestamp": 1748577049, "actEnergyDlvd": 0.000, "actEnergyRcvd": 1054.214, "apparentEnergy": 663.506, "reactEnergyLagg": 127.361, "reactEnergyLead": 0.000, "instantaneousDemand": -0.039, "activePower": -0.039, "apparentPower": 0.388, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 2.124, "current": 0.182, "freq": 50.062 }, { "eid": 1778385171, "timestamp": 1748577049, "actEnergyDlvd": 0.000, "actEnergyRcvd": 2598.312, "apparentEnergy": 49.729, "reactEnergyLagg": 127.222, "reactEnergyLead": 0.015, "instantaneousDemand": -0.000, "activePower": -0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 3.045, "current": -0.000, "freq": 50.062 } ] }, { "eid": 704643584, "timestamp": 1748577049, "actEnergyDlvd": 648203.353, "actEnergyRcvd": 883899.646, "apparentEnergy": 2017963.730, "reactEnergyLagg": 430154.145, "reactEnergyLead": 463468.848, "instantaneousDemand": 199.234, "activePower": 199.234, "apparentPower": 993.877, "reactivePower": 906.056, "pwrFactor": 0.140, "voltage": 244.228, "current": 4.066, "freq": 50.062, "channels": [ { "eid": 1778385425, "timestamp": 1748577049, "actEnergyDlvd": 648203.353, "actEnergyRcvd": 883899.646, "apparentEnergy": 2017963.730, "reactEnergyLagg": 430154.145, "reactEnergyLead": 463468.848, "instantaneousDemand": 199.234, "activePower": 199.234, "apparentPower": 993.877, "reactivePower": 906.056, "pwrFactor": 0.140, "voltage": 244.228, "current": 4.066, "freq": 50.062 }, { "eid": 1778385426, "timestamp": 1748577049, "actEnergyDlvd": 0.000, "actEnergyRcvd": 2171.834, "apparentEnergy": 1754.876, "reactEnergyLagg": 122.318, "reactEnergyLead": 0.000, "instantaneousDemand": -0.236, "activePower": -0.236, "apparentPower": 1.010, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 6.082, "current": 0.166, "freq": 50.062 }, { "eid": 1778385427, "timestamp": 1748577049, "actEnergyDlvd": 0.000, "actEnergyRcvd": 3397.655, "apparentEnergy": 60.378, "reactEnergyLagg": 121.108, "reactEnergyLead": 0.038, "instantaneousDemand": 0.000, "activePower": 0.000, "apparentPower": 0.000, "reactivePower": 0.000, "pwrFactor": 0.000, "voltage": 5.672, "current": -0.000, "freq": 50.062 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_meters_readings_log.json000066400000000000000000000004361505013723300305630ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "4841", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_pdm_device_data000066400000000000000000000745771505013723300267100ustar00rootroot00000000000000{ "553648384": { "devName": "pcu", "sn": "122344043197", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390225, "created": 1748576887, "wattHours": { "today": 1239, "yesterday": 455, "week": 7466 }, "watts": { "now": 255, "nowUsed": 0, "max": 371 }, "lastReading": { "eid": 1627390225, "interval_type": 0, "endDate": 1748576887, "duration": 903, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 230400, "acVoltageINmV": 248156, "acFrequencyINmHz": 50013, "dcVoltageINmV": 32363, "dcCurrentINmA": 8078, "channelTemp": 38, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 0, "laggingVArs": 38, "acCurrentInmA": 1049, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 68 }, "lifetime": { "createdTime": 1744834453, "duration": 6124463, "joulesProduced": 354281850 } } ] }, "553648640": { "devName": "pcu", "sn": "122344044368", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390481, "created": 1748576917, "wattHours": { "today": 773, "yesterday": 447, "week": 5129 }, "watts": { "now": 78, "nowUsed": 0, "max": 309 }, "lastReading": { "eid": 1627390481, "interval_type": 0, "endDate": 1748576917, "duration": 903, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 70425, "acVoltageINmV": 246188, "acFrequencyINmHz": 50019, "dcVoltageINmV": 31684, "dcCurrentINmA": 2324, "channelTemp": 30, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 39, "acCurrentInmA": 435, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 70 }, "lifetime": { "createdTime": 1744834377, "duration": 6125538, "joulesProduced": 259647525 } } ] }, "553648896": { "devName": "pcu", "sn": "122344044385", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390737, "created": 1748576977, "wattHours": { "today": 1245, "yesterday": 459, "week": 7778 }, "watts": { "now": 255, "nowUsed": 0, "max": 370 }, "lastReading": { "eid": 1627390737, "interval_type": 0, "endDate": 1748576977, "duration": 903, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 230625, "acVoltageINmV": 245906, "acFrequencyINmHz": 50016, "dcVoltageINmV": 31117, "dcCurrentINmA": 2598, "channelTemp": 41, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 38, "acCurrentInmA": 424, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 76 }, "lifetime": { "createdTime": 1744834457, "duration": 6124361, "joulesProduced": 359500950 } } ] }, "553649152": { "devName": "pcu", "sn": "122344044392", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390993, "created": 1748577008, "wattHours": { "today": 992, "yesterday": 435, "week": 6099 }, "watts": { "now": 239, "nowUsed": 0, "max": 367 }, "lastReading": { "eid": 1627390993, "interval_type": 0, "endDate": 1748577008, "duration": 904, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 216000, "acVoltageINmV": 245188, "acFrequencyINmHz": 50026, "dcVoltageINmV": 31477, "dcCurrentINmA": 1469, "channelTemp": 36, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 37, "acCurrentInmA": 331, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 70 }, "lifetime": { "createdTime": 1744834459, "duration": 6124386, "joulesProduced": 332167725 } } ] }, "553649408": { "devName": "pcu", "sn": "122344044656", "active": true, "modGone": false, "channels": [ { "chanEid": 1627391249, "created": 1748577037, "wattHours": { "today": 467, "yesterday": 405, "week": 3714 }, "watts": { "now": 130, "nowUsed": 0, "max": 341 }, "lastReading": { "eid": 1627391249, "interval_type": 0, "endDate": 1748577037, "duration": 903, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 117225, "acVoltageINmV": 245563, "acFrequencyINmHz": 50023, "dcVoltageINmV": 31441, "dcCurrentINmA": 1488, "channelTemp": 35, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 39, "acCurrentInmA": 334, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 72 }, "lifetime": { "createdTime": 1744834609, "duration": 6124491, "joulesProduced": 260339400 } } ] }, "553649664": { "devName": "pcu", "sn": "122344046030", "active": true, "modGone": false, "channels": [ { "chanEid": 1627391505, "created": 1748577038, "wattHours": { "today": 815, "yesterday": 416, "week": 5251 }, "watts": { "now": 227, "nowUsed": 0, "max": 349 }, "lastReading": { "eid": 1627391505, "interval_type": 0, "endDate": 1748577038, "duration": 903, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 205200, "acVoltageINmV": 245563, "acFrequencyINmHz": 50026, "dcVoltageINmV": 30504, "dcCurrentINmA": 1949, "channelTemp": 41, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 40, "acCurrentInmA": 379, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 70 }, "lifetime": { "createdTime": 1744834598, "duration": 6124485, "joulesProduced": 283035600 } } ] }, "553649920": { "devName": "pcu", "sn": "122344046450", "active": true, "modGone": false, "channels": [ { "chanEid": 1627391761, "created": 1748576165, "wattHours": { "today": 751, "yesterday": 444, "week": 5036 }, "watts": { "now": 85, "nowUsed": 0, "max": 308 }, "lastReading": { "eid": 1627391761, "interval_type": 0, "endDate": 1748576165, "duration": 904, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 76725, "acVoltageINmV": 245625, "acFrequencyINmHz": 49988, "dcVoltageINmV": 31656, "dcCurrentINmA": 2637, "channelTemp": 30, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 39, "acCurrentInmA": 415, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 74 }, "lifetime": { "createdTime": 1744834388, "duration": 6124702, "joulesProduced": 260345025 } } ] }, "553650176": { "devName": "pcu", "sn": "122344046574", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392017, "created": 1748576166, "wattHours": { "today": 207, "yesterday": 380, "week": 2283 }, "watts": { "now": 34, "nowUsed": 0, "max": 362 }, "lastReading": { "eid": 1627392017, "interval_type": 0, "endDate": 1748576166, "duration": 904, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 31050, "acVoltageINmV": 246188, "acFrequencyINmHz": 49985, "dcVoltageINmV": 33156, "dcCurrentINmA": 789, "channelTemp": 27, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 39, "acCurrentInmA": 315, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 70 }, "lifetime": { "createdTime": 1744834506, "duration": 6123681, "joulesProduced": 216194625 } } ] }, "553650432": { "devName": "pcu", "sn": "122344047608", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392273, "created": 1748576194, "wattHours": { "today": 769, "yesterday": 443, "week": 5048 }, "watts": { "now": 64, "nowUsed": 0, "max": 299 }, "lastReading": { "eid": 1627392273, "interval_type": 0, "endDate": 1748576194, "duration": 903, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 57375, "acVoltageINmV": 245750, "acFrequencyINmHz": 49978, "dcVoltageINmV": 31922, "dcCurrentINmA": 1879, "channelTemp": 32, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 39, "acCurrentInmA": 358, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 78 }, "lifetime": { "createdTime": 1744834414, "duration": 6123760, "joulesProduced": 262778625 } } ] }, "553650688": { "devName": "pcu", "sn": "122344047620", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392529, "created": 1748576196, "wattHours": { "today": 979, "yesterday": 438, "week": 6393 }, "watts": { "now": 232, "nowUsed": 0, "max": 364 }, "lastReading": { "eid": 1627392529, "interval_type": 0, "endDate": 1748576196, "duration": 904, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 209700, "acVoltageINmV": 247063, "acFrequencyINmHz": 49977, "dcVoltageINmV": 32398, "dcCurrentINmA": 8320, "channelTemp": 36, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 38, "acCurrentInmA": 1073, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 70 }, "lifetime": { "createdTime": 1744834482, "duration": 6123650, "joulesProduced": 342205650 } } ] }, "553650944": { "devName": "pcu", "sn": "122344047645", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392785, "created": 1748576197, "wattHours": { "today": 1209, "yesterday": 467, "week": 7838 }, "watts": { "now": 236, "nowUsed": 0, "max": 365 }, "lastReading": { "eid": 1627392785, "interval_type": 0, "endDate": 1748576197, "duration": 905, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 213300, "acVoltageINmV": 246500, "acFrequencyINmHz": 49978, "dcVoltageINmV": 32012, "dcCurrentINmA": 8527, "channelTemp": 41, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 0, "laggingVArs": 38, "acCurrentInmA": 1088, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 74 }, "lifetime": { "createdTime": 1744834445, "duration": 6123908, "joulesProduced": 360257400 } } ] }, "553651200": { "devName": "pcu", "sn": "122344047687", "active": true, "modGone": false, "channels": [ { "chanEid": 1627393041, "created": 1748576224, "wattHours": { "today": 1120, "yesterday": 447, "week": 7235 }, "watts": { "now": 227, "nowUsed": 0, "max": 365 }, "lastReading": { "eid": 1627393041, "interval_type": 0, "endDate": 1748576224, "duration": 903, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 204975, "acVoltageINmV": 246281, "acFrequencyINmHz": 49977, "dcVoltageINmV": 32316, "dcCurrentINmA": 8102, "channelTemp": 36, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 39, "acCurrentInmA": 1060, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 74 }, "lifetime": { "createdTime": 1744834485, "duration": 6123654, "joulesProduced": 348953175 } } ] }, "553651456": { "devName": "pcu", "sn": "122344047713", "active": true, "modGone": false, "channels": [ { "chanEid": 1627393297, "created": 1748576226, "wattHours": { "today": 1199, "yesterday": 462, "week": 7769 }, "watts": { "now": 232, "nowUsed": 0, "max": 365 }, "lastReading": { "eid": 1627393297, "interval_type": 0, "endDate": 1748576226, "duration": 904, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 209925, "acVoltageINmV": 247094, "acFrequencyINmHz": 49969, "dcVoltageINmV": 32133, "dcCurrentINmA": 8383, "channelTemp": 40, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 38, "acCurrentInmA": 1068, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 70 }, "lifetime": { "createdTime": 1744834446, "duration": 6123674, "joulesProduced": 358057125 } } ] }, "553651712": { "devName": "pcu", "sn": "122344047722", "active": true, "modGone": false, "channels": [ { "chanEid": 1627393553, "created": 1748576255, "wattHours": { "today": 780, "yesterday": 426, "week": 5471 }, "watts": { "now": 216, "nowUsed": 0, "max": 338 }, "lastReading": { "eid": 1627393553, "interval_type": 0, "endDate": 1748576255, "duration": 904, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 195525, "acVoltageINmV": 245344, "acFrequencyINmHz": 49984, "dcVoltageINmV": 32043, "dcCurrentINmA": 7902, "channelTemp": 39, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 1, "laggingVArs": 39, "acCurrentInmA": 1028, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 74 }, "lifetime": { "createdTime": 1744834580, "duration": 6123492, "joulesProduced": 286893675 } } ] }, "553651968": { "devName": "pcu", "sn": "122344048305", "active": true, "modGone": false, "channels": [ { "chanEid": 1627393809, "created": 1748576256, "wattHours": { "today": 777, "yesterday": 453, "week": 5130 }, "watts": { "now": 84, "nowUsed": 0, "max": 324 }, "lastReading": { "eid": 1627393809, "interval_type": 0, "endDate": 1748576256, "duration": 904, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 75600, "acVoltageINmV": 245500, "acFrequencyINmHz": 49984, "dcVoltageINmV": 31953, "dcCurrentINmA": 2637, "channelTemp": 29, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 0, "laggingVArs": 39, "acCurrentInmA": 417, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 110, "issi": 70 }, "lifetime": { "createdTime": 1744834361, "duration": 6124139, "joulesProduced": 266390550 } } ] }, "704643328": { "devName": "eim", "sn": "122446001637EIM1", "active": true, "modGone": true, "channels": [ { "chanEid": 1778385169, "created": 1748576700, "wattHours": { "today": 13233, "yesterday": 6432, "week": 86068 }, "watts": { "now": 2675, "nowUsed": 0, "max": 5171 }, "lastReading": { "eid": 1778385169, "interval_type": 0, "endDate": 1748576700, "duration": 900, "curr_w": 2675, "wh_dlvd_cum": 1243605, "varh_lead_cum": 573128, "varh_lag_cum": 255919, "vah_cum": 1776512, "rms_mvolt": 246790, "rms_mamp": 12045, "freq_mhz": 50000, "wh_pos": 1243605, "wh_neg": 11 }, "lifetime": { "createdTime": 1744817400, "duration": 6212100, "wh_dlvd_cum": 1243605, "varh_lead_cum": 573128, "varh_lag_cum": 255919, "vah_cum": 1776512 } }, { "chanEid": 1778385170, "created": 0, "wattHours": { "today": 0, "yesterday": 0, "week": 0 }, "watts": { "now": 0, "nowUsed": 0, "max": 0 }, "lastReading": {}, "lifetime": {} }, { "chanEid": 1778385171, "created": 0, "wattHours": { "today": 0, "yesterday": 0, "week": 0 }, "watts": { "now": 0, "nowUsed": 0, "max": 0 }, "lastReading": {}, "lifetime": {} } ] }, "704643584": { "devName": "eim", "sn": "122446001637EIM2", "active": true, "modGone": true, "channels": [ { "chanEid": 1778385425, "created": 1748576700, "wattHours": { "today": 14467, "yesterday": 25760, "week": 136796 }, "watts": { "now": 419, "nowUsed": 0, "max": 5726 }, "lastReading": { "eid": 1778385425, "interval_type": 0, "endDate": 1748576700, "duration": 900, "curr_w": 419, "wh_dlvd_cum": 1007981, "varh_lead_cum": -109660, "varh_lag_cum": 174130, "vah_cum": 2017794, "rms_mvolt": 246944, "rms_mamp": 1974, "freq_mhz": 50062, "wh_pos": 648196, "wh_neg": 883785 }, "lifetime": { "createdTime": 1744817400, "duration": 6211500, "wh_dlvd_cum": 1007981, "varh_lead_cum": -109660, "varh_lag_cum": 174130, "vah_cum": 2017794 } }, { "chanEid": 1778385426, "created": 0, "wattHours": { "today": 0, "yesterday": 0, "week": 0 }, "watts": { "now": 0, "nowUsed": 0, "max": 0 }, "lastReading": {}, "lifetime": {} }, { "chanEid": 1778385427, "created": 0, "wattHours": { "today": 0, "yesterday": 0, "week": 0 }, "watts": { "now": 0, "nowUsed": 0, "max": 0 }, "lastReading": {}, "lifetime": {} } ] }, "deviceCount": 17, "deviceDataLimit": 50 } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_pdm_device_data_log.json000066400000000000000000000004371505013723300305010ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "31102", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_sc_pvlimit000066400000000000000000000000611505013723300257420ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_sc_pvlimit_log.json000066400000000000000000000004341505013723300275570ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_dry_contact_settings000066400000000000000000000043171505013723300305370ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 1.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 2.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 3.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 32400.0, "essential_end_time": 57600.0, "priority": 4.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361505013723300323460ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "2254", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_config000066400000000000000000000000031505013723300263700ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_config_log.json000066400000000000000000000004331505013723300302100ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_schedule000066400000000000000000000000031505013723300267170ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_schedule.json000066400000000000000000000000031505013723300276670ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_pel_settings000066400000000000000000000004621505013723300270030ustar00rootroot00000000000000{ "PEL": false, "Hard_PEL": false, "Soft_PEL": false, "Export_Limit_Type": "Aggregate", "percent": false, "apparent": false, "PEL_Limit": 0.0, "Comm_Time_Loss": 0.0, "Resp_Time_SoftPEL": 0.0, "Resp_Time_HardPEL": 0.0, "msReset_HardPEL": 0.0, "PEL_db": 0.0 } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/ivp_ss_pel_settings_log.json000066400000000000000000000004351505013723300306140ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-length": "305", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/production000066400000000000000000000026741505013723300251150ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":15,"readingTime":1748577038,"wNow":2594,"whLifetime":1264180},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1748577048,"wNow":777.395,"whLifetime":1243811.993,"varhLeadLifetime":573232.961,"varhLagLifetime":255919.503,"vahLifetime":1776751.697,"rmsCurrent":5.198,"rmsVoltage":243.975,"reactPwr":-879.006,"apprntPwr":1258.19,"pwrFactor":0.63,"whToday":13439.993,"whLastSevenDays":86274.993,"vahToday":16484.697,"varhLeadToday":3458.961,"varhLagToday":1824.503}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1748577048,"wNow":1008.957,"whLifetime":1008080.923,"varhLeadLifetime":-109764.113,"varhLagLifetime":174234.39,"vahLifetime":2017963.456,"rmsCurrent":9.279,"rmsVoltage":244.195,"reactPwr":19.832,"apprntPwr":2265.958,"pwrFactor":0.45,"whToday":14566.923,"whLastSevenDays":136895.923,"vahToday":16554.456,"varhLeadToday":0.0,"varhLagToday":670.39},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1748577048,"wNow":231.561,"whLifetime":-235661.6,"varhLeadLifetime":463468.848,"varhLagLifetime":430153.893,"vahLifetime":2017963.456,"rmsCurrent":4.082,"rmsVoltage":244.195,"reactPwr":898.838,"apprntPwr":996.717,"pwrFactor":0.23,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/production.json000066400000000000000000000040441505013723300260560ustar00rootroot00000000000000{ "consumption": [ { "activeCount": 1, "apprntPwr": 2265.958, "measurementType": "total-consumption", "pwrFactor": 0.45, "reactPwr": 19.832, "readingTime": 1748577048, "rmsCurrent": 9.279, "rmsVoltage": 244.195, "type": "eim", "vahLifetime": 2017963.456, "vahToday": 16554.456, "varhLagLifetime": 174234.39, "varhLagToday": 670.39, "varhLeadLifetime": -109764.113, "varhLeadToday": 0.0, "wNow": 1008.957, "whLastSevenDays": 136895.923, "whLifetime": 1008080.923, "whToday": 14566.923 }, { "activeCount": 1, "apprntPwr": 996.717, "measurementType": "net-consumption", "pwrFactor": 0.23, "reactPwr": 898.838, "readingTime": 1748577048, "rmsCurrent": 4.082, "rmsVoltage": 244.195, "type": "eim", "vahLifetime": 2017963.456, "vahToday": 0, "varhLagLifetime": 430153.893, "varhLagToday": 0, "varhLeadLifetime": 463468.848, "varhLeadToday": 0, "wNow": 231.561, "whLastSevenDays": 0, "whLifetime": -235661.6, "whToday": 0 } ], "production": [ { "activeCount": 15, "readingTime": 1748577038, "type": "inverters", "wNow": 2594, "whLifetime": 1264180 }, { "activeCount": 1, "apprntPwr": 1258.19, "measurementType": "production", "pwrFactor": 0.63, "reactPwr": -879.006, "readingTime": 1748577048, "rmsCurrent": 5.198, "rmsVoltage": 243.975, "type": "eim", "vahLifetime": 1776751.697, "vahToday": 16484.697, "varhLagLifetime": 255919.503, "varhLagToday": 1824.503, "varhLeadLifetime": 573232.961, "varhLeadToday": 3458.961, "wNow": 777.395, "whLastSevenDays": 86274.993, "whLifetime": 1243811.993, "whToday": 13439.993 } ], "storage": [ { "activeCount": 0, "readingTime": 0, "state": "idle", "type": "acb", "wNow": 0, "whNow": 0 } ] } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/production.json_details_1000066400000000000000000000046611505013723300300100ustar00rootroot00000000000000{"production":[{"type":"inverters","activeCount":15,"readingTime":1748577038,"wNow":2594,"whLifetime":1264180},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1748577046,"wNow":734.83,"whLifetime":1243811.514,"varhLeadLifetime":573232.424,"varhLagLifetime":255919.503,"vahLifetime":1776750.926,"rmsCurrent":5.032,"rmsVoltage":243.655,"reactPwr":-886.961,"apprntPwr":1242.277,"pwrFactor":0.61,"whToday":13439.514,"whLastSevenDays":86274.514,"vahToday":16483.926,"varhLeadToday":3458.424,"varhLagToday":1824.503,"lines":[{"wNow":734.83,"whLifetime":1243811.514,"varhLeadLifetime":573232.424,"varhLagLifetime":255919.503,"vahLifetime":1776750.926,"rmsCurrent":5.032,"rmsVoltage":243.655,"reactPwr":-886.961,"apprntPwr":1242.277,"pwrFactor":0.61,"whToday":13439.514,"whLastSevenDays":86274.514,"vahToday":16483.926,"varhLeadToday":3458.424,"varhLagToday":1824.503}]}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1748577046,"wNow":1014.016,"whLifetime":1008080.311,"varhLeadLifetime":-109763.575,"varhLagLifetime":174233.838,"vahLifetime":2017962.849,"rmsCurrent":9.066,"rmsVoltage":243.936,"reactPwr":12.5,"apprntPwr":2211.492,"pwrFactor":0.46,"whToday":14566.311,"whLastSevenDays":136895.311,"vahToday":16553.849,"varhLeadToday":0.0,"varhLagToday":669.838,"lines":[{"wNow":1014.016,"whLifetime":1008080.311,"varhLeadLifetime":-109763.575,"varhLagLifetime":174233.838,"vahLifetime":2017962.849,"rmsCurrent":9.066,"rmsVoltage":243.936,"reactPwr":12.5,"apprntPwr":2211.492,"pwrFactor":0.46,"whToday":14566.311,"whLastSevenDays":136895.311,"vahToday":16553.849,"varhLeadToday":0.0,"varhLagToday":669.838}]},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1748577046,"wNow":279.186,"whLifetime":-235661.732,"varhLeadLifetime":463468.848,"varhLagLifetime":430153.341,"vahLifetime":2017962.849,"rmsCurrent":4.034,"rmsVoltage":243.936,"reactPwr":899.461,"apprntPwr":984.004,"pwrFactor":0.28,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0,"lines":[{"wNow":279.186,"whLifetime":-235661.732,"varhLeadLifetime":463468.848,"varhLagLifetime":430153.341,"vahLifetime":2017962.849,"rmsCurrent":4.034,"rmsVoltage":243.936,"reactPwr":899.461,"apprntPwr":984.004,"pwrFactor":0.28,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}]}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/production.json_details_1.json000066400000000000000000000072301505013723300307530ustar00rootroot00000000000000{ "consumption": [ { "activeCount": 1, "apprntPwr": 2211.492, "lines": [ { "apprntPwr": 2211.492, "pwrFactor": 0.46, "reactPwr": 12.5, "rmsCurrent": 9.066, "rmsVoltage": 243.936, "vahLifetime": 2017962.849, "vahToday": 16553.849, "varhLagLifetime": 174233.838, "varhLagToday": 669.838, "varhLeadLifetime": -109763.575, "varhLeadToday": 0.0, "wNow": 1014.016, "whLastSevenDays": 136895.311, "whLifetime": 1008080.311, "whToday": 14566.311 } ], "measurementType": "total-consumption", "pwrFactor": 0.46, "reactPwr": 12.5, "readingTime": 1748577046, "rmsCurrent": 9.066, "rmsVoltage": 243.936, "type": "eim", "vahLifetime": 2017962.849, "vahToday": 16553.849, "varhLagLifetime": 174233.838, "varhLagToday": 669.838, "varhLeadLifetime": -109763.575, "varhLeadToday": 0.0, "wNow": 1014.016, "whLastSevenDays": 136895.311, "whLifetime": 1008080.311, "whToday": 14566.311 }, { "activeCount": 1, "apprntPwr": 984.004, "lines": [ { "apprntPwr": 984.004, "pwrFactor": 0.28, "reactPwr": 899.461, "rmsCurrent": 4.034, "rmsVoltage": 243.936, "vahLifetime": 2017962.849, "vahToday": 0, "varhLagLifetime": 430153.341, "varhLagToday": 0, "varhLeadLifetime": 463468.848, "varhLeadToday": 0, "wNow": 279.186, "whLastSevenDays": 0, "whLifetime": -235661.732, "whToday": 0 } ], "measurementType": "net-consumption", "pwrFactor": 0.28, "reactPwr": 899.461, "readingTime": 1748577046, "rmsCurrent": 4.034, "rmsVoltage": 243.936, "type": "eim", "vahLifetime": 2017962.849, "vahToday": 0, "varhLagLifetime": 430153.341, "varhLagToday": 0, "varhLeadLifetime": 463468.848, "varhLeadToday": 0, "wNow": 279.186, "whLastSevenDays": 0, "whLifetime": -235661.732, "whToday": 0 } ], "production": [ { "activeCount": 15, "readingTime": 1748577038, "type": "inverters", "wNow": 2594, "whLifetime": 1264180 }, { "activeCount": 1, "apprntPwr": 1242.277, "lines": [ { "apprntPwr": 1242.277, "pwrFactor": 0.61, "reactPwr": -886.961, "rmsCurrent": 5.032, "rmsVoltage": 243.655, "vahLifetime": 1776750.926, "vahToday": 16483.926, "varhLagLifetime": 255919.503, "varhLagToday": 1824.503, "varhLeadLifetime": 573232.424, "varhLeadToday": 3458.424, "wNow": 734.83, "whLastSevenDays": 86274.514, "whLifetime": 1243811.514, "whToday": 13439.514 } ], "measurementType": "production", "pwrFactor": 0.61, "reactPwr": -886.961, "readingTime": 1748577046, "rmsCurrent": 5.032, "rmsVoltage": 243.655, "type": "eim", "vahLifetime": 1776750.926, "vahToday": 16483.926, "varhLagLifetime": 255919.503, "varhLagToday": 1824.503, "varhLeadLifetime": 573232.424, "varhLeadToday": 3458.424, "wNow": 734.83, "whLastSevenDays": 86274.514, "whLifetime": 1243811.514, "whToday": 13439.514 } ], "storage": [ { "activeCount": 0, "readingTime": 0, "state": "idle", "type": "acb", "wNow": 0, "whNow": 0 } ] } pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/production.json_details_1_log.json000066400000000000000000000006131505013723300316120ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:46 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4345_with_device_data/production_log.json000066400000000000000000000006131505013723300267150ustar00rootroot00000000000000{"headers": {"server": "openresty/1.17.8.1", "date": "Fri, 30 May 2025 03:50:49 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/000077500000000000000000000000001505013723300200765ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/admin_lib_tariff000066400000000000000000000060421505013723300232740ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "EUR" }, "logger": "mylogger", "date": "1701165193", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "", "reserved_soc": 0.0, "very_low_soc": 5, "charge_from_grid": false, "date": "1725861428", "opt_schedules": true }, "single_rate": { "rate": 0.20000000298023224, "sell": 0.0 }, "seasons": [], "seasons_sell": [] }, "schedule": { "filename": "", "source": "", "date": "2024-11-20 08:56:04 UTC", "version": "", "reserved_soc": 30.0, "very_low_soc": 10, "charge_from_grid": false, "batt_mode": "self-consumption", "battery_mode": "self-consumption", "operation_mode_sub_type": "", "opt_schedules": false, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ] } } } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/admin_lib_tariff_log.json000066400000000000000000000005461505013723300251100ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "1130", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/api_v1_production000066400000000000000000000001671505013723300234520ustar00rootroot00000000000000{ "wattHoursToday": 125, "wattHoursSevenDays": 41194, "wattHoursLifetime": 19213249, "wattsNow": 412 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/api_v1_production_inverters000066400000000000000000000066261505013723300255610ustar00rootroot00000000000000[ { "serialNumber": "122050070266", "lastReportDate": 1732092212, "devType": 1, "lastReportWatts": 12, "maxReportWatts": 114 }, { "serialNumber": "122050064569", "lastReportDate": 1732092241, "devType": 1, "lastReportWatts": 11, "maxReportWatts": 113 }, { "serialNumber": "122050064150", "lastReportDate": 1732092152, "devType": 1, "lastReportWatts": 11, "maxReportWatts": 110 }, { "serialNumber": "122050068829", "lastReportDate": 1732091943, "devType": 1, "lastReportWatts": 9, "maxReportWatts": 89 }, { "serialNumber": "122050068987", "lastReportDate": 1732091912, "devType": 1, "lastReportWatts": 9, "maxReportWatts": 78 }, { "serialNumber": "122050070693", "lastReportDate": 1732091821, "devType": 1, "lastReportWatts": 9, "maxReportWatts": 136 }, { "serialNumber": "122105018115", "lastReportDate": 1732092121, "devType": 1, "lastReportWatts": 11, "maxReportWatts": 164 }, { "serialNumber": "122050070701", "lastReportDate": 1732091881, "devType": 1, "lastReportWatts": 10, "maxReportWatts": 166 }, { "serialNumber": "122050070641", "lastReportDate": 1732091822, "devType": 1, "lastReportWatts": 10, "maxReportWatts": 167 }, { "serialNumber": "122050070482", "lastReportDate": 1732091852, "devType": 1, "lastReportWatts": 10, "maxReportWatts": 169 }, { "serialNumber": "122050070741", "lastReportDate": 1732091853, "devType": 1, "lastReportWatts": 10, "maxReportWatts": 169 }, { "serialNumber": "122050070908", "lastReportDate": 1732092032, "devType": 1, "lastReportWatts": 11, "maxReportWatts": 166 }, { "serialNumber": "122050070849", "lastReportDate": 1732092032, "devType": 1, "lastReportWatts": 11, "maxReportWatts": 162 }, { "serialNumber": "122050070958", "lastReportDate": 1732091854, "devType": 1, "lastReportWatts": 10, "maxReportWatts": 165 }, { "serialNumber": "122050070798", "lastReportDate": 1732091882, "devType": 1, "lastReportWatts": 10, "maxReportWatts": 165 }, { "serialNumber": "122307116607", "lastReportDate": 1732092092, "devType": 1, "lastReportWatts": 14, "maxReportWatts": 189 }, { "serialNumber": "122308004151", "lastReportDate": 1732092062, "devType": 1, "lastReportWatts": 12, "maxReportWatts": 120 }, { "serialNumber": "122122013879", "lastReportDate": 1732089577, "devType": 11, "lastReportWatts": 2, "maxReportWatts": 149 }, { "serialNumber": "122122013808", "lastReportDate": 1732089577, "devType": 11, "lastReportWatts": 1, "maxReportWatts": 149 }, { "serialNumber": "122122014120", "lastReportDate": 1732089607, "devType": 11, "lastReportWatts": 0, "maxReportWatts": 149 } ] pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/api_v1_production_inverters_log.json000066400000000000000000000006221505013723300273600ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:55:55 GMT", "content-type": "application/json", "content-length": "2998", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/api_v1_production_log.json000066400000000000000000000006211505013723300252560ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:55:55 GMT", "content-type": "application/json", "content-length": "111", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/info000066400000000000000000000045561505013723300207660ustar00rootroot00000000000000 123456789012 800-00654-r06 D8.2.4382 4c8675 0 1 true true 500-00001-r01 02.00.00 1211 500-00011-r02 04.04.225 08bedf 590-00019-r01 02.00.01 1f421b 500-00002-r01 08.02.4382 779a56 500-00005-r01 01.02.504 f17b8d 500-00008-r01 02.01.24 a74d96 500-00010-r01 07.00.20 176d57 500-00013-r01 03.02.08 8e2f03 500-00012-r01 02.02.00 dc4d26 500-00016-r01 02.00.00 54a6dc 500-00020-r01 31.33.48 f87efc 500-00021-r01 01.00.00 19ae14 500-00016-r01 01.00.00 456 500-00022-r01 01.00.04 2cd3479 500-00001-r01 02.00.00 1211 -envoy_uber-pkg_master:pkg-Sep-18-24-05:13:09 1726636730 02.00.5566 700-GA pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/info_log.json000066400000000000000000000007451505013723300225730ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:55:55 GMT", "content-type": "text/xml", "content-length": "2414", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300252440ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005451505013723300270620ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_generator000066400000000000000000000002771505013723300245450ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 0, "type": 1 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_generator_log.json000066400000000000000000000005451505013723300263540ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_inventory000066400000000000000000000023101505013723300246020ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "830-01760-r42", "serial_num": "122311091641", "installed": 1731789415, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1732092823, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1731789415, "img_load_date": 1731789415, "img_pnum_running": "2.6.7854_rel/22.33", "bmu_fw_version": "2.1.38", "communicating": true, "sleep_enabled": false, "percentFull": 10, "temperature": 11, "maxCellTemp": 11, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 3, "comm_level_2_4_ghz": 3, "led_status": 17, "dc_switch_off": false, "encharge_rev": 2, "encharge_capacity": 3500, "phase": "ph-a", "der_index": 1 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_inventory_log.json000066400000000000000000000005461505013723300264240ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "1223", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_power000066400000000000000000000002771505013723300237130ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "122311091641", "real_power_mw": 105000, "apparent_power_mva": 105000, "soc": 54 } ] } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_power_log.json000066400000000000000000000005451505013723300255220ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_secctrl000066400000000000000000000016761505013723300242220ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": -0.04687688872218132, "voltage_bias_v": -0.5658036470413208, "freq_bias_hz_q8": -75, "voltage_bias_v_q5": -18, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 39, "Max_energy": 7220, "ENC_agg_soc": 54, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 1890, "Enc_commissioned_capacity": 3500, "Enc_max_available_capacity": 3500, "ACB_agg_soc": 25, "ACB_agg_energy": 930, "VLS_Limit": 5, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_secctrl_log.json000066400000000000000000000005451505013723300260250ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "952", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_status000066400000000000000000000142111505013723300240730ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "122311091641": { "device_type": 13, "com_interface_str": "ZigBee", "device_id": "122311091641", "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "reported_grid_mode": "grid-tied", "phase": "ph-a", "der_index": 1, "encharge_revision": 2, "encharge_capacity": 3500, "encharge_rated_power": 1280, "reported_enc_grid_state": "grid-tied", "msg_retry_count": 2, "part_number": "830-01760-r42", "assembly_number": "890-00023-r44", "app_fw_version": "2.6.7854_rel/22.33", "zb_fw_version": "100F", "zb_bootloader_vers": "1.B.5", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "001.002.1.7.2", "bmu_fw_version": "2.1.38", "submodule_count": 6, "submodules": { "122311018059": { "device_type": 16, "admin_state": 1, "part_number": "620-00291-r02", "assembly_number": "800-00291-r02", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "490-00154", "assembly_number": "2.1.38" } }, "122311053123": { "device_type": 15, "admin_state": 1, "part_number": "800-01854-r06", "assembly_number": "800-01854-r06", "dmir": { "part_number": "546-00002-01", "assembly_number": "01" }, "procload": { "part_number": "522-00002-01", "assembly_number": "2.6.7854_rel/22.33" } }, "122311070977": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r12", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.31.1-D51" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.31.1-D51" } }, "122311071104": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r12", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.31.1-D51" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.31.1-D51" } }, "122311071115": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r12", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.31.1-D51" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.31.1-D51" } }, "122311071445": { "device_type": 14, "admin_state": 1, "part_number": "800-01335-r01", "assembly_number": "880-01335-r12", "dmir": { "part_number": "549-00030-r00", "assembly_number": "3.31.1-D51" }, "procload": { "part_number": "521-00003-r00", "assembly_number": "3.31.1-D51" } } } } } }, "secctrl": { "shutdown": false, "freq_bias_hz": -0.04687688872218132, "voltage_bias_v": -0.5658036470413208, "freq_bias_hz_q8": -75, "voltage_bias_v_q5": -18, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "configured_backup_soc": 0, "adjusted_backup_soc": 0, "agg_soc": 4, "Max_energy": 7220, "ENC_agg_soc": 10, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 0, "ENC_agg_avail_energy": 350, "Enc_commissioned_capacity": 3500, "Enc_max_available_capacity": 3500, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 5, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "srt12_state": "open", "srt13_state": "open", "der1_state": 0, "der2_state": 0, "der3_state": 0, "Enchg_grid_mode": "grid-tied", "Solar_grid_mode": "unknown" } } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ensemble_status_log.json000066400000000000000000000005461505013723300257120ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "6280", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_meters000066400000000000000000000007121505013723300221760ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 1, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_meters_log.json000066400000000000000000000005451505013723300240130ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "457", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_meters_readings000066400000000000000000000113271505013723300240560ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1732092964, "actEnergyDlvd": 19213421.296, "actEnergyRcvd": 7336.656, "apparentEnergy": 24081174.822, "reactEnergyLagg": 5814149.758, "reactEnergyLead": 2217810.322, "instantaneousDemand": 308.373, "activePower": 308.373, "apparentPower": 335.318, "reactivePower": -113.954, "pwrFactor": 0.918, "voltage": 228.561, "current": 1.466, "freq": 50.062, "channels": [ { "eid": 1778385169, "timestamp": 1732092964, "actEnergyDlvd": 19213421.296, "actEnergyRcvd": 7336.656, "apparentEnergy": 24081174.822, "reactEnergyLagg": 5814149.758, "reactEnergyLead": 2217810.322, "instantaneousDemand": 308.373, "activePower": 308.373, "apparentPower": 335.318, "reactivePower": -113.954, "pwrFactor": 0.918, "voltage": 228.561, "current": 1.466, "freq": 50.062 }, { "eid": 1778385170, "timestamp": 1732092964, "actEnergyDlvd": 0.0, "actEnergyRcvd": 1944.575, "apparentEnergy": 21790.483, "reactEnergyLagg": 2031.758, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.792, "reactivePower": 0.081, "pwrFactor": 0.0, "voltage": 4.605, "current": 0.173, "freq": 50.062 }, { "eid": 1778385171, "timestamp": 1732092964, "actEnergyDlvd": 0.093, "actEnergyRcvd": 36877.093, "apparentEnergy": 1682.645, "reactEnergyLagg": 2037.521, "reactEnergyLead": 9.126, "instantaneousDemand": -0.0, "activePower": -0.0, "apparentPower": 0.0, "reactivePower": -0.0, "pwrFactor": 0.0, "voltage": 7.8, "current": 0.0, "freq": 50.062 } ] }, { "eid": 704643584, "timestamp": 1732092964, "actEnergyDlvd": 14153292.251, "actEnergyRcvd": 6665130.717, "apparentEnergy": 31487330.807, "reactEnergyLagg": 1706094.54, "reactEnergyLead": 13403122.193, "instantaneousDemand": 22.54, "activePower": 22.54, "apparentPower": 337.439, "reactivePower": -280.396, "pwrFactor": 0.066, "voltage": 228.575, "current": 1.477, "freq": 50.125, "channels": [ { "eid": 1778385425, "timestamp": 1732092964, "actEnergyDlvd": 14153292.251, "actEnergyRcvd": 6665130.717, "apparentEnergy": 31487330.807, "reactEnergyLagg": 1706094.54, "reactEnergyLead": 13403122.193, "instantaneousDemand": 22.54, "activePower": 22.54, "apparentPower": 337.439, "reactivePower": -280.396, "pwrFactor": 0.066, "voltage": 228.575, "current": 1.477, "freq": 50.125 }, { "eid": 1778385426, "timestamp": 1732092964, "actEnergyDlvd": 0.0, "actEnergyRcvd": 56876.766, "apparentEnergy": 9882.922, "reactEnergyLagg": 1852.119, "reactEnergyLead": 0.903, "instantaneousDemand": -0.131, "activePower": -0.131, "apparentPower": 0.353, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 1.666, "current": 0.212, "freq": 50.125 }, { "eid": 1778385427, "timestamp": 1732092964, "actEnergyDlvd": 0.0, "actEnergyRcvd": 80195.369, "apparentEnergy": 1778.597, "reactEnergyLagg": 1854.391, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": -0.0, "reactivePower": -0.0, "pwrFactor": 0.0, "voltage": 6.87, "current": 0.0, "freq": 50.125 } ] } ] pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_meters_readings_log.json000066400000000000000000000005461505013723300256700ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "4875", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_sc_pvlimit000066400000000000000000000000611505013723300230450ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_sc_pvlimit_log.json000066400000000000000000000005441505013723300246640ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_dry_contact_settings000066400000000000000000000027271505013723300256450ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005461505013723300274530ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "1494", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_config000066400000000000000000000000031505013723300234730ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_config_log.json000066400000000000000000000005431505013723300253150ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_schedule000066400000000000000000000000031505013723300240220ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_schedule_log.json000066400000000000000000000005431505013723300256440ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_pel_settings000066400000000000000000000003771505013723300241130ustar00rootroot00000000000000{ "PEL": true, "Hard_PEL": false, "Soft_PEL": true, "Export_Limit_Type": "Aggregate", "percent": true, "apparent": false, "PEL_Limit": 100.0, "Comm_Time_Loss": 10000.0, "Resp_Time_SoftPEL": 30000.0, "PEL_db": 1.0 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/ivp_ss_pel_settings_log.json000066400000000000000000000005451505013723300257210ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-length": "254", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/production000066400000000000000000000047171505013723300222200ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 17, "readingTime": 1732092241, "wNow": 179, "whLifetime": 7417207 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1732092963, "wNow": 308.633, "whLifetime": 19213421.211, "varhLeadLifetime": 2217810.29, "varhLagLifetime": 5814149.758, "vahLifetime": 24081174.729, "rmsCurrent": 1.468, "rmsVoltage": 228.398, "reactPwr": -113.579, "apprntPwr": 336.104, "pwrFactor": 0.91, "whToday": 297.211, "whLastSevenDays": 41261.211, "vahToday": 2681.729, "varhLeadToday": 100.29, "varhLagToday": 2300.758 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1732092963, "wNow": 329.409, "whLifetime": 26700501.39, "varhLeadLifetime": 11185311.825, "varhLagLifetime": -4108055.218, "vahLifetime": 31487330.714, "rmsCurrent": 2.947, "rmsVoltage": 228.453, "reactPwr": -394.926, "apprntPwr": 673.214, "pwrFactor": 0.49, "whToday": 6554.39, "whLastSevenDays": 77.39, "vahToday": 10065.714, "varhLeadToday": 6102.825, "varhLagToday": 0.0 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1732092963, "wNow": 20.776, "whLifetime": 7489242.877, "varhLeadLifetime": 13403122.115, "varhLagLifetime": 1706094.54, "vahLifetime": 31487330.714, "rmsCurrent": 1.479, "rmsVoltage": 228.453, "reactPwr": -281.346, "apprntPwr": 337.774, "pwrFactor": 0.06, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 3, "readingTime": 1731943992, "wNow": 260, "whNow": 930, "state": "discharging", "percentFull": 25 } ] } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/production.json000066400000000000000000000111351505013723300231600ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 17, "readingTime": 1732092241, "wNow": 179, "whLifetime": 7417207 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1732092958, "wNow": 311.12, "whLifetime": 19213420.774, "varhLeadLifetime": 2217810.13, "varhLagLifetime": 5814149.758, "vahLifetime": 24081174.253, "rmsCurrent": 1.469, "rmsVoltage": 230.306, "reactPwr": -113.597, "apprntPwr": 338.784, "pwrFactor": 0.92, "whToday": 296.774, "whLastSevenDays": 41260.774, "vahToday": 2681.253, "varhLeadToday": 100.13, "varhLagToday": 2300.758, "lines": [ { "wNow": 311.12, "whLifetime": 19213420.774, "varhLeadLifetime": 2217810.13, "varhLagLifetime": 5814149.758, "vahLifetime": 24081174.253, "rmsCurrent": 1.469, "rmsVoltage": 230.306, "reactPwr": -113.597, "apprntPwr": 338.784, "pwrFactor": 0.92, "whToday": 296.774, "whLastSevenDays": 41260.774, "vahToday": 2681.253, "varhLeadToday": 100.13, "varhLagToday": 2300.758 } ] } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1732092958, "wNow": 330.26, "whLifetime": 26700500.925, "varhLeadLifetime": 11185311.588, "varhLagLifetime": -4108055.218, "vahLifetime": 31487330.236, "rmsCurrent": 2.949, "rmsVoltage": 230.415, "reactPwr": -399.219, "apprntPwr": 679.518, "pwrFactor": 0.49, "whToday": 6553.925, "whLastSevenDays": 76.925, "vahToday": 10065.236, "varhLeadToday": 6102.588, "varhLagToday": 0.0, "lines": [ { "wNow": 330.26, "whLifetime": 26700500.925, "varhLeadLifetime": 11185311.588, "varhLagLifetime": -4108055.218, "vahLifetime": 31487330.236, "rmsCurrent": 2.949, "rmsVoltage": 230.415, "reactPwr": -399.219, "apprntPwr": 679.518, "pwrFactor": 0.49, "whToday": 6553.925, "whLastSevenDays": 76.925, "vahToday": 10065.236, "varhLeadToday": 6102.588, "varhLagToday": 0.0 } ] }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1732092958, "wNow": 19.141, "whLifetime": 7489242.849, "varhLeadLifetime": 13403121.717, "varhLagLifetime": 1706094.54, "vahLifetime": 31487330.236, "rmsCurrent": 1.48, "rmsVoltage": 230.415, "reactPwr": -285.622, "apprntPwr": 341.016, "pwrFactor": 0.06, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0, "lines": [ { "wNow": 19.141, "whLifetime": 7489242.849, "varhLeadLifetime": 13403121.717, "varhLagLifetime": 1706094.54, "vahLifetime": 31487330.236, "rmsCurrent": 1.48, "rmsVoltage": 230.415, "reactPwr": -285.622, "apprntPwr": 341.016, "pwrFactor": 0.06, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ] } ], "storage": [ { "type": "acb", "activeCount": 3, "readingTime": 1731943992, "wNow": 260, "whNow": 930, "state": "discharging", "percentFull": 25 } ] } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/production.json_log.json000066400000000000000000000007631505013723300247760ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:55:57 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.2.4382_ACB/production_log.json000066400000000000000000000007631505013723300240260ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Wed, 20 Nov 2024 08:56:04 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/000077500000000000000000000000001505013723300207745ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/admin_lib_tariff000066400000000000000000000170071505013723300241750ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "USD" }, "logger": "mylogger", "date": "1752958498", "storage_settings": { "mode": "backup", "operation_mode_sub_type": "", "reserved_soc": 100.0, "very_low_soc": 5, "charge_from_grid": false, "date": "1752766997", "opt_schedules": false }, "single_rate": { "rate": 0.15199999511241913, "sell": 0.1899999976158142 }, "seasons": [ { "id": "all_year_long", "start": "1/1", "days": [ { "id": "weekdays", "days": "Mon,Tue,Wed,Thu,Fri", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CG", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.15199999511241913 }, { "id": "mid-pe_k-1", "start": 420, "rate": 0.1899999976158142 }, { "id": "peak-1_", "start": 900, "rate": 0.375 }, { "id": "mid-pe_k-2", "start": 1140, "rate": 0.1899999976158142 }, { "id": "filler", "start": 1381, "rate": 0.15199999511241913 } ] }, { "id": "weekend", "days": "Sat,Sun", "must_charge_start": 0, "must_charge_duration": 0, "must_charge_mode": "CG", "peak_rule": "DL", "enable_discharge_to_grid": false, "periods": [ { "id": "filler", "start": 0, "rate": 0.15199999511241913 }, { "id": "peak-1_", "start": 1380, "rate": 0.15299999713897705 }, { "id": "filler", "start": 1381, "rate": 0.15199999511241913 } ] } ], "tiers": [] } ], "seasons_sell": [] }, "schedule": { "filename": "Tariff", "source": "Tariff", "date": "2025-07-19 15:54:58 UTC", "version": "00.00.02", "reserved_soc": 100.0, "very_low_soc": 5, "charge_from_grid": false, "batt_mode": "backup", "battery_mode": "backup", "operation_mode_sub_type": "", "opt_schedules": false, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ], "tariff": [ { "start": "1/1", "end": "1/1", "Sun": [ { "start": 0, "duration": 1440, "setting": "CP" } ], "Mon": [ { "start": 0, "duration": 1440, "setting": "CP" } ], "Tue": [ { "start": 0, "duration": 1440, "setting": "CP" } ], "Wed": [ { "start": 0, "duration": 1440, "setting": "CP" } ], "Thu": [ { "start": 0, "duration": 1440, "setting": "CP" } ], "Fri": [ { "start": 0, "duration": 1440, "setting": "CP" } ], "Sat": [ { "start": 0, "duration": 1440, "setting": "CP" } ] } ] } } } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/admin_lib_tariff_log.json000066400000000000000000000005461505013723300260060ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "2371", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/api_v1_production000066400000000000000000000001501505013723300243400ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 0, "wattsNow": 0 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/api_v1_production_inverters000066400000000000000000000056001505013723300264460ustar00rootroot00000000000000[ { "serialNumber": "123456789644", "lastReportDate": 1752970877, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 345 }, { "serialNumber": "123456789806", "lastReportDate": 1752970362, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 301 }, { "serialNumber": "123456789119", "lastReportDate": 1752970785, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 337 }, { "serialNumber": "123456789059", "lastReportDate": 1752970949, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 335 }, { "serialNumber": "123456789508", "lastReportDate": 1752970786, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 270 }, { "serialNumber": "123456789247", "lastReportDate": 1752970605, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 324 }, { "serialNumber": "123456789910", "lastReportDate": 1752970333, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 329 }, { "serialNumber": "123456789682", "lastReportDate": 1752970882, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 323 }, { "serialNumber": "123456789750", "lastReportDate": 1752970786, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 284 }, { "serialNumber": "123456789056", "lastReportDate": 1752970696, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 339 }, { "serialNumber": "123456789130", "lastReportDate": 1752970788, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 342 }, { "serialNumber": "123456789336", "lastReportDate": 1752970883, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 346 }, { "serialNumber": "123456789618", "lastReportDate": 1752970884, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 348 }, { "serialNumber": "123456789899", "lastReportDate": 1752970789, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 338 }, { "serialNumber": "123456789979", "lastReportDate": 1752970941, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 282 }, { "serialNumber": "123456789703", "lastReportDate": 1752970666, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 301 }, { "serialNumber": "123456789892", "lastReportDate": 1752970724, "devType": 1, "lastReportWatts": 0, "maxReportWatts": 317 } ] pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/api_v1_production_inverters_log.json000066400000000000000000000006221505013723300302560ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:44 GMT", "content-type": "application/json", "content-length": "2536", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/api_v1_production_log.json000066400000000000000000000006201505013723300261530ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:44 GMT", "content-type": "application/json", "content-length": "96", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/home000066400000000000000000000042321505013723300216500ustar00rootroot00000000000000{ "software_build_epoch": 1749981828, "timezone": "US/Eastern", "current_date": "07/19/2025", "current_time": "21:25", "network": { "web_comm": true, "ever_reported_to_enlighten": true, "last_enlighten_report_time": 1752974593, "primary_interface": "wlan0", "interfaces": [ { "signal_strength": 24, "signal_strength_max": 31, "network": true, "type": "cellular", "interface": "ppp0", "dhcp": true, "ip": "1.2.3.4", "carrier": true }, { "type": "ethernet", "interface": "eth0", "mac": "00:00:10:20:30:40", "dhcp": true, "ip": "169.254.120.1", "signal_strength": 0, "signal_strength_max": 1, "carrier": false }, { "signal_strength": 4, "signal_strength_max": 5, "type": "wifi", "interface": "wlan0", "mac": "00:10:2D:30:40:50", "dhcp": true, "ip": "192.168.5.96", "carrier": true, "supported": true, "present": true, "configured": true, "status": "connected" } ] }, "tariff": "time_of_use", "comm": { "num": 1, "level": 0, "pcu": { "num": 0, "level": 0 }, "acb": { "num": 0, "level": 0 }, "nsrb": { "num": 0, "level": 0 }, "esub": { "num": 1, "level": 5 }, "encharge": [ { "num": 2, "level": 0, "level_24g": 0, "level_subg": 0 } ] }, "wireless_connection": [ { "signal_strength": 0, "signal_strength_max": 0, "type": "BLE", "connected": true } ] } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/home_log.json000066400000000000000000000007631505013723300234660ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:57 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/info000066400000000000000000000044071505013723300216570ustar00rootroot00000000000000 123456789012 800-02409-r03 D8.3.1598 4c8675 0 1 true true 500-00012-r01 02.02.00 333216 500-00002-r01 08.03.1598 a7517c 500-00010-r01 07.00.20 176d57 590-00019-r01 02.00.01 2569cb 500-00004-r01 01.02.542 a71cfc 500-00020-r01 99.19.20 20d706 500-00022-r01 01.00.04 2cd3479 500-00008-r01 02.01.24 a74d96 500-00011-r02 04.04.225 08bedf 500-00013-r01 03.02.08 a7517c 500-00021-r01 01.00.00 9a696d 500-00001-r01 02.00.00 1211 500-00001-r01 02.00.00 1211 500-00016-r01 02.00.00 54a6dc -FRA-799-merge-master-enable-prod:pkg-Jun-16-25-15:59:25 1750089959 700-GA 02.00.337 pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/info_log.json000066400000000000000000000005461505013723300234700ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:44 GMT", "content-length": "2172", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_dry_contacts000066400000000000000000000005131505013723300261420ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005451505013723300277600ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "330", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_generator000066400000000000000000000002771505013723300254430ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 0, "type": 1 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_generator_log.json000066400000000000000000000005451505013723300272520ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:52 GMT", "content-length": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_inventory000066400000000000000000000100461505013723300255050ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "836-01250-r00", "serial_num": "492516006337", "installed": 1752939764, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1752974610, "admin_state": 63, "admin_state_str": "ENCMN_MDE_ENCHARGE_READY", "created_date": 1752939764, "img_load_date": 1752939764, "img_pnum_running": "4.5.35", "bmu_fw_version": "4.5.35", "communicating": true, "sleep_enabled": false, "percentFull": 92, "temperature": 32, "maxCellTemp": 33, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 4, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 }, { "part_num": "836-01250-r00", "serial_num": "492517004892", "installed": 1752939763, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1752974529, "admin_state": 63, "admin_state_str": "ENCMN_MDE_ENCHARGE_READY", "created_date": 1752939763, "img_load_date": 1752939763, "img_pnum_running": "4.5.35", "bmu_fw_version": "4.5.35", "communicating": true, "sleep_enabled": false, "percentFull": 86, "temperature": 33, "maxCellTemp": 33, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 12, "dc_switch_off": false, "encharge_rev": 4, "encharge_capacity": 5000, "phase": "ph-a", "der_index": 2 } ] }, { "type": "COLLAR", "devices": [ { "part_num": "865-00400-r22", "serial_num": "482520020939", "installed": 1752939759, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1752939759, "admin_state": 88, "admin_state_str": "ENCMN_MDE_ON_GRID", "created_date": 1752939759, "img_load_date": 1752939759, "img_pnum_running": "3.0.6-D0", "communicating": true, "temperature": 42, "mid_state": "close", "grid_state": "on_grid", "control_error": 0, "collar_state": "Installed" } ] }, { "type": "C6 COMBINER CONTROLLER", "devices": [ { "part_num": "800-02403-r08", "serial_num": "482523040549", "installed": 1752945451, "last_rpt_date": 1752945451, "admin_state": 82, "admin_state_str": "ENCMN_C6_CC_READY", "created_date": 1752945451, "img_load_date": 1752945451, "fw_version": "0.1.20-D1", "dmir_version": "0.1.20-D1", "communicating": true } ] }, { "type": "C6 RGM", "devices": [ { "part_num": "800-02403-r08", "serial_num": "482523040550", "installed": 1752939759, "FW Version": "2.2.1-D4119", "Device State": 80 } ] } ] pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_inventory_log.json000066400000000000000000000005461505013723300273220ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "4133", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_power000066400000000000000000000005471505013723300246110ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "492516006337", "real_power_mw": -532000, "apparent_power_mva": -532000, "soc": 92 }, { "serial_num": "492517004892", "real_power_mw": -552000, "apparent_power_mva": -552000, "soc": 86 } ] } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_power_log.json000066400000000000000000000005451505013723300264200ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "358", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_secctrl000066400000000000000000000024061505013723300251100ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "offgrid_secctrl": { "F": 0.7687389826090736, "V": -0.0014091715353808515, "Vd_neg": 5.126506875393791, "Vq_neg": 1.5839945028613174, "Vd_zero": 0.8743872414038012, "Vq_zero": 5.888518297886519, "is_active": false, "is_system_balanced": false }, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 89, "Max_energy": 10000, "ENC_agg_soc": 89, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 10000, "ENC_agg_avail_energy": 8900, "Enc_commissioned_capacity": 10000, "Enc_max_available_capacity": 10000, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 5, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false, "ESS_R3_To_R4_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_secctrl_log.json000066400000000000000000000005461505013723300267240ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "1285", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_status000066400000000000000000000360671505013723300250060ustar00rootroot00000000000000{ "inventory": { "serial_nums": { "482520020939": { "device_type": 27, "com_interface_str": "CAN", "device_id": "482520020939", "admin_state": 88, "admin_state_str": "ENCMN_MDE_ON_GRID", "prop_set": true, "installed": 1, "msg_retry_count": 0, "part_number": "865-00400-r22", "assembly_number": "885-00400-r23", "app_fw_version": "3.0.6-D0", "ibl_fw_version": "", "swift_asic_fw_version": "", "bmu_fw_version": "", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "000-00000-r00", "assembly_number": "3.0.6-D0" }, "submodule_count": 0, "submodules": {} }, "482523040548": { "device_type": 30, "com_interface_str": "USB", "device_id": "482523040548", "admin_state": 43, "admin_state_str": "ENS_DEVICE_STATE_READY", "prop_set": true, "msg_retry_count": 0, "part_number": "865-00600-r03", "assembly_number": "885-00600-r03", "app_fw_version": "4.0.1107_rel/99.19", "ibl_fw_version": "1.3.413", "swift_asic_fw_version": "", "bmu_fw_version": "", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00003-01", "assembly_number": "4.0.1107_rel/99.19" }, "submodule_count": 1, "submodules": { "482523040548": { "device_type": 31, "admin_state": 1, "part_number": "800-02403-r08", "assembly_number": "830-02403-r03", "dmir": { "part_number": "546-00003-01", "assembly_number": "01" }, "procload": { "part_number": "522-00004-01", "assembly_number": "4.0.1107_rel/99.19" } } } }, "482523040549": { "device_type": 125, "com_interface_str": "CAN", "device_id": "482523040549", "admin_state": 82, "admin_state_str": "ENCMN_C6_CC_READY", "prop_set": true, "msg_retry_count": 0, "part_number": "800-02403-r08", "assembly_number": "800-02403-r01", "app_fw_version": "0.1.20-D1", "ibl_fw_version": "", "swift_asic_fw_version": "", "bmu_fw_version": "", "dmir": { "part_number": "546-00060-r00", "assembly_number": "0.1.20-D1" }, "procload": { "part_number": "522-00060-r00", "assembly_number": "0.1.20-D1" }, "submodule_count": 0, "submodules": {} }, "482523040550": { "device_type": 115, "com_interface_str": "CAN", "device_id": "482523040550", "admin_state": 80, "admin_state_str": "ENCMN_C6_RGM_DEV_CONNECTED", "prop_set": true, "msg_retry_count": 0, "part_number": "800-02403-r08", "assembly_number": "880-01407-r05", "app_fw_version": "2.2.1-D4119", "ibl_fw_version": "", "swift_asic_fw_version": "", "bmu_fw_version": "", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "521-00015-r00", "assembly_number": "2.2.1-D4119" }, "submodule_count": 0, "submodules": {} }, "492516006337": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492516006337", "admin_state": 63, "admin_state_str": "ENCMN_MDE_ENCHARGE_READY", "prop_set": true, "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 4, "encharge_capacity": 5000, "encharge_rated_power": 3540, "reported_enc_grid_state": "multimode-ongrid", "msg_retry_count": 0, "part_number": "836-01250-r00", "assembly_number": "836-01250-r00", "app_fw_version": "4.5.35", "ibl_fw_version": "", "swift_asic_fw_version": "", "bmu_fw_version": "4.5.35", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "", "assembly_number": "" }, "submodule_count": 4, "submodules": { "542517021267": { "device_type": 14, "alternate_device_type": 120, "fsm_state": "ENCMN_MDE_PCU_READY", "admin_state": 1, "part_number": "800-02041-r05", "assembly_number": "892-10301-r11", "rated_power": 2100, "is_ll": true, "pcu_phase": "ph-b", "dmir": { "part_number": "549-00076-r00", "assembly_number": "10.9.63-D14494" }, "procload": { "part_number": "521-00012-r00", "assembly_number": "10.9.63-D14494" } }, "542517021268": { "device_type": 16, "alternate_device_type": 100, "fsm_state": "ENCMN_MDE_BMU_READY", "admin_state": 1, "part_number": "836-11350-r11", "assembly_number": "892-10301-r11", "dmir": { "part_number": "000-00000-r00", "assembly_number": "0.0.0-D0" }, "procload": { "part_number": "522-00040-r00", "assembly_number": "4.5.35-D1" } }, "542517101037": { "device_type": 14, "alternate_device_type": 120, "fsm_state": "ENCMN_MDE_PCU_READY", "admin_state": 1, "part_number": "800-02042-r05", "assembly_number": "892-10301-r11", "rated_power": 1440, "is_ll": false, "pcu_phase": "ph-b", "dmir": { "part_number": "549-00095-r00", "assembly_number": "10.9.64-D14561" }, "procload": { "part_number": "521-00016-r00", "assembly_number": "10.9.64-D14561" } }, "542517101038": { "device_type": 16, "alternate_device_type": 100, "fsm_state": "ENCMN_MDE_BMU_READY", "admin_state": 1, "part_number": "836-11350-r11", "assembly_number": "892-10301-r11", "dmir": { "part_number": "000-00000-r00", "assembly_number": "0.0.0-D0" }, "procload": { "part_number": "522-00040-r00", "assembly_number": "4.5.35-D1" } } } }, "492517004892": { "device_type": 13, "com_interface_str": "CAN", "device_id": "492517004892", "admin_state": 63, "admin_state_str": "ENCMN_MDE_ENCHARGE_READY", "prop_set": true, "reported_grid_mode": "multimode-ongrid", "phase": "ph-a", "der_index": 2, "encharge_revision": 4, "encharge_capacity": 5000, "encharge_rated_power": 3540, "reported_enc_grid_state": "multimode-ongrid", "msg_retry_count": 1, "part_number": "836-01250-r00", "assembly_number": "836-01250-r00", "app_fw_version": "4.5.35", "ibl_fw_version": "", "swift_asic_fw_version": "", "bmu_fw_version": "4.5.35", "dmir": { "part_number": "", "assembly_number": "" }, "procload": { "part_number": "", "assembly_number": "" }, "submodule_count": 4, "submodules": { "542517022009": { "device_type": 14, "alternate_device_type": 120, "fsm_state": "ENCMN_MDE_PCU_READY", "admin_state": 1, "part_number": "800-02041-r05", "assembly_number": "892-10301-r11", "rated_power": 2100, "is_ll": true, "pcu_phase": "ph-a", "dmir": { "part_number": "549-00076-r00", "assembly_number": "10.9.63-D14494" }, "procload": { "part_number": "521-00012-r00", "assembly_number": "10.9.63-D14494" } }, "542517022010": { "device_type": 16, "alternate_device_type": 100, "fsm_state": "ENCMN_MDE_BMU_READY", "admin_state": 1, "part_number": "836-11350-r11", "assembly_number": "892-10301-r11", "dmir": { "part_number": "000-00000-r00", "assembly_number": "0.0.0-D0" }, "procload": { "part_number": "522-00040-r00", "assembly_number": "4.5.35-D1" } }, "542517093391": { "device_type": 14, "alternate_device_type": 120, "fsm_state": "ENCMN_MDE_PCU_READY", "admin_state": 1, "part_number": "800-02042-r05", "assembly_number": "892-10301-r11", "rated_power": 1440, "is_ll": false, "pcu_phase": "ph-a", "dmir": { "part_number": "549-00095-r00", "assembly_number": "10.9.64-D14561" }, "procload": { "part_number": "521-00016-r00", "assembly_number": "10.9.64-D14561" } }, "542517093392": { "device_type": 16, "alternate_device_type": 100, "fsm_state": "ENCMN_MDE_BMU_READY", "admin_state": 1, "part_number": "836-11350-r11", "assembly_number": "892-10301-r11", "dmir": { "part_number": "000-00000-r00", "assembly_number": "0.0.0-D0" }, "procload": { "part_number": "522-00040-r00", "assembly_number": "4.5.35-D1" } } } } } }, "secctrl": { "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "offgrid_secctrl": { "F": 0.7687389826090736, "V": -0.0014091715353808515, "Vd_neg": 5.126506875393791, "Vq_neg": 1.5839945028613174, "Vd_zero": 0.8743872414038012, "Vq_zero": 5.888518297886519, "is_active": false, "is_system_balanced": false }, "configured_backup_soc": 100, "adjusted_backup_soc": 100, "agg_soc": 89, "Max_energy": 10000, "ENC_agg_soc": 89, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 10000, "ENC_agg_avail_energy": 8900, "Enc_commissioned_capacity": 10000, "Enc_max_available_capacity": 10000, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 5, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false, "ESS_R3_To_R4_in_progress": false }, "relay": { "mains_admin_state": "closed", "mains_oper_state": "closed", "srt12_state": "open", "srt13_state": "open", "der1_state": 1, "der2_state": 1, "der3_state": 1, "Enchg_grid_mode": "multimode-ongrid", "Solar_grid_mode": "multimode-ongrid" } } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ensemble_status_log.json000066400000000000000000000005471505013723300266110ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "15414", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_meters000066400000000000000000000030331505013723300230730ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643840, "state": "enabled", "measurementType": "storage", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704644352, "state": "enabled", "measurementType": "backfeed", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704644608, "state": "disabled", "measurementType": "load", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704644864, "state": "disabled", "measurementType": "evse", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704645120, "state": "disabled", "measurementType": "pv3p", "phaseMode": "split", "phaseCount": 2, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_meters_log.json000066400000000000000000000005461505013723300247120ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:52 GMT", "content-length": "1562", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_meters_readings000066400000000000000000000436711505013723300247630ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1752974752, "actEnergyDlvd": 47077.959, "actEnergyRcvd": 15.925, "apparentEnergy": 0.01, "reactEnergyLagg": 9742.709, "reactEnergyLead": 64.306, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 352.088, "reactivePower": 352.088, "pwrFactor": 0.0, "voltage": 240.537, "current": 2.927, "freq": 60.0, "channels": [ { "eid": 1778385169, "timestamp": 1752974752, "actEnergyDlvd": 23505.638, "actEnergyRcvd": 7.868, "apparentEnergy": 0.004, "reactEnergyLagg": 4861.567, "reactEnergyLead": 21.566, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 176.187, "reactivePower": 172.976, "pwrFactor": 0.0, "voltage": 120.617, "current": 1.46, "freq": 60.0 }, { "eid": 1778385170, "timestamp": 1752974752, "actEnergyDlvd": 23572.321, "actEnergyRcvd": 8.056, "apparentEnergy": 0.005, "reactEnergyLagg": 4881.141, "reactEnergyLead": 42.739, "instantaneousDemand": 0.0, "activePower": -0.0, "apparentPower": 175.119, "reactivePower": 172.281, "pwrFactor": 0.0, "voltage": 119.833, "current": 1.46, "freq": 60.0 }, { "eid": 1778385171, "timestamp": 1752974752, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 } ] }, { "eid": 704643584, "timestamp": 1752974752, "actEnergyDlvd": 108563.587, "actEnergyRcvd": 22728.922, "apparentEnergy": 0.0, "reactEnergyLagg": 560.675, "reactEnergyLead": 19571.612, "instantaneousDemand": 3760.828, "activePower": 3760.828, "apparentPower": 3864.088, "reactivePower": -528.986, "pwrFactor": 1.94, "voltage": 240.537, "current": 32.108, "freq": 60.021, "channels": [ { "eid": 1778385425, "timestamp": 1752974752, "actEnergyDlvd": 47524.636, "actEnergyRcvd": 14281.669, "apparentEnergy": 0.0, "reactEnergyLagg": 127.627, "reactEnergyLead": 8477.743, "instantaneousDemand": 2309.657, "activePower": 2395.037, "apparentPower": 2500.323, "reactivePower": -178.061, "pwrFactor": 0.979, "voltage": 120.617, "current": 20.729, "freq": 60.021 }, { "eid": 1778385426, "timestamp": 1752974752, "actEnergyDlvd": 61038.952, "actEnergyRcvd": 8447.253, "apparentEnergy": 0.0, "reactEnergyLagg": 433.049, "reactEnergyLead": 11093.869, "instantaneousDemand": 1451.171, "activePower": 1459.645, "apparentPower": 1505.846, "reactivePower": -354.95, "pwrFactor": 0.96, "voltage": 119.833, "current": 12.566, "freq": 60.021 }, { "eid": 1778385427, "timestamp": 1752974752, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.021 } ] }, { "eid": 704643840, "timestamp": 1752974752, "actEnergyDlvd": 344.359, "actEnergyRcvd": 8052.959, "apparentEnergy": 0.036, "reactEnergyLagg": 115.094, "reactEnergyLead": 115.319, "instantaneousDemand": -1297.667, "activePower": -1297.667, "apparentPower": 1319.516, "reactivePower": 0.0, "pwrFactor": -1.966, "voltage": 240.684, "current": 10.964, "freq": 60.0, "channels": [ { "eid": 1778385681, "timestamp": 1752974752, "actEnergyDlvd": 234.071, "actEnergyRcvd": 4028.434, "apparentEnergy": 0.018, "reactEnergyLagg": 60.023, "reactEnergyLead": 63.177, "instantaneousDemand": -658.017, "activePower": -655.695, "apparentPower": 666.636, "reactivePower": 0.367, "pwrFactor": -0.989, "voltage": 120.674, "current": 5.54, "freq": 60.0 }, { "eid": 1778385682, "timestamp": 1752974752, "actEnergyDlvd": 110.288, "actEnergyRcvd": 4024.524, "apparentEnergy": 0.018, "reactEnergyLagg": 55.071, "reactEnergyLead": 52.142, "instantaneousDemand": -639.65, "activePower": -652.373, "apparentPower": 661.374, "reactivePower": -0.845, "pwrFactor": -0.977, "voltage": 119.923, "current": 5.534, "freq": 60.0 }, { "eid": 1778385683, "timestamp": 1752974752, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 } ] }, { "eid": 704644352, "timestamp": 1752974751, "actEnergyDlvd": 3.797, "actEnergyRcvd": 7014.684, "apparentEnergy": 0.0, "reactEnergyLagg": 1.121, "reactEnergyLead": 15.242, "instantaneousDemand": -686.225, "activePower": -686.225, "apparentPower": 691.896, "reactivePower": 88.401, "pwrFactor": -0.991, "voltage": 120.58, "current": 11.488, "freq": 0.0, "channels": [ { "eid": 1778386193, "timestamp": 1752974751, "actEnergyDlvd": 3.797, "actEnergyRcvd": 7014.684, "apparentEnergy": 0.0, "reactEnergyLagg": 1.121, "reactEnergyLead": 15.242, "instantaneousDemand": -686.225, "activePower": -661.536, "apparentPower": 691.272, "reactivePower": 187.758, "pwrFactor": -0.991, "voltage": 120.587, "current": 5.73, "freq": 0.0 }, { "eid": 1778386194, "timestamp": 1752974751, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 5.722, "freq": 0.0 }, { "eid": 1778386195, "timestamp": 1752974751, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 } ] }, { "eid": 704644608, "timestamp": 1752974751, "actEnergyDlvd": 14.307, "actEnergyRcvd": 8.56, "apparentEnergy": 0.0, "reactEnergyLagg": 0.861, "reactEnergyLead": 0.071, "instantaneousDemand": 0.078, "activePower": 0.078, "apparentPower": 1.036, "reactivePower": 0.078, "pwrFactor": 0.191, "voltage": 240.478, "current": 0.008, "freq": 60.02, "channels": [ { "eid": 1778386449, "timestamp": 1752974751, "actEnergyDlvd": 10.778, "actEnergyRcvd": 2.454, "apparentEnergy": 0.0, "reactEnergyLagg": 0.716, "reactEnergyLead": 0.011, "instantaneousDemand": 0.039, "activePower": 0.046, "apparentPower": 0.278, "reactivePower": 0.014, "pwrFactor": 0.139, "voltage": 120.589, "current": 0.002, "freq": 60.02 }, { "eid": 1778386450, "timestamp": 1752974751, "actEnergyDlvd": 3.529, "actEnergyRcvd": 6.106, "apparentEnergy": 0.0, "reactEnergyLagg": 0.145, "reactEnergyLead": 0.06, "instantaneousDemand": 0.039, "activePower": 0.041, "apparentPower": 0.756, "reactivePower": 0.002, "pwrFactor": 0.051, "voltage": 119.841, "current": 0.005, "freq": 60.02 }, { "eid": 1778386451, "timestamp": 1752974751, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.02 } ] }, { "eid": 704644864, "timestamp": 1752974752, "actEnergyDlvd": 123.136, "actEnergyRcvd": -19.677, "apparentEnergy": -0.0, "reactEnergyLagg": 4.628, "reactEnergyLead": 10.729, "instantaneousDemand": -14.617, "activePower": -14.617, "apparentPower": 7.306, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0, "channels": [ { "eid": 1778386705, "timestamp": 1752974752, "actEnergyDlvd": 123.136, "actEnergyRcvd": -19.677, "apparentEnergy": -0.0, "reactEnergyLagg": 4.628, "reactEnergyLead": 10.729, "instantaneousDemand": -14.617, "activePower": 0.501, "apparentPower": 1.385, "reactivePower": 1.217, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 }, { "eid": 1778386706, "timestamp": 1752974752, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 }, { "eid": 1778386707, "timestamp": 1752974752, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 60.0 } ] }, { "eid": 704645120, "timestamp": 0, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0, "channels": [ { "eid": 1778386961, "timestamp": 0, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 }, { "eid": 1778386962, "timestamp": 0, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 }, { "eid": 1778386963, "timestamp": 0, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 } ] }, { "eid": 1023410688, "timestamp": 1752974746, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0, "channels": [ { "eid": 2097152513, "timestamp": 1752974746.0, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 }, { "eid": 2097152514, "timestamp": 1752974746.0, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 }, { "eid": 2097152515, "timestamp": 1752974746.0, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 } ] } ] pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_meters_readings_log.json000066400000000000000000000005471505013723300265670ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:52 GMT", "content-length": "18360", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_sc_pvlimit000066400000000000000000000000611505013723300237430ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_sc_pvlimit_log.json000066400000000000000000000005441505013723300255620ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_dry_contact_settings000066400000000000000000000055171505013723300265430ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "safe_state_action": "shed", "essential_start_time": 28800.0, "essential_end_time": 64800.0, "priority": 1.0, "black_s_start": 10000.0, "black_start_retries": 10000.0, "action_retries": 1.0, "override": "false", "manual_override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_phase_select": [], "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "safe_state_action": "shed", "essential_start_time": 28800.0, "essential_end_time": 64800.0, "priority": 2.0, "black_s_start": 10000.0, "black_start_retries": 10000.0, "action_retries": 1.0, "override": "false", "manual_override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_phase_select": [], "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "safe_state_action": "shed", "essential_start_time": 28800.0, "essential_end_time": 64800.0, "priority": 3.0, "black_s_start": 10000.0, "black_start_retries": 10000.0, "action_retries": 1.0, "override": "false", "manual_override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_phase_select": [], "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "safe_state_action": "shed", "essential_start_time": 28800.0, "essential_end_time": 64800.0, "priority": 4.0, "black_s_start": 10000.0, "black_start_retries": 10000.0, "action_retries": 1.0, "override": "false", "manual_override": "false", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 70.0, "pv_phase_select": [], "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005461505013723300303510ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "2894", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_gen_config000066400000000000000000000000031505013723300243710ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_gen_config_log.json000066400000000000000000000005431505013723300262130ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_gen_schedule000066400000000000000000000000031505013723300247200ustar00rootroot00000000000000{} pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_gen_schedule_log.json000066400000000000000000000005431505013723300265420ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_pel_settings000066400000000000000000000004621505013723300250040ustar00rootroot00000000000000{ "PEL": false, "Hard_PEL": false, "Soft_PEL": false, "Export_Limit_Type": "Aggregate", "percent": false, "apparent": false, "PEL_Limit": 0.0, "Comm_Time_Loss": 0.0, "Resp_Time_SoftPEL": 0.0, "Resp_Time_HardPEL": 0.0, "msReset_HardPEL": 0.0, "PEL_db": 0.0 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/ivp_ss_pel_settings_log.json000066400000000000000000000005451505013723300266170ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-length": "305", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/production000066400000000000000000000046751505013723300231210ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 17, "readingTime": 1752947372, "wNow": 0, "whLifetime": 53108 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1752974751, "wNow": 0.0, "whLifetime": 47077.959, "varhLeadLifetime": 9742.613, "varhLagLifetime": 64.306, "vahLifetime": 0.009, "rmsCurrent": 2.923, "rmsVoltage": 240.501, "reactPwr": 344.456, "apprntPwr": 351.507, "pwrFactor": 0.0, "whToday": 47077.959, "whLastSevenDays": 47077.959, "vahToday": 0.009, "varhLeadToday": 9742.613, "varhLagToday": 64.306 } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1752974751, "wNow": 3840.622, "whLifetime": 132912.625, "varhLeadLifetime": -9181.937, "varhLagLifetime": 9828.998, "vahLifetime": 0.0, "rmsCurrent": 36.1, "rmsVoltage": 240.501, "reactPwr": -182.741, "apprntPwr": 4343.894, "pwrFactor": 1.896, "whToday": 132912.625, "whLastSevenDays": 132912.625, "vahToday": 0.0, "varhLeadToday": 0.0, "varhLagToday": 9828.998 }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1752974751, "wNow": 3840.622, "whLifetime": 85834.666, "varhLeadLifetime": 560.675, "varhLagLifetime": 19571.612, "vahLifetime": 0.0, "rmsCurrent": 33.177, "rmsVoltage": 240.501, "reactPwr": -527.198, "apprntPwr": 3992.386, "pwrFactor": 1.896, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/production.json000066400000000000000000000204741505013723300240640ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 17, "readingTime": 1752947372, "wNow": 0, "whLifetime": 53108 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1752974748, "wNow": 0.0, "whLifetime": 47077.959, "varhLeadLifetime": 9742.335, "varhLagLifetime": 64.306, "vahLifetime": 0.009, "rmsCurrent": 2.92, "rmsVoltage": 240.392, "reactPwr": 351.001, "apprntPwr": 351.001, "pwrFactor": 0.0, "whToday": 47077.959, "whLastSevenDays": 47077.959, "vahToday": 0.009, "varhLeadToday": 9742.335, "varhLagToday": 64.306, "lines": [ { "wNow": 0.0, "whLifetime": 23505.638, "varhLeadLifetime": 21.566, "varhLagLifetime": 4861.38, "vahLifetime": 0.004, "rmsCurrent": 1.459, "rmsVoltage": 120.552, "reactPwr": 175.901, "apprntPwr": 175.901, "pwrFactor": 0.0, "whToday": 23505.638, "whLastSevenDays": 23505.638, "vahToday": 0.004, "varhLeadToday": 21.566, "varhLagToday": 4861.38 }, { "wNow": 0.0, "whLifetime": 23572.321, "varhLeadLifetime": 42.739, "varhLagLifetime": 4880.955, "vahLifetime": 0.004, "rmsCurrent": 1.461, "rmsVoltage": 119.84, "reactPwr": 175.1, "apprntPwr": 175.1, "pwrFactor": 0.0, "whToday": 23572.321, "whLastSevenDays": 23572.321, "vahToday": 0.004, "varhLeadToday": 42.739, "varhLagToday": 4880.955 }, { "wNow": 0.0, "whLifetime": 0.0, "varhLeadLifetime": 0.0, "varhLagLifetime": 0.0, "vahLifetime": 0.0, "rmsCurrent": 0.0, "rmsVoltage": 0.0, "reactPwr": 0.0, "apprntPwr": 0.0, "pwrFactor": 0.0, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 0.0, "varhLeadToday": 0.0, "varhLagToday": 0.0 } ] } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1752974748, "wNow": 3774.309, "whLifetime": 132912.625, "varhLeadLifetime": -9181.659, "varhLagLifetime": 9829.276, "vahLifetime": 0.0, "rmsCurrent": 35.226, "rmsVoltage": 240.413, "reactPwr": -173.719, "apprntPwr": 4237.115, "pwrFactor": 1.931, "whToday": 132912.625, "whLastSevenDays": 132912.625, "vahToday": 0.0, "varhLeadToday": 0.0, "varhLagToday": 9829.276, "lines": [ { "wNow": 2326.028, "whLifetime": 56748.605, "varhLeadLifetime": 3616.362, "varhLagLifetime": -4733.753, "vahLifetime": 0.0, "rmsCurrent": 21.29, "rmsVoltage": 120.572, "reactPwr": 8.744, "apprntPwr": 2567.002, "pwrFactor": 0.971, "whToday": 56748.605, "whLastSevenDays": 56748.605, "vahToday": 0.0, "varhLeadToday": 3616.362, "varhLagToday": 0.0 }, { "wNow": 1448.282, "whLifetime": 76164.02, "varhLeadLifetime": 6212.913, "varhLagLifetime": -4447.906, "vahLifetime": 0.0, "rmsCurrent": 13.936, "rmsVoltage": 119.84, "reactPwr": -182.463, "apprntPwr": 1670.113, "pwrFactor": 0.96, "whToday": 76164.02, "whLastSevenDays": 76164.02, "vahToday": 0.0, "varhLeadToday": 6212.913, "varhLagToday": 0.0 }, { "wNow": 0.0, "whLifetime": 0.0, "varhLeadLifetime": 0.0, "varhLagLifetime": 0.0, "vahLifetime": 0.0, "rmsCurrent": 0.0, "rmsVoltage": 0.0, "reactPwr": 0.0, "apprntPwr": 0.0, "pwrFactor": 0.0, "whToday": 0.0, "whLastSevenDays": 0.0, "vahToday": 0.0, "varhLeadToday": 0.0, "varhLagToday": 0.0 } ] }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1752974748, "wNow": 3774.309, "whLifetime": 85834.666, "varhLeadLifetime": 560.675, "varhLagLifetime": 19571.612, "vahLifetime": 0.0, "rmsCurrent": 32.306, "rmsVoltage": 240.413, "reactPwr": -524.721, "apprntPwr": 3886.083, "pwrFactor": 1.931, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0, "lines": [ { "wNow": 2326.028, "whLifetime": 33242.967, "varhLeadLifetime": 8477.743, "varhLagLifetime": 127.627, "vahLifetime": 0.0, "rmsCurrent": 19.831, "rmsVoltage": 120.572, "reactPwr": -167.157, "apprntPwr": 2391.071, "pwrFactor": 0.971, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 1448.282, "whLifetime": 52591.698, "varhLeadLifetime": 11093.869, "varhLagLifetime": 433.049, "vahLifetime": 0.0, "rmsCurrent": 12.475, "rmsVoltage": 119.84, "reactPwr": -357.564, "apprntPwr": 1495.012, "pwrFactor": 0.96, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": 0.0, "whLifetime": 0.0, "varhLeadLifetime": 0.0, "varhLagLifetime": 0.0, "vahLifetime": 0.0, "rmsCurrent": 0.0, "rmsVoltage": 0.0, "reactPwr": 0.0, "apprntPwr": 0.0, "pwrFactor": 0.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ] } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/production.json_log.json000066400000000000000000000007631505013723300256740ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:45 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.1598_collar/production_log.json000066400000000000000000000007631505013723300247240ustar00rootroot00000000000000{ "headers": { "server": "openresty/1.17.8.1", "date": "Sun, 20 Jul 2025 01:25:51 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/000077500000000000000000000000001505013723300206275ustar00rootroot00000000000000pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/admin_lib_tariff000066400000000000000000000060241505013723300240250ustar00rootroot00000000000000{ "tariff": { "currency": { "code": "EUR" }, "logger": "mylogger", "date": "1751871479", "storage_settings": { "mode": "self-consumption", "operation_mode_sub_type": "", "reserved_soc": 30.0, "very_low_soc": 10, "charge_from_grid": false, "date": "1751875088", "opt_schedules": true }, "single_rate": { "rate": 0.0, "sell": 0.0 }, "seasons": [], "seasons_sell": [] }, "schedule": { "filename": "", "source": "", "date": "2025-07-28 11:53:52 UTC", "version": "", "reserved_soc": 30.0, "very_low_soc": 10, "charge_from_grid": false, "batt_mode": "self-consumption", "battery_mode": "self-consumption", "operation_mode_sub_type": "", "opt_schedules": false, "override": false, "override_backup_soc": 30.0, "override_chg_dischg_rate": 0.0, "override_tou_mode": "StorageTouMode_DEFAULT_TOU_MODE", "schedule": { "Disable": [ { "Sun": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Mon": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Tue": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Wed": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Thu": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Fri": [ { "start": 0, "duration": 1440, "setting": "ID" } ] }, { "Sat": [ { "start": 0, "duration": 1440, "setting": "ID" } ] } ] } } } pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/info000066400000000000000000000045771505013723300215220ustar00rootroot00000000000000 123456789012 800-00649-r01 D8.3.5167 4c8675 0 1 true true 500-00012-r01 02.02.00 240195 500-00002-r01 08.03.5167 5c3a00 500-00010-r01 07.00.20 176d57 590-00019-r01 02.00.01 2569cb 500-00005-r01 01.02.536 66b5c8 500-00020-r01 31.43.13 b60ff5 500-00022-r01 01.00.04 2cd3479 500-00008-r01 02.01.24 a74d96 500-00011-r02 04.04.225 08bedf 500-00013-r01 03.02.08 91ea9b 500-00016-r01 01.00.00 768 500-00021-r01 01.00.00 0fdc14 500-00001-r01 02.00.00 1211 500-00001-r01 02.00.00 1211 500-00016-r01 02.00.00 54a6dc -FRA-799-merge-master-enable-prod:pkg-Jun-03-25-03:50:24 1748922970 700-GA 02.00.284 pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_dry_contacts000066400000000000000000000005151505013723300257770ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_inventory000066400000000000000000000066201505013723300253430ustar00rootroot00000000000000[ { "type": "ENCHARGE", "devices": [ { "part_num": "836-00502-r10", "serial_num": "492511001422", "installed": 1752592942, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1753703401, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1752592942, "img_load_date": 1752592942, "img_pnum_running": "3.0.8507_rel/31.43", "bmu_fw_version": "3.8.77", "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 28, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 14, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-all", "der_index": 1 }, { "part_num": "836-00500-r21", "serial_num": "492513006042", "installed": 1752592939, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1753703346, "admin_state": 6, "admin_state_str": "ENCHG_STATE_READY", "created_date": 1752592939, "img_load_date": 1752592939, "img_pnum_running": "3.0.8507_rel/31.43", "bmu_fw_version": "3.8.77", "communicating": true, "sleep_enabled": false, "percentFull": 100, "temperature": 28, "maxCellTemp": 28, "reported_enc_grid_state": "grid-tied", "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "led_status": 14, "dc_switch_off": false, "encharge_rev": 3, "encharge_capacity": 5000, "phase": "ph-all", "der_index": 1 } ] }, { "type": "ENPOWER", "devices": [ { "part_num": "860-01801-r73", "serial_num": "122504004640", "installed": 1752592937, "device_status": [ "envoy.global.ok", "prop.done" ], "last_rpt_date": 1753703623, "admin_state": 24, "admin_state_str": "ENPWR_STATE_OPER_CLOSED", "created_date": 1752592937, "img_load_date": 1752592937, "img_pnum_running": "2.7.6936_rel/31.43", "communicating": true, "temperature": 89, "comm_level_sub_ghz": 0, "comm_level_2_4_ghz": 0, "mains_admin_state": "closed", "mains_oper_state": "closed", "Enpwr_grid_mode": "multimode-ongrid", "Enchg_grid_mode": "multimode-ongrid", "Enpwr_relay_state_bm": 5071, "Enpwr_curr_state_id": 16 } ] } ] pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_power000066400000000000000000000005411505013723300244360ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "492511001422", "real_power_mw": 16000, "apparent_power_mva": 16000, "soc": 100 }, { "serial_num": "492513006042", "real_power_mw": 16000, "apparent_power_mva": 16000, "soc": 100 } ] } pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_secctrl000066400000000000000000000022031505013723300247360ustar00rootroot00000000000000{ "shutdown": false, "freq_bias_hz": 0.0, "voltage_bias_v": 0.0, "freq_bias_hz_q8": 0, "voltage_bias_v_q5": 0, "freq_bias_hz_phaseb": 0.0, "voltage_bias_v_phaseb": 0.0, "freq_bias_hz_q8_phaseb": 0, "voltage_bias_v_q5_phaseb": 0, "freq_bias_hz_phasec": 0.0, "voltage_bias_v_phasec": 0.0, "freq_bias_hz_q8_phasec": 0, "voltage_bias_v_q5_phasec": 0, "offgrid_secctrl": { "F": 0.0, "V": 0.0, "Vd_neg": 0.0, "Vq_neg": 0.0, "Vd_zero": 0.0, "Vq_zero": 0.0, "is_active": false, "is_system_balanced": true }, "configured_backup_soc": 20, "adjusted_backup_soc": 20, "agg_soc": 100, "Max_energy": 10000, "ENC_agg_soc": 100, "ENC_agg_soh": 100, "ENC_agg_backup_energy": 2000, "ENC_agg_avail_energy": 10000, "Enc_commissioned_capacity": 10000, "Enc_max_available_capacity": 10000, "ACB_agg_soc": 0, "ACB_agg_energy": 0, "VLS_Limit": 10, "soc_rec_enabled": true, "soc_recovery_entry": 0, "soc_recovery_exit": 10, "Commission_in_progress": false, "ESS_in_progress": false } pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_meters000066400000000000000000000007121505013723300227270ustar00rootroot00000000000000[ { "eid": 704643328, "state": "enabled", "measurementType": "production", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] }, { "eid": 704643584, "state": "enabled", "measurementType": "net-consumption", "phaseMode": "three", "phaseCount": 3, "meteringStatus": "normal", "statusFlags": [] } ] pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_meters_readings000066400000000000000000000157351505013723300246160ustar00rootroot00000000000000[ { "eid": 704643328, "timestamp": 1753703632, "actEnergyDlvd": 569122.622, "actEnergyRcvd": 479.465, "apparentEnergy": 639678.054, "reactEnergyLagg": 111284.584, "reactEnergyLead": 654.216, "instantaneousDemand": 5235.674, "activePower": 5235.674, "apparentPower": 5240.917, "reactivePower": 68.841, "pwrFactor": 1.0, "voltage": 694.641, "current": 22.2, "freq": 50.062, "channels": [ { "eid": 1778385169, "timestamp": 1753703632, "actEnergyDlvd": 308603.327, "actEnergyRcvd": 141.146, "apparentEnergy": 347513.735, "reactEnergyLagg": 74358.328, "reactEnergyLead": 0.001, "instantaneousDemand": 2915.527, "activePower": 2915.527, "apparentPower": 2920.107, "reactivePower": 78.393, "pwrFactor": 1.0, "voltage": 237.779, "current": 12.119, "freq": 50.062 }, { "eid": 1778385170, "timestamp": 1753703632, "actEnergyDlvd": 130643.667, "actEnergyRcvd": 89.874, "apparentEnergy": 150350.53, "reactEnergyLagg": 18422.28, "reactEnergyLead": 398.181, "instantaneousDemand": 1162.315, "activePower": 1162.315, "apparentPower": 1162.735, "reactivePower": -6.078, "pwrFactor": 1.0, "voltage": 230.017, "current": 5.018, "freq": 50.062 }, { "eid": 1778385171, "timestamp": 1753703632, "actEnergyDlvd": 129875.628, "actEnergyRcvd": 248.445, "apparentEnergy": 141813.788, "reactEnergyLagg": 18503.976, "reactEnergyLead": 256.034, "instantaneousDemand": 1157.832, "activePower": 1157.832, "apparentPower": 1158.074, "reactivePower": -3.475, "pwrFactor": 1.0, "voltage": 226.845, "current": 5.063, "freq": 50.062 } ] }, { "eid": 704643584, "timestamp": 1753703632, "actEnergyDlvd": 99056.453, "actEnergyRcvd": 415089.21, "apparentEnergy": 785761.341, "reactEnergyLagg": 7774.145, "reactEnergyLead": 349158.892, "instantaneousDemand": -4912.241, "activePower": -4912.241, "apparentPower": 5009.773, "reactivePower": -879.654, "pwrFactor": -0.981, "voltage": 694.708, "current": 21.163, "freq": 50.0, "channels": [ { "eid": 1778385425, "timestamp": 1753703632, "actEnergyDlvd": 11078.469, "actEnergyRcvd": 247448.546, "apparentEnergy": 391040.092, "reactEnergyLagg": 4.443, "reactEnergyLead": 192956.207, "instantaneousDemand": -2879.825, "activePower": -2879.825, "apparentPower": 2923.378, "reactivePower": -507.205, "pwrFactor": -0.987, "voltage": 237.755, "current": 12.129, "freq": 50.0 }, { "eid": 1778385426, "timestamp": 1753703632, "actEnergyDlvd": 71754.257, "actEnergyRcvd": 58456.032, "apparentEnergy": 202341.782, "reactEnergyLagg": 46.852, "reactEnergyLead": 101741.293, "instantaneousDemand": -877.472, "activePower": -877.472, "apparentPower": 926.494, "reactivePower": -275.04, "pwrFactor": -0.945, "voltage": 230.121, "current": 3.982, "freq": 50.0 }, { "eid": 1778385427, "timestamp": 1753703632, "actEnergyDlvd": 16223.726, "actEnergyRcvd": 109184.632, "apparentEnergy": 192379.467, "reactEnergyLagg": 7722.85, "reactEnergyLead": 54461.392, "instantaneousDemand": -1154.943, "activePower": -1154.943, "apparentPower": 1159.902, "reactivePower": -97.408, "pwrFactor": -0.994, "voltage": 226.831, "current": 5.053, "freq": 50.0 } ] }, { "eid": 1023410688, "timestamp": 1753703602, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0, "channels": [ { "eid": 2097152513, "timestamp": 1753703602, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 }, { "eid": 2097152258, "timestamp": 1753703602, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 }, { "eid": 2097152515, "timestamp": 1753703602, "actEnergyDlvd": 0.0, "actEnergyRcvd": 0.0, "apparentEnergy": 0.0, "reactEnergyLagg": 0.0, "reactEnergyLead": 0.0, "instantaneousDemand": 0.0, "activePower": 0.0, "apparentPower": 0.0, "reactivePower": 0.0, "pwrFactor": 0.0, "voltage": 0.0, "current": 0.0, "freq": 0.0 } ] } ] pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_pdm_device_data000066400000000000000000000744341505013723300245340ustar00rootroot00000000000000{ "553648384": { "devName": "pcu", "sn": "482330056739", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390225, "created": 1753702732, "wattHours": { "today": 1115, "yesterday": 1358, "week": 6502 }, "watts": { "now": 299, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627390225, "interval_type": 0, "endDate": 1753702732, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271575, "acVoltageINmV": 237875, "acFrequencyINmHz": 49998, "dcVoltageINmV": 32816, "dcCurrentINmA": 9375, "channelTemp": 47, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 46, "laggingVArs": 3, "acCurrentInmA": 1261, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 88, "issi": 62 }, "lifetime": { "createdTime": 1752593036, "duration": 1819829, "joulesProduced": 107523000 } } ] }, "553648640": { "devName": "pcu", "sn": "482330056758", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390481, "created": 1753703366, "wattHours": { "today": 1194, "yesterday": 1483, "week": 6996 }, "watts": { "now": 300, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627390481, "interval_type": 0, "endDate": 1753703366, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271800, "acVoltageINmV": 232250, "acFrequencyINmHz": 50010, "dcVoltageINmV": 33512, "dcCurrentINmA": 9188, "channelTemp": 45, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 43, "laggingVArs": 3, "acCurrentInmA": 1287, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 92, "issi": 62 }, "lifetime": { "createdTime": 1752593066, "duration": 1820956, "joulesProduced": 116810550 } } ] }, "553648896": { "devName": "pcu", "sn": "482330056772", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390737, "created": 1753702761, "wattHours": { "today": 1037, "yesterday": 1567, "week": 7100 }, "watts": { "now": 300, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627390737, "interval_type": 0, "endDate": 1753702761, "duration": 906, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271350, "acVoltageINmV": 238031, "acFrequencyINmHz": 49990, "dcVoltageINmV": 32941, "dcCurrentINmA": 9281, "channelTemp": 48, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 42, "laggingVArs": 3, "acCurrentInmA": 1256, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 88, "issi": 62 }, "lifetime": { "createdTime": 1752593037, "duration": 1820219, "joulesProduced": 121262175 } } ] }, "553649152": { "devName": "pcu", "sn": "482330056930", "active": true, "modGone": false, "channels": [ { "chanEid": 1627390993, "created": 1753703426, "wattHours": { "today": 1191, "yesterday": 1425, "week": 6810 }, "watts": { "now": 294, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627390993, "interval_type": 0, "endDate": 1753703426, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 266400, "acVoltageINmV": 226438, "acFrequencyINmHz": 50010, "dcVoltageINmV": 30473, "dcCurrentINmA": 3945, "channelTemp": 46, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 44, "laggingVArs": 3, "acCurrentInmA": 525, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 92, "issi": 62 }, "lifetime": { "createdTime": 1752593046, "duration": 1820703, "joulesProduced": 112813650 } } ] }, "553649408": { "devName": "pcu", "sn": "482330056931", "active": true, "modGone": false, "channels": [ { "chanEid": 1627391249, "created": 1753703368, "wattHours": { "today": 1106, "yesterday": 1590, "week": 7215 }, "watts": { "now": 300, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627391249, "interval_type": 0, "endDate": 1753703368, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271800, "acVoltageINmV": 232531, "acFrequencyINmHz": 50003, "dcVoltageINmV": 33930, "dcCurrentINmA": 9141, "channelTemp": 40, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 41, "laggingVArs": 3, "acCurrentInmA": 1290, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 92, "issi": 64 }, "lifetime": { "createdTime": 1752593068, "duration": 1820511, "joulesProduced": 123360525 } } ] }, "553649664": { "devName": "pcu", "sn": "482330056927", "active": true, "modGone": false, "channels": [ { "chanEid": 1627391505, "created": 1753703427, "wattHours": { "today": 1124, "yesterday": 1623, "week": 7372 }, "watts": { "now": 294, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627391505, "interval_type": 0, "endDate": 1753703427, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 266625, "acVoltageINmV": 226813, "acFrequencyINmHz": 50016, "dcVoltageINmV": 30680, "dcCurrentINmA": 4434, "channelTemp": 48, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 39, "laggingVArs": 3, "acCurrentInmA": 595, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 92, "issi": 64 }, "lifetime": { "createdTime": 1752593300, "duration": 1820876, "joulesProduced": 126044550 } } ] }, "553649920": { "devName": "pcu", "sn": "482330056929", "active": true, "modGone": false, "channels": [ { "chanEid": 1627391761, "created": 1753703369, "wattHours": { "today": 1090, "yesterday": 1570, "week": 7105 }, "watts": { "now": 300, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627391761, "interval_type": 0, "endDate": 1753703369, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271800, "acVoltageINmV": 227938, "acFrequencyINmHz": 50009, "dcVoltageINmV": 33730, "dcCurrentINmA": 9207, "channelTemp": 49, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 42, "laggingVArs": 3, "acCurrentInmA": 1315, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 94, "issi": 62 }, "lifetime": { "createdTime": 1752593079, "duration": 1820688, "joulesProduced": 121472100 } } ] }, "553650176": { "devName": "pcu", "sn": "482330056923", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392017, "created": 1753703609, "wattHours": { "today": 1127, "yesterday": 1602, "week": 7151 }, "watts": { "now": 279, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627392017, "interval_type": 0, "endDate": 1753703609, "duration": 908, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 253125, "acVoltageINmV": 237938, "acFrequencyINmHz": 50024, "dcVoltageINmV": 33320, "dcCurrentINmA": 9316, "channelTemp": 41, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 43, "laggingVArs": 3, "acCurrentInmA": 1260, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 88, "issi": 60 }, "lifetime": { "createdTime": 1752593080, "duration": 1820925, "joulesProduced": 119726325 } } ] }, "553650432": { "devName": "pcu", "sn": "482330056775", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392273, "created": 1753702733, "wattHours": { "today": 1057, "yesterday": 1609, "week": 7328 }, "watts": { "now": 300, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627392273, "interval_type": 0, "endDate": 1753702733, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271800, "acVoltageINmV": 230781, "acFrequencyINmHz": 50001, "dcVoltageINmV": 33113, "dcCurrentINmA": 9285, "channelTemp": 48, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 40, "laggingVArs": 3, "acCurrentInmA": 1295, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 92, "issi": 64 }, "lifetime": { "createdTime": 1752593303, "duration": 1820130, "joulesProduced": 125018325 } } ] }, "553650688": { "devName": "pcu", "sn": "482330045372", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392529, "created": 1753703456, "wattHours": { "today": 1188, "yesterday": 1318, "week": 6351 }, "watts": { "now": 290, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627392529, "interval_type": 0, "endDate": 1753703456, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 263475, "acVoltageINmV": 227219, "acFrequencyINmHz": 50005, "dcVoltageINmV": 30625, "dcCurrentINmA": 3785, "channelTemp": 46, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 47, "laggingVArs": 3, "acCurrentInmA": 506, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 92, "issi": 64 }, "lifetime": { "createdTime": 1752593307, "duration": 1821061, "joulesProduced": 106310925 } } ] }, "553650944": { "devName": "pcu", "sn": "482330056761", "active": true, "modGone": false, "channels": [ { "chanEid": 1627392785, "created": 1753703370, "wattHours": { "today": 1183, "yesterday": 1381, "week": 6634 }, "watts": { "now": 300, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627392785, "interval_type": 0, "endDate": 1753703370, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271800, "acVoltageINmV": 227875, "acFrequencyINmHz": 50000, "dcVoltageINmV": 33477, "dcCurrentINmA": 9184, "channelTemp": 47, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 45, "laggingVArs": 3, "acCurrentInmA": 1316, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 92, "issi": 60 }, "lifetime": { "createdTime": 1752593382, "duration": 1820177, "joulesProduced": 110320650 } } ] }, "553651200": { "devName": "pcu", "sn": "482330056779", "active": true, "modGone": false, "channels": [ { "chanEid": 1627393041, "created": 1753702822, "wattHours": { "today": 1146, "yesterday": 1444, "week": 6877 }, "watts": { "now": 299, "nowUsed": 0, "max": 300 }, "lastReading": { "eid": 1627393041, "interval_type": 0, "endDate": 1753702822, "duration": 907, "flags": 0, "flags_hex": "0x0000000000000000", "joulesProduced": 271575, "acVoltageINmV": 237781, "acFrequencyINmHz": 49998, "dcVoltageINmV": 33340, "dcCurrentINmA": 9238, "channelTemp": 45, "pwrConvErrSecs": 0, "pwrConvMaxErrCycles": 0, "joulesUsed": 0, "leadingVArs": 45, "laggingVArs": 3, "acCurrentInmA": 1261, "l1NAcVoltageInmV": 0, "l2NAcVoltageInmV": 0, "l3NAcVoltageInmV": 0, "rssi": 88, "issi": 62 }, "lifetime": { "createdTime": 1752593312, "duration": 1819353, "joulesProduced": 115334775 } } ] }, "704643328": { "devName": "eim", "sn": "122503008808EIM1", "active": true, "modGone": true, "channels": [ { "chanEid": 1778385169, "created": 1753703100, "wattHours": { "today": 9626, "yesterday": 14728, "week": 298571 }, "watts": { "now": 3121, "nowUsed": 0, "max": 3687 }, "lastReading": { "eid": 1778385169, "interval_type": 0, "endDate": 1753703100, "duration": 900, "curr_w": 3121, "wh_dlvd_cum": 308197, "varh_lead_cum": 0, "varh_lag_cum": 74346, "vah_cum": 347108, "rms_mvolt": 237012, "rms_mamp": 13166, "freq_mhz": 50000, "wh_pos": 308197, "wh_neg": 141 }, "lifetime": { "createdTime": 1752593400, "duration": 1819500, "wh_dlvd_cum": 308197, "varh_lead_cum": 0, "varh_lag_cum": 74346, "vah_cum": 347108 } }, { "chanEid": 1778385170, "created": 1753703100, "wattHours": { "today": 4485, "yesterday": 5959, "week": 126003 }, "watts": { "now": 1195, "nowUsed": 0, "max": 1198 }, "lastReading": { "eid": 1778385170, "interval_type": 0, "endDate": 1753703100, "duration": 900, "curr_w": 1195, "wh_dlvd_cum": 130488, "varh_lead_cum": 397, "varh_lag_cum": 18422, "vah_cum": 150195, "rms_mvolt": 229583, "rms_mamp": 5208, "freq_mhz": 50000, "wh_pos": 130488, "wh_neg": 89 }, "lifetime": { "createdTime": 1752593400, "duration": 1819500, "wh_dlvd_cum": 130488, "varh_lead_cum": 397, "varh_lag_cum": 18422, "vah_cum": 150195 } }, { "chanEid": 1778385171, "created": 1753703100, "wattHours": { "today": 4456, "yesterday": 5936, "week": 125265 }, "watts": { "now": 1186, "nowUsed": 0, "max": 1192 }, "lastReading": { "eid": 1778385171, "interval_type": 0, "endDate": 1753703100, "duration": 900, "curr_w": 1186, "wh_dlvd_cum": 129721, "varh_lead_cum": 255, "varh_lag_cum": 18503, "vah_cum": 141659, "rms_mvolt": 224312, "rms_mamp": 5288, "freq_mhz": 50000, "wh_pos": 129721, "wh_neg": 248 }, "lifetime": { "createdTime": 1752593400, "duration": 1819500, "wh_dlvd_cum": 129721, "varh_lead_cum": 255, "varh_lag_cum": 18503, "vah_cum": 141659 } }, { "chanEid": 1778385172, "created": 0, "wattHours": { "today": 0, "yesterday": 0, "week": 0 }, "watts": { "now": 0, "nowUsed": 0, "max": 0 }, "lastReading": {}, "lifetime": {} } ] }, "704643584": { "devName": "eim", "sn": "122503008808EIM2", "active": true, "modGone": true, "channels": [ { "chanEid": 1778385425, "created": 1753703100, "wattHours": { "today": 2328, "yesterday": 4280, "week": 0 }, "watts": { "now": 29, "nowUsed": 0, "max": 2976 }, "lastReading": { "eid": 1778385425, "interval_type": 0, "endDate": 1753703100, "duration": 900, "curr_w": 29, "wh_dlvd_cum": 72200, "varh_lead_cum": 192881, "varh_lag_cum": -74341, "vah_cum": 390633, "rms_mvolt": 237209, "rms_mamp": 0, "freq_mhz": 50000, "wh_pos": 11078, "wh_neg": 247048 }, "lifetime": { "createdTime": 1752593400, "duration": 1818900, "wh_dlvd_cum": 72200, "varh_lead_cum": 192881, "varh_lag_cum": -74341, "vah_cum": 390633 } }, { "chanEid": 1778385426, "created": 1753703100, "wattHours": { "today": 5116, "yesterday": 7819, "week": 0 }, "watts": { "now": 275, "nowUsed": 0, "max": 2480 }, "lastReading": { "eid": 1778385426, "interval_type": 0, "endDate": 1753703100, "duration": 900, "curr_w": 275, "wh_dlvd_cum": 143856, "varh_lead_cum": 101302, "varh_lag_cum": -18375, "vah_cum": 202218, "rms_mvolt": 229542, "rms_mamp": 983, "freq_mhz": 50000, "wh_pos": 71754, "wh_neg": 58342 }, "lifetime": { "createdTime": 1752593400, "duration": 1818900, "wh_dlvd_cum": 143856, "varh_lead_cum": 101302, "varh_lag_cum": -18375, "vah_cum": 202218 } }, { "chanEid": 1778385427, "created": 1753703100, "wattHours": { "today": 1514, "yesterday": 1379, "week": 0 }, "watts": { "now": 8, "nowUsed": 0, "max": 3128 }, "lastReading": { "eid": 1778385427, "interval_type": 0, "endDate": 1753703100, "duration": 900, "curr_w": 8, "wh_dlvd_cum": 36895, "varh_lead_cum": 54191, "varh_lag_cum": -10781, "vah_cum": 192225, "rms_mvolt": 224354, "rms_mamp": 23, "freq_mhz": 50000, "wh_pos": 16223, "wh_neg": 109031 }, "lifetime": { "createdTime": 1752593400, "duration": 1818900, "wh_dlvd_cum": 36895, "varh_lead_cum": 54191, "varh_lag_cum": -10781, "vah_cum": 192225 } }, { "chanEid": 1778385428, "created": 1753703100, "wattHours": { "today": 0, "yesterday": 0, "week": 0 }, "watts": { "now": 0, "nowUsed": 0, "max": 0 }, "lastReading": { "eid": 1778385428, "interval_type": 0, "endDate": 1753703100, "duration": 900, "curr_w": 0, "wh_dlvd_cum": -315078, "varh_lead_cum": 0, "varh_lag_cum": 0, "vah_cum": 0, "rms_mvolt": 0, "rms_mamp": 0, "freq_mhz": 0, "wh_pos": 0, "wh_neg": 0 }, "lifetime": { "createdTime": 1752593400, "duration": 1818900, "wh_dlvd_cum": -315078, "varh_lead_cum": 0, "varh_lag_cum": 0, "vah_cum": 0 } } ] }, "deviceCount": 14, "deviceDataLimit": 50 } pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/ivp_ss_dry_contact_settings000066400000000000000000000043221505013723300263670ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "type": "3RD-PV", "grid_action": "apply", "micro_grid_action": "shed", "gen_action": "shed", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 1.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 70.0, "soc_high": 90.0, "pv_serial_nb": [] }, { "id": "NC2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 2.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NO1", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 3.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] }, { "id": "NO2", "type": "NONE", "grid_action": "none", "micro_grid_action": "none", "gen_action": "none", "essential_start_time": 21600.0, "essential_end_time": 82800.0, "priority": 4.0, "black_s_start": 5.0, "override": "false", "manual_override": "true", "load_name": "", "mode": "manual", "soc_low": 30.0, "soc_high": 40.0, "pv_serial_nb": [] } ] } pyenphase-2.3.1/tests/fixtures/8.3.5167_3rd-pv/production.json000066400000000000000000000211271505013723300237130ustar00rootroot00000000000000{ "production": [ { "type": "inverters", "activeCount": 12, "readingTime": 1753703609, "wNow": 3554, "whLifetime": 390554 }, { "type": "eim", "activeCount": 1, "measurementType": "production", "readingTime": 1753703631, "wNow": 5305.189, "whLifetime": 569121.609, "varhLeadLifetime": 654.214, "varhLagLifetime": 111284.568, "vahLifetime": 639677.045, "rmsCurrent": 22.387, "rmsVoltage": 694.538, "reactPwr": 66.542, "apprntPwr": 5312.124, "pwrFactor": 1.0, "whToday": 19282.609, "whLastSevenDays": 550554.609, "vahToday": 20975.045, "varhLeadToday": 31.214, "varhLagToday": 2653.568, "lines": [ { "wNow": 2968.936, "whLifetime": 308602.766, "varhLeadLifetime": 0.001, "varhLagLifetime": 74358.312, "vahLifetime": 347513.175, "rmsCurrent": 12.248, "rmsVoltage": 237.874, "reactPwr": 76.271, "apprntPwr": 2975.208, "pwrFactor": 1.0, "whToday": 10031.766, "whLastSevenDays": 298976.766, "vahToday": 10942.175, "varhLeadToday": 0.001, "varhLagToday": 1745.312 }, { "wNow": 1169.938, "whLifetime": 130643.441, "varhLeadLifetime": 398.18, "varhLagLifetime": 18422.28, "vahLifetime": 150350.305, "rmsCurrent": 5.048, "rmsVoltage": 229.76, "reactPwr": -6.075, "apprntPwr": 1170.359, "pwrFactor": 1.0, "whToday": 4640.441, "whLastSevenDays": 126158.441, "vahToday": 5122.305, "varhLeadToday": 19.18, "varhLagToday": 451.28 }, { "wNow": 1166.315, "whLifetime": 129875.403, "varhLeadLifetime": 256.033, "varhLagLifetime": 18503.976, "vahLifetime": 141813.564, "rmsCurrent": 5.09, "rmsVoltage": 226.904, "reactPwr": -3.654, "apprntPwr": 1166.557, "pwrFactor": 1.0, "whToday": 4610.403, "whLastSevenDays": 125419.403, "vahToday": 4910.564, "varhLeadToday": 12.033, "varhLagToday": 456.976 } ] } ], "consumption": [ { "type": "eim", "activeCount": 1, "measurementType": "total-consumption", "readingTime": 1753703631, "wNow": 324.922, "whLifetime": 253002.232, "varhLeadLifetime": 348504.505, "varhLagLifetime": -103510.423, "vahLifetime": 785760.378, "rmsCurrent": 0.999, "rmsVoltage": 694.597, "reactPwr": -814.961, "apprntPwr": 229.496, "pwrFactor": 1.0, "whToday": 8958.0, "whLastSevenDays": 0.0, "vahToday": 22634.378, "varhLeadToday": 323620.505, "varhLagToday": 0.0, "lines": [ { "wNow": 36.232, "whLifetime": 72206.813, "varhLeadLifetime": 192956.107, "varhLagLifetime": -74353.869, "vahLifetime": 391039.531, "rmsCurrent": -0.015, "rmsVoltage": 237.835, "reactPwr": -427.819, "apprntPwr": -3.635, "pwrFactor": 1.0, "whToday": 2334.813, "whLastSevenDays": 6.813, "vahToday": 11270.531, "varhLeadToday": 4693.107, "varhLagToday": 0.0 }, { "wNow": 283.682, "whLifetime": 143898.912, "varhLeadLifetime": 101343.058, "varhLagLifetime": -18375.429, "vahLifetime": 202341.602, "rmsCurrent": 1.033, "rmsVoltage": 229.824, "reactPwr": -281.655, "apprntPwr": 237.474, "pwrFactor": 1.0, "whToday": 5158.912, "whLastSevenDays": 42.912, "vahToday": 5963.602, "varhLeadToday": 2580.058, "varhLagToday": 0.0 }, { "wNow": 5.009, "whLifetime": 36896.507, "varhLeadLifetime": 54205.34, "varhLagLifetime": -10781.125, "vahLifetime": 192379.245, "rmsCurrent": -0.019, "rmsVoltage": 226.938, "reactPwr": -105.486, "apprntPwr": -4.342, "pwrFactor": 1.0, "whToday": 1515.507, "whLastSevenDays": 1.507, "vahToday": 5400.245, "varhLeadToday": 1269.34, "varhLagToday": 0.0 } ] }, { "type": "eim", "activeCount": 1, "measurementType": "net-consumption", "readingTime": 1753703631, "wNow": -4980.266, "whLifetime": -315944.246, "varhLeadLifetime": 349158.719, "varhLagLifetime": 7774.145, "vahLifetime": 785760.378, "rmsCurrent": -21.388, "rmsVoltage": 694.597, "reactPwr": -881.503, "apprntPwr": -4998.912, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0, "lines": [ { "wNow": -2932.704, "whLifetime": -236343.094, "varhLeadLifetime": 192956.108, "varhLagLifetime": 4.443, "vahLifetime": 391039.531, "rmsCurrent": -12.263, "rmsVoltage": 237.835, "reactPwr": -504.09, "apprntPwr": -2916.631, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": -886.257, "whLifetime": 13341.32, "varhLeadLifetime": 101741.238, "varhLagLifetime": 46.852, "vahLifetime": 202341.602, "rmsCurrent": -4.015, "rmsVoltage": 229.824, "reactPwr": -275.58, "apprntPwr": -922.725, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 }, { "wNow": -1161.306, "whLifetime": -92942.472, "varhLeadLifetime": 54461.373, "varhLagLifetime": 7722.85, "vahLifetime": 192379.245, "rmsCurrent": -5.11, "rmsVoltage": 226.938, "reactPwr": -101.832, "apprntPwr": -1159.556, "pwrFactor": -1.0, "whToday": 0, "whLastSevenDays": 0, "vahToday": 0, "varhLeadToday": 0, "varhLagToday": 0 } ] } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-2.3.1/tests/syrupy.py000066400000000000000000000031101505013723300165720ustar00rootroot00000000000000from dataclasses import asdict, is_dataclass from typing import Any from syrupy.extensions import AmberSnapshotExtension from syrupy.extensions.amber import AmberDataSerializer from syrupy.types import PropertyFilter, PropertyMatcher, PropertyPath, SerializableData class EnphaseSnapshotSerializer(AmberDataSerializer): """ Enphase snapshot serializer for Syrupy. Handles special cases for Enphase data structures. """ @classmethod def _serialize( cls, data: SerializableData, *, depth: int = 0, exclude: PropertyFilter | None = None, include: PropertyFilter | None = None, matcher: PropertyMatcher | None = None, path: PropertyPath = (), visited: set[Any] | None = None, ) -> str: """ Pre-process data before serializing. This allows us to handle specific cases for Enphase data structures. """ serializable_data = data if is_dataclass(type(data)): serializable_data = asdict(data) return super()._serialize( serializable_data, depth=depth, exclude=exclude, include=include, matcher=matcher, path=path, visited=visited, ) class EnphaseSnapshotExtension(AmberSnapshotExtension): """Enphase extension for Syrupy.""" VERSION = "1" """Current version of serialization format. Need to be bumped when we change the EnphasenapshotSerializer. """ serializer_class: type[AmberDataSerializer] = EnphaseSnapshotSerializer pyenphase-2.3.1/tests/test_acb.py000066400000000000000000000251731505013723300170200ustar00rootroot00000000000000"""Test ACB battery data and combined Encharge/ACB""" import logging from typing import Any import aiohttp import pytest from aioresponses import aioresponses from syrupy.assertion import SnapshotAssertion from pyenphase.envoy import SupportedFeatures from pyenphase.models.envoy import EnvoyData from .common import ( endpoint_path, get_mock_envoy, load_json_fixture, override_mock, prep_envoy, start_7_firmware_mock, ) LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_with_4_2_27_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Verify with 4.2.27 firmware.""" version = "4.2.27" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data: EnvoyData | None = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.ACB) assert not (envoy._supported_features & SupportedFeatures.ENCHARGE) assert not (envoy._supported_features & SupportedFeatures.ENPOWER) assert envoy.acb_count == 0 @pytest.mark.parametrize( ( "version", "supported_features", "acb_count", "battery_aggregate", "acb_power", ), [ ( "4.10.35", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "7.3.130", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, 0, {}, {}, ), ( "7.3.130_no_consumption", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "7.3.517", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, 0, {}, {}, ), ( "7.3.517_legacy_savings_mode", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, 0, {}, {}, ), ( "7.3.517_system_2", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "7.6.175_with_cts", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "7.6.175_with_cts_3phase", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "7.3.466_with_cts_3phase", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "7.6.185_with_cts_and_battery_3t", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "8.1.41", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.PRODUCTION, 0, {}, {}, ), ( "8.2.127_with_3cts_and_battery_split", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 0, {}, {}, ), ( "8.2.127_with_generator_running", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS | SupportedFeatures.GENERATOR, 0, {}, {}, ), ( "8.2.4382_ACB", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS | SupportedFeatures.ACB, 3, { "available_energy": 2820, "max_available_capacity": 7220, "state_of_charge": 39, }, { "power": 260, "charge_wh": 930, "state_of_charge": 25, "state": "discharging", "batteries": 3, }, ), ], ids=[ "4.10.35", "7.3.130", "7.3.130_no_consumption", "7.3.517", "7.3.517_legacy_savings_mode", "7.3.517_system_2", "7.6.175_with_cts", "7.6.175_with_cts_3phase", "7.3.466_with_cts_3phase", "7.6.185_with_cts_and_battery_3t", "8.1.41", "8.2.127_with_3cts_and_battery_split", "8.2.127_with_generator_running", "8.2.4382_ACB", ], ) @pytest.mark.asyncio async def test_with_7_x_firmware( version: str, snapshot: SnapshotAssertion, supported_features: SupportedFeatures, caplog: pytest.LogCaptureFixture, acb_count: int, battery_aggregate: dict[str, Any], acb_power: dict[str, dict[str, Any]], mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """ Verify with 7.x firmware. Test with fixture that have SupportedFeatures.METERING """ start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) caplog.set_level(logging.DEBUG) envoy = await get_mock_envoy(test_client_session) full_host = endpoint_path(version, envoy.host) data = envoy.data assert data assert data == snapshot assert envoy.acb_count == acb_count # verify both have ACB or both don't have it assert not ( (SupportedFeatures.ACB in envoy.supported_features) ^ (SupportedFeatures.ACB in supported_features) ) # verify if acb_power andACB feature are both present or not assert not (acb_power != {}) ^ (SupportedFeatures.ACB in envoy.supported_features) # verify both are empty/None or both have values assert not (acb_power != {}) ^ (data.acb_power is not None) assert not (battery_aggregate != {}) ^ (data.battery_aggregate is not None) # test battery aggregate values for key in battery_aggregate: assert data.battery_aggregate is not None assert battery_aggregate[key] == getattr(data.battery_aggregate, key) # test ACB battery values for key in acb_power: assert data.acb_power is not None assert acb_power[key] == getattr(data.acb_power, key) # test for code coverage if no storage section is available # use fixtures with METERING in supported_features: production_data = data.raw["/production.json?details=1"] acb_data = production_data["storage"][0] assert acb_data["activeCount"] == acb_count # test with missing storage section prod_json = await load_json_fixture(version, "production.json") del prod_json["storage"] override_mock( mock_aioresponse, "get", f"{full_host}/production.json?details=1", status=200, payload=prod_json, repeat=True, ) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data assert envoy.acb_count == 0 pyenphase-2.3.1/tests/test_auth.py000066400000000000000000000427131505013723300172330ustar00rootroot00000000000000"""Test auth functions.""" import json import logging from os import listdir from os.path import isfile, join from unittest.mock import patch import aiohttp import jwt import pytest from aioresponses import aioresponses from pyenphase import Envoy, EnvoyTokenAuth from pyenphase.auth import EnvoyLegacyAuth from pyenphase.const import ( URL_AUTH_CHECK_JWT, URL_DEVICE_DATA, URL_PRODUCTION_INVERTERS, SupportedFeatures, ) from pyenphase.exceptions import EnvoyAuthenticationError, EnvoyAuthenticationRequired from .common import ( get_mock_envoy, load_fixture, load_json_fixture, prep_envoy, start_7_firmware_mock, temporary_log_level, ) LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_wrong_auth_order_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test data collected fails before auth is done""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationRequired): await envoy.update() # now in correct order await envoy.authenticate("username", "password") data = await envoy.update() assert data @pytest.mark.asyncio async def test_with_3_9_36_firmware_bad_auth( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Verify with 3.9.36 firmware with incorrect auth.""" version = "3.9.36_bad_auth" mock_aioresponse.get( "https://127.0.0.1/info", status=200, body=await load_fixture(version, "info") ) mock_aioresponse.get("https://127.0.0.1/info.xml", status=200, body="") mock_aioresponse.get("https://127.0.0.1/production", status=404) mock_aioresponse.get("https://127.0.0.1/production.json", status=404) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", status=401, payload=await load_json_fixture(version, "api_v1_production"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production/inverters", status=200, payload=await load_json_fixture(version, "api_v1_production_inverters"), ) mock_aioresponse.get( "https://127.0.0.1/ivp/ensemble/inventory", status=200, payload=[] ) path = f"tests/fixtures/{version}" files = [f for f in listdir(path) if isfile(join(path, f))] if "admin_lib_tariff" in files: try: json_data = await load_json_fixture(version, "admin_lib_tariff") except json.decoder.JSONDecodeError: json_data = None mock_aioresponse.get( "https://127.0.0.1/admin/lib/tariff", status=200, payload=json_data ) else: mock_aioresponse.get("https://127.0.0.1/admin/lib/tariff", status=401) mock_aioresponse.get("https://127.0.0.1/ivp/meters", status=200, payload=[]) # Add the HTTP version of api/v1/production with 401 as well mock_aioresponse.get( "http://127.0.0.1/api/v1/production", status=401, payload=await load_json_fixture(version, "api_v1_production"), ) # Add other required endpoints for the probe mock_aioresponse.get("https://127.0.0.1/production.json?details=1", status=404) mock_aioresponse.get("http://127.0.0.1/production.json?details=1", status=404) mock_aioresponse.get( "http://127.0.0.1/production", status=200, body=await load_fixture(version, "production"), ) with pytest.raises(EnvoyAuthenticationRequired): await get_mock_envoy(test_client_session) @pytest.mark.asyncio async def test_production_with_3_9_36_firmware_bad_auth( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test Authentication failed for http://127.0.0.1/api/v1/production.""" version = "3.9.36_bad_auth" mock_aioresponse.get( "https://127.0.0.1/info", status=200, body=await load_fixture(version, "info") ) mock_aioresponse.get("https://127.0.0.1/info.xml", status=200, body="") mock_aioresponse.get("https://127.0.0.1/production", status=404) mock_aioresponse.get("https://127.0.0.1/production.json", status=404) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", status=401, payload=await load_json_fixture(version, "api_v1_production"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production/inverters", status=200, payload=await load_json_fixture(version, "api_v1_production_inverters"), ) mock_aioresponse.get( "https://127.0.0.1/ivp/ensemble/inventory", status=200, payload=[] ) path = f"tests/fixtures/{version}" files = [f for f in listdir(path) if isfile(join(path, f))] if "admin_lib_tariff" in files: try: json_data = await load_json_fixture(version, "admin_lib_tariff") except json.decoder.JSONDecodeError: json_data = None mock_aioresponse.get( "https://127.0.0.1/admin/lib/tariff", status=200, payload=json_data ) else: mock_aioresponse.get("https://127.0.0.1/admin/lib/tariff", status=401) mock_aioresponse.get("https://127.0.0.1/ivp/meters", status=200, payload=[]) # Add the HTTP version of api/v1/production with 401 as well mock_aioresponse.get( "http://127.0.0.1/api/v1/production", status=401, payload=await load_json_fixture(version, "api_v1_production"), ) # Add other required endpoints for the probe mock_aioresponse.get("https://127.0.0.1/production.json?details=1", status=404) mock_aioresponse.get("http://127.0.0.1/production.json?details=1", status=404) mock_aioresponse.get( "http://127.0.0.1/production", status=200, body=await load_fixture(version, "production"), ) with pytest.raises(EnvoyAuthenticationRequired): await get_mock_envoy(test_client_session) @pytest.mark.parametrize( ( "username", "password", ), [ ("installer", ""), ("envoy", ""), ], ) @pytest.mark.asyncio async def test_known_users_with_3_9_36_firmware( username: str, password: str, mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Test successful login with known usernames.""" version = "3.9.36" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() await envoy.authenticate(username, password) # test cookies function now cookies are not on request assert envoy.auth used_cookies = envoy.auth.cookies assert used_cookies == {} data = await envoy.update() assert data # cov: force test failure of Digest authentication for local Envoy. assert isinstance(envoy.auth, EnvoyLegacyAuth) envoy.auth.local_password = "" assert envoy.auth.auth is None @pytest.mark.asyncio async def test_unknown_user_with_3_9_36_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test Could not setup authentication object with 3.9.x""" version = "3.9.36" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationRequired): await envoy.authenticate("unknown", None) @pytest.mark.parametrize( ( "username", "password", ), [ ("installer", ""), ("envoy", ""), ("unknown", ""), ], ) @pytest.mark.asyncio async def test_blank_passwords_with_7_6_175_standard( username: str, password: str, mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Test Could not setup authentication object with 7.6.x""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationRequired): await envoy.authenticate(username, password) @pytest.mark.asyncio async def test_no_token_obtained_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test Unable to obtain token for Envoy authentication""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) with patch("pyenphase.EnvoyTokenAuth._obtain_token", return_value=None): envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationError): await envoy.authenticate("username", "password") @pytest.mark.asyncio async def test_jwt_failure_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test Unable to verify token for Envoy authentication""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) from .common import override_mock override_mock( mock_aioresponse, "get", "https://127.0.0.1" + URL_AUTH_CHECK_JWT, status=404, body="no jwt", ) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationError): await envoy.authenticate("username", "password") @pytest.mark.asyncio async def test_no_remote_login_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test Unable to login to Enlighten to obtain session ID from https://enlighten.enphaseenergy.com/login/login.json?""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) from .common import override_mock override_mock( mock_aioresponse, "post", "https://enlighten.enphaseenergy.com/login/login.json?", status=500, payload={ "session_id": "1234567890", "user_id": "1234567890", "user_name": "test", "first_name": "Test", "is_consumer": True, "manager_token": "1234567890", }, ) override_mock( mock_aioresponse, "post", "https://entrez.enphaseenergy.com/tokens", status=500, body="token", ) override_mock( mock_aioresponse, "get", "https://127.0.0.1/auth/check_jwt", status=200, payload={}, ) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationError): await envoy.authenticate("username", "password") @pytest.mark.asyncio async def test_no_remote_token_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test Unable to obtain token for Envoy authentication from https://entrez.enphaseenergy.com/tokens""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) from .common import override_mock # The login endpoint is already mocked with 200 by start_7_firmware_mock # Only override the tokens endpoint to fail override_mock( mock_aioresponse, "post", "https://entrez.enphaseenergy.com/tokens", status=500, body="token", ) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationError): await envoy.authenticate("username", "password") assert isinstance(envoy.auth, EnvoyTokenAuth) with pytest.raises(EnvoyAuthenticationRequired): assert envoy.auth.token_type == "owner" @pytest.mark.asyncio async def test_enlighten_json_error_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test Unable to decode response from Enlighten""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) from .common import override_mock # Override the login endpoint to return invalid JSON override_mock( mock_aioresponse, "post", "https://enlighten.enphaseenergy.com/login/login.json?", status=200, body="nojson", ) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() with pytest.raises(EnvoyAuthenticationError): await envoy.authenticate("username", "password") @pytest.mark.asyncio async def test_token_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test auth using token""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() token = jwt.encode( payload={"name": "envoy", "exp": 1707837780, "enphaseUser": "owner"}, key="secret", algorithm="HS256", ) await envoy.authenticate("username", "password", token) assert isinstance(envoy.auth, EnvoyTokenAuth) assert envoy.auth.expire_timestamp == 1707837780 assert envoy.auth.token == token assert envoy.auth.token_type == "owner" # test cookies function now cookies are not on request assert envoy.auth.cookies == {} # execute refresh code cov await envoy.auth.refresh() # cov: test force no serial error # Your firmware requires token authentication, # but no envoy serial number was provided to obtain the token used_serial = envoy.auth.envoy_serial envoy.auth.envoy_serial = None with pytest.raises(EnvoyAuthenticationError): await envoy.auth.refresh() envoy.auth.envoy_serial = used_serial # cov: test force no cloud credentials error # Your firmware requires token authentication # but no cloud credentials were provided to obtain the token envoy.auth.cloud_password = None with pytest.raises(EnvoyAuthenticationError): await envoy.auth.refresh() @pytest.mark.asyncio async def test_remote_login_response_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test enlighten login response for is_consumer and manager_token""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) # set log level to info 1 time for GET and 1 time for POST to improve COV with temporary_log_level("pyenphase", logging.INFO): envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() await envoy.authenticate("username", "password") assert isinstance(envoy.auth, EnvoyTokenAuth) assert envoy.auth.manager_token == "1234567890" assert envoy.auth.is_consumer # read unused auth from EnvoyTokenAuth to improve COV assert envoy.auth.auth is None @pytest.mark.asyncio async def test_device_data_with_8_2_4345_with_device_data( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test device data fails with no auth""" version = "8.2.4345_with_device_data" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) from .common import override_mock, updater_features # 401 on device data endpoint and inverters production endpoint # This simulates the case where the user does not have access to any inverter data for url in [ "https://127.0.0.1" + URL_DEVICE_DATA, "http://127.0.0.1" + URL_DEVICE_DATA, "https://127.0.0.1" + URL_PRODUCTION_INVERTERS, "http://127.0.0.1" + URL_PRODUCTION_INVERTERS, ]: override_mock( mock_aioresponse, "get", url, status=401, body="no device data", ) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() await envoy.authenticate("username", "password") await envoy.probe() assert SupportedFeatures.INVERTERS not in envoy.supported_features # 200 on device data endpoint only # This simulates the case where the user has access to device data but not to inverter production data for url in [ "https://127.0.0.1" + URL_DEVICE_DATA, "http://127.0.0.1" + URL_DEVICE_DATA, ]: override_mock( mock_aioresponse, "get", url, status=200, payload=await load_json_fixture(version, "ivp_pdm_device_data"), ) await envoy.probe() assert updater_features(envoy._updaters) == { "EnvoyDeviceDataInvertersUpdater": SupportedFeatures.INVERTERS | SupportedFeatures.DETAILED_INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, } # S pyenphase-2.3.1/tests/test_ct_meters.py000066400000000000000000000444601505013723300202600ustar00rootroot00000000000000"""Test envoy metered with enabled and disabled CT""" import logging import aiohttp import pytest from aioresponses import aioresponses from pyenphase import register_updater from pyenphase.envoy import SupportedFeatures from pyenphase.models.meters import CtMeterData, CtType, EnvoyMeterData from pyenphase.models.system_consumption import EnvoySystemConsumption from pyenphase.models.system_production import EnvoySystemProduction from pyenphase.updaters.meters import EnvoyMetersUpdater from .common import ( get_mock_envoy, load_fixture, load_json_fixture, load_json_list_fixture, override_mock, prep_envoy, start_7_firmware_mock, updater_features, ) LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_pr111_with_7_3_466_metered_disabled_cts( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy metered with disabled ct to report from production inverters PR111.""" version = "7.3.466_metered_disabled_cts" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert envoy._supported_features & SupportedFeatures.PRODUCTION assert envoy._supported_features & SupportedFeatures.INVERTERS assert envoy._supported_features & SupportedFeatures.PRODUCTION assert updater_features(envoy._updaters) == { "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, } assert envoy.part_number == "800-00654-r08" assert not data.system_consumption assert data.system_production is not None assert data.system_production.watts_now == 751 assert data.system_production.watt_hours_today == 4425 assert data.system_production.watt_hours_last_7_days == 111093 assert data.system_production.watt_hours_lifetime == 702919 @pytest.mark.asyncio async def test_pr111_with_7_6_175_with_cts( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy metered with ct to report from production eim PR111.""" version = "7.6.175_with_cts" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION assert envoy._supported_features & SupportedFeatures.NET_CONSUMPTION assert envoy._supported_features & SupportedFeatures.PRODUCTION assert envoy._supported_features & SupportedFeatures.INVERTERS assert envoy._supported_features & SupportedFeatures.METERING assert envoy._supported_features & SupportedFeatures.INVERTERS assert envoy._supported_features & SupportedFeatures.CTMETERS assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, } assert envoy.part_number == "800-00654-r08" assert data.system_consumption assert data.system_production is not None assert data.system_production.watts_now == 488 assert data.system_production.watt_hours_today == 4425 assert data.system_production.watt_hours_last_7_days == 111093 assert data.system_production.watt_hours_lifetime == 3183793 assert ( envoy.envoy_model == "Envoy, phases: 1, phase mode: three, net-consumption CT, production CT" ) @pytest.mark.asyncio async def test_pr111_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy metered with ct to report from production eim PR111.""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert envoy._supported_features & SupportedFeatures.PRODUCTION assert envoy._supported_features & SupportedFeatures.INVERTERS assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00656-r06" assert not data.system_consumption assert data.system_production is not None assert data.system_production.watts_now == 5740 assert data.system_production.watt_hours_today == 36462 assert data.system_production.watt_hours_last_7_days == 189712 assert data.system_production.watt_hours_lifetime == 6139406 assert envoy.envoy_model == "Envoy" @pytest.mark.asyncio async def test_ct_data_structures_with_7_3_466_with_cts_3phase( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test meters model using envoy metered CT with multiple phases""" # start with regular data first version = "7.3.466_with_cts_3phase" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) # details of this test is done elsewhere already, just check data is returned envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None # Test prior similar updater active remove_2nd_metersupdater = register_updater(EnvoyMetersUpdater) await envoy.probe() remove_2nd_metersupdater() # load mock data for meters and their readings meters_status = await load_json_list_fixture(version, "ivp_meters") meters_readings = await load_json_list_fixture(version, "ivp_meters_readings") meter_status: CtMeterData = { "eid": meters_status[0]["eid"], "state": meters_status[0]["state"], "measurementType": meters_status[0]["measurementType"], "phaseMode": meters_status[0]["phaseMode"], "phaseCount": meters_status[0]["phaseCount"], "meteringStatus": meters_status[0]["meteringStatus"], "statusFlags": meters_status[0]["statusFlags"], } # test meters.from_api method ct_data: EnvoyMeterData = EnvoyMeterData.from_api( meters_readings[0], meter_status, ) assert ct_data.eid == 704643328 assert ct_data.measurement_type == "production" # test meters.from_phase method ct_phase_data: EnvoyMeterData | None = EnvoyMeterData.from_phase( meters_readings[0], meter_status, 0 ) assert ct_phase_data is not None assert ct_phase_data.eid == 1778385169 assert ct_phase_data.measurement_type == "production" assert ct_phase_data.energy_delivered == 3183794 assert ( envoy.envoy_model == "Envoy, phases: 3, phase mode: three, net-consumption CT, production CT" ) # test exception handling by specifying non-existing phase ct_no_phase_data = EnvoyMeterData.from_phase(meters_readings[0], meter_status, 3) assert ct_no_phase_data is None # test exception handling for missing phase data, remove phase data from mock data del meters_readings[0]["channels"] ct_no_phase_data = EnvoyMeterData.from_phase(meters_readings[0], meter_status, 0) assert ct_no_phase_data is None # test exception handling for phase data in production using wrong phase production_data = data.raw["/production.json?details=1"] production_no_phase_data = EnvoySystemProduction.from_production_phase( production_data, 3 ) assert production_no_phase_data is None # test exception handling for phase data if key is missing del production_data["production"][1]["type"] try: production_no_phase_data = EnvoySystemProduction.from_production_phase( production_data, 0 ) except ValueError: production_no_phase_data = None assert production_no_phase_data is None # test exception handling for phase data in consumption using wrong phase consumption_data = data.raw["/production.json?details=1"] consumption_no_phase_data = EnvoySystemConsumption.from_production_phase( consumption_data, 3 ) assert consumption_no_phase_data is None # test handling missing phases when expected in ct readings meters_status = await load_json_list_fixture(version, "ivp_meters") meters_readings = await load_json_list_fixture(version, "ivp_meters_readings") # remove phase data from CT readings del meters_readings[0]["channels"] del meters_readings[1]["channels"] override_mock( mock_aioresponse, "get", "https://127.0.0.1/ivp/meters", status=200, payload=meters_status, repeat=True, ) override_mock( mock_aioresponse, "get", "https://127.0.0.1/ivp/meters/readings", status=200, payload=meters_readings, repeat=True, ) await envoy.update() data = envoy.data assert data is not None assert data.ctmeter_production_phases is None assert data.ctmeter_consumption_phases is None @pytest.mark.asyncio async def test_ct_data_structures_with_7_6_175_with_cts_3phase( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test meters model using envoy metered CT with multiple phases""" # start with regular data first version = "7.6.175_with_cts_3phase" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) # details of this test is done elsewhere already, just check data is returned envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None # Test prior similar updater active remove_2nd_metersupdater = register_updater(EnvoyMetersUpdater) await envoy.probe() remove_2nd_metersupdater() # load mock data for meters and their readings meters_status = await load_json_list_fixture(version, "ivp_meters") meters_readings = await load_json_list_fixture(version, "ivp_meters_readings") meter_status: CtMeterData = { "eid": meters_status[0]["eid"], "state": meters_status[0]["state"], "measurementType": meters_status[0]["measurementType"], "phaseMode": meters_status[0]["phaseMode"], "phaseCount": meters_status[0]["phaseCount"], "meteringStatus": meters_status[0]["meteringStatus"], "statusFlags": meters_status[0]["statusFlags"], } # test meters.from_api method ct_data: EnvoyMeterData = EnvoyMeterData.from_api( meters_readings[0], meter_status, ) assert ct_data.eid == 704643328 assert ct_data.measurement_type == "production" # test meters.from_phase method ct_phase_data: EnvoyMeterData | None = EnvoyMeterData.from_phase( meters_readings[0], meter_status, 0 ) assert ct_phase_data is not None assert ct_phase_data.eid == 1778385169 assert ct_phase_data.measurement_type == "production" assert ct_phase_data.energy_delivered == 3183794 assert ( envoy.envoy_model == "Envoy, phases: 3, phase mode: three, net-consumption CT, production CT" ) # test exception handling by specifying non-existing phase ct_no_phase_data = EnvoyMeterData.from_phase(meters_readings[0], meter_status, 3) assert ct_no_phase_data is None # test exception handling for missing phase data, remove phase data from mock data del meters_readings[0]["channels"] ct_no_phase_data = EnvoyMeterData.from_phase(meters_readings[0], meter_status, 0) assert ct_no_phase_data is None # test exception handling for phase data if key is missing production_data = data.raw["/production.json?details=1"] del production_data["production"][1]["type"] with pytest.raises(ValueError): EnvoySystemProduction.from_production_phase(production_data, 0) @pytest.mark.asyncio async def test_ct_data_structures_with_7_6_175_with_total_cts_3phase( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test meters model using envoy metered without production CT and total-consumption CT with multiple phases""" # start with regular data first version = "7.6.175_with_cts_3phase" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) production_json = await load_json_fixture(version, "production.json") # remove production data to test COV consumption ct only del production_json["production"] override_mock( mock_aioresponse, "get", "https://127.0.0.1/production.json", status=200, payload=production_json, repeat=True, ) override_mock( mock_aioresponse, "get", "https://127.0.0.1/production.json?details=1", status=200, payload=production_json, repeat=True, ) # Force ct consumption meter to total consumption for COV ivp_Meters = (await load_fixture(version, "ivp_meters")).replace( CtType.NET_CONSUMPTION, CtType.TOTAL_CONSUMPTION ) override_mock( mock_aioresponse, "get", "https://127.0.0.1/ivp/meters", status=200, body=ivp_Meters, repeat=True, ) # details of this test is done elsewhere already, just check data is returned envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert ( envoy.envoy_model == "Envoy, phases: 3, phase mode: three, total-consumption CT, production CT" ) @pytest.mark.asyncio async def test_ct_storage_with_8_2_127_with_3cts_and_battery_split( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test meters model using envoy metered CT with multiple phases""" # start with regular data first version = "8.2.127_with_3cts_and_battery_split" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) # details of this test is done elsewhere already, just check data is returned envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None # load mock data for meters and their readings meters_status = await load_json_list_fixture(version, "ivp_meters") meters_readings = await load_json_list_fixture(version, "ivp_meters_readings") meter_status: CtMeterData = { "eid": meters_status[2]["eid"], "state": meters_status[2]["state"], "measurementType": meters_status[2]["measurementType"], "phaseMode": meters_status[2]["phaseMode"], "phaseCount": meters_status[2]["phaseCount"], "meteringStatus": meters_status[2]["meteringStatus"], "statusFlags": meters_status[2]["statusFlags"], } # test meters.from_api method ct_data: EnvoyMeterData = EnvoyMeterData.from_api( meters_readings[2], meter_status, ) assert ct_data.eid == 704643840 assert ct_data.measurement_type == "storage" # test meters.from_phase method ct_phase_data: EnvoyMeterData | None = EnvoyMeterData.from_phase( meters_readings[2], meter_status, 0 ) assert ct_phase_data is not None assert ct_phase_data.eid == 1778385681 assert ct_phase_data.measurement_type == "storage" assert ct_phase_data.energy_delivered == 1136860 assert ( envoy.envoy_model == "Envoy, phases: 2, phase mode: split, net-consumption CT, production CT, storage CT" ) # test exception handling by specifying non-existing phase ct_no_phase_data = EnvoyMeterData.from_phase(meters_readings[2], meter_status, 3) assert ct_no_phase_data is None # test exception handling for missing phase data, remove phase data from mock data del meters_readings[2]["channels"] ct_no_phase_data = EnvoyMeterData.from_phase(meters_readings[2], meter_status, 0) assert ct_no_phase_data is None override_mock( mock_aioresponse, "get", "https://127.0.0.1/ivp/meters", status=200, payload=meters_status, repeat=True, ) override_mock( mock_aioresponse, "get", "https://127.0.0.1/ivp/meters/readings", status=200, payload=meters_readings, repeat=True, ) await envoy.update() data = envoy.data assert data is not None assert data.ctmeter_storage_phases is None @pytest.mark.asyncio async def test_ct_storage_data_without_meter_entry_with_8_2_127_with_3cts_and_battery_split( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test meters model with additional meter readings entry not in meters config""" # start with regular data first we use this fixture to test issue reported in 8.3.5025 version = "8.2.127_with_3cts_and_battery_split" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) # fw D8.3.5027 has 3th (zero) entry for Storage CT, even if not configured # this caused Indexerror crash. Test if extra data is now handled without crash readings_data = await load_json_list_fixture(version, "ivp_meters_readings") readings_data.append({"eid": 1023410688, "channels": [{}, {}, {}]}) override_mock( mock_aioresponse, "get", "https://127.0.0.1/ivp/meters/readings", status=200, payload=readings_data, repeat=True, ) # details of this test is done elsewhere already, just check data is returned envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None pyenphase-2.3.1/tests/test_drycontacts.py000066400000000000000000000033501505013723300206210ustar00rootroot00000000000000"""Test endpoint for envoy v7 and newer firmware""" import logging import aiohttp import pytest from aioresponses import aioresponses from syrupy.assertion import SnapshotAssertion from pyenphase.models.dry_contacts import DryContactType from .common import ( get_mock_envoy, prep_envoy, start_7_firmware_mock, ) LOGGER = logging.getLogger(__name__) @pytest.mark.parametrize( ( "version", "dry_contacts", ), [ ( "8.3.5167_3rd-pv", { "NC1": DryContactType.THIRD_PARTY_PV, "NC2": DryContactType.NONE, "NO1": DryContactType.NONE, "NO2": DryContactType.NONE, }, ), ( "8.2.127_with_generator_running", { "NC1": DryContactType.NONE, "NC2": DryContactType.NONE, "NO1": DryContactType.LOAD, "NO2": DryContactType.LOAD, }, ), ], ids=[ "8.3.5167_3rd-pv", "8.2.127_with_generator_running", ], ) @pytest.mark.asyncio async def test_dry_contact_type( version: str, snapshot: SnapshotAssertion, dry_contacts: dict[str, DryContactType], caplog: pytest.LogCaptureFixture, mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 7.x firmware.""" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) caplog.set_level(logging.DEBUG) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None for contact, type in dry_contacts.items(): assert data.dry_contact_settings[contact].type == type pyenphase-2.3.1/tests/test_endpoints.py000066400000000000000000001710401505013723300202710ustar00rootroot00000000000000"""Test endpoint for envoy v7 and newer firmware""" import contextlib import json import logging from typing import Any import aiohttp import orjson import pytest from aioresponses import aioresponses from syrupy.assertion import SnapshotAssertion from pyenphase.const import ( PhaseNames, ) from pyenphase.envoy import EnvoyProbeFailed, SupportedFeatures from pyenphase.models.meters import CtMeterStatus, CtType, EnvoyPhaseMode from .common import ( endpoint_path, get_mock_envoy, latest_request, load_json_fixture, override_mock, prep_envoy, start_7_firmware_mock, temporary_log_level, updater_features, ) LOGGER = logging.getLogger(__name__) @pytest.mark.parametrize( ( "version", "part_number", "supported_features", "updaters", "phase_count", "common_properties", "production_phases", "consumption_phases", "ct_production", "ct_consumption", "ct_storage", "ct_production_phases", "ct_consumption_phases", "ct_storage_phases", ), [ ( "5.0.62", "800-00551-r02", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "4.10.35", "800-00555-r03", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, 2, { "ctMeters": 2, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, {}, {}, { "eid": 704643328, "active_power": 166, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643584, "active_power": 567, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, {}, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 83, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 84, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385425, "active_power": 394, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385426, "active_power": 173, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, }, {}, ), ( "7.3.130", "800-00555-r03", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.3.130_no_consumption", "800-00647-r10", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, 2, { "ctMeters": 1, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "consumptionMeter": None, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, {}, {}, { "eid": 704643328, "active_power": 3625, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, {}, {}, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 1811, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 1814, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, {}, {}, ), ( "7.3.517", "800-00555-r03", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.3.517_legacy_savings_mode", "800-00555-r03", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.3.517_system_2", "800-00555-r03", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, 2, { "ctMeters": 2, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, {}, {}, { "eid": 704643328, "active_power": 2660, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643584, "active_power": 23, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, {}, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 1331, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 1329, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385425, "active_power": -17, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385426, "active_power": 41, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, }, {}, ), ( "7.3.466_metered_disabled_cts", "800-00654-r08", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.6.114_without_cts", "800-00656-r06", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.6.175", "800-00555-r03", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.6.175_total", "800-00654-r06", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.6.175_standard", "800-00656-r06", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.6.175_with_cts", "800-00654-r08", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, }, 1, { "ctMeters": 2, "phaseCount": 1, "phaseMode": EnvoyPhaseMode.THREE, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "7.6.175_with_cts_3phase", "800-00654-r08", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, }, 3, { "ctMeters": 2, "phaseCount": 3, "phaseMode": EnvoyPhaseMode.THREE, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 1869678, "watt_hours_last_7_days": 29891, "watt_hours_today": 2200, "watts_now": -3, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 1241246, "watt_hours_last_7_days": 19794, "watt_hours_today": 1455, "watts_now": 0, }, PhaseNames.PHASE_3: { "watt_hours_lifetime": 1240189, "watt_hours_last_7_days": 19807, "watt_hours_today": 1458, "watts_now": -4, }, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 2293783, "watt_hours_last_7_days": 39392, "watt_hours_today": 8585, "watts_now": 89, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 948058, "watt_hours_last_7_days": 18949, "watt_hours_today": 2155, "watts_now": 123, }, PhaseNames.PHASE_3: { "watt_hours_lifetime": 832954, "watt_hours_last_7_days": 10443, "watt_hours_today": 1683, "watts_now": -3, }, }, { "eid": 704643328, "active_power": 489, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643584, "active_power": -36, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, {}, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 489, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 0, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_3: { "eid": 1778385171, "active_power": -1, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385425, "active_power": -36, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385426, "active_power": -0, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_3: { "eid": 1778385427, "active_power": -0, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, }, {}, ), ( "7.3.466_with_cts_3phase", "800-00654-r08", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, }, 3, { "ctMeters": 2, "phaseCount": 3, "phaseMode": EnvoyPhaseMode.THREE, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 1869678, "watt_hours_last_7_days": 29891, "watt_hours_today": 2200, "watts_now": -3, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 1241246, "watt_hours_last_7_days": 19794, "watt_hours_today": 1455, "watts_now": 0, }, PhaseNames.PHASE_3: { "watt_hours_lifetime": 1240189, "watt_hours_last_7_days": 19807, "watt_hours_today": 1458, "watts_now": -4, }, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 2293783, "watt_hours_last_7_days": 39392, "watt_hours_today": 8585, "watts_now": 89, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 948058, "watt_hours_last_7_days": 18949, "watt_hours_today": 2155, "watts_now": 123, }, PhaseNames.PHASE_3: { "watt_hours_lifetime": 832954, "watt_hours_last_7_days": 10443, "watt_hours_today": 1683, "watts_now": -3, }, }, { "eid": 704643328, "active_power": 489, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643584, "active_power": -36, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, {}, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 489, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 0, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_3: { "eid": 1778385171, "active_power": -1, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385425, "active_power": -36, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385426, "active_power": -0, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_3: { "eid": 1778385427, "active_power": -0, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, }, {}, ), ( "7.6.185_with_cts_and_battery_3t", "800-00654-r08", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, }, 1, { "ctMeters": 2, "phaseCount": 1, "phaseMode": EnvoyPhaseMode.THREE, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "8.1.41", "800-00664-r05", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyProductionJsonUpdater": SupportedFeatures.PRODUCTION | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "8.2.127_with_3cts_and_battery_split", "800-00654-r08", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, 2, { "ctMeters": 3, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": CtType.STORAGE, }, {}, {}, { "eid": 704643328, "active_power": 1714, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643584, "active_power": 129, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643840, "active_power": -2580, "measurement_type": CtType.STORAGE, "metering_status": CtMeterStatus.NORMAL, }, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 856, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 858, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385425, "active_power": -201, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385426, "active_power": 331, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385681, "active_power": -2115, "measurement_type": CtType.STORAGE, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385682, "active_power": -465, "measurement_type": CtType.STORAGE, "metering_status": CtMeterStatus.NORMAL, }, }, ), ( "8.2.127_with_generator_running", "800-00647-r09", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS | SupportedFeatures.GENERATOR, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, "EnvoyGeneratorUpdater": SupportedFeatures.GENERATOR, }, 2, { "ctMeters": 2, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, {}, {}, { "eid": 704643328, "active_power": 2336, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643584, "active_power": 196, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, {}, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 1173, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 1163, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385425, "active_power": 268, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385426, "active_power": -72, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, }, {}, ), ( "8.2.4286_with_3cts_and_battery_split", "800-00664-r05", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, 2, { "ctMeters": 3, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": CtType.STORAGE, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 6709433, "watt_hours_last_7_days": 6703259, "watt_hours_today": 6277, "watts_now": 3559, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 6721896, "watt_hours_last_7_days": 6715706, "watt_hours_today": 6293, "watts_now": 3564, }, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 7197821, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 4407, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 7915653, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 4478, }, }, { "eid": 704643328, "active_power": 7131, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643584, "active_power": 1750, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, { "eid": 704643840, "active_power": -7084, "measurement_type": CtType.STORAGE, "metering_status": CtMeterStatus.NORMAL, }, { PhaseNames.PHASE_1: { "eid": 1778385169, "active_power": 3562, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385170, "active_power": 3569, "measurement_type": CtType.PRODUCTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385425, "active_power": 810, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385426, "active_power": 940, "measurement_type": CtType.NET_CONSUMPTION, "metering_status": CtMeterStatus.NORMAL, }, }, { PhaseNames.PHASE_1: { "eid": 1778385681, "active_power": -3538, "measurement_type": CtType.STORAGE, "metering_status": CtMeterStatus.NORMAL, }, PhaseNames.PHASE_2: { "eid": 1778385682, "active_power": -3545, "measurement_type": CtType.STORAGE, "metering_status": CtMeterStatus.NORMAL, }, }, ), ( "8.2.4264_metered_noct", "800-00554-r03", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "consumptionMeter": None, "productionMeter": None, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ( "8.2.4345_with_device_data", "800-00649-r01", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS | SupportedFeatures.DETAILED_INVERTERS, { "EnvoyDeviceDataInvertersUpdater": SupportedFeatures.INVERTERS | SupportedFeatures.DETAILED_INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, { "ctMeters": 2, "phaseCount": 1, "phaseMode": EnvoyPhaseMode.THREE, "consumptionMeter": CtType.NET_CONSUMPTION, "productionMeter": CtType.PRODUCTION, "storageMeter": None, }, {}, {}, {}, {}, {}, {}, {}, {}, ), ], ids=[ "5.0.62", "4.10.35", "7.3.130", "7.3.130_no_consumption", "7.3.517", "7.3.517_legacy_savings_mode", "7.3.517_system_2", "7.3.466_metered_disabled_cts", "7.6.114_without_cts", "7.6.175", "7.6.175_total", "7.6.175_standard", "7.6.175_with_cts", "7.6.175_with_cts_3phase", "7.3.466_with_cts_3phase", "7.6.185_with_cts_and_battery_3t", "8.1.41", "8.2.127_with_3cts_and_battery_split", "8.2.127_with_generator_running", "8.2.4286_with_3cts_and_battery_split", "8.2.4264_metered_noct", "8.2.4345_with_device_data", ], ) @pytest.mark.asyncio async def test_with_7_x_firmware( version: str, part_number: str, snapshot: SnapshotAssertion, supported_features: SupportedFeatures, updaters: dict[str, SupportedFeatures], caplog: pytest.LogCaptureFixture, phase_count: int, common_properties: dict[str, Any], production_phases: dict[str, dict[str, Any]], consumption_phases: dict[str, dict[str, Any]], ct_production: dict[str, Any], ct_consumption: dict[str, Any], ct_storage: dict[str, Any], ct_production_phases: dict[str, dict[str, Any]], ct_consumption_phases: dict[str, dict[str, Any]], ct_storage_phases: dict[str, dict[str, Any]], mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 7.x firmware.""" start_7_firmware_mock(mock_aioresponse) files = await prep_envoy(mock_aioresponse, "127.0.0.1", version) caplog.set_level(logging.DEBUG) envoy = await get_mock_envoy(test_client_session) # get http or https paths based on firmware version full_host = endpoint_path(version, envoy.host) data = envoy.data assert data is not None assert data == snapshot assert envoy.firmware == version.split("_")[0] assert envoy.serial_number assert envoy.part_number == part_number assert updater_features(envoy._updaters) == updaters # We're testing, disable warning on private member # pylint: disable=protected-access assert envoy._supported_features == supported_features # test envoy request methods GET, PUT and POST test_data = await load_json_fixture(version, "api_v1_production_inverters") mock_aioresponse.post( f"{full_host}/api/v1/production/inverters", status=200, payload=test_data, repeat=True, ) mock_aioresponse.put( f"{full_host}/api/v1/production/inverters", status=200, payload=test_data, repeat=True, ) # set log level to info 1 time for GET and 1 time for POST to improve COV with temporary_log_level("pyenphase", logging.INFO): # test request with just an endpoint, should be a GET myresponse: aiohttp.ClientResponse = await envoy.request( "/api/v1/production/inverters" ) # with data but no method should be post # Check that at least one GET request was made to this URL cnt, request_data = latest_request( mock_aioresponse, "GET", "/api/v1/production/inverters" ) assert cnt > 0 assert await myresponse.json() == test_data # with data but no method should be post await envoy.request("/api/v1/production/inverters", data=test_data) # Check that at least one POST request was made to this URL cnt, request_data = latest_request( mock_aioresponse, "POST", "/api/v1/production/inverters" ) assert cnt == 1 assert orjson.loads(request_data) == test_data # with method should be specified method await envoy.request("/api/v1/production/inverters", data=test_data, method="PUT") cnt, request_data = latest_request( mock_aioresponse, "PUT", "/api/v1/production/inverters" ) assert cnt == 1 assert orjson.loads(request_data) == test_data # change data to recognize this from previous requests test_data.append({"second_post": "test"}) # type: ignore[attr-defined] await envoy.request("/api/v1/production/inverters", data=test_data, method="POST") # Check that POST requests with changed data was made cnt, request_data = latest_request( mock_aioresponse, "POST", "/api/v1/production/inverters" ) assert cnt == 1 assert orjson.loads(request_data) == test_data assert envoy.phase_count == phase_count assert envoy.ct_meter_count == common_properties["ctMeters"] assert envoy.phase_count == common_properties["phaseCount"] assert envoy.phase_mode == common_properties["phaseMode"] assert envoy.consumption_meter_type == common_properties["consumptionMeter"] assert envoy.production_meter_type == common_properties["productionMeter"] assert envoy.storage_meter_type == common_properties["storageMeter"] # are CT types represented correctly in model assert (str(envoy.storage_meter_type) in envoy.envoy_model) != ( envoy.storage_meter_type is None ) assert (str(envoy.production_meter_type) in envoy.envoy_model) != ( envoy.production_meter_type is None ) assert (str(envoy.storage_meter_type) in envoy.envoy_model) != ( envoy.storage_meter_type is None ) # data is the original collected envoy.data # are all production phases reported expected_phases = production_phases == {} actual_phases = data.system_production_phases is None assert not (expected_phases ^ actual_phases) # are all consumption phases reported expected_phases = consumption_phases == {} actual_phases = data.system_consumption_phases is None assert not (expected_phases ^ actual_phases) reported_phase_count = envoy.active_phase_count # are all production phases reported expected_phase_count = len(production_phases) assert expected_phase_count == reported_phase_count # are all consumption phases reported expected_phase_count = len(consumption_phases) assert expected_phase_count == reported_phase_count # Test each production phase for phase in production_phases: assert data.system_production_phases is not None proddata = data.system_production_phases[phase] assert proddata is not None modeldata = production_phases[phase] # test each element of the phase data assert proddata.watt_hours_lifetime == modeldata["watt_hours_lifetime"] assert proddata.watt_hours_last_7_days == modeldata["watt_hours_last_7_days"] assert proddata.watt_hours_today == modeldata["watt_hours_today"] assert proddata.watts_now == modeldata["watts_now"] # are all consumption phases reported assert ( envoy.active_phase_count == 0 if data.system_consumption_phases is None else len(data.system_consumption_phases) ) # Test each consumption phase for phase in consumption_phases: assert data.system_consumption_phases is not None consdata = data.system_consumption_phases[phase] assert consdata is not None modeldata = consumption_phases[phase] # test each element of the phase data assert consdata.watt_hours_lifetime == modeldata["watt_hours_lifetime"] assert consdata.watt_hours_last_7_days == modeldata["watt_hours_last_7_days"] assert consdata.watt_hours_today == modeldata["watt_hours_today"] assert consdata.watts_now == modeldata["watts_now"] # test ct production meter values for key in ct_production: assert data.ctmeter_production is not None assert ct_production[key] == getattr(data.ctmeter_production, key) # are all CT production phases reported assert ( len(ct_production_phases) == 0 if data.ctmeter_production_phases is None else len(data.ctmeter_production_phases) ) # Test each ct production phase for phase in ct_production_phases: assert data.ctmeter_production_phases is not None ct_proddata = data.ctmeter_production_phases[phase] modeldata = ct_production_phases[phase] # test each element of the phase data for key in modeldata: assert modeldata[key] == getattr(ct_proddata, key) # test ct consumption meter values for key in ct_consumption: assert data.ctmeter_consumption is not None assert ct_consumption[key] == getattr(data.ctmeter_consumption, key) # are all consumption CT phases reported assert ( len(ct_consumption_phases) == 0 if data.ctmeter_consumption_phases is None else len(data.ctmeter_consumption_phases) ) # Test each ct consumption phase for phase in ct_consumption_phases: assert data.ctmeter_consumption_phases is not None ct_consdata = data.ctmeter_consumption_phases[phase] modeldata = ct_consumption_phases[phase] # test each element of the phase data for key in modeldata: assert modeldata[key] == getattr(ct_consdata, key) # test ct storage meter values for key in ct_storage: assert data.ctmeter_storage is not None assert ct_storage[key] == getattr(data.ctmeter_storage, key) # test expected vs actual phases reported assert ( len(ct_storage_phases) == 0 if data.ctmeter_storage_phases is None else len(data.ctmeter_storage_phases) ) # Test each ct storage phase for phase in ct_storage_phases: assert data.ctmeter_storage_phases is not None storedata = data.ctmeter_storage_phases[phase] modeldata = ct_storage_phases[phase] # test each element of the phase data for key in modeldata: assert modeldata[key] == getattr(storedata, key) # COV test with no production segment if "production" in files: try: json_data = await load_json_fixture(version, "production") except json.decoder.JSONDecodeError: json_data = None if json_data: del json_data["production"] override_mock( mock_aioresponse, "get", f"{full_host}/production", status=200, payload=json_data, ) else: override_mock(mock_aioresponse, "get", f"{full_host}/production", status=404) with contextlib.suppress(EnvoyProbeFailed): await envoy.probe() # test inverter device data with missing data fields if "ivp_pdm_device_data" in files: # rebuild default data setup files = await prep_envoy(mock_aioresponse, "127.0.0.1", version) await envoy.probe() # verify we have inverter and inverter details details assert envoy.supported_features & ( SupportedFeatures.DETAILED_INVERTERS | SupportedFeatures.INVERTERS ) json_data = await load_json_fixture(version, "ivp_pdm_device_data") # remove channels from first inverter, should cause switch to production inverter data for key in json_data: if key not in ("deviceCount", "deviceDataLimit"): del json_data[key]["channels"] break override_mock( mock_aioresponse, "get", f"{full_host}/ivp/pdm/device_data", status=200, payload=json_data, ) await envoy.probe() # verify we have production inverter data only assert envoy.supported_features & SupportedFeatures.INVERTERS data = await envoy.update() for key in data.inverters: assert data.inverters[key].ac_frequency is None # rebuild default data setup files = await prep_envoy(mock_aioresponse, "127.0.0.1", version) await envoy.probe() # verify we have inverter and inverter details details assert envoy.supported_features & ( SupportedFeatures.DETAILED_INVERTERS | SupportedFeatures.INVERTERS ) json_data = await load_json_fixture(version, "ivp_pdm_device_data") # remove lastReading from first inverter channel, should cause switch to production inverter data for key in json_data: if key not in ("deviceCount", "deviceDataLimit"): del json_data[key]["channels"][0]["lastReading"] break override_mock( mock_aioresponse, "get", f"{full_host}/ivp/pdm/device_data", status=200, payload=json_data, ) await envoy.probe() # verify we have production inverter data only assert envoy.supported_features & SupportedFeatures.INVERTERS data = await envoy.update() for key in data.inverters: assert data.inverters[key].ac_frequency is None # rebuild default data setup files = await prep_envoy(mock_aioresponse, "127.0.0.1", version) await envoy.probe() # verify we have inverter and inverter details assert envoy.supported_features & ( SupportedFeatures.DETAILED_INVERTERS | SupportedFeatures.INVERTERS ) json_data = await load_json_fixture(version, "ivp_pdm_device_data") # set deviceCount equal to deviceDataLimit, should cause switch to production inverter data json_data["deviceCount"] = json_data["deviceDataLimit"] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/pdm/device_data", status=200, payload=json_data, ) await envoy.probe() # verify we have production inverter data only assert envoy.supported_features & SupportedFeatures.INVERTERS data = await envoy.update() for key in data.inverters: assert data.inverters[key].ac_frequency is None # rebuild default data setup files = await prep_envoy(mock_aioresponse, "127.0.0.1", version) await envoy.probe() # verify we have inverter and inverter details assert envoy.supported_features & ( SupportedFeatures.DETAILED_INVERTERS | SupportedFeatures.INVERTERS ) json_data = await load_json_fixture(version, "ivp_pdm_device_data") # set deviceCount equal to deviceDataLimit, should cause switch to production inverter data json_data["deviceCount"] = json_data["deviceDataLimit"] # remove deviceCount key, should cause switch to production inverter data del json_data["deviceCount"] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/pdm/device_data", status=200, payload=json_data, ) await envoy.probe() # verify we have production inverter data only assert envoy.supported_features & SupportedFeatures.INVERTERS assert not (envoy.supported_features & SupportedFeatures.DETAILED_INVERTERS) data = await envoy.update() for key in data.inverters: assert data.inverters[key].ac_frequency is None # rebuild default data setup files = await prep_envoy(mock_aioresponse, "127.0.0.1", version) await envoy.probe() # verify we have inverter and inverter details details assert envoy.supported_features & ( SupportedFeatures.DETAILED_INVERTERS | SupportedFeatures.INVERTERS ) json_data = await load_json_fixture(version, "ivp_pdm_device_data") # remove lifetime from first channel of inverters, should cause lifetime to be None for key in json_data: if key not in ("deviceCount", "deviceDataLimit"): del json_data[key]["channels"][0]["lifetime"] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/pdm/device_data", status=200, payload=json_data, repeat=2, ) await envoy.probe() # verify we have still have inverter details assert ( envoy.supported_features & SupportedFeatures.INVERTERS | SupportedFeatures.INVERTERS ) data = await envoy.update() for key in data.inverters: assert data.inverters[key].lifetime_energy is None assert data.inverters[key].last_report_watts is not None else: override_mock( mock_aioresponse, "get", f"{full_host}/ivp/pdm/device_data", status=404 ) await envoy.probe() data = await envoy.update() for key in data.inverters: assert data.inverters[key].ac_frequency is None pyenphase-2.3.1/tests/test_ensemble.py000066400000000000000000001172431505013723300200650ustar00rootroot00000000000000"""Test endpoint for envoy v7 and newer firmware""" import asyncio import logging from dataclasses import replace from typing import Any import aiohttp import orjson import pytest from aiohttp.client_reqrep import ConnectionKey from aioresponses import aioresponses from syrupy.assertion import SnapshotAssertion from pyenphase.const import ( URL_DRY_CONTACT_SETTINGS, URL_DRY_CONTACT_STATUS, URL_ENSEMBLE_INVENTORY, URL_GRID_RELAY, URL_TARIFF, ) from pyenphase.envoy import SupportedFeatures from pyenphase.exceptions import EnvoyError, EnvoyFeatureNotAvailable from pyenphase.models.dry_contacts import DryContactStatus from pyenphase.models.tariff import EnvoyStorageMode from .common import ( endpoint_path, get_mock_envoy, latest_request, load_json_fixture, override_mock, prep_envoy, start_7_firmware_mock, updater_features, ) LOGGER = logging.getLogger(__name__) @pytest.mark.parametrize( ( "version", "supported_features", "updaters", ), [ ( "5.0.62", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ( "4.10.35", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, ), ( "7.3.130", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, }, ), ( "7.3.130_no_consumption", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, ), ( "7.3.517", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ( "7.3.517_legacy_savings_mode", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ( "7.3.517_system_2", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, ), ( "7.3.466_metered_disabled_cts", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ( "7.6.114_without_cts", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, ), ( "7.6.175", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, ), ( "7.6.175_total", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ( "7.6.175_standard", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, ), ( "7.6.175_with_cts", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, }, ), ( "7.6.175_with_cts_3phase", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, }, ), ( "7.3.466_with_cts_3phase", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, }, ), ( "7.6.185_with_cts_and_battery_3t", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, }, ), ( "8.1.41", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE, "EnvoyProductionJsonUpdater": SupportedFeatures.PRODUCTION | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION, }, ), ( "8.2.127_with_3cts_and_battery_split", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, ), ( "8.2.127_with_generator_running", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS | SupportedFeatures.GENERATOR, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, "EnvoyGeneratorUpdater": SupportedFeatures.GENERATOR, }, ), ( "8.2.4286_with_3cts_and_battery_split", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, }, ), ( "8.2.4264_metered_noct", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ( "8.2.4345_with_device_data", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS | SupportedFeatures.DETAILED_INVERTERS, { "EnvoyDeviceDataInvertersUpdater": SupportedFeatures.INVERTERS | SupportedFeatures.DETAILED_INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ( "8.3.1598_collar", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENCHARGE | SupportedFeatures.DUALPHASE | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS | SupportedFeatures.COLLAR | SupportedFeatures.C6CC, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.COLLAR | SupportedFeatures.C6CC, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS | SupportedFeatures.DUALPHASE, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, ), ], ids=[ "5.0.62", "4.10.35", "7.3.130", "7.3.130_no_consumption", "7.3.517", "7.3.517_legacy_savings_mode", "7.3.517_system_2", "7.3.466_metered_disabled_cts", "7.6.114_without_cts", "7.6.175", "7.6.175_total", "7.6.175_standard", "7.6.175_with_cts", "7.6.175_with_cts_3phase", "7.3.466_with_cts_3phase", "7.6.185_with_cts_and_battery_3t", "8.1.41", "8.2.127_with_3cts_and_battery_split", "8.2.127_with_generator_running", "8.2.4286_with_3cts_and_battery_split", "8.2.4264_metered_noct", "8.2.4345_with_device_data", "8.3.1598_collar", ], ) @pytest.mark.asyncio async def test_with_7_x_firmware( version: str, snapshot: SnapshotAssertion, supported_features: SupportedFeatures, updaters: dict[str, SupportedFeatures], caplog: pytest.LogCaptureFixture, mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 7.x firmware.""" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) caplog.set_level(logging.DEBUG) envoy = await get_mock_envoy(test_client_session) # get http or https paths based on firmware version full_host = endpoint_path(version, envoy.host) data = envoy.data assert data is not None assert data == snapshot assert updater_features(envoy._updaters) == updaters # We're testing, disable warning on private member # pylint: disable=protected-access assert envoy._supported_features == supported_features # Test enpower if supported_features & supported_features.ENPOWER: # switch off debug for one post to improve COV mock_aioresponse.post( f"{full_host}{URL_GRID_RELAY}", status=200, payload={}, repeat=True ) await envoy.go_on_grid() # Get the last POST request to grid relay cnt, request_data = latest_request(mock_aioresponse, "POST", URL_GRID_RELAY) assert orjson.loads(request_data) == {"mains_admin_state": "closed"} await envoy.go_off_grid() cnt, request_data = latest_request(mock_aioresponse, "POST", URL_GRID_RELAY) assert orjson.loads(request_data) == {"mains_admin_state": "open"} # Test updating dry contacts with pytest.raises(ValueError): await envoy.update_dry_contact({"missing": "id"}) # updating dry contacts before first data update should fail with pytest.raises(ValueError): bad_envoy = await get_mock_envoy(test_client_session, update=False) await bad_envoy.probe() await bad_envoy.update_dry_contact({"id": "NC1"}) assert data.dry_contact_settings is not None dry_contact = data.dry_contact_settings["NC1"] new_data: dict[str, Any] = {"id": "NC1", "load_name": "NC1 Test"} new_model = replace(dry_contact, **new_data) await envoy.update_dry_contact(new_data) cnt, request_data = latest_request( mock_aioresponse, "POST", URL_DRY_CONTACT_SETTINGS ) assert orjson.loads(request_data) == {"dry_contacts": new_model.to_api()} if data.dry_contact_settings["NC1"].black_start is not None: assert ( new_model.to_api()["black_s_start"] == data.dry_contact_settings["NC1"].black_start ) else: assert "black_s_start" not in new_model.to_api() await envoy.open_dry_contact("NC1") assert data.dry_contact_status is not None assert data.dry_contact_status["NC1"].status == DryContactStatus.OPEN # Get the last POST request to dry contact status cnt, request_data = latest_request( mock_aioresponse, "POST", URL_DRY_CONTACT_STATUS ) assert orjson.loads(request_data) == { "dry_contacts": {"id": "NC1", "status": "open"} } await envoy.close_dry_contact("NC1") assert data.dry_contact_status["NC1"].status == DryContactStatus.CLOSED cnt, request_data = latest_request( mock_aioresponse, "POST", URL_DRY_CONTACT_STATUS ) assert orjson.loads(request_data) == { "dry_contacts": {"id": "NC1", "status": "closed"} } assert "Sending POST" in caplog.text # test error returned by action methods calling _json_request override_mock( mock_aioresponse, "post", f"{full_host}{URL_GRID_RELAY}", status=300, payload={}, repeat=2, ) with pytest.raises(EnvoyError): await envoy.go_on_grid() with pytest.raises(EnvoyError): await envoy.go_off_grid() override_mock( mock_aioresponse, "post", f"{full_host}{URL_GRID_RELAY}", exception=aiohttp.ClientError("Test Connection error"), ) with pytest.raises(EnvoyError): await envoy.go_on_grid() mock_aioresponse.post( f"{full_host}{URL_GRID_RELAY}", exception=asyncio.TimeoutError("Test timeout exception"), ) with pytest.raises(EnvoyError): await envoy.go_off_grid() override_mock( mock_aioresponse, "post", f"{full_host}{URL_DRY_CONTACT_SETTINGS}", status=300, payload={}, ) with pytest.raises(EnvoyError): await envoy.update_dry_contact(new_data) override_mock( mock_aioresponse, "post", f"{full_host}{URL_DRY_CONTACT_STATUS}", exception=aiohttp.ClientError("Test Connection error"), ) with pytest.raises(EnvoyError): await envoy.close_dry_contact("NC1") mock_aioresponse.post( f"{full_host}{URL_DRY_CONTACT_STATUS}", exception=asyncio.TimeoutError("Test timeout exception"), ) with pytest.raises(EnvoyError): await envoy.open_dry_contact("NC1") else: with pytest.raises(EnvoyFeatureNotAvailable): await envoy.go_off_grid() with pytest.raises(EnvoyFeatureNotAvailable): await envoy.go_on_grid() with pytest.raises(EnvoyFeatureNotAvailable): await envoy.update_dry_contact({"id": "NC1"}) with pytest.raises(EnvoyFeatureNotAvailable): await envoy.update_dry_contact({"id": "NC1"}) with pytest.raises(EnvoyFeatureNotAvailable): await envoy.open_dry_contact("NC1") with pytest.raises(EnvoyFeatureNotAvailable): await envoy.close_dry_contact("NC1") if supported_features & SupportedFeatures.GENERATOR: # COV ensemble ENDPOINT_PROBE_EXCEPTIONS override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ss/gen_config", status=500, payload=await load_json_fixture(version, "ivp_ss_gen_config"), ) await envoy.probe() # restore from prior changes mock_aioresponse.get( f"{full_host}/ivp/ss/gen_config", status=200, payload=await load_json_fixture(version, "ivp_ss_gen_config"), repeat=True, ) await envoy.probe() if (supported_features & SupportedFeatures.ENCHARGE) and ( supported_features & SupportedFeatures.TARIFF ): # Test `savings-mode` is converted to `economy` assert data.raw is not None if data.raw[URL_TARIFF]["tariff"]["storage_settings"]["mode"] == "savings-mode": assert data.tariff is not None assert data.tariff.storage_settings is not None assert data.tariff.storage_settings.mode == EnvoyStorageMode.SAVINGS assert data.tariff is not None assert data.tariff.storage_settings is not None storage_settings = data.tariff.storage_settings new_data = {"charge_from_grid": True} new_storage_model = replace(storage_settings, **new_data) if data.tariff.storage_settings.date is not None: assert ( new_storage_model.to_api()["date"] == data.tariff.storage_settings.date ) else: assert "date" not in new_storage_model.to_api() if data.tariff.storage_settings.opt_schedules is not None: assert ( new_storage_model.to_api()["opt_schedules"] == data.tariff.storage_settings.opt_schedules ) else: assert "opt_schedules" not in new_storage_model.to_api() # Test setting battery features await envoy.enable_charge_from_grid() assert data.tariff.storage_settings.charge_from_grid is True cnt, request_data = latest_request(mock_aioresponse, "PUT", URL_TARIFF) assert orjson.loads(request_data) == {"tariff": data.tariff.to_api()} await envoy.disable_charge_from_grid() assert not bool(data.tariff.storage_settings.charge_from_grid) cnt, request_data = latest_request(mock_aioresponse, "PUT", URL_TARIFF) assert orjson.loads(request_data) == {"tariff": data.tariff.to_api()} await envoy.set_reserve_soc(50) assert data.tariff.storage_settings.reserved_soc == round(float(50), 1) cnt, request_data = latest_request(mock_aioresponse, "PUT", URL_TARIFF) assert orjson.loads(request_data) == {"tariff": data.tariff.to_api()} await envoy.set_storage_mode(EnvoyStorageMode.SELF_CONSUMPTION) assert data.tariff.storage_settings.mode == EnvoyStorageMode.SELF_CONSUMPTION cnt, request_data = latest_request(mock_aioresponse, "PUT", URL_TARIFF) assert orjson.loads(request_data) == {"tariff": data.tariff.to_api()} with pytest.raises(TypeError): await envoy.set_storage_mode("invalid") # type: ignore[arg-type] # test error returned by action methods calling _json_request override_mock( mock_aioresponse, "put", f"{full_host}{URL_TARIFF}", status=300, payload={}, ) with pytest.raises(EnvoyError): await envoy.enable_charge_from_grid() mock_aioresponse.put( f"{full_host}{URL_TARIFF}", exception=asyncio.TimeoutError("Test timeout exception"), ) with pytest.raises(EnvoyError): await envoy.disable_charge_from_grid() mock_aioresponse.put( f"{full_host}{URL_TARIFF}", exception=aiohttp.ClientConnectorError( connection_key=ConnectionKey( host="127.0.0.1", port=443, is_ssl=True, ssl=False, proxy=None, proxy_auth=None, proxy_headers_hash=None, ), os_error=OSError("Test Connection error"), ), ) with pytest.raises(EnvoyError): await envoy.set_storage_mode(EnvoyStorageMode.SELF_CONSUMPTION) mock_aioresponse.put( f"{full_host}{URL_TARIFF}", exception=aiohttp.ClientConnectorError( connection_key=ConnectionKey( host="127.0.0.1", port=443, is_ssl=True, ssl=False, proxy=None, proxy_auth=None, proxy_headers_hash=None, ), os_error=OSError("Test Connection error"), ), ) with pytest.raises(EnvoyError): await envoy.set_reserve_soc(50) # test correct handling if storage_settings mode = None # should result no longer throw Valueerror but result in None value json_data = await load_json_fixture(version, "admin_lib_tariff") json_data["tariff"]["storage_settings"]["mode"] = None override_mock( mock_aioresponse, "get", f"{full_host}/admin/lib/tariff", status=200, payload=json_data, ) await envoy.update() data = envoy.data assert data is not None assert data.tariff is not None assert data.tariff.storage_settings is not None assert data.tariff.storage_settings.mode is None # COV test with missing logger json_data = await load_json_fixture(version, "admin_lib_tariff") del json_data["tariff"]["logger"] override_mock( mock_aioresponse, "get", f"{full_host}/admin/lib/tariff", status=200, payload=json_data, ) override_mock( mock_aioresponse, "put", f"{full_host}/admin/lib/tariff", status=200, payload=json_data, ) await envoy.update() data = envoy.data assert data is not None assert data.tariff is not None data.tariff.to_api() # COV test with missing date for tariff and storage settings json_data = await load_json_fixture(version, "admin_lib_tariff") del json_data["tariff"]["date"] del json_data["tariff"]["storage_settings"]["date"] mock_aioresponse.get( f"{full_host}/admin/lib/tariff", status=200, payload=json_data ) mock_aioresponse.put( f"{full_host}/admin/lib/tariff", status=200, payload=json_data ) await envoy.update() data = envoy.data assert data is not None assert data.tariff is not None data.tariff.to_api() # COV test with missing storage settings json_data = await load_json_fixture(version, "admin_lib_tariff") del json_data["tariff"]["storage_settings"] mock_aioresponse.get( f"{full_host}/admin/lib/tariff", status=200, payload=json_data ) mock_aioresponse.put( f"{full_host}/admin/lib/tariff", status=200, payload=json_data ) await envoy.update() data = envoy.data assert data is not None assert data.tariff is not None data.tariff.to_api() # COV test with error in result json_data = await load_json_fixture(version, "admin_lib_tariff") json_data.update({"error": "error"}) mock_aioresponse.get( f"{full_host}/admin/lib/tariff", status=200, payload=json_data ) try: await envoy.probe() except AttributeError: assert "No tariff data found" in caplog.text # COV test with no enpower features json_data = await load_json_fixture(version, "ivp_ensemble_inventory") json_data[0]["type"] = "NOEXCHARGE" # type: ignore[index] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=json_data, repeat=2, ) await envoy.probe() await envoy.update() # COV ensemble ENDPOINT_PROBE_EXCEPTIONS mock_aioresponse.get( f"{full_host}/ivp/ensemble/inventory", status=500, payload=await load_json_fixture(version, "ivp_ensemble_inventory"), ) await envoy.probe() # restore from prior changes override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=await load_json_fixture(version, "ivp_ensemble_inventory"), repeat=True, ) json_data = await load_json_fixture(version, "admin_lib_tariff") override_mock( mock_aioresponse, "get", f"{full_host}/admin/lib/tariff", status=200, payload=json_data, repeat=True, ) bad_envoy = await get_mock_envoy(test_client_session) await bad_envoy.probe() with pytest.raises(EnvoyFeatureNotAvailable): assert bad_envoy.data is not None assert bad_envoy.data.tariff is not None bad_envoy.data.tariff.storage_settings = None await bad_envoy.enable_charge_from_grid() with pytest.raises(ValueError): assert bad_envoy.data is not None bad_envoy.data.tariff = None await bad_envoy.enable_charge_from_grid() with pytest.raises(ValueError): bad_envoy.data = None await bad_envoy.enable_charge_from_grid() else: with pytest.raises(EnvoyFeatureNotAvailable): await envoy.enable_charge_from_grid() with pytest.raises(EnvoyFeatureNotAvailable): await envoy.disable_charge_from_grid() if supported_features & SupportedFeatures.COLLAR: # Test collar data assert data.collar is not None assert data.raw is not None assert data.raw[URL_ENSEMBLE_INVENTORY] collar_raw = data.raw[URL_ENSEMBLE_INVENTORY] collar = [ collar_type["devices"] for collar_type in collar_raw if collar_type["type"] == "COLLAR" ] assert collar # should be 1 type collar only assert len(collar) == 1 # should be only 1 collar entry in list assert len(collar[0]) == 1 # verify model field value matches raw data value assert data.collar.serial_number == collar[0][0]["serial_num"] assert data.collar.admin_state_str == collar[0][0]["admin_state_str"] assert data.collar.mid_state == collar[0][0]["mid_state"] assert data.collar.grid_state == collar[0][0]["grid_state"] assert data.collar.collar_state == collar[0][0]["collar_state"] # test cov for empty data json_data = await load_json_fixture(version, "ivp_ensemble_inventory") # test missing key del json_data[1]["devices"][0]["admin_state"] # type: ignore[index] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=json_data, repeat=True, ) await envoy.probe() data = await envoy.update() assert data assert data.collar is None # test missing device del json_data[1]["devices"] # type: ignore[index] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=json_data, repeat=True, ) await envoy.probe() data = await envoy.update() assert data assert data.collar is None # restore from prior changes override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=await load_json_fixture(version, "ivp_ensemble_inventory"), repeat=True, ) else: assert data.collar is None if supported_features & SupportedFeatures.C6CC: # Test combiner data assert data.c6cc is not None assert data.raw is not None assert data.raw[URL_ENSEMBLE_INVENTORY] c6cc_raw = data.raw[URL_ENSEMBLE_INVENTORY] c6cc = [ c6cc_type["devices"] for c6cc_type in c6cc_raw if c6cc_type["type"] == "C6 COMBINER CONTROLLER" ] assert c6cc # should be 1 type collar only assert len(c6cc) == 1 # should be only 1 collar entry in list assert len(c6cc[0]) == 1 # verify model field value matches raw data value assert data.c6cc.admin_state_str == c6cc[0][0]["admin_state_str"] assert data.c6cc.serial_number == c6cc[0][0]["serial_num"] # test cov for empty data json_data = await load_json_fixture(version, "ivp_ensemble_inventory") # test missing key del json_data[2]["devices"][0]["admin_state"] # type: ignore[index] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=json_data, repeat=True, ) await envoy.probe() data = await envoy.update() assert data assert data.c6cc is None # test missing device del json_data[2]["devices"] # type: ignore[index] override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=json_data, repeat=True, ) await envoy.probe() data = await envoy.update() assert data assert data.c6cc is None # restore from prior changes override_mock( mock_aioresponse, "get", f"{full_host}/ivp/ensemble/inventory", status=200, payload=await load_json_fixture(version, "ivp_ensemble_inventory"), repeat=True, ) else: assert data.c6cc is None pyenphase-2.3.1/tests/test_firmware.py000066400000000000000000000142771505013723300201120ustar00rootroot00000000000000"""Test firmware functions.""" import logging import aiohttp import pytest from aioresponses import aioresponses from pyenphase import Envoy from pyenphase.exceptions import EnvoyFirmwareCheckError LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_firmware_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test firmware is processed ok.""" info = ( "" "" " " " 123456789012" " 800-12345-r99" " D7.8.901" " " "" ) mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert envoy.firmware == "7.8.901" assert envoy.serial_number == "123456789012" assert envoy.part_number == "800-12345-r99" @pytest.mark.asyncio async def test_firmware_no_sn_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test missing serial number in info""" info = ( "" "" " " " 800-12345-r99" " D7.8.901" " " "" ) mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert envoy.firmware == "7.8.901" assert envoy.serial_number is None assert envoy.part_number == "800-12345-r99" @pytest.mark.asyncio async def test_firmware_no_pn_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test missing pb in info""" info = ( "" "" " " " 123456789012" " D7.8.901" " " "" ) mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert envoy.firmware == "7.8.901" assert envoy.serial_number == "123456789012" assert envoy.part_number is None @pytest.mark.asyncio async def test_firmware_no_fw_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test missing fw in info""" info = ( "" "" " " " 123456789012" " 800-12345-r99" " " "" ) mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert not envoy.firmware assert envoy.serial_number == "123456789012" assert envoy.part_number == "800-12345-r99" @pytest.mark.asyncio async def test_firmware_no_device_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test missing device xml segment in info""" info = "" mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert not envoy.firmware assert envoy.serial_number is None assert envoy.part_number is None @pytest.mark.asyncio async def test_firmware_no_200__with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test other status as 200 returned""" info = "" mock_aioresponse.get("https://127.0.0.1/info", status=500, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) with pytest.raises(EnvoyFirmwareCheckError): await envoy.setup() @pytest.mark.asyncio async def test_firmware_metered_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test firmware is processed ok.""" info = ( "" "" " " " 123456789012" " 800-12345-r99" " D7.8.901" " true" " " "" ) mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert envoy.is_metered @pytest.mark.asyncio async def test_firmware_not_metered_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test firmware is processed ok.""" info = ( "" "" " " " 123456789012" " 800-12345-r99" " D7.8.901" " false" " " "" ) mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert not envoy.is_metered @pytest.mark.asyncio async def test_firmware_missing_metered_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test firmware is processed ok.""" info = ( "" "" " " " 123456789012" " 800-12345-r99" " D7.8.901" " " "" ) mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() assert not envoy.is_metered pyenphase-2.3.1/tests/test_home.py000066400000000000000000000133111505013723300172120ustar00rootroot00000000000000"""Test envoy home endpoint""" import asyncio import logging import aiohttp import pytest from aioresponses import aioresponses from pyenphase import Envoy from pyenphase.models.home import EnvoyInterfaceInformation from .common import ( get_mock_envoy, load_fixture, load_json_fixture, override_mock, prep_envoy, start_7_firmware_mock, ) LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_home_from_api_with_7_6_175() -> None: """Test home data from api""" # start with regular data first version = "7.6.175" # load mock data for home endpoint home_json = await load_json_fixture(version, "home") # test from_api method with eth0 interface home_data: EnvoyInterfaceInformation | None = EnvoyInterfaceInformation.from_api( home_json ) # verify common data assert home_data assert home_data.software_build_epoch == 1719503966 assert home_data.dhcp assert home_data.timezone == "Europe/Amsterdam" # verify interface data assert home_data.mac == "00:1D:C0:7F:B6:3B" assert home_data.primary_interface == "eth0" assert home_data.interface_type == "ethernet" # force wifi interface home_json["network"]["primary_interface"] = "wlan0" home_data = EnvoyInterfaceInformation.from_api(home_json) # verify interface data assert home_data assert home_data.mac == "60:E8:5B:AB:9D:64" assert home_data.primary_interface == "wlan0" assert home_data.interface_type == "wifi" # test missing interface key home_json["network"]["primary_interface"] = "missing" home_data = EnvoyInterfaceInformation.from_api(home_json) assert home_data is None # test handling missing interfaces part del home_json["network"]["interfaces"] home_data = EnvoyInterfaceInformation.from_api(home_json) assert not home_data # test handling missing network part del home_json["network"] home_data = EnvoyInterfaceInformation.from_api(home_json) assert not home_data @pytest.mark.asyncio async def test_interface_settings_with_7_6_175( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test home interface information data""" # start with regular data first version = "7.6.175" # Use prep_envoy to set up all required mocks start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) # Create envoy using get_mock_envoy which handles all the setup envoy = await get_mock_envoy(test_client_session, update=False) # test interface_settings method home_data: EnvoyInterfaceInformation | None = await envoy.interface_settings() # validate common data assert home_data assert home_data.software_build_epoch == 1719503966 assert home_data.dhcp assert home_data.timezone == "Europe/Amsterdam" # validate interface data assert home_data.mac == "00:1D:C0:7F:B6:3B" assert home_data.primary_interface == "eth0" assert home_data.interface_type == "ethernet" # load mock data for home endpoint home_json = await load_json_fixture(version, "home") # Change mock to use wlan interface home_json["network"]["primary_interface"] = "wlan0" # and mock new data override_mock( mock_aioresponse, "get", "https://127.0.0.1/home", status=200, payload=home_json ) # get interface data, subsequent call data is returned from cache home_data = await envoy.interface_settings() # interface data should come from cache and still be the same assert home_data assert home_data.mac == "00:1D:C0:7F:B6:3B" assert home_data.primary_interface == "eth0" assert home_data.interface_type == "ethernet" # call setup to invalidate cached interface data await envoy.setup() # now interface data should be reflect latest mocked data and reflect wlan interface home_data = await envoy.interface_settings() assert home_data assert home_data.mac == "60:E8:5B:AB:9D:64" assert home_data.primary_interface == "wlan0" assert home_data.interface_type == "wifi" @pytest.mark.asyncio async def test_home_endpoint_errors_with_7_6_175( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, caplog: pytest.LogCaptureFixture, ) -> None: """Test home interface information data""" caplog.set_level(logging.DEBUG) # start with regular data first version = "7.6.175" # Set up auth mocks start_7_firmware_mock(mock_aioresponse) # Set up info endpoint for setup info_data = await load_fixture(version, "info") mock_aioresponse.get( "https://127.0.0.1/info", status=200, body=info_data, repeat=True ) # Create and setup envoy envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() await envoy.authenticate("username", "password") # test not-found error mock_aioresponse.get("https://127.0.0.1/home", status=404) await envoy.interface_settings() assert "Failure getting interface information" in caplog.text caplog.clear() # test server error mock_aioresponse.get("https://127.0.0.1/home", status=500) await envoy.interface_settings() assert "Failure getting interface information" in caplog.text caplog.clear() mock_aioresponse.get( "https://127.0.0.1/home", exception=aiohttp.ClientError("Test Networkerror") ) await envoy.interface_settings() assert "Failure getting interface information" in caplog.text caplog.clear() mock_aioresponse.get( "https://127.0.0.1/home", exception=asyncio.TimeoutError("Test timeoutexception"), ) await envoy.interface_settings() assert "Failure getting interface information" in caplog.text pyenphase-2.3.1/tests/test_net_consumption.py000066400000000000000000000337651505013723300215250ustar00rootroot00000000000000"""Test endpoint for envoy v7 and newer firmware""" import logging from typing import Any import aiohttp import pytest from aioresponses import aioresponses from syrupy.assertion import SnapshotAssertion from pyenphase.const import PhaseNames from pyenphase.envoy import SupportedFeatures from pyenphase.models.envoy import EnvoyData from .common import get_mock_envoy, prep_envoy, start_7_firmware_mock LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_with_4_2_27_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Verify with 4.2.27 firmware.""" version = "4.2.27" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data: EnvoyData | None = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert not data.system_net_consumption assert not data.system_net_consumption_phases @pytest.mark.parametrize( ( "version", "supported_features", "phase_count", "net_consumption", "net_consumption_phases", ), [ ( "5.0.62", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, 1, {}, {}, ), ( "4.10.35", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 2, {}, {}, ), ( "7.3.130", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, 1, {}, {}, ), ( "7.3.130_no_consumption", SupportedFeatures.METERING | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 2, {}, {}, ), ( "7.3.517", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, 1, {}, {}, ), ( "7.3.517_legacy_savings_mode", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, 1, {}, {}, ), ( "7.3.517_system_2", SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENPOWER | SupportedFeatures.ENCHARGE | SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 2, { "watt_hours_lifetime": -2662919, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 48, }, {}, ), ( "7.3.466_metered_disabled_cts", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, 1, {}, {}, ), ( "7.6.114_without_cts", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, 1, {}, {}, ), ( "7.6.175", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, 1, {}, {}, ), ( "7.6.175_total", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, 1, {}, {}, ), ( "7.6.175_standard", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, 1, { "watt_hours_lifetime": 1961513, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": -11, }, {}, ), ( "7.6.175_with_cts", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, 1, {}, {}, ), ( "7.6.175_with_cts_3phase", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, 3, { "watt_hours_lifetime": 2886562, "watt_hours_last_7_days": 29891, "watt_hours_today": 2200, "watts_now": 216, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 1625201, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 91, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 629892, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 123, }, PhaseNames.PHASE_3: { "watt_hours_lifetime": 631469, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 1, }, }, ), ( "7.3.466_with_cts_3phase", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF | SupportedFeatures.THREEPHASE | SupportedFeatures.CTMETERS, 3, { "watt_hours_lifetime": 2886562, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 216, }, { PhaseNames.PHASE_1: { "watt_hours_lifetime": 1625201, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 91, }, PhaseNames.PHASE_2: { "watt_hours_lifetime": 629892, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 123, }, PhaseNames.PHASE_3: { "watt_hours_lifetime": 631469, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 1, }, }, ), ( "7.6.185_with_cts_and_battery_3t", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.TARIFF | SupportedFeatures.CTMETERS, 1, { "watt_hours_lifetime": 1279038, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 525, }, {}, ), ( "8.1.41", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.PRODUCTION, 1, { "watt_hours_lifetime": 1279038, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": -7812, }, {}, ), ( "8.2.127_with_3cts_and_battery_split", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 2, { "watt_hours_lifetime": 4744550, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 129, }, {}, ), ( "8.2.127_with_generator_running", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS | SupportedFeatures.GENERATOR, 2, { "watt_hours_lifetime": 7298714, "watt_hours_last_7_days": 0, "watt_hours_today": 0, "watts_now": 240, }, {}, ), ( "8.2.4345_with_device_data", SupportedFeatures.INVERTERS | SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION | SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER | SupportedFeatures.TARIFF | SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, 1, {}, {}, ), ], ids=[ "5.0.62", "4.10.35", "7.3.130", "7.3.130_no_consumption", "7.3.517", "7.3.517_legacy_savings_mode", "7.3.517_system_2", "7.3.466_metered_disabled_cts", "7.6.114_without_cts", "7.6.175", "7.6.175_total", "7.6.175_standard", "7.6.175_with_cts", "7.6.175_with_cts_3phase", "7.3.466_with_cts_3phase", "7.6.185_with_cts_and_battery_3t", "8.1.41", "8.2.127_with_3cts_and_battery_split", "8.2.127_with_generator_running", "8.2.4345_with_device_data", ], ) @pytest.mark.asyncio async def test_with_7_x_firmware( version: str, snapshot: SnapshotAssertion, supported_features: SupportedFeatures, caplog: pytest.LogCaptureFixture, phase_count: int, net_consumption: dict[str, Any], net_consumption_phases: dict[str, dict[str, Any]], mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 7.x firmware.""" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) caplog.set_level(logging.DEBUG) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data assert data == snapshot assert envoy.phase_count == phase_count # are all net consumption phases reported expected_phases = net_consumption_phases == {} actual_phases = data.system_net_consumption_phases is None assert not (expected_phases ^ actual_phases) reported_phase_count = envoy.active_phase_count # are all net consumption phases reported expected_phase_count = len(net_consumption_phases) assert expected_phase_count == reported_phase_count # are all consumption phases reported assert ( envoy.active_phase_count == 0 if data.system_net_consumption_phases is None else len(data.system_net_consumption_phases) ) # Test each consumption phase for phase in net_consumption_phases: assert data.system_net_consumption_phases assert (consdata := data.system_net_consumption_phases[phase]) modeldata = net_consumption_phases[phase] # test each element of the phase data assert consdata.watt_hours_lifetime == modeldata["watt_hours_lifetime"] assert consdata.watt_hours_last_7_days == modeldata["watt_hours_last_7_days"] assert consdata.watt_hours_today == modeldata["watt_hours_today"] assert consdata.watts_now == modeldata["watts_now"] pyenphase-2.3.1/tests/test_post_v7_endpoints.py000066400000000000000000000174521505013723300217600ustar00rootroot00000000000000"""Test specific envoy firmware issues post v7.""" import logging import aiohttp import pytest from aioresponses import aioresponses from pyenphase.envoy import UPDATERS, Envoy, SupportedFeatures, register_updater from pyenphase.updaters.api_v1_production_inverters import ( EnvoyApiV1ProductionInvertersUpdater, ) from pyenphase.updaters.device_data_inverters import EnvoyDeviceDataInvertersUpdater from .common import get_mock_envoy, prep_envoy, start_7_firmware_mock, updater_features LOGGER = logging.getLogger(__name__) @pytest.mark.parametrize( ( "version", "part_number", "updaters", "watts_now", "watt_hours_today", "watt_hours_last_7_days", "watt_hours_lifetime", ), [ ( "8.2.4264_metered_noct", "800-00554-r03", { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 5521, 70, 1521, 32465106, ), ( "7.6.114_without_cts", "800-00656-r06", { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, 586, 10363, 101742, 1544282, ), ( "7.3.466_metered_disabled_cts", "800-00654-r08", { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 751, 4425, 111093, 702919, ), ], ids=[ "8.2.4264_metered_noct", "7.6.114_without_cts", "7.3.466_metered_disabled_cts", ], ) @pytest.mark.asyncio async def test_metered_noct( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, version: str, part_number: str, updaters: dict[str, SupportedFeatures], caplog: pytest.LogCaptureFixture, watts_now: int, watt_hours_today: int, watt_hours_last_7_days: int, watt_hours_lifetime: int, ) -> None: """Verify metered without CT production data with pre and post 8.2.4264 firmware.""" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) caplog.set_level(logging.DEBUG) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert updater_features(envoy._updaters) == updaters assert envoy.part_number == part_number assert envoy.phase_count == 1 assert not data.system_consumption assert envoy.ct_meter_count == 0 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases assert data.system_production is not None assert data.system_production.watts_now == watts_now assert data.system_production.watt_hours_today == watt_hours_today assert data.system_production.watt_hours_last_7_days == watt_hours_last_7_days assert data.system_production.watt_hours_lifetime == watt_hours_lifetime @pytest.mark.asyncio async def test_multiple_inverter_sources( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Test that multiple inverters from different sources are handled correctly.""" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", "8.2.4345_with_device_data") envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() await envoy.authenticate("username", "password") # Preserve the original updaters original_updaters = UPDATERS.copy() # Remove existing inverter updaters UPDATERS[:] = [ updater for updater in UPDATERS if updater not in (EnvoyApiV1ProductionInvertersUpdater, EnvoyDeviceDataInvertersUpdater) ] # Add the inverter production endpoint updater followed by the device data updater prod_remover = register_updater(EnvoyApiV1ProductionInvertersUpdater) device_data_remover = register_updater(EnvoyDeviceDataInvertersUpdater) # Verify that the production updater is used first await envoy.probe() assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, } # Remove both updaters and re-add them in reverse order prod_remover() device_data_remover() device_data_remover = register_updater(EnvoyDeviceDataInvertersUpdater) prod_remover = register_updater(EnvoyApiV1ProductionInvertersUpdater) # Verify that the device data updater is used first await envoy.probe() assert updater_features(envoy._updaters) == { "EnvoyDeviceDataInvertersUpdater": SupportedFeatures.INVERTERS | SupportedFeatures.DETAILED_INVERTERS, "EnvoyEnembleUpdater": SupportedFeatures.ENCHARGE | SupportedFeatures.ENPOWER, "EnvoyMetersUpdater": SupportedFeatures.CTMETERS, "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.TOTAL_CONSUMPTION | SupportedFeatures.NET_CONSUMPTION | SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, } # Restore the original updaters UPDATERS.clear() for updater in original_updaters: register_updater(updater) @pytest.mark.parametrize( "version", [ "8.2.4264_metered_noct", "7.6.114_without_cts", "7.3.466_metered_disabled_cts", ], ids=[ "8.2.4264_metered_noct", "7.6.114_without_cts", "7.3.466_metered_disabled_cts", ], ) @pytest.mark.asyncio async def test_client_session_close( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, version: str, caplog: pytest.LogCaptureFixture, ) -> None: """Test client session close code COV.""" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) caplog.set_level(logging.DEBUG) # pass aiohttp client session for envoy to use envoy = await get_mock_envoy(client_session=test_client_session) data = envoy.data assert data is not None assert envoy._client is not None assert not envoy._client.closed await envoy.close() # it's our client, pyenphase will not close it on close assert not envoy._client.closed # test with pyenphase internal created client envoy2 = await get_mock_envoy(client_session=None) data = envoy2.data assert data is not None assert envoy2._client is not None assert not envoy2._client.closed await envoy2.close() # it's pyenphase's client, will close it on close assert envoy2._client.closed envoy3 = await get_mock_envoy(client_session=None) data = envoy3.data assert data is not None assert not envoy3._client.closed # force close internal envoy client for cov test await envoy3._client.close() assert envoy3._client.closed await envoy3.close() # was closed already, should still be closed. assert envoy3._client.closed pyenphase-2.3.1/tests/test_pre_v7_endpoints.py000066400000000000000000001161241505013723300215550ustar00rootroot00000000000000"""Test envoy firmware prior to v7.""" import logging import re import aiohttp import pytest from aioresponses import aioresponses from pyenphase import EnvoyInverter, register_updater from pyenphase.const import URL_PRODUCTION from pyenphase.envoy import SupportedFeatures, get_updaters from pyenphase.exceptions import ( ENDPOINT_PROBE_EXCEPTIONS, EnvoyAuthenticationRequired, EnvoyFeatureNotAvailable, EnvoyPoorDataQuality, EnvoyProbeFailed, ) from pyenphase.models.envoy import EnvoyData from pyenphase.models.meters import EnvoyPhaseMode from pyenphase.models.system_production import EnvoySystemProduction from pyenphase.updaters.base import EnvoyUpdater from .common import ( get_mock_envoy, load_json_fixture, override_mock, prep_envoy, updater_features, ) LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_with_4_2_27_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 4.2.27 firmware.""" version = "4.2.27" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data: EnvoyData | None = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.METERING) assert not (envoy._supported_features & SupportedFeatures.INVERTERS) assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00551-r02" assert data.system_production is not None assert ( data.system_production.watts_now == 5894 ) # This used to use the production.json endpoint, but its always a bit behind assert data.system_production.watt_hours_today == 17920 assert data.system_production.watt_hours_last_7_days == 276614 assert data.system_production.watt_hours_lifetime == 10279087 assert not data.inverters assert envoy.ct_meter_count == 0 assert envoy.phase_count == 1 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases assert envoy.envoy_model == "Envoy" # Test that Ensemble commands raise FeatureNotAvailable with pytest.raises(EnvoyFeatureNotAvailable): await envoy.go_off_grid() with pytest.raises(EnvoyFeatureNotAvailable): await envoy.go_on_grid() @pytest.mark.asyncio async def test_with_4_2_33_firmware_no_cons_ct( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 4.2.33 firmware.""" version = "4.2.33" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data: EnvoyData | None = envoy.data assert data is not None assert envoy._supported_features is not None assert envoy._supported_features & SupportedFeatures.METERING assert envoy._supported_features & SupportedFeatures.INVERTERS assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert updater_features(envoy._updaters) == { "EnvoyProductionJsonUpdater": SupportedFeatures.METERING | SupportedFeatures.PRODUCTION, "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyMetersUpdater": SupportedFeatures.DUALPHASE | SupportedFeatures.CTMETERS, } assert envoy.part_number == "800-00547-r05" assert data.system_production is not None assert ( data.system_production.watts_now == -9 ) # This used to use the production.json endpoint, but its always a bit behind assert data.system_production.watt_hours_today == 10215 assert data.system_production.watt_hours_last_7_days == 10833 assert data.system_production.watt_hours_lifetime == 8598257 assert not data.system_consumption assert data.inverters["1234567890"] == EnvoyInverter( serial_number="1234567890", last_report_date=1743551631, last_report_watts=3, max_report_watts=131, ) assert data.inverters["121622033019"] == EnvoyInverter( serial_number="121622033019", last_report_date=1536668634, last_report_watts=17, max_report_watts=17, ) assert envoy.ct_meter_count == 1 assert envoy.phase_count == 2 assert envoy.phase_mode == EnvoyPhaseMode.SPLIT assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases assert envoy.envoy_model == "Envoy, phases: 2, phase mode: split, production CT" # Test that Ensemble commands raise FeatureNotAvailable with pytest.raises(EnvoyFeatureNotAvailable): await envoy.go_off_grid() with pytest.raises(EnvoyFeatureNotAvailable): await envoy.go_on_grid() await envoy.update() @pytest.mark.asyncio async def test_with_5_0_49_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 5.0.49 firmware.""" version = "5.0.49" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert envoy._supported_features & SupportedFeatures.INVERTERS assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00551-r02" assert envoy.phase_count == 1 assert not data.system_consumption assert envoy.ct_meter_count == 0 assert envoy.phase_count == 1 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases assert data.system_production is not None assert data.system_production.watts_now == 4859 assert data.system_production.watt_hours_today == 5046 assert data.system_production.watt_hours_last_7_days == 445686 assert data.system_production.watt_hours_lifetime == 88742152 assert data.inverters == { "121547055830": EnvoyInverter( serial_number="121547055830", last_report_date=1618083280, last_report_watts=131, max_report_watts=257, ), "121547059008": EnvoyInverter( serial_number="121547059008", last_report_date=1618083240, last_report_watts=133, max_report_watts=257, ), "121547059079": EnvoyInverter( serial_number="121547059079", last_report_date=1618083244, last_report_watts=130, max_report_watts=257, ), "121547059102": EnvoyInverter( serial_number="121547059102", last_report_date=1618083273, last_report_watts=134, max_report_watts=257, ), "121547059107": EnvoyInverter( serial_number="121547059107", last_report_date=1618083265, last_report_watts=132, max_report_watts=257, ), "121547059108": EnvoyInverter( serial_number="121547059108", last_report_date=1618083266, last_report_watts=131, max_report_watts=257, ), "121547059112": EnvoyInverter( serial_number="121547059112", last_report_date=1618083286, last_report_watts=132, max_report_watts=257, ), "121547059128": EnvoyInverter( serial_number="121547059128", last_report_date=1618083262, last_report_watts=135, max_report_watts=257, ), "121547059193": EnvoyInverter( serial_number="121547059193", last_report_date=1618083250, last_report_watts=131, max_report_watts=257, ), "121547059202": EnvoyInverter( serial_number="121547059202", last_report_date=1618083251, last_report_watts=133, max_report_watts=257, ), "121547059217": EnvoyInverter( serial_number="121547059217", last_report_date=1618083281, last_report_watts=137, max_report_watts=257, ), "121547059253": EnvoyInverter( serial_number="121547059253", last_report_date=1618083289, last_report_watts=131, max_report_watts=257, ), "121547059333": EnvoyInverter( serial_number="121547059333", last_report_date=1618083277, last_report_watts=134, max_report_watts=257, ), "121547059354": EnvoyInverter( serial_number="121547059354", last_report_date=1618083287, last_report_watts=132, max_report_watts=257, ), "121547059355": EnvoyInverter( serial_number="121547059355", last_report_date=1618083263, last_report_watts=131, max_report_watts=258, ), "121547059357": EnvoyInverter( serial_number="121547059357", last_report_date=1618083254, last_report_watts=133, max_report_watts=257, ), "121547059359": EnvoyInverter( serial_number="121547059359", last_report_date=1618083247, last_report_watts=134, max_report_watts=257, ), "121547059360": EnvoyInverter( serial_number="121547059360", last_report_date=1618083245, last_report_watts=131, max_report_watts=257, ), "121547059363": EnvoyInverter( serial_number="121547059363", last_report_date=1618083255, last_report_watts=131, max_report_watts=257, ), "121547059381": EnvoyInverter( serial_number="121547059381", last_report_date=1618083259, last_report_watts=132, max_report_watts=257, ), "121547059889": EnvoyInverter( serial_number="121547059889", last_report_date=1618083264, last_report_watts=133, max_report_watts=257, ), "121547060383": EnvoyInverter( serial_number="121547060383", last_report_date=1618083257, last_report_watts=135, max_report_watts=258, ), "121547060384": EnvoyInverter( serial_number="121547060384", last_report_date=1618083250, last_report_watts=134, max_report_watts=257, ), "121547060392": EnvoyInverter( serial_number="121547060392", last_report_date=1618083288, last_report_watts=133, max_report_watts=257, ), "121547060396": EnvoyInverter( serial_number="121547060396", last_report_date=1618083269, last_report_watts=133, max_report_watts=257, ), "121547060412": EnvoyInverter( serial_number="121547060412", last_report_date=1618083258, last_report_watts=131, max_report_watts=257, ), "121547060415": EnvoyInverter( serial_number="121547060415", last_report_date=1618083267, last_report_watts=133, max_report_watts=257, ), "121547060590": EnvoyInverter( serial_number="121547060590", last_report_date=1618083277, last_report_watts=133, max_report_watts=257, ), "121547060592": EnvoyInverter( serial_number="121547060592", last_report_date=1618083279, last_report_watts=133, max_report_watts=257, ), "121547060593": EnvoyInverter( serial_number="121547060593", last_report_date=1618083271, last_report_watts=133, max_report_watts=257, ), "121547060643": EnvoyInverter( serial_number="121547060643", last_report_date=1618083284, last_report_watts=131, max_report_watts=257, ), "121547060647": EnvoyInverter( serial_number="121547060647", last_report_date=1618083285, last_report_watts=134, max_report_watts=258, ), "121547060650": EnvoyInverter( serial_number="121547060650", last_report_date=1618083253, last_report_watts=131, max_report_watts=257, ), "121547060670": EnvoyInverter( serial_number="121547060670", last_report_date=1618083270, last_report_watts=134, max_report_watts=257, ), "121547060671": EnvoyInverter( serial_number="121547060671", last_report_date=1618083283, last_report_watts=135, max_report_watts=257, ), "121547060727": EnvoyInverter( serial_number="121547060727", last_report_date=1618083275, last_report_watts=134, max_report_watts=257, ), "121547060758": EnvoyInverter( serial_number="121547060758", last_report_date=1618083274, last_report_watts=130, max_report_watts=255, ), "121547060761": EnvoyInverter( serial_number="121547060761", last_report_date=1618083260, last_report_watts=133, max_report_watts=257, ), "121547060766": EnvoyInverter( serial_number="121547060766", last_report_date=1618083242, last_report_watts=132, max_report_watts=257, ), "121547060773": EnvoyInverter( serial_number="121547060773", last_report_date=1618083247, last_report_watts=132, max_report_watts=257, ), } assert envoy.envoy_model == "Envoy" @pytest.mark.asyncio async def test_with_3_7_0_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.7.0 firmware.""" version = "3.7.0" await prep_envoy(mock_aioresponse, "127.0.0.1", version) # Verify the library does not support scraping to comply with ADR004 with pytest.raises(EnvoyProbeFailed): await get_mock_envoy(test_client_session) # Test the register interface by registering a legacy production scraper # # ADR004 compliance: # We won't do this in our production code as we don't support scraping, but # we want to leave the door open for custom components to use the interface. # _KEY_TO_REGEX = { "watts_now": r"Current.*\s*\s*(\d+|\d+\.\d+)\s*(W|kW|MW)", "watt_hours_last_7_days": r"Past Week\s*\s*(\d+|\d+\.\d+)\s*(Wh|kWh|MWh)", "watt_hours_today": r"Today\s*\s*(\d+|\d+\.\d+)\s*(Wh|kWh|MWh)", "watt_hours_lifetime": r"Since Installation\s*\s*(\d+|\d+\.\d+)\s*(Wh|kWh|MWh)", } class LegacyEnvoySystemProduction(EnvoySystemProduction): @classmethod def from_production_legacy(cls, text: str) -> EnvoySystemProduction: """Legacy parser.""" data: dict[str, int] = { "watts_now": 0, "watt_hours_today": 0, "watt_hours_last_7_days": 0, "watt_hours_lifetime": 0, } for key, regex in _KEY_TO_REGEX.items(): if match := re.search(regex, text, re.MULTILINE): unit = match.group(2).lower() value = float(match.group(1)) if unit.startswith("k"): value *= 1000 elif unit.startswith("m"): value *= 1000000 data[key] = int(value) return cls(**data) class LegacyProductionScraper(EnvoyUpdater): async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: """Probe the Envoy for this updater and return SupportedFeatures.""" if SupportedFeatures.PRODUCTION in discovered_features: # Already discovered from another updater return None try: response = await self._probe_request(URL_PRODUCTION) data = await response.text() except ENDPOINT_PROBE_EXCEPTIONS: return None if "Since Installation" not in data: return None self._supported_features |= SupportedFeatures.PRODUCTION return self._supported_features async def update(self, envoy_data: EnvoyData) -> None: """Update the Envoy for this updater.""" response = await self._request(URL_PRODUCTION) production_data = await response.text() envoy_data.raw[URL_PRODUCTION] = production_data envoy_data.system_production = ( LegacyEnvoySystemProduction.from_production_legacy(production_data) ) remove = register_updater(LegacyProductionScraper) assert LegacyProductionScraper in get_updaters() try: envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.INVERTERS) assert updater_features(envoy._updaters) == { "LegacyProductionScraper": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00069-r05" assert not data.system_consumption assert data.system_production is not None assert data.system_production.watts_now == 6630 assert data.system_production.watt_hours_today == 53600 assert data.system_production.watt_hours_last_7_days == 405000 assert data.system_production.watt_hours_lifetime == 133000000 assert not data.inverters assert envoy.ct_meter_count == 0 assert envoy.phase_count == 1 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases assert envoy.envoy_model == "Envoy" finally: remove() assert LegacyProductionScraper not in get_updaters() @pytest.mark.asyncio async def test_with_3_9_36_firmware_bad_auth( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.9.36 firmware with incorrect auth.""" version = "3.9.36_bad_auth" await prep_envoy(mock_aioresponse, "127.0.0.1", version) # Override production endpoints to return 401 override_mock( mock_aioresponse, "get", "http://127.0.0.1/api/v1/production", status=401, payload={ "status": 401, "error": "", "info": "Authentication required", "moreInfo": "", }, repeat=True, ) with pytest.raises(EnvoyAuthenticationRequired): await get_mock_envoy(test_client_session) @pytest.mark.asyncio async def test_with_3_9_36_firmware_no_inverters( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.9.36 firmware with auth that does not allow inverters.""" version = "3.9.36_bad_auth" await prep_envoy(mock_aioresponse, "127.0.0.1", version) # force auth failure on inverters mock_aioresponse.get( "http://127.0.0.1/api/v1/production/inverters", status=401, payload=await load_json_fixture(version, "api_v1_production_inverters"), repeat=True, ) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.INVERTERS) assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00069-r05" assert envoy.ct_meter_count == 0 assert envoy.phase_count == 1 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases @pytest.mark.asyncio async def test_with_3_9_36_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.9.36 firmware.""" version = "3.9.36" await prep_envoy(mock_aioresponse, "127.0.0.1", version) # no access to tariff override_mock( mock_aioresponse, "get", "http://127.0.0.1/admin/lib/tariff", status=401, repeat=True, ) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert envoy._supported_features & SupportedFeatures.INVERTERS assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00069-r05" assert not data.system_consumption assert envoy.ct_meter_count == 0 assert envoy.phase_count == 1 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases assert data.system_production is not None assert data.system_production.watts_now == 1271 assert data.system_production.watt_hours_today == 1460 assert data.system_production.watt_hours_last_7_days == 130349 assert data.system_production.watt_hours_lifetime == 6012540 assert data.inverters == { "121547058983": EnvoyInverter( serial_number="121547058983", last_report_date=1618083969, last_report_watts=137, max_report_watts=238, ), "121547058993": EnvoyInverter( serial_number="121547058993", last_report_date=1618083961, last_report_watts=138, max_report_watts=231, ), "121547060394": EnvoyInverter( serial_number="121547060394", last_report_date=1618083966, last_report_watts=138, max_report_watts=238, ), "121547060402": EnvoyInverter( serial_number="121547060402", last_report_date=1618083962, last_report_watts=138, max_report_watts=240, ), "121547060495": EnvoyInverter( serial_number="121547060495", last_report_date=1618083959, last_report_watts=135, max_report_watts=228, ), "121547060638": EnvoyInverter( serial_number="121547060638", last_report_date=1618083966, last_report_watts=139, max_report_watts=241, ), "121547060646": EnvoyInverter( serial_number="121547060646", last_report_date=1618083957, last_report_watts=139, max_report_watts=240, ), "121547060652": EnvoyInverter( serial_number="121547060652", last_report_date=1618083959, last_report_watts=140, max_report_watts=245, ), "121603025842": EnvoyInverter( serial_number="121603025842", last_report_date=1618083963, last_report_watts=139, max_report_watts=260, ), "121603034267": EnvoyInverter( serial_number="121603034267", last_report_date=1618083956, last_report_watts=138, max_report_watts=244, ), "121603038867": EnvoyInverter( serial_number="121603038867", last_report_date=1618083964, last_report_watts=138, max_report_watts=242, ), "121603039216": EnvoyInverter( serial_number="121603039216", last_report_date=1618083968, last_report_watts=139, max_report_watts=273, ), } assert envoy.envoy_model == "Envoy" @pytest.mark.asyncio async def test_with_3_9_36_firmware_with_production_401( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.9.36 firmware when /production throws a 401.""" version = "3.9.36" await prep_envoy(mock_aioresponse, "127.0.0.1", version) # force 401 on production mock_aioresponse.get("http://127.0.0.1/production", status=401, repeat=True) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert envoy._supported_features & SupportedFeatures.INVERTERS assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00069-r05" assert not data.system_consumption assert data.system_production is not None assert data.system_production.watts_now == 1271 assert data.system_production.watt_hours_today == 1460 assert data.system_production.watt_hours_last_7_days == 130349 assert data.system_production.watt_hours_lifetime == 6012540 assert data.inverters assert envoy.ct_meter_count == 0 assert envoy.phase_count == 1 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases @pytest.mark.asyncio async def test_with_3_9_36_firmware_with_production_and_production_json_401( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.9.36 firmware when /production and /production.json throws a 401.""" version = "3.9.36" await prep_envoy(mock_aioresponse, "127.0.0.1", version) # force 401 on production override_mock( mock_aioresponse, "get", "http://127.0.0.1/production", status=401, repeat=True ) override_mock( mock_aioresponse, "get", "http://127.0.0.1/production.json", status=401, repeat=True, ) # Also need to override the API v1 endpoint override_mock( mock_aioresponse, "get", "http://127.0.0.1/api/v1/production", status=401, repeat=True, ) with pytest.raises(EnvoyAuthenticationRequired): await get_mock_envoy(test_client_session) @pytest.mark.asyncio async def test_with_3_8_10_firmware_with_meters_401( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, caplog: pytest.LogCaptureFixture, ) -> None: """Verify with 3.8.10 firmware when /ivp/meters throws a 401.""" version = "3.8.10" await prep_envoy(mock_aioresponse, "127.0.0.1", version) override_mock( mock_aioresponse, "get", "http://127.0.0.1/ivp/meters", status=401, repeat=True ) caplog.set_level(logging.DEBUG) await get_mock_envoy(test_client_session) assert "Skipping meters endpoint as user does not have access to" in caplog.text @pytest.mark.asyncio async def test_with_3_17_3_firmware( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.17.3 firmware.""" version = "3.17.3" await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None assert envoy._supported_features is not None assert not (envoy._supported_features & SupportedFeatures.TOTAL_CONSUMPTION) assert not (envoy._supported_features & SupportedFeatures.NET_CONSUMPTION) assert envoy._supported_features & SupportedFeatures.INVERTERS assert updater_features(envoy._updaters) == { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, } assert envoy.part_number == "800-00069-r05" assert not data.system_consumption assert envoy.ct_meter_count == 0 assert envoy.phase_count == 1 assert envoy.phase_mode is None assert envoy.consumption_meter_type is None assert not data.system_consumption_phases assert not data.system_production_phases assert data.system_production is not None assert data.system_production.watts_now == 5463 assert data.system_production.watt_hours_today == 5481 assert data.system_production.watt_hours_last_7_days == 389581 assert data.system_production.watt_hours_lifetime == 93706280 assert data.inverters == { "121512006273": EnvoyInverter( serial_number="121512006273", last_report_date=1618082959, last_report_watts=206, max_report_watts=254, ), "121512009183": EnvoyInverter( serial_number="121512009183", last_report_date=1618082961, last_report_watts=204, max_report_watts=253, ), "121512033008": EnvoyInverter( serial_number="121512033008", last_report_date=1618082947, last_report_watts=101, max_report_watts=243, ), "121512036220": EnvoyInverter( serial_number="121512036220", last_report_date=1618082927, last_report_watts=198, max_report_watts=245, ), "121512036221": EnvoyInverter( serial_number="121512036221", last_report_date=1618082963, last_report_watts=8, max_report_watts=116, ), "121512036250": EnvoyInverter( serial_number="121512036250", last_report_date=1618082940, last_report_watts=20, max_report_watts=190, ), "121512036336": EnvoyInverter( serial_number="121512036336", last_report_date=1618082932, last_report_watts=199, max_report_watts=247, ), "121512037453": EnvoyInverter( serial_number="121512037453", last_report_date=1618082949, last_report_watts=205, max_report_watts=255, ), "121512038416": EnvoyInverter( serial_number="121512038416", last_report_date=1618082953, last_report_watts=151, max_report_watts=251, ), "121512038421": EnvoyInverter( serial_number="121512038421", last_report_date=1618082949, last_report_watts=14, max_report_watts=233, ), "121512038619": EnvoyInverter( serial_number="121512038619", last_report_date=1618082962, last_report_watts=203, max_report_watts=252, ), "121512038691": EnvoyInverter( serial_number="121512038691", last_report_date=1618082942, last_report_watts=26, max_report_watts=247, ), "121512038762": EnvoyInverter( serial_number="121512038762", last_report_date=1618082930, last_report_watts=203, max_report_watts=253, ), "121512038845": EnvoyInverter( serial_number="121512038845", last_report_date=1618082945, last_report_watts=203, max_report_watts=253, ), "121512038901": EnvoyInverter( serial_number="121512038901", last_report_date=1618082944, last_report_watts=102, max_report_watts=245, ), "121512038919": EnvoyInverter( serial_number="121512038919", last_report_date=1618082959, last_report_watts=102, max_report_watts=238, ), "121512038982": EnvoyInverter( serial_number="121512038982", last_report_date=1618082950, last_report_watts=203, max_report_watts=253, ), "121512039005": EnvoyInverter( serial_number="121512039005", last_report_date=1618082933, last_report_watts=55, max_report_watts=254, ), "121512039018": EnvoyInverter( serial_number="121512039018", last_report_date=1618082964, last_report_watts=27, max_report_watts=252, ), "121512039075": EnvoyInverter( serial_number="121512039075", last_report_date=1618082930, last_report_watts=102, max_report_watts=237, ), "121512039090": EnvoyInverter( serial_number="121512039090", last_report_date=1618082946, last_report_watts=32, max_report_watts=194, ), "121512039091": EnvoyInverter( serial_number="121512039091", last_report_date=1618082939, last_report_watts=27, max_report_watts=252, ), "121512039093": EnvoyInverter( serial_number="121512039093", last_report_date=1618082966, last_report_watts=209, max_report_watts=256, ), "121512039124": EnvoyInverter( serial_number="121512039124", last_report_date=1618082938, last_report_watts=205, max_report_watts=254, ), "121512039143": EnvoyInverter( serial_number="121512039143", last_report_date=1618082956, last_report_watts=104, max_report_watts=245, ), "121512039181": EnvoyInverter( serial_number="121512039181", last_report_date=1618082943, last_report_watts=101, max_report_watts=238, ), "121512041456": EnvoyInverter( serial_number="121512041456", last_report_date=1618082937, last_report_watts=13, max_report_watts=79, ), "121512041640": EnvoyInverter( serial_number="121512041640", last_report_date=1618082927, last_report_watts=200, max_report_watts=249, ), "121512041747": EnvoyInverter( serial_number="121512041747", last_report_date=1618082925, last_report_watts=64, max_report_watts=248, ), "121512042132": EnvoyInverter( serial_number="121512042132", last_report_date=1618082924, last_report_watts=200, max_report_watts=250, ), "121512042344": EnvoyInverter( serial_number="121512042344", last_report_date=1618082952, last_report_watts=205, max_report_watts=253, ), "121512043086": EnvoyInverter( serial_number="121512043086", last_report_date=1618082942, last_report_watts=202, max_report_watts=250, ), "121512043093": EnvoyInverter( serial_number="121512043093", last_report_date=1618082928, last_report_watts=208, max_report_watts=255, ), "121512043135": EnvoyInverter( serial_number="121512043135", last_report_date=1618082923, last_report_watts=205, max_report_watts=254, ), "121512043153": EnvoyInverter( serial_number="121512043153", last_report_date=1618082935, last_report_watts=18, max_report_watts=146, ), "121512043173": EnvoyInverter( serial_number="121512043173", last_report_date=1618082966, last_report_watts=200, max_report_watts=247, ), "121512043200": EnvoyInverter( serial_number="121512043200", last_report_date=1618082955, last_report_watts=203, max_report_watts=253, ), "121512043222": EnvoyInverter( serial_number="121512043222", last_report_date=1618082957, last_report_watts=207, max_report_watts=254, ), "121512043574": EnvoyInverter( serial_number="121512043574", last_report_date=1618082936, last_report_watts=203, max_report_watts=253, ), "121512043587": EnvoyInverter( serial_number="121512043587", last_report_date=1618082934, last_report_watts=202, max_report_watts=253, ), "121512044424": EnvoyInverter( serial_number="121512044424", last_report_date=1618082954, last_report_watts=106, max_report_watts=239, ), } @pytest.mark.asyncio async def test_with_3_17_3_firmware_zero_production( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, ) -> None: """Verify with 3.17.3 firmware.""" version = "3.17.3" await prep_envoy(mock_aioresponse, "127.0.0.1", version) # Get envoy and let it probe with good data envoy = await get_mock_envoy(test_client_session, update=True) # Now override the production endpoint to return zeros for the next update override_mock( mock_aioresponse, "get", "http://127.0.0.1/api/v1/production", status=200, payload={ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 0, "wattsNow": 0, }, repeat=True, ) # Now update should fail with poor data quality with pytest.raises(EnvoyPoorDataQuality): await envoy.update() pyenphase-2.3.1/tests/test_retries.py000066400000000000000000000477311505013723300177540ustar00rootroot00000000000000"""Test tenacity retry functioning.""" import asyncio import logging from typing import Any import aiohttp import pytest from aioresponses import aioresponses from tenacity import stop_after_attempt, stop_after_delay, wait_none from pyenphase import Envoy from pyenphase.exceptions import ( EnvoyAuthenticationRequired, EnvoyCommunicationError, EnvoyFirmwareCheckError, EnvoyFirmwareFatalCheckError, EnvoyHTTPStatusError, ) from .common import load_fixture, override_mock, prep_envoy, start_7_firmware_mock # Helper function to create ClientConnectorError def _make_client_connector_error(msg="Test error"): """Create a ClientConnectorError that can be converted to string.""" # Create a simple mock object with the minimal attributes needed class MockConnKey: ssl = True host = "127.0.0.1" port = 443 return aiohttp.ClientConnectorError( connection_key=MockConnKey(), os_error=OSError(msg) ) LOGGER = logging.getLogger(__name__) @pytest.mark.asyncio async def test_full_connected_from_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy connected and replying from start""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) # remove the waits between retries for this test and set known retries envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) await envoy.setup() await envoy.authenticate("username", "password") # Ensure that there was 1 attempt only. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1 assert envoy.firmware == "7.6.175" assert envoy.part_number == "800-00656-r06" data = await envoy.update() assert data @pytest.mark.asyncio async def test_full_disconnected_from_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy disconnect at start, should return EnvoyFirmwareFatalCheckError.""" start_7_firmware_mock(mock_aioresponse) envoy = Envoy("127.0.0.1", client=test_client_session) # remove the waits between retries for this test and set known retries envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) # Mock both HTTPS and HTTP since firmware code falls back to HTTP mock_aioresponse.get( "https://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), repeat=True, ) mock_aioresponse.get( "http://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), repeat=True, ) with pytest.raises( EnvoyFirmwareFatalCheckError, match="Unable to connect to Envoy" ): await envoy.setup() # Ensure that there were 3 attempts. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 3 @pytest.mark.asyncio async def test_2_timeout_from_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy timeout at start, timeout is not in retry loop.""" start_7_firmware_mock(mock_aioresponse) envoy = Envoy("127.0.0.1", client=test_client_session) envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) # test if 2 timeouts return failed mock_aioresponse.get( "https://127.0.0.1/info", exception=asyncio.TimeoutError("Test timeoutexception"), ) mock_aioresponse.get( "http://127.0.0.1/info", exception=asyncio.TimeoutError("Test timeoutexception") ) with pytest.raises( EnvoyFirmwareFatalCheckError, match="Timeout connecting to Envoy" ): await envoy.setup() # Ensure that there were retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1 @pytest.mark.asyncio async def test_httperror_from_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy httperror at start, is not in retry loop.""" start_7_firmware_mock(mock_aioresponse) # Don't call prep_envoy because we want to control the /info response envoy = Envoy("127.0.0.1", client=test_client_session) envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) # The test expects no retries, which means we need to trigger the code path # that doesn't retry. Since _get_info retries all exceptions, we need to # make the first attempt succeed but return bad data that causes setup() to fail mock_aioresponse.get( "https://127.0.0.1/info", status=500, # Return HTTP error status body="Server Error", ) with pytest.raises(EnvoyFirmwareCheckError, match="500"): await envoy.setup() # Ensure that there were retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1 @pytest.mark.asyncio async def test_1_timeout_from_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test envoy timeout at start, timeout is not in retry loop but tries http after https.""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) # test if 2 timeouts return failed mock_aioresponse.get( "https://127.0.0.1/info", exception=asyncio.TimeoutError("Test timeoutexception"), ) mock_aioresponse.get( "http://127.0.0.1/info", status=200, body=await load_fixture(version, "info") ) await envoy.setup() await envoy.authenticate("username", "password") # Ensure that there were retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1 assert envoy.firmware == "7.6.175" assert envoy.part_number == "800-00656-r06" data = await envoy.update() assert data @pytest.mark.asyncio async def test_5_not_connected_at_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test 5 connection failures at start and last one works""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) # Don't call prep_envoy because we want to control the /info response envoy = Envoy("127.0.0.1", client=test_client_session) # remove the waits between retries for this test and set known retries envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) # Each retry attempt tries HTTPS first, then falls back to HTTP # We want 2 full failures (4 requests) then success on the 3rd attempt (request 5-6) # Attempt 1: HTTPS fails, HTTP fails mock_aioresponse.get( "https://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "http://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), ) # Attempt 2: HTTPS fails, HTTP fails mock_aioresponse.get( "https://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "http://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), ) # Attempt 3: HTTPS fails, HTTP succeeds mock_aioresponse.get( "https://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "http://127.0.0.1/info", status=200, body=await load_fixture(version, "info") ) await envoy.setup() await envoy.authenticate("username", "password") # Ensure that there were retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 3 assert envoy.firmware == "7.6.175" assert envoy.part_number == "800-00656-r06" # Now set up the other endpoints for the update call await prep_envoy(mock_aioresponse, "127.0.0.1", version) data = await envoy.update() assert data @pytest.mark.asyncio async def test_2_network_errors_at_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test 2 network error failures at start and 3th works""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) # Don't call prep_envoy because we want to control the /info response envoy = Envoy("127.0.0.1", client=test_client_session) # remove the waits between retries for this test and set known retries envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) # we need 2 side effects for each try as https and then http is attempted mock_aioresponse.get( "https://127.0.0.1/info", exception=aiohttp.ClientError("Test timeoutexception") ) mock_aioresponse.get( "https://127.0.0.1/info", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/info", status=200, body=await load_fixture(version, "info") ) await envoy.setup() await envoy.authenticate("username", "password") # Ensure that there were retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 3 assert envoy.firmware == "7.6.175" assert envoy.part_number == "800-00656-r06" # Now set up the other endpoints for the update call await prep_envoy(mock_aioresponse, "127.0.0.1", version) data = await envoy.update() assert data @pytest.mark.asyncio async def test_3_network_errors_at_start_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test 3 network error failures at start""" start_7_firmware_mock(mock_aioresponse) # Don't call prep_envoy because we want to control the /info response envoy = Envoy("127.0.0.1", client=test_client_session) # remove the waits between retries for this test and set known retries envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) # We need 3 failures, each could try HTTPS then HTTP fallback mock_aioresponse.get( "https://127.0.0.1/info", exception=aiohttp.ClientError("Test timeoutexception"), repeat=True, ) with pytest.raises( EnvoyFirmwareCheckError, match="Unable to query firmware version" ): await envoy.setup() # Ensure that there were retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 3 @pytest.mark.asyncio async def test_noconnection_at_probe_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test 3 network error failures at start""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) # remove the waits between retries for this test and set known retries envoy.probe_request.retry.wait = wait_none() envoy.probe_request.retry.stop = stop_after_attempt(3) | stop_after_delay(50) await envoy.setup() await envoy.authenticate("username", "password") # Ensure that there were retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1 # Probe is re-calling retried probe_request before returning # we can only see stats for the last request done. # force 3 retries for last one mock_aioresponse.get( "https://127.0.0.1/ivp/ss/gen_config", exception=aiohttp.ClientError("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/ivp/ss/gen_config", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/ivp/ss/gen_config", exception=asyncio.TimeoutError("Test timeoutexception"), ) # Set up all other endpoints for probe await prep_envoy(mock_aioresponse, "127.0.0.1", version) await envoy.setup() await envoy.authenticate("username", "password") await envoy.probe() # assert data stats = envoy.probe_request.statistics assert "attempt_number" in stats print(f"--stats--{stats}") assert stats["attempt_number"] == 1 data = await envoy.update() assert data @pytest.mark.asyncio async def test_noconnection_at_update_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test 3 network error failures at start""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) # remove the waits between retries for this test and set known retries envoy.request.retry.wait = wait_none() envoy.request.retry.stop = stop_after_attempt(3) | stop_after_delay(50) await envoy.setup() await envoy.authenticate("username", "password") # Ensure that there were no retries. stats: dict[str, Any] = envoy._firmware._get_info.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1 await envoy.probe() stats = envoy.probe_request.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1 # Test timeout exceptions - need to override existing mock first, then add additional ones override_mock( mock_aioresponse, "get", "https://127.0.0.1/api/v1/production", exception=asyncio.TimeoutError("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=asyncio.TimeoutError("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=asyncio.TimeoutError("Test timeoutexception"), ) # Clear endpoint cache to force retries envoy._endpoint_cache.clear() with pytest.raises(EnvoyCommunicationError, match="Timeout"): await envoy.update() # Don't check statistics here - they get reset between update() calls # Test connection errors envoy._endpoint_cache.clear() override_mock( mock_aioresponse, "get", "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Test timeoutexception"), ) with pytest.raises(EnvoyCommunicationError, match="aiohttp ClientError"): await envoy.update() # Check statistics immediately after the failed update stats = envoy.request.statistics assert "attempt_number" in stats print(f"Connection error test attempts: {stats['attempt_number']}") # Statistics accumulate across all update() calls assert stats["attempt_number"] >= 3 # Test general client errors (equivalent to RemoteProtocolError) envoy._endpoint_cache.clear() override_mock( mock_aioresponse, "get", "https://127.0.0.1/api/v1/production", exception=aiohttp.ClientError("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=aiohttp.ClientError("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=aiohttp.ClientError("Test timeoutexception"), ) with pytest.raises(EnvoyCommunicationError, match="aiohttp ClientError"): await envoy.update() stats = envoy.request.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 3 # Test network errors (using ClientConnectorError as equivalent) envoy._endpoint_cache.clear() override_mock( mock_aioresponse, "get", "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Test timeoutexception"), ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Test timeoutexception"), ) with pytest.raises(EnvoyCommunicationError, match="aiohttp ClientError"): await envoy.update() stats = envoy.request.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 3 # other error EnvoyAuthenticationRequired should end cycle # First mock will be consumed, then the EnvoyAuthenticationRequired will stop retries envoy._endpoint_cache.clear() override_mock( mock_aioresponse, "get", "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Test timeoutexception"), ) # We can't directly mock EnvoyAuthenticationRequired from aioresponses, # so we'll use a 401 status to trigger it mock_aioresponse.get( "https://127.0.0.1/api/v1/production", status=401, payload={"message": "Test authentication required"}, ) mock_aioresponse.get( "https://127.0.0.1/api/v1/production", exception=_make_client_connector_error("Should not reach this"), ) with pytest.raises(EnvoyAuthenticationRequired): await envoy.update() stats = envoy.request.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 2 @pytest.mark.asyncio async def test_bad_request_status_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test request status not between 200-300.""" version = "7.6.175_standard" start_7_firmware_mock(mock_aioresponse) await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = Envoy("127.0.0.1", client=test_client_session) envoy._firmware._get_info.retry.wait = wait_none() envoy._firmware._get_info.retry.stop = stop_after_attempt(3) | stop_after_delay(50) await envoy.setup() await envoy.authenticate("username", "password") data = await envoy.update() assert data # force status 503 on /api/vi/production # test status results in EnvoyHTTPStatusError override_mock( mock_aioresponse, "get", "https://127.0.0.1/api/v1/production", status=503 ) with pytest.raises(EnvoyHTTPStatusError, match="503"): await envoy.update() stats = envoy.request.statistics assert "attempt_number" in stats assert stats["attempt_number"] == 1