pax_global_header00006660000000000000000000000064151316635640014524gustar00rootroot0000000000000052 comment=e426352e19a0311fb9332ccb7c01c2bf651a2136 pyenphase-pyenphase-901c49f/000077500000000000000000000000001513166356400160535ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/.all-contributorsrc000066400000000000000000000004401513166356400217020ustar00rootroot00000000000000{ "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-pyenphase-901c49f/.copier-answers.yml000066400000000000000000000007651513166356400216250ustar00rootroot00000000000000# 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-pyenphase-901c49f/.editorconfig000066400000000000000000000004441513166356400205320ustar00rootroot00000000000000# 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-pyenphase-901c49f/.flake8000066400000000000000000000000561513166356400172270ustar00rootroot00000000000000[flake8] exclude = docs max-line-length = 188 pyenphase-pyenphase-901c49f/.github/000077500000000000000000000000001513166356400174135ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/.github/FUNDING.yml000066400000000000000000000000261513166356400212260ustar00rootroot00000000000000github: ["pyenphase"] pyenphase-pyenphase-901c49f/.github/ISSUE_TEMPLATE/000077500000000000000000000000001513166356400215765ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/.github/ISSUE_TEMPLATE/1-bug_report.md000066400000000000000000000004221513166356400244240ustar00rootroot00000000000000--- 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-pyenphase-901c49f/.github/ISSUE_TEMPLATE/2-feature-request.md000066400000000000000000000006721513166356400254050ustar00rootroot00000000000000--- 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-pyenphase-901c49f/.github/dependabot.yml000066400000000000000000000013631513166356400222460ustar00rootroot00000000000000# 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-pyenphase-901c49f/.github/labels.toml000066400000000000000000000035151513166356400215560ustar00rootroot00000000000000[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-pyenphase-901c49f/.github/workflows/000077500000000000000000000000001513166356400214505ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/.github/workflows/ci.yml000066400000000000000000000046331513166356400225740ustar00rootroot00000000000000name: 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@v6 - uses: actions/setup-python@v6 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@v6 - uses: snok/install-poetry@v1.4.1 - name: Set up Python uses: actions/setup-python@v6 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@v6 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.5.3 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.5.3 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.5.3 if: steps.release.outputs.released == 'true' with: github_token: ${{ secrets.GITHUB_TOKEN }} pyenphase-pyenphase-901c49f/.github/workflows/hacktoberfest.yml000066400000000000000000000005341513166356400250210ustar00rootroot00000000000000name: 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.6.0 with: github_token: ${{ secrets.GH_PAT }} pyenphase-pyenphase-901c49f/.github/workflows/issue-manager.yml000066400000000000000000000013401513166356400247310ustar00rootroot00000000000000name: 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.6.0 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-pyenphase-901c49f/.github/workflows/poetry-upgrade.yml000066400000000000000000000003401513166356400251370ustar00rootroot00000000000000name: 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-pyenphase-901c49f/.github/workflows/pr-title.yml000066400000000000000000000005601513166356400237340ustar00rootroot00000000000000name: 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@v6 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} pyenphase-pyenphase-901c49f/.gitignore000066400000000000000000000153501513166356400200470ustar00rootroot00000000000000# 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-pyenphase-901c49f/.gitpod.yml000066400000000000000000000003061513166356400201410ustar00rootroot00000000000000tasks: - 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-pyenphase-901c49f/.pre-commit-config.yaml000066400000000000000000000033341513166356400223370ustar00rootroot00000000000000# 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.2.1 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.21.2 hooks: - id: pyupgrade args: [--py310-plus] - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.14.11 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.19.1 hooks: - id: mypy additional_dependencies: ["types-orjson"] - repo: https://github.com/PyCQA/bandit rev: 1.9.2 hooks: - id: bandit args: [-x, tests] pyenphase-pyenphase-901c49f/.prettierignore000066400000000000000000000000311513166356400211100ustar00rootroot00000000000000tests/fixtures/**/*.json pyenphase-pyenphase-901c49f/.readthedocs.yml000066400000000000000000000012471513166356400211450ustar00rootroot00000000000000# 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-pyenphase-901c49f/.rtx.toml000066400000000000000000000000701513166356400176400ustar00rootroot00000000000000[tools] python = { version="3.11", virtualenv=".venv" } pyenphase-pyenphase-901c49f/CHANGELOG.md000066400000000000000000002520211513166356400176660ustar00rootroot00000000000000# CHANGELOG ## v2.4.3 (2026-01-14) ### Bug Fixes - KeyError: is_consumer during token request ([#383](https://github.com/pyenphase/pyenphase/pull/383), [`0763a96`](https://github.com/pyenphase/pyenphase/commit/0763a961e7ad2ffefb910f9163f4d73a19253e50)) ### Chores - **ci**: Bump the github-actions group with 3 updates ([#378](https://github.com/pyenphase/pyenphase/pull/378), [`934a8b9`](https://github.com/pyenphase/pyenphase/commit/934a8b93281b43dce4a2543e89156e94fbc673af)) - **deps**: Bump aiohttp from 3.13.2 to 3.13.3 ([#379](https://github.com/pyenphase/pyenphase/pull/379), [`2d4dbbd`](https://github.com/pyenphase/pyenphase/commit/2d4dbbd4b55238f2decaffd9f95a2fb4fe685795)) - **deps**: Bump orjson from 3.11.4 to 3.11.5 ([#371](https://github.com/pyenphase/pyenphase/pull/371), [`a4448d8`](https://github.com/pyenphase/pyenphase/commit/a4448d8d01502bab51cf9774e4f571c2bebd00c1)) - **deps-dev**: Bump filelock from 3.19.1 to 3.20.1 ([#375](https://github.com/pyenphase/pyenphase/pull/375), [`42a34f8`](https://github.com/pyenphase/pyenphase/commit/42a34f8983eb48633b7a3162c73e21cf8aa71f96)) - **deps-dev**: Bump filelock from 3.20.1 to 3.20.3 ([#385](https://github.com/pyenphase/pyenphase/pull/385), [`5db70cc`](https://github.com/pyenphase/pyenphase/commit/5db70ccc799b532fac9a972967de825c978839b1)) - **deps-dev**: Bump pre-commit from 4.5.0 to 4.5.1 ([#376](https://github.com/pyenphase/pyenphase/pull/376), [`aded8f0`](https://github.com/pyenphase/pyenphase/commit/aded8f0c76243ca5ffce56c2097a912243d7ae04)) - **deps-dev**: Bump pytest from 9.0.1 to 9.0.2 ([#372](https://github.com/pyenphase/pyenphase/pull/372), [`e1149fc`](https://github.com/pyenphase/pyenphase/commit/e1149fcb1a798d49e9092795ca9762613cdc9e78)) - **deps-dev**: Bump python-jsonpath from 2.0.1 to 2.0.2 ([#381](https://github.com/pyenphase/pyenphase/pull/381), [`4d6bb9e`](https://github.com/pyenphase/pyenphase/commit/4d6bb9ea31a1e84915f521f8090919a69dc7cfe3)) - **deps-dev**: Bump urllib3 from 2.5.0 to 2.6.0 ([#370](https://github.com/pyenphase/pyenphase/pull/370), [`f659bef`](https://github.com/pyenphase/pyenphase/commit/f659befcc7e74384cba42d42d4ecd05e3bbab6b9)) - **deps-dev**: Bump urllib3 from 2.6.0 to 2.6.3 ([#380](https://github.com/pyenphase/pyenphase/pull/380), [`7bfd9d1`](https://github.com/pyenphase/pyenphase/commit/7bfd9d1173ce2086b02edecf5db36ffea457e590)) - **deps-dev**: Bump virtualenv from 20.34.0 to 20.36.1 ([#384](https://github.com/pyenphase/pyenphase/pull/384), [`a5b179e`](https://github.com/pyenphase/pyenphase/commit/a5b179e5a424f4be63c08166c7a7ed1172fb0375)) - **pre-commit.ci**: Pre-commit autoupdate ([#382](https://github.com/pyenphase/pyenphase/pull/382), [`09650fe`](https://github.com/pyenphase/pyenphase/commit/09650fe7e3c9fb44f8563eec1eb61e4cd015b55a)) - **pre-commit.ci**: Pre-commit autoupdate ([#377](https://github.com/pyenphase/pyenphase/pull/377), [`334b23f`](https://github.com/pyenphase/pyenphase/commit/334b23f1080bfc32cb9b3ae7b98aee69144e5c95)) - **pre-commit.ci**: Pre-commit autoupdate ([#374](https://github.com/pyenphase/pyenphase/pull/374), [`013eb30`](https://github.com/pyenphase/pyenphase/commit/013eb30ee0fa8eaf5a4c3058b645f8e795b888db)) - **pre-commit.ci**: Pre-commit autoupdate ([#373](https://github.com/pyenphase/pyenphase/pull/373), [`61d1346`](https://github.com/pyenphase/pyenphase/commit/61d1346b44d1a92a5412ef20e033f3d982b49bdd)) - **pre-commit.ci**: Pre-commit autoupdate ([#369](https://github.com/pyenphase/pyenphase/pull/369), [`6ef3254`](https://github.com/pyenphase/pyenphase/commit/6ef3254079b18bbd558697341227f796b125d1e5)) ## v2.4.2 (2025-11-28) ### Bug Fixes - Relax request retry timeout to prevent 11pm timeouts ([#363](https://github.com/pyenphase/pyenphase/pull/363), [`b2ce22f`](https://github.com/pyenphase/pyenphase/commit/b2ce22f1e3e34c2c235972591eb0592a90799cca)) ### Chores - Bump pytest-asyncio to 1.3.0 ([#360](https://github.com/pyenphase/pyenphase/pull/360), [`4390363`](https://github.com/pyenphase/pyenphase/commit/4390363d6b7987d24a4b320afaf8c3f6d6ed2ac1)) - **ci**: Bump browniebroke/hacktoberfest-labeler-action ([#357](https://github.com/pyenphase/pyenphase/pull/357), [`1d32114`](https://github.com/pyenphase/pyenphase/commit/1d321148f3815389cfc8ec39e750f024fdca8269)) - **ci**: Bump browniebroke/hacktoberfest-labeler-action from 2.4.0 to 2.6.0 in the github-actions group ([#357](https://github.com/pyenphase/pyenphase/pull/357), [`1d32114`](https://github.com/pyenphase/pyenphase/commit/1d321148f3815389cfc8ec39e750f024fdca8269)) - **deps**: Bump aiohttp from 3.13.0 to 3.13.1 ([#353](https://github.com/pyenphase/pyenphase/pull/353), [`52b6475`](https://github.com/pyenphase/pyenphase/commit/52b6475a2bfa9eb7a4d22a4e45099e1b0bd52738)) - **deps**: Bump aiohttp from 3.13.1 to 3.13.2 ([#358](https://github.com/pyenphase/pyenphase/pull/358), [`5f9a7c4`](https://github.com/pyenphase/pyenphase/commit/5f9a7c4524e48cab307dcb7fe71dc4f9bd469a3d)) - **deps**: Bump orjson from 3.11.3 to 3.11.4 ([#355](https://github.com/pyenphase/pyenphase/pull/355), [`c1bb209`](https://github.com/pyenphase/pyenphase/commit/c1bb20965f51872d80afd257ae558d8af27bca76)) - **deps-dev**: Bump pre-commit from 4.3.0 to 4.4.0 ([#361](https://github.com/pyenphase/pyenphase/pull/361), [`13b36ce`](https://github.com/pyenphase/pyenphase/commit/13b36ced5a8bba4363e7d5e07b800538854a3622)) - **deps-dev**: Bump pre-commit from 4.4.0 to 4.5.0 ([#366](https://github.com/pyenphase/pyenphase/pull/366), [`2980ca3`](https://github.com/pyenphase/pyenphase/commit/2980ca33cfada3bd4cd1e9349c5787c0448f36e2)) - **deps-dev**: Bump pytest from 8.4.2 to 9.0.0 ([#360](https://github.com/pyenphase/pyenphase/pull/360), [`4390363`](https://github.com/pyenphase/pyenphase/commit/4390363d6b7987d24a4b320afaf8c3f6d6ed2ac1)) - **deps-dev**: Bump pytest from 9.0.0 to 9.0.1 ([#364](https://github.com/pyenphase/pyenphase/pull/364), [`d898a4a`](https://github.com/pyenphase/pyenphase/commit/d898a4a69a6a75c4e087a6cca808c3d9ab666982)) - **pre-commit.ci**: Pre-commit autoupdate ([#367](https://github.com/pyenphase/pyenphase/pull/367), [`019cdf9`](https://github.com/pyenphase/pyenphase/commit/019cdf9a9c810d281e97da987d7a5f3d8783b16a)) - **pre-commit.ci**: Pre-commit autoupdate ([#365](https://github.com/pyenphase/pyenphase/pull/365), [`c7e2cd5`](https://github.com/pyenphase/pyenphase/commit/c7e2cd5f4dd4a785ec60c913e1f84fc7d29fea1c)) - **pre-commit.ci**: Pre-commit autoupdate ([#362](https://github.com/pyenphase/pyenphase/pull/362), [`726009c`](https://github.com/pyenphase/pyenphase/commit/726009ca793296619cbd9f0be5307d4628bd15e4)) - **pre-commit.ci**: Pre-commit autoupdate ([#359](https://github.com/pyenphase/pyenphase/pull/359), [`ff6bec0`](https://github.com/pyenphase/pyenphase/commit/ff6bec00930fc23929850be56e3b511f2c1cdc05)) - **pre-commit.ci**: Pre-commit autoupdate ([#354](https://github.com/pyenphase/pyenphase/pull/354), [`1bff216`](https://github.com/pyenphase/pyenphase/commit/1bff2165fe96607e5d0c48c96f0e76ed86e47a3c)) ### Documentation - Fix table layout for inverter data ([#356](https://github.com/pyenphase/pyenphase/pull/356), [`ea66c7b`](https://github.com/pyenphase/pyenphase/commit/ea66c7b92f632f0f709c5d0797914acd66fdc35a)) - Move endpoint list to endpoint topic and add info and home ([#368](https://github.com/pyenphase/pyenphase/pull/368), [`659950d`](https://github.com/pyenphase/pyenphase/commit/659950d7e2c42d0f82f85a4156298f97a48db742)) ### Testing - Remove redundant ct tests ([#349](https://github.com/pyenphase/pyenphase/pull/349), [`3a515dc`](https://github.com/pyenphase/pyenphase/commit/3a515dcc1720cb6f280c60423136827a5b1558ae)) ## v2.4.1 (2025-10-19) ### Bug Fixes - Show used method in debug when sending data ([#352](https://github.com/pyenphase/pyenphase/pull/352), [`02bc58f`](https://github.com/pyenphase/pyenphase/commit/02bc58f349758510716c45b9331aafaddb070f17)) ### Chores - **deps**: Bump aiohttp from 3.12.15 to 3.13.0 ([#351](https://github.com/pyenphase/pyenphase/pull/351), [`d580d6f`](https://github.com/pyenphase/pyenphase/commit/d580d6f271e8cb5d47e0c45e538e3968957cf8d2)) - **pre-commit.ci**: Pre-commit autoupdate ([#350](https://github.com/pyenphase/pyenphase/pull/350), [`fcac787`](https://github.com/pyenphase/pyenphase/commit/fcac78776fbe0b96d7b5f0208341060c38b2761f)) ## v2.4.0 (2025-10-03) ### Chores - Add python-jsonpath and pre-commit to dev group dependencies ([#340](https://github.com/pyenphase/pyenphase/pull/340), [`c762e13`](https://github.com/pyenphase/pyenphase/commit/c762e1320be397642ba29f0b06a84cbd2d0d4640)) - Switch dev tools to aiohttp ([#321](https://github.com/pyenphase/pyenphase/pull/321), [`9c0d67a`](https://github.com/pyenphase/pyenphase/commit/9c0d67a35d6d61277a9931dc2a5699455f174eac)) - **ci**: Bump the github-actions group with 7 updates ([#346](https://github.com/pyenphase/pyenphase/pull/346), [`9e44782`](https://github.com/pyenphase/pyenphase/commit/9e44782b5226360cdd0bc5e41dabf6963490b456)) - **deps**: Bump lxml from 6.0.0 to 6.0.1 ([#329](https://github.com/pyenphase/pyenphase/pull/329), [`98325ba`](https://github.com/pyenphase/pyenphase/commit/98325bae50e87ff26279b4a63af259d4ad65bd78)) - **deps**: Bump lxml from 6.0.1 to 6.0.2 ([#342](https://github.com/pyenphase/pyenphase/pull/342), [`b75088a`](https://github.com/pyenphase/pyenphase/commit/b75088af82810352448e7e526dacde0359d6b9a8)) - **deps**: Bump orjson from 3.11.1 to 3.11.2 ([#328](https://github.com/pyenphase/pyenphase/pull/328), [`20b9806`](https://github.com/pyenphase/pyenphase/commit/20b98063cf5c98ef6c33e5288835221acbd123eb)) - **deps**: Bump orjson from 3.11.2 to 3.11.3 ([#331](https://github.com/pyenphase/pyenphase/pull/331), [`0ebee3f`](https://github.com/pyenphase/pyenphase/commit/0ebee3fba6cea2548bb30ecb10dd047043145068)) - **deps-dev**: Bump pytest from 8.4.1 to 8.4.2 ([#333](https://github.com/pyenphase/pyenphase/pull/333), [`fee3b88`](https://github.com/pyenphase/pyenphase/commit/fee3b8843c817a911cfb76ced9cb66f33dea2aa9)) - **deps-dev**: Bump pytest-asyncio from 1.1.0 to 1.2.0 ([#338](https://github.com/pyenphase/pyenphase/pull/338), [`211f003`](https://github.com/pyenphase/pyenphase/commit/211f003d935a30c9a16b2300c9f4acd94c19b9ef)) - **deps-dev**: Bump pytest-cov from 6.2.1 to 6.3.0 ([#332](https://github.com/pyenphase/pyenphase/pull/332), [`4cb0466`](https://github.com/pyenphase/pyenphase/commit/4cb04661a73ba124df7bb047243e7022f4f55994)) - **deps-dev**: Bump pytest-cov from 6.3.0 to 7.0.0 ([#337](https://github.com/pyenphase/pyenphase/pull/337), [`59414ca`](https://github.com/pyenphase/pyenphase/commit/59414cab696139777c0c617272a83d68895a0d3b)) - **deps-dev**: Bump syrupy from 4.9.1 to 5.0.0 ([#344](https://github.com/pyenphase/pyenphase/pull/344), [`e28c018`](https://github.com/pyenphase/pyenphase/commit/e28c01893ad34935321d84a10c8d539f02cd7e79)) - **pre-commit.ci**: Pre-commit autoupdate ([#345](https://github.com/pyenphase/pyenphase/pull/345), [`bb6d129`](https://github.com/pyenphase/pyenphase/commit/bb6d12959f7fecfaf3814e94ad893bbe838e0ac5)) - **pre-commit.ci**: Pre-commit autoupdate ([#343](https://github.com/pyenphase/pyenphase/pull/343), [`b2af0fe`](https://github.com/pyenphase/pyenphase/commit/b2af0fe42edb231dd328b267c34d1fd54c9b82ea)) - **pre-commit.ci**: Pre-commit autoupdate ([#339](https://github.com/pyenphase/pyenphase/pull/339), [`d3628c0`](https://github.com/pyenphase/pyenphase/commit/d3628c0b2ef2a1cf15e43b496339a62f5fe12d4f)) - **pre-commit.ci**: Pre-commit autoupdate ([#334](https://github.com/pyenphase/pyenphase/pull/334), [`eada400`](https://github.com/pyenphase/pyenphase/commit/eada4004affb8ba61291525c1c950d8d186187f4)) - **pre-commit.ci**: Pre-commit autoupdate ([#330](https://github.com/pyenphase/pyenphase/pull/330), [`3d6e1ad`](https://github.com/pyenphase/pyenphase/commit/3d6e1ad16d6c9b4d6a855f3e9515b4a3e60491f3)) - **pre-commit.ci**: Pre-commit autoupdate ([#327](https://github.com/pyenphase/pyenphase/pull/327), [`e3c8033`](https://github.com/pyenphase/pyenphase/commit/e3c803303eb95cba7f431deeb45cdffc0a1ccec0)) - **pre-commit.ci**: Pre-commit autoupdate ([#324](https://github.com/pyenphase/pyenphase/pull/324), [`71b8dea`](https://github.com/pyenphase/pyenphase/commit/71b8deacd37dac82c3c859dd56ed33ad1e047d70)) ### Documentation - Add descriptions of production and consumption model data and mapping to json data ([#325](https://github.com/pyenphase/pyenphase/pull/325), [`ffbfc12`](https://github.com/pyenphase/pyenphase/commit/ffbfc12e18316f0fabca9dd0272a46531a0a55e1)) - Re-add request response description ([#323](https://github.com/pyenphase/pyenphase/pull/323), [`2e9eeb3`](https://github.com/pyenphase/pyenphase/commit/2e9eeb35a5880de086fcab781a771c87ed91caaa)) - Some doc reorg, repairs, updates, and cleanups ([#322](https://github.com/pyenphase/pyenphase/pull/322), [`9b9da7c`](https://github.com/pyenphase/pyenphase/commit/9b9da7c33691bdad930ac29d46c72c936c36bd08)) ### Features - Add backfeed, load, evse and pv3p CT data ([#341](https://github.com/pyenphase/pyenphase/pull/341), [`350a645`](https://github.com/pyenphase/pyenphase/commit/350a645fd1c2fdf63e46ef4e43571becbb871545)) - Add feedback, load, evse and pv3p CT to reported CT data ([#341](https://github.com/pyenphase/pyenphase/pull/341), [`350a645`](https://github.com/pyenphase/pyenphase/commit/350a645fd1c2fdf63e46ef4e43571becbb871545)) ### Refactoring - Add generic empty data structures for CT data ([#336](https://github.com/pyenphase/pyenphase/pull/336), [`f8b53c1`](https://github.com/pyenphase/pyenphase/commit/f8b53c1c7ae37b8b362bc1c7a8d88ab9558f9625)) - Make unused variable a dummy ([#339](https://github.com/pyenphase/pyenphase/pull/339), [`d3628c0`](https://github.com/pyenphase/pyenphase/commit/d3628c0b2ef2a1cf15e43b496339a62f5fe12d4f)) - Replace individual meter_type with list of found types ([#335](https://github.com/pyenphase/pyenphase/pull/335), [`1e7c499`](https://github.com/pyenphase/pyenphase/commit/1e7c499e91c30c6ecffaee2df02e01b036ca5939)) ## 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-pyenphase-901c49f/CONTRIBUTING.md000066400000000000000000000074121513166356400203100ustar00rootroot00000000000000# 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-pyenphase-901c49f/LICENSE000066400000000000000000000020531513166356400170600ustar00rootroot00000000000000 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-pyenphase-901c49f/README.md000066400000000000000000000065751513166356400173470ustar00rootroot00000000000000# 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-pyenphase-901c49f/commitlint.config.mjs000066400000000000000000000003621513166356400222120ustar00rootroot00000000000000export 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-pyenphase-901c49f/devtools/000077500000000000000000000000001513166356400177125ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/devtools/experiment.py000066400000000000000000000026641513166356400224540ustar00rootroot00000000000000import asyncio import logging import os from pprint import pprint from aiohttp import ClientResponse 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: response: ClientResponse = await envoy.request(end_point) except Exception as e: print(e) continue json_dict = await response.json() print((end_point, "=" * 80)) pprint(json_dict) print((end_point, "=" * 80)) asyncio.run(main()) pyenphase-pyenphase-901c49f/devtools/fixture_collector.py000066400000000000000000000243331513166356400240250ustar00rootroot00000000000000""" Create test fixture file set for pyenphase by scanning known endpoints on Envoy. execute python fixture_collector.py --help for directions 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 datetime import datetime from aiohttp import ClientResponse from pyenphase.envoy import Envoy from pyenphase.exceptions import ( EnvoyAuthenticationRequired, EnvoyFirmwareFatalCheckError, ) # logging.basicConfig(level=logging.WARNING) _LOGGER = logging.getLogger(__name__) DEFAULT_ENDPOINTS = [ "/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", "/home", "/inventory.json?deleted=1", "/inv", "/inventory", "/ivp/pdm/energy", "/ivp/meters/pvReading", "/ivp/meters/gridReading", "/ivp/meters/reports", ] async def main( envoy_address: str | None, username: str | None, password: str | None, token: str | None, verbose: bool = False, label: str = "", clean: bool = False, endpoint_to_get: list[str] | None = None, ) -> None: host_arg = envoy_address env_host = os.environ.get("ENVOY_HOST") host = host_arg or env_host or "envoy.local" envoy = Envoy(host) try: await envoy.setup() except EnvoyFirmwareFatalCheckError as err: print(f"Could not connect to Envoy: {err.status_code} {err.status}") await envoy.close() return try: await envoy.authenticate(username=username, password=password, token=token) except EnvoyAuthenticationRequired: print("Could not authenticate with Envoy") await envoy.close() return target_dir = f"enphase-{envoy.firmware}{label}" with contextlib.suppress(FileExistsError): os.mkdir(target_dir) if verbose: print(f"Created folder: {target_dir}") end_points = endpoint_to_get if endpoint_to_get else DEFAULT_ENDPOINTS assert envoy.auth # nosec for end_point in end_points: # url = envoy.auth.get_endpoint_url(end_point) if verbose: print(f"Reading: {end_point}") try: start_time: datetime = datetime.now() response: ClientResponse = await envoy.request(end_point) except Exception as ex: _LOGGER.debug("Error getting %s", end_point, exc_info=ex) continue try: response_text = await response.text() end_time: datetime = datetime.now() duration_seconds = round((end_time - start_time).total_seconds(), 3) if verbose: print(f"{end_point} reply text read in: {duration_seconds}") except Exception as ex: _LOGGER.debug("Error getting %s", end_point, exc_info=ex) continue file_name = ( end_point[1:] .replace("/", "_") .replace("?", "_") .replace("=", "_") .replace("&", "_") .replace(" ", "_") ) file_path = os.path.join(target_dir, file_name) with open(file_path, "w", encoding="utf-8") as fixture_file: fixture_file.write(response_text) if verbose: print(f"Creating: {fixture_file.name}") with open( os.path.join(target_dir, f"{file_name}_log.json"), "w", encoding="utf-8" ) as metadata_file: # Remove potentially sensitive headers from being persisted to disk sensitive = { "authorization", "cookie", "set-cookie", "x-auth-token", "x-csrf-token", "x-api-key", } safe_headers = { k: v for k, v in response.headers.items() if k.lower() not in sensitive } metadata_file.write( json.dumps( { "headers": dict(safe_headers), "code": response.status, "duration_seconds": duration_seconds, } ) ) 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 await envoy.close() 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 enphase-[label] with results of scan.\ Zips content of created folder into enphase-[label].zip.\ \ Optionally collect specified endpoints only.\ " ) 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.\ Reads /.storage/core.config_entries.\ ", ) parser.add_argument( "envoyname", nargs="?", 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 token from file", ) parser.add_argument( "-e", "--endpoint", help="Comma-separated list of endpoints to read (e.g. /info,/home). Endpoints start with /.", ) 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 endpoints: list[str] | None = ( [ep.strip() for ep in args.endpoint.split(",") if ep.strip()] if args.endpoint else [] ) 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 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 FileNotFoundError: token = None if not username and not token: username = os.environ.get("ENVOY_USERNAME", input("Enter the Username: ")) if not password and not token: password = os.environ.get( "ENVOY_PASSWORD", getpass.getpass("Enter the Password: ") ) config_entries.update({"": [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, endpoint_to_get=endpoints, ) ) pyenphase-pyenphase-901c49f/docs/000077500000000000000000000000001513166356400170035ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/docs/Makefile000066400000000000000000000011721513166356400204440ustar00rootroot00000000000000# 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-pyenphase-901c49f/docs/_static/000077500000000000000000000000001513166356400204315ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/docs/_static/.gitkeep000066400000000000000000000000001513166356400220500ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/docs/advanced.md000066400000000000000000000305411513166356400210750ustar00rootroot00000000000000# Customizations Some options to customize the library behavior are available. This allows to add or remove [updaters](./updaters.md) to provide alternate sources for {py:class}`pyenphase.EnvoyData` or add new data to the {py:class}`raw data`. ## 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-pyenphase-901c49f/docs/changelog.md000066400000000000000000000000421513166356400212500ustar00rootroot00000000000000```{include} ../CHANGELOG.md ``` pyenphase-pyenphase-901c49f/docs/conf.py000066400000000000000000000023051513166356400203020ustar00rootroot00000000000000# 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-2025, 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-pyenphase-901c49f/docs/contributing.md000066400000000000000000000000451513166356400220330ustar00rootroot00000000000000```{include} ../CONTRIBUTING.md ``` pyenphase-pyenphase-901c49f/docs/ct-combiner-model.png000066400000000000000000001207051513166356400230160ustar00rootroot00000000000000‰PNG  IHDRN´6w×sRGB®ÎégAMA± üa pHYsÃÃÇo¨d¡ZIDATx^ìÝ{|e¾?ðOÖ"IAµ à­BZ<ТeM¹$¨‹¸ %ØU¡…V~åbPÎ"¶´ÂZQiÊE.kk[vAId Û( HQ¼€6-*‚îüþhf6y’6mi¡—ÏûõÊ ú<ß™L&3É|ó\F%I’""""""ªÑïÄ"""""" ÆÄ‰ˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8µB………0›ÍP©TÊÃl6£°°P ­—Ë•J»Ý.VµjLœˆ."—Ëta£Óé`·ÛáóùÄÐÉ1.—K¬ª»Ýta%?4 ¬V+Ün·¸H³e4C^‡¼_ÓÓÓ•ýêóù Ñh ÑhÄUñz½P©TˆUÊÄ÷LÞO^¯7hY¢‹Éáp`øðá())ÅbÍfCZZJJJ0|øp¤§§‹‹QLœˆ.’ÂÂB$$$ ´´iii°ÙlÐétHMMÅÃ?,†Ãår5ic0`³Ù”GRR²²²˜˜Ø$Ïëóùàr¹š$á/å‡Z­ÆâÅ‹a4áóù³ÙŒªªªZ}ß°a`Ê”)€ðžÉë¶X,ÈÊÊ‚^¯o’×BÔV«jµ‡Fff&RRR°hÑ">|z½‹/n’󚈨U“ˆè¢Ðjµ’Z­–***‚ÊM&“@*++ *  † 2I’$§Ó)œN§XU'6›M Ùl6±JY·^¯«Î›¼îpÏÛPƒ¡Æ}!¿Î´´4I’$©  @ Y,1T¡Õj%Ê{TÓ{¶råÊ u]l5}^H’$åååIƒA*((«ê¤)Î]"¢–€-ND×ë…ÇãÅbATTTP]¿~ý§N *¿âãã¡ÕjQZZ*Vµ8cÇŽìÝ»0lØ0¨Õj8!²šÛí†ÇãÉdBTT”òž™Íæ÷lèС@Àº‰.6µZÝ»w‡mU2›Í(**°aÂÊÅn¨ í:,ve5›Í!­±]Œív;4 ŒFcP QsÃĉè"ˆŽŽ†$IX´h‘X…íÛ·C­VãÖ[oÆí@qq±rAnLSaa!bcc•«ÕZ¯‹žpÔjuÐß>Ÿv»:NyžØØXdggÅ!`ü”ÏçƒÕj…Ê? \¥R!!!ššª¬ÇçóA¥RÕx%_5ä5uêÔI,‚Åb©±»Þºuë£FÞ³ÌÌL!8xð  ÿþbÑE1gÎTUUá®»î‚ÕjEaaa­çM¸n¨IIIHMMUº¸Fâr¹”uäååÁétâùçŸGII ’’’ÄpÀÂ… ‘‘‘³ÙŒI“&‰ÕDDÍ‹ØEDžÍf“l6›d0$µZÔ…&//Oéf¦Õj•XÇ#IÝfL&“¤V«¥´´4Éf³)]þjëŠ&5 «žÜÎb±HN§S*((Pž+///hyy݃AÒjµRZZšät:%›Í&Y,¥N~M’$)åòë“UTT(¯³&õéª'I’TVVVã:kê–'*++“Ôjµ¤V«C¶™èbÊËËSº›Ê“ÉržJ’$©ÕjI«Õ†ïr7ÔÀχšºêÕtîÊç^àyøÙ">'QsÅĉ¨¼°±X,!rL¸1 µ]€Èÿµ Lnä&0ñ ¼àñx<Ê6ŠÂmŸ¼îpñ5]|ÕTž——'!Lr(0© |-z½^6Ç1I U¸í”——§$Mâ˜4¢æ¢¬¬,è<?/äs®¦1zjµ:èÇ“šÎѲ²²°?ZÈñá§pñDDÍ»ê5þ1PPP‡ÃÑ Ú–-[2öF§Ó¡ªª*¨¬&ÅÅÅHMMU%%%0™L(++C||<àïîæt:1kÖ,qq ±H®{[MäqU999Aå›7o†Z­†Ùl*'+++èµTUUÁb±àðáÃ!ûÈd2¶mÛ¦”ÉÝôxà¥LäõzaµZ¡ÕjqøðaÄÄĈ!DÍBLL RRR°gÏx< ”––bÞ¼y€O>ù0hÐ aÉjqqquç(Ÿééé0Jw^¹[.QKÇĉ¨6lÞxã TUUaõêÕbu“²ÙlJ'I*++áp8‚‚¨¨(Üzë­Ø¶mÌfsÐ}“Š‹‹ƒÖw>fÏž Ç£Œãòù|ÈÏϯSÒN§3èµ”——#333$i€É“'þÄL–ŸŸµZ2x>І PUU6a%º˜¼^oSýGGGãÍ7ßTâSzz:°wï^Lš4 ¹¹¹p:X¹r¥JDÔ"1q"jfä‹õæ8C›×ëE¯^½0wî\hµZ<óÌ3p:p:ÐëõbxƒÉ3à­]»h JNNŠk ÑÑÑÐëõÈÏχÏçSfÓ³X,bhž={Â`0(­qDÍŶm۠܇L$&ú·ß~;`ÿþýAå²Ý»wC«ÕŠÅA|>/^ ƒÁ€¢¢"˜ÍfÄÇÇ#>>^Y?QKÇĉè"g– 73^cÿ ܘV¯^ªª*lݺ‹-R.ŒâããC.ÆÎGTT”rcYŸÏ‡^xZ­¶ÉºÃÉ7¸Ý¶m›2;àøñã…¨`ò”ÎDÍ<=~NNNØÏùŽŽüÝcÕj5rrrBfÏËÎÎFUU¦NT'OžTþÿÕW_af–ôù|xòÉ'ƒÊˆˆZ*&ND<hÅŠb•ò+ñèѣŪ‹Îãñ€2UºÌáp4jW=x衇²VZZö­±Èš›7o†Ãá¨S’VXXXï{Ü]ÑÑÑÈË˃Çã^¯‡Ùl†Ýn‡ÝnGll,¦M›½^ (˼ñÆðx<0ÈÎÎFaa!ÒÓÓ•X¹K+­¬¬,Øívx½^ÄÄÄ@«ÕbñâŰÛíp¹\ÈÎÎÆ€«,KDÔ¢‰³EÑ…!OÝ8Ÿ<+\¸òäYîäéÆÅéÈÃÍN%¯¯6òÌwâ YáÈ3Ûéõz©  @*((,‹¤×ë%½^_ã¬z5‘g¤“_¿(p*åp3 Šj›Ž<’ÀYW®\)V‡cÃm7Qsàt:•ÛÈÇ«^¯—l6[ÈçK`¼+6…‹-((PÎOù|óx£Â•5w5_ÑQ“ËËË š"¸¶ •²²2%1¼à¨í¤±'É_ù‚I­VK‹Eª¨¨ C½§À‹¯pqò=d§B®Íù$NrRˆ:&iòià=·ˆˆˆ¨õRIÕ¿œ5;ÙÙÙ˜6mòòòê<£QS`âDDÍ–N§CeeeØû/]Hœ‚ˆš¯× »Ý³Ù ǃ9sæ0i"""¢‹Ž-NDÔ¬¸\.$$$, ,XÀĉˆˆˆ.:&NDDDDDD°«QLœˆˆˆˆˆˆ"`âDDDDDD'"j×<¶×<¶@,&"""j˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰Õ '!¢¶Œ‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆ(¬÷Á;û‰ÅêšÇàšÇˆÅDDDDÍ'" ké–X²e§XLDDDÔ&1q"¢ï<‚÷~ý_kòV'"""¢–€‰…XÐÒÄV'""""&ND$[›dlu""""bâDD‚ÀÖ&[ˆZ'NCDTwLœˆH!¶6ÉØêDÔ:q"¢ºcâDDо=»aï’Ø»dLH‚ IÊß}{^+†Q ÆI`ˆˆê‡‰):µo‡]:£G—Θ—W‚yy%Êß=ºtɨã$0DDõÃĉˆÂ’[œˆ¨õ»å²Õ‰ˆ(2&NDVrÒ$' *»¬—¾ÆG•k ª\[BÊåQkãr¹Ä¢ƒ“ÀÕ'" kÈüW0dþ+b1Q£p¹\P©TA³Ù ·Û-†6˜Ýn‡Ñh‹ÄårÁáp(»ÝnŒ1>Ÿ/(®±dgg#666hßȉšÑh Ùw*•ªÎ¯Ulm’±Õ‰ˆ¨vLœˆ(¬ý_Ãþ/‰ÅuüÈ:?“ÝnºPÔh4°Z­ðù|0HOOÃá€F£QþNOOº ¼ð/Hu:ìv»R/r¹\AËÄÆÆ*×â¶> °°0èÂX~m$I$ Ðh43fŒÒ,ìÚµ ¹¹¹Êß111¨¬¬DTTTP\cHOOÇܹsñì³Ï*û&11 p¹\(**Rö8NH’„¢¢"qUaq"¢†aâDDa}÷ê<|÷ê<±ø¢3 ÊEcii)öìÙƒyóæaÒ¤IÈÏÏñyóf˜ÍfÀŸÌ””” ¢¢€yó‚_£ÍfSÖŸ››‹ŒŒŒ –Yaa!0zôhTTT@’$<ûì³°Z­°ÛíHIIQÖc0‚Öëõz1|øp,[¶L¹0öz½!ÛÒ–DEEᡇ‚ÇãZ‹äD|>¬Vk‰¯ÛíV’Q£Ñˆ}ûö)u R©‚º×‰-Rn·;(–“Y»ÝŽÔÔT+ë[Ìd‘¶M¥Rµ"ét:x½^¥^æõz±xñblݺÆ üû&99‹k×®©7NCDÔ0Lœˆ(¬êîòó󑜜 ؾ};ž}öYDEE!** ýúõ {ñ*‹G\\¾üòK± 3g΄ÍfCrr²Òê0lØ0dff"''G  I’ø/Œû÷ïÊÊJ1´Íðù|X»v-´Z­RV\\Œž={*-+/¾ø"*++•T«Õâá‡VâÇŒƒqãÆA’$dff*IX]3C† Jf7lØ€””Øl6%i—ß·@‘¶ V­Z…üü|H’N‡Õ«WÕÀ¶mÛ ÕjÃ>Gff&233ÅâóÂI`ˆˆêމ…5Úö:FÛ^‹@™¢.¦äõz±~ýzDGG#***äyù"4&&PTT¤üŠïóù°}ûv 2D‰¹\.ìÞ½={ö *w»Ýðx<;vlP9˜Íf”——‹Åµr¹\ÈÊÊÂôéÓŪVOn¡éÒ¥ *++±qãF¥Î`0(I/€}ôÔSO¡¸¸n·.— )))@@R]Wò{*/…¢¢¢ ç¯MmÛ&[¶l¢££C† ÁÞ½{•:ÙÉ“'¡ÓéÄâ&ÃI`ˆˆêމ…5kä`Ì9X,¾èäîR*• z½±±±X°`àêV—››‹Ù³g,]Íh4¢K—.ðù|˜äÉ ÄrùÑXÇ8UVV"333¨«üɈ×ëEqq1†*¬¡ºå©¢¢III!3‘ŽE*//WZ uìØð·x¯åË—#33³Ö„ª©Õê ¿å1Dòûq>ÎwµmẜʬV+¬V«X|^šã$0DDÍ'" ëÑ—ÖáÑ—Ö‰ÅÍžÅbÁÛo¿mÛ¶Ád2µ ©T*%Ù‰ŠŠÂäÉ“QZZÿ¤.&&Z­6l«àp8êÕÕª¨¨(¤E‹Â³X,X±b…ò÷êÕ«a0ƒøøxhµZdggÝ8iµZ|òÉ'€¿{d`½üž΢h6›•¿{öìY묇µm[}DGG#-- “&MBaa!àO²³³‘••U箃uÕ\'!"jŽ˜8QXïì;Ô"ïé2~üxdeeaÕªU5jTPÁ`ÀÒ¥K• à 6MFPË—/GFF²³³•õÂjµ†íX³Ù¬\ Sížzê)h4¥+å¾}ûðæ›o*õ7nÄ’%K”ñÄ1NË—/Çܹs¡R©°páB$%OаqãFlß¾]Y¿F£Qºr:QQQP©Ta§¨´mõ±hÑ"Ìž=óçÏWÆíرN§³Þ‰X$µM#ŽW¬íADÔ¨$yº""¢':ø§.®‹k«gTŸ_¯ë»ŒÝnÇöíÛ#Þ¯&66'd–:ŸÏ‡'žxB™¶\ž&\¾52dHØîyá¸\.,\¸ÅÅŽ^§Ÿ~:¤©¶õj4<ÿüóÞ’@TáÎÁó™ä!\·ÜpÏADÔ1q"¢°äq}{v«ÂjÈÅQC–!¢ÆcßüàÓX 9g² QsÄ®zDgÛ"jýÂMCDDá1q"¢°Ìñ10Ç7îx ø[².7®ÿÜßFþ»¦Ù½ˆ¨i´ÔI`ˆˆ.&NDÖòÉ#°|ò±ø¼õèÒ3WoÅÌÕ[•²™«·b^^IP5½–: ÑÅÀĉˆÂ“›ÆÒ©}»°-Y÷÷ëSçñTDÔ8¿<‡_®û,DDm'" KìNטLžºSûv˜:4.¨ŒˆšÞÑŠ8ZqB,&"¢0˜8QX{—ÌÀÞ%3ÄâF!¶:±µ‰èâà$0DDuÇĉˆÂºº};\]Ç{85„ÜêÄÖ&¢‹‡“ÀÕïãDDaÕ÷Þ+õ‡üQQóW×óüäOgÐë‰%b1:µo‡M©` 3µHlq"¢°îï×÷÷ë#7ª’ØÚDtq"¢ºcâDDa½6c<^›1^,nTÚ·ãEÑE$v§kLœ†ˆZ&NDDDm'!"ª;&NDDDm'!"ª;&NDDDmT¯'–„Ä¡±È­Nlm"¢Ö€‰QÅI`ˆˆêމQÅI`ˆˆêމQLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8E ’$I ‰ˆýðÓxŽWÂsÌï±JxŽûp´â$~üå,NŸ9‹Óg~AÕéŸêW¢C»+СÝå¸êŠËÑ£K'h¯Bt7 ´Ý¢ ½Vƒ«Û·Ÿ‚ˆ. c'Náø‰Ó8~ò´ÿßê¿¿;q§~Ä/ç~Ù³çpæ×_ñ˹_ñ˹ßðóÙsøåܯP©T¸úÊ+ÐîòKqÅe—¢Ý¥þ/¿]:^…k:wÀµ:àÚÎpmçŽÊÿ»uî(nQ‹ÂĉˆBüxæ,vú»}}‰½Þ¯ÅóÒ?úzÜÓ§'ö¹û܈«Ú].†Q#øâû*|öM>û¦‡¾ùŸ}ó=>ûƇÓg~C›\‡vW w÷(ôîÞ½¯ë‚ÞÝ»¢Ïõ]pcWµJDÔ,1q""À¹_ÃæÝŸbóîO°Í}8¨N¥Rá¶®©n1ê¦QZ®ºâr¥e©Ã•WNÿü‹Òõã/gá=V ïñJ”«€çX%>ýê;ˆ;CczaTÜíw.»ô’ :"ª›ŸÏžÃîÃG«å_aOùQüôË91 Ðõꫪ[„:uô· U·uS_.Û£Ýå—áŠË.A»Ë.E»Ë.«nQºì´»ü²ê–¨s¿á—s¿â̹s8ão‘:sö*NýXÝ‚¥´fRZµ¾;yZÜ @û+.C¬®ât7 ®WÄõê+/¿L #"ºè˜8µqïî÷`ãû±y÷§øåܯJy\¯J‹ÐÀ[nÄå”Мýõ7ì:XÝšµëÐØ}ø¨RwÅe—bTÜmsO_Ü×W´ûíßÿF‰û0>8ô%><|û´ _§îXݲӽ+z_ß½¯ë‚>Ý»BÝáJ1´ÉUþ‡¾ù¾ºåëë |öm>ûæ{|[uJ E¿èë1 WÜÓ§'’bzá’ßqH6]|LœˆÚ¨wöÂ+ß ×#JÙÀ>7bԀꖟÎW]˜ «?þ\ÝÒõá'Øuè ¥<þÖ›ðøÇáþ~}‚â‰Ú²ªÓ?cÛG‡QRv%îÏpæì~ì€þÚ‚Znº^}UP}sôý?µ”íõ|TßîòK‘ÓCctHŠé}Q’>""0q"j{6~°¯lûû¼ß4Úã¶×Â>ñ~èºE‰áTù1RÖ¼ƒOGåéŸý¢»ãñ¡0æž¾b8Q›pâÇ3X¿ë#—}†Ÿ~T×/úzüþNôêXÝ ­¢‹ÛÏgÏaOùWøððQüã£ò–´Á·Ý Ã]½1nàè|'š!¢ ‡‰QñéÑïðü[;P\öà†¨N˜òß±x|è\vIóêsî·cÕßwã•m»ñ•ï$ÀxwöÛz\#†µJ;?ýëv}„uïT>ä¿õ¥ztéT×­8÷als—cûÇåAuã݉ñïÄàÛn*'"j LœˆZ¹Kžß¸)x ¾êJÌyð><6D/†6K¯n/EÆ[ï¢êÇêéÎÿü@<æÂ—ߟPʇ©Cã8Í95:&ND­TÑ¿>ÃŒU[pò§3¸ë¦ëð¿æ¡ØçF1¬EÙuè ü¯cÊŽ|‹NíÛaÅã#a¸«·FÔbú¦¯lûkÞݧ”ýþVŒt'íz(ú×gX¿ë#ü­ô€R6ñÞ~xÝ»ÅQÃúæ{¼R²kÞûOKÞ쑃1{Ô½AqRsHœ¼^/ôz=Ìf3fÍš…èèh¸ÝnL™2QQQ(**Rbív;¶oßTFÔÖµŽŸ ‰ÇNœÂØ%o(IÓŠ)#[mÒ©£ïÊ)#¹;öbÜÒ7qìDè4‰š‹ ÿü漬$MîÂût,}t8“¦FÖ§{W,4{ìÓ1!á.À’-;1`ÎËØðÏÅð‹ÎívÃh4B¥RA£Ñ ===¨Þáp@§Ó)‡Ã¡Ôù|>˜Íf¨T*èt:¼óÎ;AËZºt)âââ™™‰èèh@LL òóóQ\\ ¯×+.BD˜8µ{=_aø¢\ìüôsÜ|…Ï<†ñƒîÃZñƒîDá3áækÔxï/†/Ê ¹y&ÑÅöÙ·xhY¬9›ñùñJÄõê³Á_þø?œÀ ‰ÝØU¿üñ°qö#ˆëÕŸ¯„5g3Z–‡Ï¾ýϬ…Û”)S0zôhH’„ÇcïÞ½°Û퀿•h„ ظq#ÊË˱qãFL˜0AYvÞ¼y€ŠŠ |øá‡¨ªªRêD‡“&M‹ I’”dŠˆÂcâDÔÂ}ÿðälÆÑŠøý:>óGèµ7ˆa­–^{ Ÿù#~§G+NÀ’³ßÿð£FtQ¼þÞ¿øÿrð÷Ê¡éÐö‰ÃðvÚ$$ð¾CTÂm7ãí´I°OM‡öøûGåHü9A“r\,n·¥¥¥HNNDEEaæÌ™ÈÈÈtêÔ N§111€Ž«§[w¹\€¬¬,LŸ>QQQˆŠŠÂC=¤¬[TUU…nh;ßD‰Q gÉÞ„#ßUá¾¾ÑÈ{r¢:¶¬©ÆCTÇöÈ{rîë#ßUÁ’½I !º Nýü žxe3žÎ}ç~ý ãÞ‰=ö阔Ø_ ¥ hRbì±O‡iP Îýúf½V€'^ÙŒS?ÿ"†^0§N…v1¾ú꫃ZŽÖ®]‹ØØXFlذ!(¶>Ôj5¾úŠ­òD Åĉ¨{êÕ·±óÓÏ}­™«ÛœÌÇG!úZ v~ú9žzõm±šè‚øûGåHœŸƒõ»>Æå—^‚{+‰ŽmøÆµÍIÇ+¯ÀKSFàÅÇÀå—^‚õ»>FâüêVÁ‹AnA ôÃ?@­®îƹaÃx½^ìÙ³EEEHIIÃëÌl6#77W,†×ë…J¥â'¢˜8µPÿ÷¶ oìü.»äd&F—«¯CÚœ.W_…Ì©£qÙ%—àÿÂÿ½]Ý•…èBÉݱ-Ë×ߟ@Âm7cÇsSñÈà»Å0j|7v<7 ·ÝŒ/¿?‡–å!wÇ^1¬ÉÅÄÄ@¯×#;;ðOö°fÍÌ™3pòäÉ xyì“Ìb±`ÅŠ€Ùµk×Õš5kvïÞôôt%Ir»Ý0™L0™LãD'¢hãû±xãÀËSG¢ßÍÝÅ6«_tw¼<µz¶½Åw`£ÿ~ODM-ã­w‘²¦ðçâ±qö#èuo¾Úœõº® 6Î~~ zŠð”5…Èxë]1¬Ñ$$$@¥R)9 Zµj6mÚ•J…^½zA«Õ*-K“'OüÓ™ët:ôíÛ7h ,À‰' R©0`À <8¨>Ptt4JKKáñx ×ë¡R©0fÌŒ7/¿ü²NDÞlj¨…)õ|…á _…`Þ¸ßcưbx©p¬ÿT žy¬MM˜AÞŸVoEžË ÈxĈ?þ>V ¡fî¯ÿ(Åœ7ª§òžƒ¿L!†QÇ'¢äô™³°do†ä¿i&“¦šÍ6ïë €%{3NŸ9+†5 Ó k‘çrãŠË.EîôqLšZ¨?þ^ÜéãpÅe—"Ïå†é…š»¼QÛÄĉ¨Y´a;¾ø¾ ší±ôÑáb5 –>:šíñÅ÷UX´a»XMtÞ[±;ö{pcW5¶ÌyÃúß"†P 2¬ÿ-Ø2çQÜØUû=xlÅz1„ˆÚ0&ND-Ä®C_`õ?öòŸ®ù>LÞW«ÿ±»}!V5دlAÁÞƒ¸¦S¼6cúEs¬akÐ/º;^›1×tꀂ½aÍÙ,†QÅĉ¨…'ƒøÓƒsÓub5Õ æ¦ëð§ûè|Íz­ëw}„í.Çk3Æã¶׊!Ô‚ÝÖãZäN‡í.dž~ŒY¯ˆ!DÔ1q"j^Ý^ŠÝ‡"úZ ÒL«)‚´}­»Å«ÛKÅj¢z±o~kÞ݇ߩTxmÆxô×^/†P+ ×Ý€×fŒÇïT*¬ywì›ßCˆ¨aâDÔd—|Hu/T*•XM¨T*¤ŒºØ—D Q\ö–nÙ È1 ·Ý,†P+’pÛÍÈ1°tËN—}&†QÂĉ¨™{cç¿à=^‰;nì†ï ¾Õ݃÷ôÅ=»Á{¼oìü—XMÑñ§1+·ºËVʨ{a¼»·B­ñîÞÊ/³r püÄi1„ˆÚ&NDÍœÜB’«‰¨ `âDÔŒmþðÀ¤Äþb5Фûª÷¥¼o‰"©:ý3^ØZ=®Éþ‡a¸¶S1„Ú€k;u€ýÃ/l݉ªÓ?‹!DÔÊ1q"j¦¾©üAˆüà€æ=¶©°°‡C,n–äqbÅeŸá›ÊÄj¢K·îÄ©Ÿñî>¸¿_±šÚûûõñîÞ8õó/Ê$!DÔv0q¢Vgÿ—Çp´â„XÜâlú°º+ÙˆØÛ îp¥XÝ`n·f³*• V«>ŸO ­³5kÖ 77W,®7•J»Ý.7*u‡+1"ö6 `Sx­å\:y ¯lÛ øÇ¹ÉÇÁ+ß¿8&V_tC«ÕbÛ¶mJùÎ;‘””¤ü-+**R’I’”/8—Ë…áÇ#)) eeeðx<0™‚ÃŒŒ ÀÖ­[QPP€Ý»wcéÒ¥A1AÞ·ò¾¦ºiiçÒùX·ë#€)ž· P¦ø à8iÎZÃy…¸¸8±˜èÂ’ˆZ™Ÿ ðz½Añééé˜0a¢¢¢”1TZ­©©©ÇO¹Ýn$&&B«Õ¢¨¨HéºÞ>ŸOé 8gÎØl6TUUaøðá(,,Ã,Ü늊„ `µZƒbë»/Íf3RSS¡Óé`³Ù0uêTäää`áÂ…Aq­Š˜I5'—êú‡}Ôæã/¾mQ¿®‰v~ú¹ÔuÒsÒ‹^«Î›Óé¬ñ ½^¯ü*¶råJI«ÕJ’¿eInR«ÕRAAAHë“ø«\¸'ƒÁÒš$ ÷ •Íf ùµ®±<°èU©ë¤ç¤Ÿ~.Vµ:â9ÔÎ¥ó—²¢I[}©u[®ãRVˆUB<_ÛÂy+·r„{˜L¦–¼¼< @H J¸V¹Õ*ðûK®Õ(ð»MniÒjµJKS`œ¸¬ 5´8…Ûf¹Ç‡Ø;CT×§Ú^¯Éd’íÏúìK¹L\wEE…ÒºiûZ"¶8ÕÀårÁjµB§Ó)Saêt:¤§§‡dÜ‘x½^h4šˆ¿dÈZó4ŽBßžÝZä¯k2ϱê)Áu×5ü—¬šìÚµ ©©©5N;Þ¹sõ á¡C‡Âãñ ;;Fi2›Íxûí·QRR‚Q£F KÿGÏž=Å"tîÜ9hìüç†J¥‚Ëå *¿Pä},ïs ÖÒÏ¥†úÊwŸW‰ÎWµk²V_j:_ÕŸW‰¯|'Åê‹¢µœ·òYùQPPǃ„„„ ïŒ¸¸88ÎñññAP&.š8q¢X…¢¢¢'ðù|˜2e `ãÆçÕÒ$ÓëõÊdL²èèh e¥óUÛë;w.àwÞQÊê³/wíÚ˜>}zPyTTž}öÙ ²Ö„‰Sv» ÈÊÊRš…m6ôz=/^¬4cÒ…£Ž uüH±¸U*ÿÖŸ8u;ÿfÑØ±c¡V«•ûa¸\.Âl6£´´Tùp•»ëÍ;7¨{ÝàÁƒQRR‚ÒÒÒÖ@7ÜpàŸyOþ‚›>}:JKKaµZár¹àr¹`2™ ÕjÃ~(_ò>–÷y[ЖΥ†ÚSþ V×C¬¢:*,,l3ß“òq"7Mç-0lØ0¥»ø“O>©”GGG£{÷îX½z5ŒF#bcc•¼Eûöí 0@¬ª‘Ü¥®´´;vìêZ~>jJ¾† øD?_µ½^ùuìÝ»W)kȾ¼õÖ[Å*\}õÕbQ«ÁÄIàp8šš ½^LJÔ”¤¤¤ÀápÀét¬Vk[ž¢££QYY‰E‹‰UD!ÊU´ÝºˆUç-::¥¥¥ˆ…ÕjEBB†p:6l˜;eÊTUUáPÊä–(“ÉTã‡>ü¿N¥¥¥a„ HH¨¾ÿM||< °gÏ$$$ !!Z­7n¿`ä},ïs"Ø}ø( ®WóKœGÐŌܢ¦Vä¦P—kÖ¬Ann®XÜ*Élj|ÜPÓ‘oKØ"SXX­V‹œœŒ=Ë–-ƒÓéT®×ÎWTTÆÈÎΫ[•¦Þ—­'Õj…Z­F~~~ØûÆÈƒê«ªª°añšè¼UžþÐMÝQ¬jÑÑÑÊÄr‡ÃÒꓜœ I’‚’©¨¨(%>PQQQÈ}.-Z¤¬_6lØ0ìÙ³'èy½“$)äž)))!ën,ò>–÷9|SU}Sä^MÐê{>¬V+&L˜€¤¤$åbfáÂ…ÈÏÏG¯^½êücÞ…àp8šì¼mnäãD>n¨é©ÕjåÿóçχZ­Æ‡~ˆäädÄÇÇ+Q¿~ý~ø¡X»Ý•Jr‹ø¿‡, ²²²B&ThlÛ·ojèW_òë ws{ùu^ë6d_†[wkÆÄ)@aa!ªªª`6›Ã&M²¸¸8Øl¶qò¯p………ÊØ(±Nd·Û•XN6†Ú–Ó?ÿ¸êŠËÄ*jdò>–÷9Tžú  éØ^¬ºh²²²——‡E‹)3f³Y¹lŠûQdòq"7ÔtäŸÀ±AZ­6¤D¸Ç`0þÑ@>Ÿ999P«Õ5vÅËÌÌT’'ñZM¾f»×ÕÖBU\\ò#¤ÛíFqq±²çK^ÏŠ+Ä*<ÿüó€‡zH)«Ï¾8p fÝ>Ÿ/¨+ekÃÄ)Àþýû ¨kR8ÑÑÑHII Ôÿ/Ç;e¦¨MNãH>sСÝb52yËûœ-šÍ'qzá…Â&‡¿%833ƒVʼ^/Ìf³Ò¥/666dŠcù½ôôth4¨T*Fø|>dggý¨îWxq¹À£Ñ¨Lµøwà‹:.äB³°°0¨+¢Õj ê†(¯Çn·C£Ñ„\À^ òq–ëÆ8¹ÝnGll,¦M›µZY³f)qò]³Ù —ˇÃtì’oŸŸŸ¯Gv»F£™™™â"Aää)555(é‘“#F ==]ÙÞU«VA¯×¬á?´Z-¬V+¬V«r&&&žyæ1<¬íÛ·‡ì'»Ý®l[LL ÒÒÒŸŸ³Ù ‡Ã‡Ã³ÙŒüü|X,– Ö¤úìËøøx eÝòs‡OÕš¨¤š¦iƒ¬V+²²²àt:Ã6KF¢R© V«ÃT©T°ÙlJ7$—Ë…„„˜L¦ “/pb`|}]óØ‹—ª[¾”¿U*@ þ[üQÕå‘—ýO,",«üÓ€e¼ýà U®-€;FN ³Íþÿ+ÛüŸºÐç ÿÚÂo³ÿu×iY!6̲òÊ·'pÙO¾<Ž9 Of :^Éä©)úùh­v\ò;îé:`c;ùÓÅkÙr®­þåS<—îõhPÜÅôÃOgÄ¢‹â‡Ÿ$I8°ü)Du¼J¬¾(TÂwHm|>zõê…¤¤$Ì;;vĶmÛ0mÚ4(ÝoUþï¬9sæ`àÀøá‡ðÈ#’’’”Ù²ä_÷ìÙ²ÜرcqêÔ)eLdyy9àOpàïÆ+ÿ½{÷îõ.#/æååÁl6Ãëõ"-- Gyny=qqq˜9s&n¹å–Z{ˆ\¾S?âÖ™/ŠÅB>OÅó¶¥M1kä`¤ŒºW,KþÎiµZ$%%aÖ¬YAï¹ÏçË/¾ˆ¬¬,TUUA«ÕbêÔ©HII©ñ¼q8xá…”±Rz½Ï>ûlP×t„9Ž!\§ÉÇ*üë|æ™gàñx V«a6›±`Á<üðÃ!ë×k³ÙðüóÏ+“^˜L&LŸ>=â5¨ÝnGjjªX¬0 AÏîõ>ýôÓ!?ÄÔw_ú|>Ì›7‡C‰Ÿ={6n¿ýv$$$„Ä·LœÔ–8FeZÇ@»/ÜAUS|Ї{®ÂÂB >¼ÆuÕÅ5-‹Z$ñKBü»5;þ×gjü¡ÆñïÿÝ&·I[ÄsGü›B5§sPü©Mvv6¦M›†ŠŠŠ .7V«{öì J€ÒÒÒ‚&.2ú[œä|_Éßwá–““ù;M¼à ·^ù»N^¯Ùl†F£ úÕßëõB«Õ¢¬¬ 111a×s±5åçˆxžŠ·õIœÚñü –ƒ‰SùË!ð9™ÃáÀ—_~©ü““ÇÓàÄIn&¿ØðTÓºêªzÛTP½Êß’¨‚ÿ–ÛBä¸ÈË>GíË*ÿ4`Ù±ÕÍÖâ—Æçü#d›åíûÏ6Ô…¥¥¥HOO‡×ë…×ëżyó°{÷nÜpà bx³Ñ§¯§æ-ܽ©e`â$0›Í°Ùl(--…V«…Q˜®ò®»îü ÖùÌäÓV§ql¨*×¥owk'ÿjy¬ê”XÕèŒÂ”ÁÍÅ…Ú.y·¥_ŠÛÒ¹ÔPÝÕW>û¶B¬º¨233‘——‡={ö !! X²d ’’’pøðaå;)**J™=ë®»îB—.]°jÕª°ãw*-- n· >|8´Zíy_ÆÇÇÃét¢¤¤Z­Z­•••رcGÈXàæäð±ê–=ù¸i ³¶9Û>Äüñ¿Ç÷W·L6•æ:@õBm×Ëïì³ëþ©C`áC ïzÛ´Ås©¡6}ø ’W¾…¡1½ðæŸCï›Dèáÿs`›û0²§=ˆÑn«Ï Ï[¢æ…‰]Tï<‚¾=»]ÔÙÆš›Ü{‘²¦¾ Ëû±ºQ]¨¥¾.Ôv=ùêßðæÎ2Ø'äÄþbu‹Âs©ñ|å;‰~³–£óUíðÙŠÙb5QÞÓ—àÄg°oéLÜÕI¬®ÏY¢–‡]õè¢xÿàŒ¶­ÁhÛëÍæ¦—Í…¶[u—”òoƒv7%‡ÃN•JN§ ô–¹\.ÄÆÆBå¿I±Ùl¬¸Žp1v»*• ………ÐétJräv»•uk4Øíö€µ6-yËû¼%â¹Ôønˆê„›¯ÑàÄgðñÇÄj"ÅÇ_ÉÏàæk4uNšxε\Lœè‚ üÂxÿàb5Ðɉ“¿ß|SÛ½{76oÞŒ7Âãñ )) ÇW&G‘ïµ2nÜ8x<”••A£Ñ 111(f„ ˜={6$IRº·Ž3&è¹`þüùX¸p!l6¼^/¡Õját:±uëV9r¤Æ{¹46yËû¼%á¹Ô´âzõ¼ˆû–j&òñRž³D-»êÑñþÁ#Xºeçÿ²¸¿_¼6c¼XÜìég¿„/+Nàÿû8›XÝhŒF#|>_Ð2}>zõê…9sæ %%f³'äfš:&“ ‹-‚ÃáÀÎ;‘™™©ÔbøðáÊÍ-å›hÞô9;;Ó¦M ¹tll,¢¢¢š´«ÞÇ_Ãïÿ÷ôìÒ¥KfˆÕÍVmçÒ‚ I˜—W‚’œ4Cæ¿‚ý_Ãw¯Îó_´½ŽY##eÔ½xô¥uxgß!~y6ŽVœÀù¯Àƒå“G`æê­p¸ÜØ»d®nß½žXÒbÏ¥†z»ôþøòÜÞãZìxnªXMHü9øäèqüõ‰±x@«X ðœ%jUØâDÄ?ý‚/+‚ïûA5‹¿õ&àýÚ-ÎV…¸¸8ìÛ·pâĉ°÷,ÓétØ»w/àŸò¡‡RfŸ4˜?¾¸ <ßÉ“'¡×ëÃnCS“÷í [n«š5žKÆú[qCT'|rô8\ˆÕDp<‚OŽÇ QjLšÀs–¨Ua‹]Pïì;„gòJp´â„R¶wÉ ôèÒ9(®­[¿ëc<ñÊfîê×ÿd«MM“0Ftî܇F£ýû÷Ç¢E‹Bbà_Ön·###sæÌÁÀѽ{w|óÍ7HHHiq üȱÛíX¿~}HkVMÛÕ˜þð—|—}†SFbü ;ÅêfçRÓËxë]¼ø7'LƒîÄKSFŠÕÔÆÍXµùï»ñÔÿ$`΃÷‰Õ!xε|lq¢ êþ~}°wÉ ¼6c<¿,j1Ðß òþø¥Ûç KåóùP\\ŒÄÄD@çÎQRRåååèß¿z&ºíÛ·Ãb± %%ñññˆŽŽÆ?ü .¢S§N(-- » MMÞ·ƒü­{- Ï¥¦''Ôëv}ŒÊÓÍçf¸tñUžþ ëv}'‘ðœ%jù˜8ÑEøB¡®×\;o¼§ÏœEÁÞƒbu£*--…Õj…Ëå‚ËåÂO<µZ¡C‡¦OŸŽÒÒRØívx½^x½^X­VTVVbòäÉ@@råõzáóù™3g ÏjèСP«Õxâ‰'”ç7›ÍÊÍ;›JÁÞƒ8}æ,î¼ñ:\¯iº›V^<—šNôµÜ߯$IÂÒ-;ÅjjÖnqB’$Ü߯¢¯ÕˆÕµâ9KÔr1q¢‹êþ~}øË[ F¸ ðߌ³) ÜtÓM1bàñx°cÇå&Ïñññp:X¿~=´Z-´Z-*++ƒbæÎ‹¨¨(hµZôêÕ _~ù%–/_.Ø/VS½õaõ¾4ÜÕ›IÕɬ‘ƒÑñÊ+Pô¯ÏðξCb5µ!ïì;„¢BÇ+¯PZ#‰¨í`âDÔŒp; ÷Ýêi¿éüåî¨Þ—ò¾%ŠDÝáJ<í¿HNy½ÇOžC¨ 8~ò4R^/<=b0{µALœˆš±1÷ôEŸë»âÐ×ßcÝûÕ38Qí{ÿ#úú{ô¹¾+ÆÜÓW¬&ª‘Õx wõÆñ§1+·@¬¦6`VnŽŸ8 Ã]½a5Þ#VQÀĉ¨™KNÈ.ùP¬¢zÊÞV½å}JTKŽk;u@qÙgœe¯Yºe'ŠË>õ:`é£ÃÅj"j#˜85s ¾Ñ×jðñ—Ç8Öé<¼õÁ~|üÅ1D_«Á#ƒï«‰"º¶s,T}ÑlßüŠþõ™B­PÑ¿>ƒ}ó{€¥“†ãÚÎÄ"j#˜8µr ‰}ó{àD˜õ'I’ráÃÖ&:†»z+SPOziœŸ~.†P+âüôsLziàŸ$Dž°‡ˆÚ&&ND-ÀcCôˆëÕÞã•XüÖ±š"XüÖxW"®W<6D/VÕKʨ{1ñ¾~ø·$áÑ—Ö¡´ü+1„Z½ž¯ñèKëðoIÂÄûú!eÔ½bµ1LœˆZˆ´1‰€¿¼ý>ÜGx#κrùyû} `¯¥ÇØÿº§ÏœÅ¤ëñéÑãbµ`Ÿ=ŽG_Z‡ÓgÎbÜÀ;9®‰ˆ&ND-ÇÀ>7bòïc¦ÖŠÕTy_Mþ},ö¹Q¬&j°Ì©£0¼ÿ-øîäi<úÒzìó~#†P ´Ïû }i=¾;yÃûß‚—)†QÅĉ¨I;7vU£òôO˜õ§DŽdÖk¨<ýnìªFúØ!b5Ñy{uú8$öÕâ‹ï«02ã5î=(†P R¸÷ Ff¼†/¾¯Bb_-^>N !¢6Œ‰Q Ò¡ÝåÈJ€5ïîÃK…»Äò{©pÖ¼»*YɣСÝåbH“s¹\P©TÊC£ÑÀjµÂçó‰¡ ¢R©àr¹Äb€Ýn‡J¥‚Ñh«Î›Ýn¯u½.— F£Qyݱ±±p8@Àv…{´TùO?„ ñ1øåܯ˜´b=þúR1„Z€¿þc&­X_ÎýŠ ñ1Èú!1„ˆÚ8&ND-Œ^{2“G¬ÿ6ïþD ió6ïþ Öÿ™<zí bÈ%I$IBii)JJJðâ‹/Š!.##N§EEEbU“*,,DBBFŠŠ H’„gŸ}V«v»)))Êþ0 °ÙlÊß-Ù_&ÀSÿ“˜óÆ;X¼‘“¸´$‹7îÀœ7ªÏ•§þ'™qæ|ùùùJ÷;‡Ãœœ”––B’$,_¾<òHÀ«¹Ýn$&&bãÆˆ‰‰QZo[œÆŒƒÑ£GC’$>|Ï<óLÈó>|’$aôèÑxøá‡•õ3ãÆƒ$IÈÌÌ„ÇãQê¹Ýnx<Œ;V¬‚ÙlFyy¹XÜêLJìµON@Ï®áüôs$þ¿¼±ó_b5oìüÿ_œŸ~Žž];cí“0)±¿FD¤`âDÔ‚½øØ|ÛÍð¯„õ•Íbu›c}e3¼Ç+1ø¶›ñâcˆÕ<†G«ÕB§Óá–[nQêrssƒ µZ]»ªÇ®mÞ¼S§NEtt4ào¹©¬¬Tb૯¾Bbb"233T'“šääd@TTL&SÈóÈ-DcÇŽEqq1à¯äñx’’ø[ÍÆ ?`þÔ©S€?¦-ûï;uØñìTŒxÎþúžzõmÌXµ§~þE ¥‹àÔÏ¿`ú+[ðÔ«oã쯿aÜÀ;°ãÙ©øï;ub(Q&ND-\VòhÜtïî÷b²<øNý$†´z¾S?a²<¼»ß‹›®Q#Ë?¬¹ÇðÈ­9z½^é ·k×.FF¼øâ‹¨ªªR–;qâDÀZÂËÍÍ…F£Ùl«rB#?ÑhD~~>¶oßøŸ'''G©“[›jšx¢&;vü-km]Ç+¯ÀËÂÒG‡ã²K/AþûnĦ¬@îŽÿtÓ¤ /wÇ^Ħ¬Àº]á²K/Á “ÀËBÇ+¯C‰ˆB0q¢fÉív7ÚÌc­]׫¯BÖÔQèÑ¥3þñQ9†-ü+J=_‰a­V©ç+ [øWüã£rôèÒYSG¡ëÕW‰aÍFrr2ªªªpàÀ¸Ýnddd ¨¨EEEX´htºÿüêݹsç eÃyæ™g Óé`µZÅ*EÇŽ¡V«•ç)**Byy¹Ò¯sçΘ={vP½$Iˆ¯_Wǘ˜hµZlذA¬‚ÃázmmÅÄûúaÇsÕ­•§BÊšB<°8ÎO?C© 9?ý,ÎEÊšBTžþ©ºUð¹©øÃ½w‹¡DD5bâTOòôÂáh«j™Xäp8êÛÚ¹\®ê‰‰‰8pà@PYciS%÷×Þ€‚ôI¸÷öh|þ]†-|ëÞÿH kuÖ½ÿ†-|ŸW…Á·ÝŒ‚ôIè‘gЫÏçCvv6 {÷îJK¬°°»wïVþ5jrrr”yâÑ›o¾‰={öÔ˜<É Màyf6›•‰(&NœˆU«V)?VÈÏãóù­V«l·×ëÅúõë•õˆ–/_ŽŒŒ dgg+ë+,,„ÕjÅìÙ³Åð6¡÷u]°öÉ Èœ: 7_«ÁîÃG1fÉøÓ_ÿ†/¾ÿO #5¾/¾¯ÂŸþú7ŒYòv>Š›¯Õ sê(¬}rz_×E '"ª§P«Õxä‘GΫE$77W_ÐÖíÚµ ¹¹¹Ae•••õþµ».ZóTÉÝ:wÄúY+ƒ›§¯ÚÛ¦wŰVöé]L_U={Þ¤!zl˜ýºu®î*ÖÜÈÉw—.]°jÕ* ::ñññ°X,èÒ¥ 4 öï߸¸8e9³ÙŒ©S§B¯×C¥Ra̘1((½ñqTTŠŠŠàp8B~„­Zµ ¹¹¹Ê¶h4<õÔS€ìÔ¸qãЫW¯ ç‘Ç’$aΜ9˜?~P=ÚØTÉÃ=xýO&tjßo}°Ãþ»}!†µ8»}á ÿŠ·>ØNíÛaÍL,†{Ä0¢fOÛ- +¦Œ„s‘ïíX·ë#ü÷ÿ®Âä—7 è_Ÿ‰‹P-ŠË>Ãä—7à¿ÿw•ÒMyâ}ýà\dÁŠ)#¡íVÝzJDt>˜85PTTrss1wî\¸Ýn±ºÖé}ëÊáp`úôéÊ:-Z¤$7Û¶mC\\œ2ýptt4, V¬X¡,o0”®1rB"êÔ©JJJ”±Z«V­ ê"Éœ9s”ç¾ÿþûò\IœÁ`PfýЉ‰Ùl®sWE9)’=õÔS(..ÚïsæÌQžwàÀ(--UêdmmªdÃ]½Qþî¾¹;ÊŽ|‹Qkòú;¨:ÝòfÝ«:ýR^£2Ö ìÈ·¸ûæî(H Æ»{‹¡D-JŸî]°tÒpì±OÇãC«?ƒÿVz—çCŸòì›ßÃçǃ§ §jŸ¯„}Ó{Ч¼„?ü%+­þ~{|höاcé£Ãѧ;Ç1Qãaâtäñ S¦L«ê=½oàdv»‚¦% KÎ&è¬v˜_ÌÃêìÁÑŠºýPÖÒ­8ÕÿØó‹yÐYíXý=xÿ@u×ãñƒîĆÙÀ¹È‚Ã6Û bˆ¨u`âÔV­Z…¬¬¬ ²Ú¦÷…¿»X¸V£@f³+V¬P–ÉÎΆÑh :»wïVº«y½^äççui«ÍóÏ?¯$Jr Ž,::ûöíüë ìþ×PÅÅÅJk›Ûí†ÃáÀÀ={ö¬u†B± âêÕ«a0”®‚õÑ–§J¾­Ç5X3Ó„¬äÑèÝ_ùNb¾cîøó2[1‹2`ðm7¶\޹o¡ÿì—`\ðW,Ù²;?ý?Ÿ='®¢Eúùì9ìüôs,Ù²ÆEÿÙ/aîEØþq9 ºtl¯Ä&öÕ*û…ˆ¨©1qj111ʤ ²HÓû&''#??ªZîý´`Áh4eJßM›6Áf³þäæ7ÞÀ˜1c R©””„… ÖØ¢%zùå—±oß>èt:¥¥eòäÉ€Y³f¡´´TYobb¢°týéõz¬]»*• ‰‰‰ÈÌÌT¶uèСˆŠŠ ê¦è©§ž‚F£Qº2îÛ·o¾ù¦V'œ*sO_Í›Œ×fŒGü­7¡òôOpøçfbTÆäîØ‹?þ,.ÖdNüø3rwìŨŒ587®Ÿ£òôOˆ¿õ&¼6c<ŠæMƘ{úŠ‹µ¯j‡Ç‡ÆaÃìGpè¥YxiÊŒˆ½ í.¿û¼_cÉæ÷0vɸ19÷/|óÛP°÷ ¾ÿáGqUÍÒ÷?üˆ‚½1ß± ÷/|7&g`ì’7°dó{Øçýí.¿#boÊÇGâÐòYøtùÓÊm,Ù›YôOq•DDMB%Õ6­Q#°ÛíØ¾};ŠŠŠÄ*jÞÝïÁÆöcóîOñ˹_•ò¸^=0°ÏÕ[nÄå—^´\Cýõ7ì:øvª~ì>|T©»â²K1*î6Œ¹§/îë« ZŽˆ‚ýöï£Ä}ú>Š}Þ¯Å\§îˆÞÝ»¢÷u]Ðûú.èÓ½+útï u‡+ÅÐ&Wuúgúæ{|öm>ûº¢úÿß|o«BÇ«ö‹¾zõÀ=}z")¦.ù]èï¼ËþæÂóoí$' À‚ IbQ£bâDMމSËpî×ß°y÷§Ø¼ûlsªS©T¸í†k í¦®[D_«At7 ®ºârthwyõ¿W^8ýó/øñ—³8}æ,~üå,¼Ç*á9îƒçX%<Ç|øô«ïB¦áÓ £ânǨ¸ÛpY#%hDmÍÏgÏa÷á£Õò¯°§ü(~ú%|÷½k:uÀµ;àÚNpmçŽþ«]:^…v—_†+.»í.»í.» W\v)Ú]v Ú]~Μ=‡3ç~Ã/ç~Å™sçpæÜ¯øåÜo8sö*Ný„cU?àøÉÓ8~Âÿ8y ÇOœ®±¬ý—!V×qº׫âzõÀ•—_&†…åp¹1sõVÀˆØ[‘=m .ùÇ@QÓ`âDD!~œ>ságçëÐî ôî…ÞþV¯ÞÝ» w÷.ç=Þ{Ÿx1uå[¨:ý3âzõÀÊäѸ!*t%"¢óÅĉˆ"úá§3ð¯n1’[ŽVœTZ–NŸùU§«ÇE©;\‰í®PZ¢ztéíµQˆî¦¶[´×jpuûvâSÑtìDu+PuËÐþÿ݉Ө8õ#ΜýµºEéWÿ¿gõ·,Uwçí|Õ•¸â²Kª[¢.½Ti¡êÒñ*\ão¹º¶SÇ€V­M:ãÝ¡¯¿ÇÔ•oáÀWß¡G—ÎÈ™ö úk¯ȈΠ'"j×<¶ðÝ«óÄ*"j%šóy~ò§3H^ù¶ìÁe—üÙÓÄú[Å0"¢ mIDDDÔÂtjßާÂÃƒïÆ¹ßþ?¾¼¯lÛ-†5'"""j5–=öf H_[Œë·‹!DD ÂĉˆˆˆZ•”Q÷bÉ£Ã/¾kÎf1„ˆ¨Þ˜8Q«óè}ýñƟ͸êŠË±áŸãAÛë5N‰NDTLœˆˆˆ¨UJŠé…­s…®[\`Äó¹øè‹cbQ0q"""¢V뎻aëÜG‘pëMð«ÄÈŒ×P\ö™FD'"""jÕº\}6¦ücÿëüxæ,þð—|¬ywŸÖ Ù%bÿ—lÅ"j ˜8Q›9uf ˜õZl›ÞCêå}‡0/¯Cæ¿‚ì’Åj"je˜8Q›1oÜï±øa#à…­Nüù¯Cêìþ~}œ4”êäOgÄ0"j%˜8Q›2å¿cñêôq¸üÒK°ÖYó‹y8ñcÞ’°)õèÔ¾öy úÙ/á}‡Ä0"j˜8Q›3¼ÿ-Ø2g"zvíŒí—cdÆk8øÕwbX ºå&”.™ûûõÁÉŸÎàÑ—Öa^^‰FD-'"""j“úkoÀ–9"®Wøê;ŒÈXƒw÷{Ű:éÔ¾^›1 &$þI#†Ì…Gµ"Lœˆˆˆ¨Íº^s5¶Î}#ãnÉÆøÞDž³L «³ä¤ØþìãèÛ³öy Cæ¿ûæ÷Ä0"j˜8Q›ö;• ¯XÆ`šáÀŸþú7¼ø7§Vg}{vÃögW&ŽXºe'†ÌG+Nˆ¡DÔ‚0q"""j£Þ?x¤É'2¸æ±¸æ±bq³ôœy(ž5 d¼õ.R^G ©—’°ýÙÇÑ£KgìÿòúÏ~ —[ #¢‚‰QµtËN,Ù²S,nÓ,Æ{°2y4 w{)&.ÏÇO¿œÃêLn}2ÇÇf®ÞŠ™«·ŠaDÔ0q"""jƒÞ?xïüû¿<Öä­N-̓÷ôÅ–9¢[çŽ(ú×g™±Þã•b˜bæ³v$M´à;_ø˜NíÛaùäÊÄ—ýg¿2qïEÔ¼1q"""jƒ–´4±Õ)Ôõ鉭sÅÝ7w‡ûÈ·™ñÞ?ø…ÛÊW‘õÆ:ìøç$NxeŸÖœ„Nq´âDÐÄ':Ó qP*•*äa4ár¹ R©àóùÄE Óé ŸÏ«Õ F•JN»Ý®ÄÉë1¼^/ÌfsÈú|>_ëR©Tp¹\⪈š%&NDDDmŒÜÚ$c«Sx7]£ÆÖ¹âþ~}püÄiŒ¶­Á†~¬Ô¿¾©Ï¼ð2~wÅ•¸¢ûÍøìó/pŸy vÔ<±„ÜuoÖÈÁ@ÀÄ3WoÅÑŠx¦÷r:$Iy!>>Z­Û¶m Šu»Ýðx<:t(æÍ›‡={ö ´´’$!77p8AË®[’$¤¤¤Õß4éõzh4e}7nÄúõëñðÃ#>>^YÞf³Á`0(ÇÇÇ‹«#j–˜8µ1­M2¶:…wÅe—âµãñØ=Àš³/¿óOüc×nü1e> Ráª>z´¾íu1øñçŸ1jê“xïý⪂¤Œº7hâ9q}gß¡.| e2™››T¶nÝ:˜L&DGGÃëõ")) ÑÑÑ€øøxdffâ†nZ¦.–.]Џ¸8dff*닉‰A~~>Š‹‹áõ6ìþXDÍ '""¢6Dlm’±Õ©v¶?Ü´1‰€ù¯mƒÖÙ€«úôÇ¥WkÒ¯¿úßqbï¼=`éðúöì†Í©‹1¯­NáLž<9$iÉÏÏǨQ£3gÎÄâÅ‹aµZQXX0›Í jr8˜4i’XŒèèhH’¤$SD-'""¢6¤oÏnØ»dö.™¡”É÷íymP,ûóñ°?œ„ÓKñÓ?¢ýÍ}qy—ëg¿ÿ?ù×]Óo¼¸í¯l'.âäOgÂΰ÷þÁ/ê•Ä&$$„ƒ ½^¯t×s¹\¨¬¬„Ùl 6 eeeP«Õ˜9s&T*¬Vkȸ¨ºŒIªªªjPKQKÂĉˆˆ¨ éÔ¾ztéŒ]:+eòßeÞ¦ü<üöã¸âz®¸^ øõ‡ üx¨ðú‹‹ »©§°Tx?ütÿÕçF ºåÆ}_Ÿ±Nâ§À1HS¦LÁªU«k×®U’&YLL -Z„òòrx<ìÙ³O<ñDPŒ8Æ)\‹”Z­ÆW_}%µ*Lœˆˆˆˆê`Ú3‹Pø® —w½ío®îŠ÷ï3?âǃÕã™^{aîÐ_Xªf=ºtFʨ{±)u"ö.™ï^‡½Kfàµãatg£Œu;v,JKKáõzáp8œœ¬ÔF¸Ýÿ¹!ott4–-[†üü|¥¬®ÌfsÈx*ø'P©TãD­'"""R\ÖK_ã£ÊµU®-!åò£5[ðRVçoÂ¥WGáª>ÕÉ‘ôïßpú`)þ}ö ®Šî‹ŽÝo«·]:ãþ~}2ê^ôíÙM¬®·¨¨(˜L&˜L&h4ÄÄT߈:wîŒ)S¦(I×ëÅÂ… a2™ÖP7³fÍÂîÝ»‘žž®¬Ïív+ÏÍ1NÔ0q""""ªÅ_×mÆsËsð»víqU=à§C{ñÛé¸+ö\Þ]‹É/o@ζÅÅ›œ8ÆÉh4ÕOœ8¥¥¥˜=»zB ÙË/¿ŒØØXèõz¨T*èõzDGGãå—_ŠÇ8…»Stt4JKKáñx”õ3ãÆ YQK¥’$I ‰ˆêëšÇ¾{užXEDÍT¸óVn9RÇTÊ"©rmœ;\=Î'P¸çhIœ{öaÈCS¨Ð1&—vT~ò|Œ_¾õbŒñ÷p¼dÃ’Íï)SºO6ÿoÜï…5QKÇ'"""¢ô¸® ¿|ã$ gŽ~†_¾õâž»ïÄëËfºKXQ¸ ͚֜ˆ¨¥câDDD-‚ÏçƒÕj…F£J¥‚N§ ê2äõzÃv!jŽ\.ŒF£Òõ)66‡`·ÛCºFÉ IÏT—GkvÓ Ý±}í+ž˜€³ß“¥Ûðóг{7¼þâB\vé¥JìÄûúáÍ?›Ñ¡ÝåØðÏ1Ú¶ÇOœZµ\Lœˆˆ¨E˜7oöìÙƒÒÒRH’„ÜÜ\ddd( Ç7ß|ƒÔÔTq±&#'r³’ÕEaa!0zôhTTT@’$<ûì³°Z­°ÛíHIIQ¦}6 °ÙlÊßÔ¸}i}iì›ßÃûˆÕŠŽWµÇæœexÜü þýËϸä’ßáõᦺ‹¡Ó [çNB¯ëºàýƒ_`”m ÜG¾ȨbâDDD-‚×ëERR’2;W||<233qà 7Àår!!!ðd—[žÜn·Ò²£Ñhžž®¬ÏårA¥RÁáp@£ÑÀårÁçóÁl6C£Ñ@£ÑÀl6Ý 4==:±±±èÕ«¬ÜôÓn·+­aF£1ä&¢²™3gÂf³!99QQQ€ÿF¤™™™ÈÉÉÃ/¸s‡Kk|¨ãGB?2¤\~´4æA1xgß!,ݲ£m¯ãšÇ`´m f®Þ6‘Ê\†ÿýó4¼þâ" ìÿŸÙéD}{^‹­sEÂm7Ãṡ‘¯¡è_Ÿ‰aDÔÂ0q""¢aæÌ™X¼x1¬V+ ÿ½câãã§Ó øoÖ)ßtÊ”)=z4$IÂáDZwïÞî|;wîÄáÇyóª'0¨¬¬Dee%`õêՇý{÷¢¼¼{öìÅbÁÎ;‡Ãœœ>|’$aôèÑxøá‡ƒžþDÎãñ`ìØ±bÌf3ÊËËÅbjB÷÷ërãÙ÷~wöB§öí‚ÊeéOLÁ¸aCÅâQÛcãìG0~Ðøé—s˜¸<¯í¨¾ßµLLœˆˆ¨E6lÊÊÊ V«1sæL¨T*X­Ö[vÜn7JKK•~FEEaæÌ™ÈÈÈŠËÌÌTZ~’““±xñb¥N£Ñ`ûöíÑámÞ¼S§NUÖ3vìX‹a8uêàŸº™š‡Ù#‹EX>yD£ÜC VL‰™Ãf¯)DÆ[ïŠ!DÔB0q""¢#&&‹-Byy9<öìÙƒ'žxB ’”@W_}5ªªªÄbÅ×_ “ɣѫժÜȆŠòòr¥«ÞÞ½{±`AõTÛ'Nœ@NNŒF#ŒF£ÒÚär¹”å cÇŽ€¿Û!5æø˜ V§ä¤¸¿_­8w>ž;Ï?R}o¥ÿæÄŸVoCˆ¨`âDDD-‚Ñh šˆ!::Ë–-C~~~PœLNRýðÃP««ïÃÎ#<‚eË–¡¨¨™™™2dˆR·aÃ$%%)]õŠŠŠ”¦Î;cöìÙ(**R’$!>>>`íÕ‰ŸV«Å† ‚Êáï ¨ÓéÄbºäV§ûûõÁ¬‘ƒñþÁ#2ÿd—4ÞÍl'ÿ>¹3ÆáòK/AžË Ó kQõãÏb5cLœˆˆ¨Eèܹ3¦L™¢´Öx½^,\¸&“ н{õ gr×½˜˜èõzdgg+åkÖ¬Áœ9s”uŠ[£Ün7Ö¯_¯ü=vìX8ejpF«Õ ˜8q"V­Z¥<·Ûí†J¥ ÛpùòåÈÈÈ@vv¶R_XX«ÕŠÙ³g‹átÜ߯Ýr#–ONíÛaÿ—Ç=…ñOçkX¿[°e±«;ö{0òù58ðÕwb5SLœˆˆ¨Exùå— ½^•J½^èèh¼üòË€¿*-- ]ºtÑXÝ-jÕªUØ´iT*zõê­V«LN^^FŒ•J…ììl$%%)u/¾ø"žþyejðÇ£¤¤.— Æ øqãЫW/¨T*Œ3J‹T aÆaëÖ­Ø´iºté•J…ùóç#33SEV§öí°)u¢2!DrÒ”.™ûûõÁ;ûa´m öyL\¬AúG_-s&b@¯8øõw™ñvì÷ˆaDÔ ©$Þ‚ˆÁ5UõøîÕêYɈZ³ÙŒÄÄD%¹ñù|0`6n܈˜˜š§¦nÎê{ÞÖ5~ÿ—Ç”V›™þñ<Ë'üSu7ÖÄ BuÒt¹3ÆaÐ-7‰Õ &I@òÊ·°y÷'€ÿûãÿà¡„»Ä0"jFØâDDDTsçÎÅŽ; Óé`41`À,\¸°Å&MM©G—Θ¹z«’4ÁŸ@ÍË+ Šk 6¥NÄòÉ#0è–›]ò!ì›ßCD¥r,Âb¸ðç¿þ /l­žRŸˆš'&NDDDu‡Ãòòr¡¼¼f³Y #×7s|hBy¿>-ªµIv¿>€¥[vâ•m»­ÛØÿå1ÌË+ÁhÛë8ùÓ1¬AF¸[æLÄuêŽ(.û #3^ƒçX¥FD'"""jr«Skhm Ô·g7˜ãc”éËßÙwH i{z÷ÄÖ¹¢_tw|ôÅ1ŒÌx ®ƒGÄ0"ºH˜8Q“[ZCk“hÁ„$eºò™«·âÑ—Ö‰! rcW5¶ÌyÃúß‚ïNžÆƒ¶×±áŸ‹aDt0q"""j£îï×G™ø ©,˜ÔªZ›D=ºtÂÕÜ¢vÅe—"wú8üñ÷z€5g3V¼³K #¢ Œ÷q"¢FQ×û»QËÅóüÂûËÛïcÑÆí€Ç‡ÆaÑC1„ˆ.¶85Sz`VL xeÛnüñåõ8ûëob]Lœˆˆˆˆš±ñƒîÄÆÙ ªc{¼]z£lkp´â„FDMŒ‰Q3—pÛÍØ2çQôíÙ ¥å_adÆì>|T #¢&Äĉˆˆˆ¨èݽ ¶Ì™ˆÿ¾S‡¯|'12ã5lÝs@ #¢&Âĉˆˆˆ¨…èxåXûäüáÞ»ñÛ¿%LÉÜ€ì’Å0"jLœˆˆˆˆZ˜&=€Ù£îÌË+Áÿæÿ] !¢FÆÄ‰ˆˆˆ¨š=r0^˜4YôOX²7‰!DÔˆ˜8µP¸·Ö>9W_Ù?ØQkpìÄ)1Œˆ'"j=ºtF.Åb""jbÿ}§[æNDïëº`ס/0*c ÊŽ|+†ÑyRI’$‰…DDDD¢k[øîÕyb5•§ÂÔ¬·°óÓÏqåå—!{Úhïî#†Q±Å‰ˆˆˆ¨Ðth ³iP ~>{—¯Ã«ÛKÅ0"j &NDDDD­ÈKSFàOÃR_Ï¿µC !¢`âDDDDÔʤ‚ŒGî,û› 3WoCˆ¨ž˜8µBü½¯Í+.»—ã_X‹ªÓ?‹aDTGLœˆˆˆˆZ©ûûõÁ–9qÓ5j¼»ßƒ¯áÓ£ÇÅ0"ª&NDDDD­X¿èë±eΣø¯>7âÐ×ßcdÆüã£r1Œˆ"`âDDDDÔÊ]§îˆ-s&bô€Ûqò§3˜°,oî,ȨLœˆˆˆˆÚˆìiÂj¼ðä«ÃÒ-;Å"ª'"""¢6äMCñÜ„$€}ó{˜•[ †QLœˆZ)£Ñ•J—Ë%V)\.T*ìv»XEDD­Ø´¤ȱ<ˆß©TXóÞ><òœ>sV #¢LœˆˆˆˆÚ Qq·cËÜGq½æj”¸cäó¯‰!D€‰ÕÉòÉ#°|ò±˜Z°½z`ËÜGÑ/úzÜ߯XMD˜8Q˜ãc`Ž‹©…ëÙ¥3Šæý³F«ˆ('" ËårÁl6C¥RA¥RA§ÓÁn·Ãçó…ÄÕ4NÊn·‡gåp8«¬;66ÙÙÙA12»ÝN§ÄFŠaDDDDMЉQ+·víZØíö°µk׊á€ÂÂB$$$ ´´6› 6› IIIHMM…Ñh IžêÃáp`„ Ðjµ(((€Óé„V«Å´iÓB’/«ÕŠÔÔT˜L&8Näåå†Î䉈ˆˆ.(•$I’XHD-ŸÑhDqq±X–ÍfCJJŠò·F£F£Á‡~ˆ¨¨(¥<;;Ó¦M Šw¹\HHHYü­E©©©p:ˆ¶Küè‰EUUÊË«ïfïv»q×]waåÊ•HNNŠ5(//Wb‰ˆˆˆš[œˆZ9§Ó I’Â>œN§—Ë…ªª*˜L¦ ¤ ’““¡V«±~ýú òú2dÀl6Ãív+å«V­Bnn®ò·œôõèÑ.—+è Ç´<QSbâDDA>ùäÀ AƒÄ*@\\JKKÅâ:› ƒÁ€¬¬,eâ‰~ýúþ‰*D.— v»^¯W¬""""jLœˆ(H||<Ôj5rrrBfÏËÎÎFUU¦Nª”uïÞ°}ûö€HÀëõ† 5iÒ$L™2%¨,** ýû÷œŒF# a6›Q\\Œ´´´É+ˆˆˆˆš '" 1lذ û+ >ùùù°Ùl(** IXÞ|óM˜L&#55{öìÁo¼‡z((RRR——Ç£Lü““³ÙŒ7ß|3(vÑ¢EÈË˃ÏçÄ 0|øpx<¬\¹‹- Š%"¢ú3Ê ÆkzÆEšÍT¾a¹ØcAäóùôüF÷ŽÑh„Ñh‹‰.Þljˆˆˆ¨’ï­g±XpÓM7‰Õ€ÿ/ùæåiii5þp%ß×Ïd2Õ˜üÀŸ¾)S¦ ´´Z­&“ :u‘#Gàp8PUUƒÁ€7ß|3è‡:9i*** XÑ…Ãĉˆˆˆ¨’§À•‡ãóùÐ¥KhµÚo>nµZ‘••…‚‚ 6L¬üë1(-- {ƒsŸÏ‡yóæ!+++$Ikމ“Ëå­·ÞÒƒZ'vÕ#"""¢ZEEEÁd2Õzóq‡ÃµZ]cÒ6l@ii),KHÒÿó,X°jµ‹/«› ·Û Fƒ„„8p@¬¦VЉE4qâDÀºuëÄ*¢ªª f³Y¬ ²jÕ*À¬Y³Ä*…|¿?›Íö¶>ŸV«*• :.ì­+|>ìv»2îJ¥R!66ÙÙÙb¨2~Êív+ã®\.àŸ%Öl6+ëÐétHLLÄœ9sàt:që­·*ë),,DlllÐóÙíö€gªf·Û•±`V«*•*l5/LœˆˆˆZù¢L|èt:X­Ö°£D‘ 6 jµYYYbÞ~ûm;)P ÒÒR¨ÕjeÕš˜Íf¤¤¤„Äù|> 0^¯sæÌÍfCee%†r\?üðÃHMMERRœN' ”IÂÁòù|HLL„ÏçƒÍfC÷îÝáóù ×ëáñxPPP§Ó‰Ù³g£ªª 'OžD||¼ÒMÏáp`øðáÐjµ(((@AAbcc‘ššŠôôtñéÿ6–”” -- «©¹‘ˆˆˆ¨U±ÙlÉ`0H6›Myèõz €¤V«%Ç#.Vg’Óé »Ç#9N©¢¢B¬¢fÈ`0H$‹Åt¬È§Óo±X$RAAAP¹Z­–´ZmP™Èãñ(ÇeCÈÛš——Tž——'V®\©”ÉÏe±X‚b¥ê±ý!ÛPÓºW®\)¨q?R«Õ’Éd *“ÎÇÀóE. ·}Ô|±Å‰ˆˆ¨•2dRRR”Çž={`³ÙPUU… 6ˆáuvàÀ$$$„]dž 8î£ÊÊÊBjjjÈc×®]Aq<ðЄ€nz&“) ²i †î€7ÜppuèÔ©œNgØ.ƒA,jX·¼Nqâ qB—Ë…ªª*ôë×.—+è!߬}Û¶mAË@ff¦XDÍ'""¢6„Ý(§Ó I’B)))AqÆ ƒV« êê&'QãLj %w»Û½{·XÕ袢¢pë­·bÛ¶m0›ÍA÷‹*..Ãk$'=òx'Ù‘#G‚þþä“O©©©HHHzL›6 ;j™˜8µ!+V¬jH GÐÀvN‡ôôô ›™ªT*$$$þ‹D9ÖårA¥R!55•JrÃÒó< Fö«ÙÙÙP©Ta'  Æc2™PUU¥ìg‡Ã½^˜˜14„^¯GUUUÈx$Qzzº2YCCx½^ôêÕ sçÎ…V«Å3Ï<§Ó §Ó ½^/†×hìØ±P«ÕxòÉ'QXX—˻ݮL—.ª) —„RËÃĉˆˆ¨•Ú¾};ìv»òˆE~~>l6[H×#»ÝŽ & **Jo2™°xñbÌ›7O‰³Ùl°X,€¿k“ÍfSÒÛl6¥”ÅbÍfäI“”ecðüÓO?ªªª°ÝžV­Zq:l:rËÒÛo¿­Ü°vÊ”)bXXrÜÒ¥KÅ*…ÏçCVVvïÞ]§d,œÕ«W£ªª [·nÅ¢E‹¯<ê{Ï¥¸¸8TUUaøðáHHH@NNl6[Ð=¦n¿ývÀ;ï¼°d5¯× »ÝÒjE-8艈ˆˆZ6yày¸‡V«•l6[Èä Z­6ìà~yÐ| §Ó)l6[P¹ðÜâ`z©‘ÏWTTHjµ:dpm“PÍä÷7ÜûU­V«¼Ÿâ{W›ŠŠ e’’ÀÉëå‰ÄãË`0„¼ïR Ç£¼]âq.O$!®§¦uÛl¶:O¦"ŸCâsÊÇrà„rµ,lq"""j¥l6[PW!ǃ©S§"55?üpPlnn.6nÜTÿ¡±ÏGEEÁl6£¸¸8¨»—¼l¸›ªRdk×® j |„#OÉŸŸ“É2mxM¢¢¢°jÕ*èõzL›6Méj·ÛaµZÑ«W/deeÁd2W×¶Q£Fþû3¢°°V«/¼ðB½ºêÉ-¨Z­Vé^*wcµZ­A]F—/_ǃ ;;.— éééHMM…^¯gKhk fRDÔ:4ôWÄ ¥¶_¥‰èüÈç—ø‹½¬¦)¥óòò$‹Å" I­VKh© î~YMç¶<­smÀõÕö‹|YYYH¼^¯ÛbFµ“¿+j{„#·ð!ÌÞuQQQ!­\¹2äùM&Së«©U¨¦ãqåÊ•’V«•àŸ‚ßb±Ha×®Lòkò²¶€iÚåsH¯×Å;N¥µ þÞ´´´[¡¨eá;FÔJ1q"j»"%NáêåîS‹E*((œN§ät:ÃÞ¯¦¦ U©–s»¦ûáÔ$Ò…e`¢$_ćëúEt>ä¤)œ´´4 €TVV&VQ+Å®zDDDm”ÜE®°°¥¥¥°ÙlÈÌÌİaÔôâýjª±Ï?ýôÓðx<(,,ÄêÕ«C‡ÈÎKUU•X¤ëäûHQëÇĉˆˆ¨ ñù|ÈÉÉ£Gúöíëv»‘‘‘TÖPñññÐjµÈÏÏ™J|Æ HMMÅ?üT^›¡C‡B­Vãí·ßF~~> CÇÙÕ•ÅbAVVÒÓÓ•1yòx)yJòúÎÒG-'"‚ÏçƒÝn‡N§S¾šÍæýu¹\0›ÍJ¬F£Ùl{_ù,F¹g ï±BtaˆÓ‘˃ï=ÒÒÒ”DCN yä8ePû˜1c””$¬µ: R«ÕÈÈÈ™@@Lÿä“OÂn·Ý(µ1ÏË“DdeeÁãñM{NÔX233a³ÙPRR¢ÜÐvøðáðz½ÈËË š’œÚ±ïµõã8¶Aø*¨éÊc´Z­”——'9NiåÊ•’Z­˜]QQ¡¬G^wZZš2•p]·ˆêGîa0BÎkÉnËŸðÒ/++«q¬QAAr~‹õ6ÿÎòójÌÁóò$3í4Qc«ý‰ˆZ¬º&&ò€mqPµœô¨Õê  y ¸xO‹pÂå2qÝò,Eb<Q}ȉSMƒ÷‰ˆ»êµq›6mŒ;6¨<**J¹OLJ~¨”'''Ãét†Œ%8p`ÐßðwB˜ûªÄÄÄÀb±•ÕWvv6ࡇ«ˆˆ'¢6n÷îÝÐëõa·Ê³`íß¿_)‹‰‰¤§§Ãh4*㢔™¼îpäÙ¼ˆˆêËn·#==YYY0 ˆCˆˆ'"ª—ôôt$$$`ïÞ½˜4irssát:±råJ1”ˆ¨I¤¦¦bñâÅ0 °Ùlb5Q“`âDÔÆÅÅÅ¡´´T,|òÉ'€ž={þòä‹•¢¢"˜Ífå^/rëT ÚÖMDÔPþ1Ú(**RZÁ‰ˆš'¢6nôèÑ@ÀX™ÏçÃ’%K V«•©Š¿úê+@ÿþýCbŸ|òÉ 22dfÝyo"""¢ A%I’$QËg4Q\\ ‹Å‚›nºI¬ÆÀ•q±±±(--EZZ „£GbÕªU(--E^^Ìf³²œN§ƒÇãÍfÃÀñÉ'Ÿ`É’%HJJBVVœN§²^ŸÏ‡^½z¡ªª iiièÔ©Nž<‰¬¬,hµZ”––Å5WLœˆZ)9qª‰ÍfCJJ àOpV¯^œœx<€ÉdÂôéÓC’¯×‹´´4äççôz=ž}öY\}õÕHHHI„Ün7žþù øeË–a×®]HMM ‰'"""jŽ˜8EÀ1NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD'"""""¢˜8EÀĉˆˆˆˆˆ(&NDDDDDD0q""""""Š€‰QLœˆˆˆˆˆˆ"`âDDDDDD§F£v»],¾àŒF#\.—X\£úÆ7&—Ë£Ñ(7 »Ý•Jò8_s¯óÙß^¯>ŸO,®—šö]Må5q»ÝbQXF£±±±aã a·Ûáõza6›•×–žžt¼Æ ååxF•J…ØØX*õ>Ÿf³¹ÆåÕTÞ5ö¶žÏúÜn7T*Uëp»ÝÐh4bq«PÓkn(ñxW©TÐétbX½\¬ýïóùB^‹J¥‚ÃáC/‡ÃN•JFÓ,®꣰°*• ^¯ÙÙÙbàÿ®ß•ÿóTµ|×÷»¦¾ñ¡¡Ïy>ßÁM¡¶÷š'jÖ $I z´T.—«^ÉEcKKKÆ Äâ Îív#11Q,áv»Q^^Ž={ö &&&¤nþüùHIIÉdÂܹsØ»w/ ”ã¥ÿþHMMU–ÓëõHLLDee%$I²eËðÈ#(ïÍO<­Vvù@………uzðÿÐ/é†òz½ADõÙÖº8Ÿõ¹ÝnŒ3”÷Õår%¯@\\œòwKøÞû|>Üu×]š<íÝ»yyyAŸ‘åååbX½\¬ýàÀ sO~˜Íf1ô¢p»Ý°Z­())$I(--EFFÆy}®_èφ[n¹jµ:uBRR’X­ˆWö¿Á`€Ífƒ$I(**CCÔ÷»¦¾ñábø¥¥¥p»Ý(--Eqq±RW\\Œ[n¹Eù{РAÊÿSSS1gΜ ý³Ù¬¼7'NœZfòäÉ2dˆò·lذauz>Ÿ©©©JbWv»ééébqDĦM›”¿ëº­uÕÐõÉûböìÙ0 Jù;#ýû÷+üñÇa÷y]6›_„Å÷>** ’$…üp>Š‹‹që­·ŠÅçå|öÿùصkôz½XܤÜn7Ìfs’ÙS§NA«Õ"::ÌÌL1¬ÎÄããBHKKCff&8FÓ$ß õý®©o|c¸ÏÙ\åææâ›o¾‹©LœêÈn·C£Ñ 666¤ëPmuéééJy`w"ŸÏ«Õ NN«Õò«“Üm!°Üjµ†mZÿä“O”uÆ ç1›ÍJ]à68ÄÆÆ†íe·Û¡Óé”z¹N^ŸÜä“O>Q– $¿>Fò¼òÅ ÑhTÖS—/­@rs¹ÜME£Ñuç»wèt:h4š‹OyÉ]šjÉrrr““£\Ô¹Ýne]:.¨ËGaa¡² :.¤«J¤×-wC |ÝÆ€îtïF£ zn·[9fu:]Ⱦ«IMÇ`àûm·ÛCº:„Ûwn·O>ù$vïÞv&''£¬¬ 111(++ÃäÉ“ÿ¶^Øø|>ÌŸ?ýû÷‡×ëEqq±(33)))€!C†`æÌ™p8ðù|ˆŽŽVê™Ífeß›Íf¤§§+Ç”ü ¹ü«Õê ý/.ˆûWÞ÷F£:'OžÄøñã@éV£Ñhàv»•ã[>†ämq8˜9s&ÊËË•÷!p[ß_ñøÉÎΆÙl†1àÜ üü‘Õ嵋|>ŒF#žyæœ |-r7+ù\ ü\߇ÀãÏl6+ÇlvvvÐþŒUÞÏpï}vv¶òZ?kÄÏ(·Û­òy®UCÞ®p‰X¤uȯ?66*•*èó§¶ý_Óë…ð}'îù@ûöíC¿~ýÄb ÇfMë—·7==÷ÃÀí3f ¦OŸŽuëÖ-'we |Ž[o½V«UÙ÷f³ñññ!?r.n¿„;>äcB~µ›Fÿç¢üwll¬²­ßUâñ»xñb˜ÍfÜzë­ç•ôÁÿ<‘¾k·%¶†n×õ<Å÷Ûh4";;[9vÅã00N~ÎÚ–‘ßù˜¯yÂ}Éåéþï=ÿ{1ðµÔe9ù9—“cñ³× òsÊ­øµ]/¥§§c÷îÝxòÉ'k*((PöŸ¼ùõ•••cǔ䟷M>¥0ï}à¶Šû6ð¼[¹r¥¤×ë•õ¤¥¥…ýL÷ÀÏÈÚÖ!¦žçŸµíÿš^¯Çã‘pIø}WÛ1H«Õ†¼ùó¦¶c³¶õ¯\¹RÒjµÊzÉÿœ'äó&ðýäñx$‹Å"©ÕjÉ`0(û¢¦åkÛ/âñ¡×ë•c²ÂÿPÛ¹ø¹ø=øz¿«ÊæÚuü® ü¼©i[xì.c¨åû=PàsÖ¶Lm×<â{øýe³Ù‚Þ?ù8¬Ër5]åååIÚ€ëMùü—޹NþŒ“êpݸ/(2&NÂ}8Ha.x¥€¦Úê$ÿ:õz½d³Ù‚¾lärƒÁ  I«Õ*'RàAìô'f’p!H<èÅ“2p;_£|b§¥¥]dÉåò¶éõzåäŒô\21.ðËCÜg5­CÞÞpÂ-øåøIxNqÛÂmOcí¯@âóÀ‘#?ä Ðp¯M®®¶×øZkú¿¨¢¢B*((P¶W<žÃ-'–n§øºÅºšö]¸×IàE‰(//¯Þësú¿pÏ]IHTÿ/C@"`2™B’ñÜ·ù?ô‰]ZZšra"n{EE…ò….¯#pYuÀ,Û'^4JÂ{§ ¸è—ë·]ªçk—‰¶Ï#¾îÀ/|™¼N‹Å"ÁA-¿Ï¯µ  @¹1™L!Ç–¼óòò‚.†œIõÊ•+%µÿ¢X~ÈǤx,ùaù}ßšÞ{ùu— ɘ$œ'–€ÌäºÀý'÷k ÚÖ!¾~É¿Ng­û_Šðz-‹¤÷'4Ç@MÇ|  ÿÅ·xìÈj;6k[¿Åb z®À÷¤ÂÑ-þ¿.Ÿ=ç üwMË×´_·¥ÌŸÌwꀋ]ñõëõú Ï\CÀy,_`§¥¥)àçÃæÚH<Ÿ?ðÿòg¼ø½¨¾ñõøŽ <¯Õ´½R„ë…À÷V~nùý üþ ÷¼uÿ¿½ûi#ÏÿþÌÐëšøSoWJ2þ wG–ÛŒ‚[Ø‚fÎ;Ê.ÚMÐ"‚Ñ–BÚU·Æ£?T¼&mWT<(K»Q´t)§ø*\æÂ¿Ð@N¥¶?5Ælÿ€ùü°3ïÏÌd¾ÄÖ~= ÔÌ—÷¼çýmæy¿'¥îg<žU˜)åZ¥†TÚ­T*UTµûÉ&çHìÑP½—laaÓÓÓ¨¨¨@GG‡n8Äðð0°°°€íímÓI—‚  ¬¬ ’$á‡~@ss³q[±X ###¨­­-š«ÑÛÛ‹ÕÕUœ8qß}÷DÍð©H$Ââ¶¶¶†ßêÙ»ïU§—ºÏÂÂöööL‡„½j¢(âáǨ­­Eoo/8‹yF‡åyÓÎÌÆÆjkk‹~ø!2™Œq1$IbCx†¹‚  ººÏž=Óìd26±úçŸÖM¤Ï*ÃÕy KKKº9Wù|ÃÃÃÀÀÀnÞ¼‰¦¦&øý~äóytww£»»hjjL朜={~¿SSSXXX@$Ïó€r|·ÛÍŽ¯k¡PÀñãÇY8êúcÇŽ!—ËaggG7ì+“Éèâ®.+õÜ¡ uÂÐÐ\Ê›¹vvvðñÇ#—ËáÇdq‡É‹ ´aŽŽŽBV&¬«u%£¥¥±X —/_Æ¥K—e®ZOOKçááaÄãq@IOí°Ÿ~ú‰Å¡P( ³ýJ¥å|µs³ÆÇDZ¹¹ÉòaxxØ2ïwww±··¿ßo:oss€µµ5üáЭûÓŸþ¤Ùú7¦ËáÆþóÝù«ÃA°M§óÅää$?~¬k­Ê¼–úb³ù>NeÓ.üµµ5]›ðùçŸãüùóH$E‘ WóxŸO7ŸP’$D£QüóŸÿdÛiÿ–$É4Lí÷ÿû_]§æÇÔ½­*ŸÏëÒ¢¬¬ GŽ ¨ªªÂ©S§å&¼§§_}õ¾úê+,,,ènÀµ7ûûûì¦8›ÍâêÕ«øôÓO“—jhãzôèQÖA9fuu5¼^/VWWuµfÌǃœ;4/DPÿ¥R)ö¶LÇSÔ™3vÍÂTe³YìííáöíÛøòË/uo`üàƒ%ßAÀàà ¶¶¶“ô\YYaéwôèQÖ† ‚€t:Íʶñ| …K‹\.‡h4j™÷ÚNæ‘#G°½½ÍÊa6›ÅÒÒêêêËåŠÚú¥¥%Ó·ÜY½Â)Œµµ5Ž9‚|>ªª*ß¶¶6x<ž¢ó—$©ès €ÇãAww7‰¼^/:;;QVVf;ñ?—Ë!¡ü¬ÃË`uÝ´RÊöNרÃdwÏãtýš™™aëÆÇÇáóùJÚÏJEE…n?í'ã}CÎd޼«ë:)F'ƒ¾¾>ö­¨K™0+"‘*++Áó<¢Ñ(VVVå¢l·®¾¾žMþ›™™a߆¶··Ãçó±É;;;¸páàüùó8sæ «uuuXZZBOO‹§ÑñãÇÁ+“½÷÷÷qåÊ@ixÏœ9QqýúuÝE=™LBT&UG£Qö ™ èééAMM DQÄåË—199 ¸rå ö÷÷Y¼Í&%C9?u#ÇqØÜÜÄ·ß~kÜÌÑââ¢.?ÔFµ…B<Ï£¼¼¡PÈrÒºÖa§—VSS¦§§Y9::Š»wï‚W&¹Ö××£¡¡·nÝBcc#8ŽC}}=’ɤé7±ÏK›?n·{{{¬üõ÷÷£²²¢("NënØŒeS˪ Ú)5íJ‘ÍfQVVVtãµ <Õ-//‡ËåB4ÅÅ‹ÙÛ•Ô2ª–µh4й¹¹¢0µ7ÞÆ§\ÙlVW/€n‚ï½{÷ÐØØQQSSƒ[·n±ð/]º„îînðš‰ÑÆ›¿¶¶6´µµAE,..Âív³ècÇŽ!“ɰr¦kgg'«“<Ïcee·oß<|øPwüµµez#{s7“N§uéùÇ?þ}}}¬ãn seeÅ6Ìééi´´´°ú¢–Í¡¡!V¿8ŽÃÉ“'Y`LÏõõu–~Ú4â8=beÙ·`0È^øòü>ŸÏ2ïµ.¿ß¯+÷XYYÇãÁÖÖ–î¦X½¡5–Aµl|üñǺöQ’$Û0ÔÎħŸ~ Ny1”¶&ç¨M»óýæ›oX™¬©©A2™daØ•yÕææ&¦§§uç"*OœÊ¦UøÆtÈårÈçó¬ w^Êñç?ÿ™Ý”ùý~$“I466Âår¡²²n·[×Ιío—.Úò¡-<ÏcppwîÜLÎ?N³—«@ybª^«:;;qÿþ}VîëëëueݨP(àêÕ«øù矫…ÕuÓJ)ÛÛ]£›Ý=Óõ‹çy´´´€ã8\»vå§Ó~VÂá0B¡»ßÔòx<ºz ŠbÉ÷ êu^Q—|ÏÉK•ËåPSSƒÕÕÕ’*ùíÆ—Š6y[d³Yttt`mm-E_|ñ½2׆ÛíÆÿþ÷?Ö.& 6”Œ˜“$ ƒƒƒìK„÷I8Fkk+%-N:…½½=ä”·3Ûv4¬¼èþäÝ¢NËx†ß“ÃEOœÞp‰Dååå¤N!ï¨?ü>Ÿ¼òtZE|òÉ'ÔirÐÕÕÅÒKÅç~²ý>I§Óº§ï“Ï?ÿ—/_fåepp+++ˆÅb¨¬¬ÄÅ‹Ÿ«Óó¢ûBÞôĉB!„BÐ'B!„Bq@'B!„Bq@'B!„Bq@'B!„Bq@§CH$Ø«'$I‚¨ùåëÝÝÝ’¬T/#ÌÃ`•eY–C¡ÜÕÕ%˲,Çãq9³mS©” Ù:ŸÏ'ïììȲ,Ëccc²Ïç+ÚNVŽ‘J¥Øßccc²,ËòÓ§OeŸÏÇÖ`á¥R)¹¬¬Ì4 ãgm˜ÆÏñx\,Üþþ~v~Zñx\·\F0”»ººX9™Lʲ,Ë]]]r(bûuuuéÎ]eT*ÅÒNÝV sllL~ Ð¥ƒ¬I+uùÜÜœ./|>‹»Sºj`ù¯æU2™d«a>xð€…i·Î.žZvyaW&e%ÎÚuVÇ{úô©\VV&?xðÀô³1ÏÇU÷Ñ–_ã6¡PˆÅÛçóéÊ} ( ÏÈ.ïê­v?íg»4q:^©u̘'ÚpK­/ZƼ1~6æ•–]¼ñ4ž‡±ŽZ“1MÇÆÆØ~sssr0”€,+õAý[[÷´ç£î£†mu\-»¶ÓªË%”#c¾Zµ%ÉdR¯`0(ÏÍÍÙ¶ÉdR·.™Lêê¯*ns­éêêÒÕ«²²²¢rÇeºjšÏјçX=xð@—ÎtÇÖ® ƒ,åÕ*¯íÚ-ã¹hãh¬ Úk•]øÆýB¡<77'ËšøË6ùl' ²ã:¥·¶<ŒéÊ>!äõ¡'Nç΃Çãa—:ç%‰ÀëõÊP¦ã&EÙðǃíím‚ØÙÙA&“A"‘@:F>Ÿ7ìmN&´µµáîÝ»ìóéÓ§Y<ÿú׿šž_oo/š››uO´Oš››Y>}?”yçÎÓmgÅ*‚ àÎ;G"‘À£G°¿¿¨««Ãúú:Âá0ÆÇÇ1==ÍÒK«ººš-ohh`y‘N§‰DXÜA€Ûí.úfÞŠ:vÞãñ ‰àñãÇØÚÚÂÞÞZZZ Š"úúúÏç!I’í:ØÄSË)/Âêx[[[¨®®†ßï”ó ‡ÃX\\dûjóÜÌÙ³gÑÓÓÿÿ>fffØ7µëëë¬îììèÊýéÓ§ua™qÊ{«z{ÿþ}]™ljjÂôô4ûl•&vÇ;HK§ÓØÞÞfé099ÉŽú¢z‘¼rŠ·‘Uµ;'Ò´®®Ž=™ø÷¿ÿäóyär9,..¢££ƒí§úúë¯ÑØØÈžL,,,%WåÔvšÕc•U9‚I¾Zµ%uuuXZZBNy‰Êöö6lÛƒÇë³{rau­innƵk×ËˡæåÀ8ÇIM_Øä¹ºŸš¯~¿Á`P7´Y[§µënß¾ßýîwH$ø×¿þ·ÛgÏž6ym×~ç8iÛ«k•SøVuHÛöªù¼»»«Ë烰JocùêììÔå!äõ¡ŽÓhwwõõõ€r±zÕ“]c±FFFP[[‹öövœwuuavvËË˺|&„¼»¨ãdðý÷ß³¿GFFØ·A°¹¹ (㣵ÛÀÌÌ #=>>ŸÏÇÖY̓l z.—cc¦Ÿúè#Ý~çÏŸÇ™3gLzm˜Çá“O>)zभ­ gΜ(Џ~ý:»áqråÊìïï³É¬Æ4*E0Äôô4xžÇÙ³gua¨y N4þàƒØÅª‚ ‰ ²²<Ï#bee…­·KW(Ã4xžGyy9B¡ sïÞ=466²aÉdÇv]©ìò©LÆãqTVVÚÞ„AùæôÖ­[hllÏ󨩩ÁèèhQxf‘ÏçÙð#õãöövø|>VvvvpáÂÀ;wpíÚ5Vg´çôË/¿ ¯¯¯èéŽSÞÛÕ[uÂ=ÇqØÜÜ,êä™±;ÞAê˜ èééAMM DQÄåË—199 8Ô—B¡€«W¯½¢ûEòÊ.ÞÚvÊiºÝ9™Q‡=þýï4C"͆é@2™de)btt(ñ¸Nm',ê±Êª9µ%j~pÇ:_víA8F(báÙQë g¸Ö@3|¬§§G·Öââ"\Ïñ;NÕÕÕì¥ Ÿ}ö’ɤeÇR«¿¿•••EétÕÕÕlU^ÛµFùË_tçRJ§â ៟¥…UÝ=mùâ87nÜ`eý—_~ÁÕ«W_¨cFy~.Ù8Öá=&Š"ý›:BHir¹ZZZ,‡Í˜yWëm8ÆÐÐPI7§¤4.—«hxŸê](G¹\555X]]=Ð4N$IÂàààêå»ÂåráéÓ§,=ÕŽ™: Ô¬ÜPÝ%äÝEOœ!oŒååeÄãqãâ÷Ž$Ihmm¥/R²D"òòr j§é}ÇÙS1^yySS$I‚Ëå‚×ëÕuš¨îòn£'N„B!„„8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆê8B!„Bˆƒÿ,˜ªÉ=VîâIEND®B`‚pyenphase-pyenphase-901c49f/docs/ct-model.png000066400000000000000000000652161513166356400212270ustar00rootroot00000000000000‰PNG  IHDRV›;ÞèsRGB®ÎégAMA± üa pHYsÃÃÇo¨dj#IDATx^íÝ}|Õ/þn ÐH ”f! ’Ü6<Ô)‘œd¶ÉÖÖÄi4 VLnÖ]{m$ ·b .-äI ”»©ë§:[/7eâ4ba;Ý„RÒÆv¨U¦‹%Ò”ºÀzì8)O¥¿;¿?â™jƲc;²#ÙŸ÷ë¥W¢sÎHãñÈóÕ9ß9G'I’""""º`ÿC[@DDDDãÃÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆHQ]] ›ÍNNƒÁ·Ûp8¬m:&¡P:>ŸO[ED4¥0°""€ÛíÆ=÷܃þþ~”••ÁëõÂét¢²² ,@ ÐnBDD:I’$m!M/áp ,€Ãá@ssóº%K–úúúTu£ …™™ ¯×‹’’m5Ñ”Á+"ÂÙ³gK—.ÕV!==.— ˆF£Új""ŠÁÀŠˆ0cÆ ÀÞ½{!Š¢¶[¶lAss3L&“ª< Áét*9Y‹>Ÿ/îk GûƒN§sH'çi…B!ø|> ‚ jCDt±1°""¤§§Ãáp ££iiiðx<…BÚf*@™™™èèè€×ë…×ëEvv6JKK!¨‚+yˆ°££õõõƒØ¶mZ[[‘­mؼy3¶oß§Ó‰üü|m5ÑÅ%I’ÔÛÛ+y½^I¯×K$’^¯—\.— µÍ%½^/™Íf©··WU^UU%¼^¯R ‡”I’$¹\. €‰DTå^¯W z_ù5¬Vë÷$"Jì±""€ÑhDII úúúÐÔÔ„²²2 TVV"33n·[i …ÐßßÜÜ\FÕëC¯×cïÞ½ªòxŠ‹‹ ‡ 1.^¼Xõ<ÖÓO?=ä=‰ˆ’+""''[¶lAww7‚Á Ìf3*++á÷û¯½öàÖ[oÕlyNFF:::´ÅC¤§§<A€ÅbN§Cff¦¶)QJ``ED‡Ã…Bqó¢ìv;vîÜ 8uê”¶ú‚x<dffâøñãÈÏÏG]]‚Á ªªª´M‰ˆR+"¶mÛ™™‰®®.màŠ+®P=¿á†'NœP•ËÚÚÚ`6›µÅ*¢(bëÖ­ÊÜYN§v»v»]y}"¢TÃÀŠˆpÇwÊËËãöZ•——æÎ öbéõzÔÔÔ i_]]þþ~©Ê```@ùÿÛo¿ X¸paL‹s׆ TeDD©‚3¯0¸¤Mee%Ìf3²³³1oÞ<  ¡¡‘H.— Jû@ €åË—Ãjµ¢°°×^{-Ž9‚­[·Âjµ¢¹¹Y•dn0›6mªU«`2™`±X‰Dàõz±xñb¼öÚkرc²³³QYY‰`0»ÝÄLÍ[FD”t´· ÑôU__/9eº’ÃáêëëµM%ip „ÜÜ\¥­Ùl–¼^oÜéššš$³Ù¬šF!‰¨¶·Z­RSS“2µB¼éâMý@D”,ØcEDDD” ̱""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°"¢¤ …´EDD)Ñ … ÓéT§Ó‰p8¬m:n‚ Àçói‹ÇÅï÷«©p8Œ+V YÜ9Qª««a³ÙTÇF~íq“‰úY‰hêc`E4EI’I’ÐÛÛ ƒÁ€•+Wj›$…ºº:=zTyžžžŽ¾¾>ÕΉâñxððÃã‡?ü¡rl–,Y‚ÌÌL„B!嘃A æ–””h_Šˆ(.VDSœÑhD^^"‘ÀçóAx<èt:`°—Hèt: x<Õkøý~X,èt:¸ÝnUo’ÜCKÛ£”í ƒR'ZZZPZZª¼†öõFÚ7¹mìþ ‚ ÔÇŠF£Øºu+8€œœ`ðØÃåraÏž=ÚMˆˆÆŒÑ'Š"öìٳ٬”µ´´`îܹ×`/,,ÄwÞ I’ðæ›oâøñãJðF±fÍÔÕÕA’$U6ÑhË—/W¶ïèèÀöíÛ‡ÑÜÜ ‡Ã¯×«ì‹ÖHû&{ùå—qìØ1ôöö¢­­ @@U„Ùl†Ýn×V¡¢¢Úb"¢1c`E4EÉùA³gÏF__öíÛ§Ô9ƒ=BÊs£Ñˆõë×cûöí€ÆÆF8% ±ÛíÈÈÈP^ë|<¨ÚÞd2¡¯¯éééÚ¦Cœoßd00ÈÈÈÀ‰'Tõ000‹Å¢-&"J(VDS”œ$Iü~ÿ°ÌÙ³gµE¸âŠ+Ðß߯-—mѨ%rßfΜ‰îînm1QB1°"šæf̘¡-™3g ×ëµÅã2sæLmѨ%rß²²²‰DâNåàv»áv»µÅDDcÆÀŠhšKOO‡ÕjEuu50˜“õÌ3Ï`Ó¦M€U«V¡¥¥E™®! ¡­­MÙ~Μ9Àà°Ýcë³²²ÐÒÒ¢4¢(Âb±(ÏM&Ó°½ZçÛ·±0™L(++C~~¾’ƒ%Š"ª««QYY© 7]VD„ÚÚZìß¿:iii0›ÍÊ&“ õõõX²d t:öìÙ§Ó©lk2™àõz±`Áèt:¼úꫪ,“É„¦¦&äçç+¯_TT¤ä\£¡¡:.noÒHû6V[¶lÁÆñØc)ùg‡F0v¨”ˆh,tÒp·âј°ÇŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„%A …´ÅDD)Ñ£Óéà÷ûa±X`0àñx6› @ Š"t:ª««•í, ¢Ñ(|><A€ÏçSꉈèüXMA§NBww7Þ|óM444Àï÷£°°/¼ðàØ±cp8¨­­„Ãaèõz˜L&@kk+***PRR¢z݉¤Óé ÓéÐÒÒ‚ÌÌLèt:vD”rXMAr@d4QTT„S§N!++ ~¿ð /à‘GA?DQDKK •íW¯^­Y²P(¤?:NU7’«¾÷®úÞÚâ!$I‚$Ip8ƒ$iR;"¢D``E4M˜L&˜Íf„Ãa´¶¶Ân·#77ÄÞ½{‘••¥ÝDÅn·+Á$IÚj""b`E45É=S¢(¢¦¦sç΢°°ÙÙÙ€[o½O=õ0x%ƒüü|Ì™3G[LD”XMA°Ùl˜={6rssát:YYYèèèÀ·¿ým@NN"‘ˆjðbs:Iä•NbŸ>Ñ”¢Óé’j¨Nίzïgj«ˆˆ¦öX%+¢)&™z«ˆˆ¦VDDDD ÂÀŠˆh‚ ¨æïÒétAÛlÒi÷)vfýØ6cåóù81+Ñ``ED# Y«ÐëõªæðjnnVÕ_,òDª’$áÁÄÚµk‡WD4¹XÅ8zô(Ž=ª-žT@`̽bN§X¿~½¶Šˆ&+"š’DQ„Óé„ÅbÅbÓé„(ŠJÛí†Á`€Á`Pêü~?jjjPSS3ªÀ&vÁjN‹Å‚p8¬ª·X,°ÙlA©Ó.t-ïÜnýúõxä‘Gàñx”E´ Â`0(ϵœN'"‘ˆjŒø:áp6›MâˆÙ’ˆÆŠMI»ví‚Á`@ww7º»»qúôi466*u}}}ÊC.s:(**BQQ‘j¸¯´´T•Ï›ƒ$/X-IrssQ]] ):tÝÝÝhooÇwÞ‰mÛ¶ Ù®¤¤ÐëõhooGss3ôz=f̘‚‚TVV*Û466Âår)χsöìYÕó‘^gåÊ•(,,„$IøùÏŽÖÖÖ˜-‰h¬XÑ´äóù†$ÿŽ'Ñ7Ñ´‰Ò‹EYž&Q’áçœ %%%ÈËËS%c˽1‡Â}÷ݧ´õûý#.ø¬Í±Šm»`õ²eËFÁ!Åîîn‚AP[[‹†††¸Ûiõ÷÷ƒË edd(ç@MM 4­‡š1c†ê¹ü:rþUìëD"ƒ‹v¯^½Zµ- +š¢ÑèÅáp¨.–É2ÿSìE|ß¾}X³fr±¦Ñóx<(//ÇâÅ‹QPP€¥K—j›L8¹ç«¹¹íííÞcYYY¨¬¬„ÍfƒÍfCQQÒÓÓëׯG]]Âá0,˰ÁD³Ù¬l+??/¼ðB¡Ðy_‡ˆÆM ===¨««ÓOªp8 §Ó9$ÿe$ééé0›ÍèééÑV]4GÞ8‰_ù½¶8¡®úÞÊR8ãuüøq¬[·v»Ø»w¯R·téR”——+ÏÝn·*)yF‹/FMM’×`³Ù´Í€Á¡¹M›6¡½½íííª±œœtwwcÛ¶mÈÏÏWm+ÀívcçΪrùýN'ü~?ÊËËU¯c6›•áKQUljˆÆŽ¥Ç£$Ûl6%P.!9cÆ hkkS%' Ax<èt: UoW €Åb °X,ÊðJìvrâ³ÏçS’—,Y‚uëÖá7ÞrÕ&=ËB¡úúú0þ| æ½å‡¼_Ú9Œü~¿²ð²ÇãQމ¶×n<ž|þeìxþemqÒÉÏÏÇÚµk!ž|òIdgg+uÊ11 èëëÃ<XµjT¿#mŽÕhÛív;6n܈E‹A<öØc¨­­Õ6ƒ°ÒÒRåœÒ¡µµUùÊ233•}zì±Ç°{÷näää(õ^¯iiiʹår¹ÐÚÚŠ¬¬,¥Í¾}û°cÇØl6Ü}÷ݪãDDã ¥`0(™Ífå¹×ë•rss‡ü_’$)77Wòz½Êv‡CµÕC®ƒ’^¯—‚Á $I’ÔÔÔ¤¼goo¯d6›¥ÞÞ^I’$©³³SÒëõq·ëì씬Vëà;JRYY™TUU%I’$™Íf©³³SÙNnçp8†ì—Ü®··WÒëõÊóÎÎNIþ××׫~v‡Ã!555Iõõõªý­¯¯W¶P×[Ò•ùKWæ?.Ž¿¡­ŽKn?ãÙ&•É¿/Y¼óU>—‰(¹±ÇŠRŠÝnǾ}ûP]] ŸÏ‡“'OâôéÓÀ8’µ9V±weddÀn·ƒC1‘HÐÕÕ…¾¾>Ü}÷Ý¥¥¥èïïW&”ŒÝNKNHÆ`„<ü²gÏ<øàƒJ]lŽUUUJKKÁ÷ÎÈÈPògÒÓÓ•œ¬¬,´¶¶BED£Qtww#''§NBQQŒF#08t!žŒé©J…^«T±~ýz<öØcJ¢û† ðÈ#ƒ7ìÝ»wTIëDtñ1°¢”PXXˆk¯½«V­B^^ž¶É„ËÈÈP’›››!IRÜ`J€äaK 3ap(Êï÷CÅ!C3±V­Z…–––ó&¯F8N™>,ÜøcÀñ÷+õ×Ξ¥ü_Kž6Ὗ=ª­Öx¶!"Jì±"š ‡ÇWz¶l6ªªª€ÁÖW¬X¯×«Ý,)ͼìR\;{–*€’ŸTM7ì±"¢1koÒXÛcœÛ%öX%{¬ˆhLâõ&}&ÍÓbl>y³C[÷=ˆˆR{¬ˆˆˆˆ„=VD4&ñz“ä+½ýv¥ì|úCÏì±"¢)†=VDDDD Â+"“x½I̱"":‡=VDDDD Â+"“±ö&µ=ƹ Q2`Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"J 'N½( (¬”ÉÏOœzGÕ–ˆ(Y1°"¢¤píìYX¿ëÖï: ”­ßuÖ·ªÚ%3VD”f^v)œötm1–ÝüÜ8÷jm1QRb`EDIã‰5Ùªç3/»EYª2"¢dÆÀŠˆ’†¶×нU4‘B¡AÐ]VD”Tä^+öVQ*âZD4&c]Ço¬í1˜´; Vh«ˆ& !??EEEÚ*Åܹsát:µÅDÃb`EDcòÏ?~ð÷ߥ­Šk<ÕÀá½§9 H* aÅŠÈȾgtá…زe‹¶˜hX ¬ˆhB'°"š ¡P›7oFss³¶ŠhܘcEDDD” ¬ˆˆhZš3gòóóµÅD„MK&“ YYYp»ÝªõP(›Í†P(¤jO4 ¬ˆˆhÚzôÑGÑÞÞŽûî»O)›?>V¯^ÌÌLD£QU{¢óaò:M(&¯S²E³gÏFoo/ŒF£¶xW {¬ˆˆhZêêê‚ÃáˆTÀ²eËpüøqm1шXÑ´%Š¢¶HqæÌmÑy1°""¢iÉn·£££ápX[xæ™g°téRm1шXÑ´åõz±dÉøý~¥÷*Ãív£µµÚMˆFÄÀŠˆˆ¦­’’lÚ´ n·³gφN§Ã‚ Fqøðáa󯈆û‰hBñ®@Jò¼UsæÌÉdÒV «$‡QZZª-Vá"¡”ÌXÑtÂÀ*ɉ¢ˆ®®.m1àÅ_ÄÖ­[QVVÆÀŠ’+"šNX¥ Qñè£Âï÷c÷îÝÈÉÉÑ6!J ¬ˆh:aòzŠ …BX´h¢Ñ(:::T%öX¥ŸÏ‡ÒÒRTUU¡¸¸X[M””ØcE©@Eégqù¥ŸÅç/½—}öÓøà¯Ã_>úïôWü壿¢÷Ìûˆ¾7ØËõN¢ïöá½§U¯=ëòÏáöŒëq»ízØçÏSÕ%š¼¢Eee%Àl6cçΜ„™ÆŒU’.° xæ™gà÷ûµ›]°·ÞëC}0ŒçÛ^Ç[ïõ)å¦/pËW¾„[¾<·|e.®=KµÝ…øcïiüz°'ì׿ÿ¢ïþý}¯»Ê€Û3®ÇšÌt\w‡ )ñl6l6òòòo¿ý6žzê)üð‡?dpEcÂÀ*X,lܸ7Üp6oÞ “É„ÖÖVìÛ·cÿ”P¿ûßQû«vøCa¥lÞUzÜn»·g\ç^­j?‘NœzÏ·½ŽçÛ_ÇÉ÷ÎåÀšÌ(ü– 7Mâ¾ÐÔ‡QXX8d+~¥ñ``•Âá0~ó›ßàßø¶mÛ†›o¾«V­‚ÉdÒ6%—ã‘?¡¢å×øeûßx×d.Àª[nBf ûN¢ñׯ¢>Ø©”}Ç6nÇ-XhþU[¢±.µb¸r¢‘0°JQ¢(âí·ßf]3~ ïþ—ðÓƒm(üV ¿eKÊ!··ÞëCí¯ÚQû«6ȹþõ[(ýî7qÅç.Ñ6'ù&¡ºº:Øív¥Œ7 Ñx0°JápgÏžUž¿öÚk¨­­ÅÓO?ùóçsÚ³ÿ8|Û÷¿ñì·ð Ü»l1®¼ârmÓ¤óßgÞÇO^<ŠŠæßŒ3.æ;¿‰^²PÛ”¦y!úáx½ÞqAò´6ò”6››‹Ÿüä'üûJcÂÀ*Øl6ttth‹Á`Pù–Et>ò7Ü_û<žk{ð­¯YPzç7‘>ï‹Ú¦I/|òÏðî ¿ú]7àŽŒëñãÂÛqÉg>­mJSˆ(Џ÷Þ{• '¢¬¬,!AP(—¹aºg^Orò‡\’$Õ# Âáp@’¤QU¡PhȌœ]xúyýï"góÏð\ÛëÐ_þ9TÝ=Ö¤dPéó¾ˆ=Ö ¢èè/ÿžk{9›†×ÿø®¶)M!¸ãŽ;” Êd2aÉ’%hllÔ63»Ý»ÝÎ ŠÆU’›1c²³³µÅ˜3gòóóµÅòÛíJPær¹ÐÙÙ I’ÐÛÛ —˯׫݄¦˜_vt!gËÏðê©w°Ð| šùVÝr“¶YJZuËMhzä{Xh¾¯žz9[~†_vÄŸI›RßÀÀÀÅç000 *;¿ßǃp8 Aâ><v3¢q(0…$"a=£ººª²mÛ¶ñ–â)ìÿ¼ÂÖ}‡wÝú5ü¸`t:¶YÊ“$ ÷ï:€güP¶r ¾ÿíó÷è&AÐÒÒ¢*s8ýÎ4íùbµZQ[[{Abå¼h4 «Õ §Ó‰yóæáäÉ“ðûýèèèSOS8ÆŸþô'|õ«_¶·kîܹ\˜™Æ„=V)¤««kÄÄÍÑ8{öì¹ZΞ=‹Ó§Õ³^ÓÔqßOŸW‚ª‡¿»å…·¹HN:å…·ãáï.lÝw÷ýôym³¤"/®Ëëõª†þGlL†`0¨ìSaa!V®\©m2)L&:::0oÞ¹©@æÍ›7æ  ÒÓÓ‘“““É„’’’!‚‚ÌŸ?_»шXM3r>– ðù|ðxŸ¶Ù¤Š—èït:ÿ}6òáþŸ Cz'&Š»ú9ü 7}éj¼øÈ¿à;ÖéõÍû;Öùxñ‘ÁM_ºÇ#‚»ú9m“„EN§‹‹N§¢(ƒCN‚ Àb±À`0(y;~¿555¨©©Õù$:‹Eu^ú|>X,Øl6‚ ÔÅnçóù Š"Ün·Ònýúõxä‘GàñxT9EÑhCüùÌáp8”ç>ŸƒAyÿp8 Q¡Óé”ãn·ÕÕÕÊñ’Ž×^{Mi3¢(Âï÷ÃétböìÙxî¹çpÅWh›—ßïÇž={ÐÝÝ ŸÏ§z”——¹ŒM{MMMRUU•¶xBÔ××K‘HDy@ ƒª6[0”b?½½½’×ë•ôz½²ïÁ`Pr81[ŽÃᘔŸ×]³_º2ÿqÉî©”úßÿP[=­ô¿ÿ¡d÷TJWæ?.¹kök«ÆëõJ.—Kyîp8”ÏUìÿ{{{%³Ù¬œ^¯Wòz½ªí¨r½×땬V«r–••)ï©='«ªª¤ÜÜܸÛUUUIeeeJ[«Õ*uvvJ‘HDÒëõJ¹×ëUÚi÷Él6K½½½’4øÞ±Ï«ªª”}q¹\ªŸ]¯×K½½½’ËåRöOn7ÚÏT}}½¤×ë%—Ë%555)ï;eee’Õj•ôz½äp8T²²² zmšžØc•Bä\Œh4ª­³@ ·Û ƒÁ€Ç{ 3gÎÔ6™uuuèééÑO*ùÛûhF”””ÀétâÉ'ŸÔV'í¿x {¾ŠË/ù,*‹îÀ¬Ë.Õ6™Vf]v)*‹îÀå—|{¾Ší¿xIÛ$!JJJ——§ôv`ðN5hiiAqq10x>uww8MŠ6Ç*vÒËÕ«W+½(Ë–-Sþ=zÝÝÝÊÝlµµµhhhˆ»–<)¦ÉdBFF†r#KMM ”v±9VV«»víß»¨¨H™þ ¸¸XÉ ËËËCmm-ààÁƒp:ÊÜS÷ÝwŸòÚòâÇ£qÍ5× ;;­­­8räÞ~ûmm“QÛ²e jkkár¹ÐÜܬzlÙ²å‚çÅ¢é‡U ðûý0 ÈÌÌDff&Ìf3APu¯V8†Á`À3Ï<ƒÛn» hooó]/ápXY Þb±¨•á†=<ÚÚÚ°aÆQ6‚  ºº‹ºÁ¹¶äŸYʇ]Ün·R»](RÝJm³ÙðÊ+¯à®»î‚ÍfSådÈà ÃÉËË‹{çäH¯ã÷û•ýÍÏ|¡v¿ü[üè—A@å=wNê¢ÉÉìÆ¹W£òžsÃß?úe»_þ­¶Éóx<(//ÇâÅ‹QPP€¥K—j›L¸¢¢"%(hooÇp7}gee¡²²Rù )w÷­_¿uuu‡Ã°X,ÃcëÖ­CMM¶x»ÝŽþþ~D£QÔÕÕ)€ŽÝn‡ßïDZcÇpÓM7)Ÿ÷xŸÏÑHOOÇ–-[´ÅDãÂÀ*ÉÉÄ”oн½½˜5k–òmq,f̘§Ó‰ŽŽ¼üòËxã7´MF¥´´>ø ÚÛÛqìØ1TVV*ù¥¥¥¸óÎ;ÑÝÝ7ß| …Bزe 222ðôÓO«þˆeffªò™bsÂá0Ž;I’ Š"<صkæÍ›‡îîntww£¯¯Ou»´¼ÝnǶmÛ°~ýzå‚ÓÚÚŠôôt<øàƒxæ™g”mêêê°nÝ:åy<±Ë]Ȇ{h4Š5kÖ`ß¾}$ wÝuÚÚέÉ7^:Å?{°õn‚/k›Lk‚/cëÝçò˜øÙ xéÄ…÷üÆ:~ü8Ö­[»ÝŽìÝ»W©s8¨®®?ÓÚ`|¬ó/ųxñbÔÔÔ(_0l6›¶0˜µiÓ&´··£½½]Õ#–““ƒîînlÛ¶mĹòrrr‰DF‡¼·ßïW½÷ÆQVV¦ê©3™L(//WÚìÙ³Gùÿh½ýöÛPîtOŽ•,(_‚äÇd|¢©‡U’ëêêBFF†jØÀh4â¾ûîáC‡TmGÃd2¡¢¢ÝÝÝøö·¿#GŽ éqŸÿüç¸âŠ+àóù°k×. e-ñ{Ä/Hš™äóòò”®øÕ«WãÔ©S€C‡aïÞ½JOTGGöïßw»X±°¬¬,´¶¶""¢»»û¼Iüz½^[¤¼Ž(Šª×éééÃáPzÒÓÓ‘‘‘¡Ýo7ýHôz=æÎ‹3fh«F¥¬¬ iiiGU q4ì±~ýz¬]»V5ô¨Í±M×{AAÌf³2Œ‰DðÀh›–.]Š+V@ eŽ Z,˜Íæ!IºòþÌž=‡ÆáÇ•6v»F£‹æ Jö5™L¨¯¯Ç’%K`³Ùðì³Ï&|(ðµ?¾‹'ŸàYµŸýô§´M(ŽÏ~úSð¬<7;û“Ï¿Œ×¦Ù¢Í999hooW%ºËCð’$¡½½=îPz²‘“λ»»‡ö™3gÂf³Áív+w_<öØc¸í¶Û”›`ˆFƒkNSÑhDmm-úûû±qãF%/jªÑétèííU.rà&'ì ‚€GydÄ<°d•÷t=~õ»nä/Yߺñå—Lg%ÏPwø8¾õ5 ölX£­¦$ …âÎV¿xñâq}ŽC¡233µÅ*ɰ^#¥öX¥ˆêêj%QÛív_ð·'“É„ââb´··£µµ×^{­¶É”áõz‡L·°jÕ*e†u“É4®?ÆÛÞ£¿Ã¯~×+¯¸¬þ'm5Â#«ÿ W^q9~õ»nì=znáfJ=Ú»0ÇÊn·«n ‰÷`PE£Å« ß$Ï‹300€ÊÊJ8p`ÌA4»Š;WpO=ßúA-~÷‡?ãÉ^Žuß¼Y[M£ôÌK¯à¡ÿhÂ×¾ôEüêçî2£Ôãv»‘——7濉D‰Æ«$'¯·ÕÜܬ,8ºeËìÞ½[5Ì…Í$”\~qì5üî†é UhÝ7o†é üîÆ/Žm½:J:ñ¨ÏçƒÍfSå{Žvª ¢Xì±Jr¡P›7oÒ =\ùxøý~œ:uJ5I %7Çã»ðÛ·zà[—ƒü% µÕ4F?;ÔÒÿû"¾~Ý´üï¿/áBÓC8Æ’%KPQQk®¹FU7cÆŒ1ͱEÄ«$7þ|´µµ Y¾æÅ_ÄÂ…‰¹ fdd`îܹÚbJRãoà·oõàKWêT%È÷–Z1wö,üö­Žo5J]gÏžEFFœN'ìv»êÁ ŠÆŠU’3¨¨¨ÀìÙ³•l‹Å‚ÖÖÖa§+“ÉÄüª"W1¨J¬ï-µ1Ç—¦»ÝQ‡|%¦ˆØ¤s&šO_âÙ0ýS€Î§þæÆ¿6Úd¨®®Æ 7Ü Å=}g°àÁtí|Æ—i›P’ŠFÏ­û¨‹n,äy«V¯^­*çß[+öX¥“ɤ$¯'òC.ŠâOÝêNœzì=­-NJ¿8v |ýË ªAP’v-˨&kÉÃ?w¾¡±íıbŽá _?·pµ|œ§‹Tú ÄÓØØ÷nçÑ’× 4›ÍÚ*¢1c`•äÂá°2¨}ŒuáäxºººPZZª-žVNœz 7þÖ·&ýÅe߯Ï]ðï\t£¶ê‚„B!,_¾³fÍB0D0DQQ¶oß~A|__Ÿê¦Ç“óv¢ÈÇU>ÎÓE*}&‚¼Ø½ßïW¾ÀNÄYšX%¹3f`éÒ¥ªÇÂ… ÑÖÖ†›nºIÛœ.@u뱤¾¸¼7ð¼ý.ù̧qGÆõÚê "÷*ùý~%i·¤¤›6mBCCƒ¶ù¸?~Ç×';2®Ç%Ÿù4^‰þ ï üE[=å%ûg@Kî]---Eiié¸{6çÌ™Ãü*JæX¥(ŸÏ‡™3gŽ{AÐÒÒ¢*Kæ%®úÞÚ¢ Wœ½EY¸vö,mÕEñ‹c¯ážª_àŸ¾fA}‚—_©®®Æ=÷܃ÎÎÎaï‚2 ضm›êœÓét°Z­hooWÊÜn7úúúà÷û¡ÓéàõzQRRN§´æ|óù|¨©©A$^¯‡ËåÂ< ,C$¿lß¾ýýýp8¨¨¨¸ ¼šxÖ<]ÿü]7ªŠïÄw¿‘ØžÁ ÁÏÀð´ËT•(ŠxôÑG8óaqº+öX¥¨Å‹cÿþýÚâQknn†$Iƒp8\²Acæe—âTïi |ð‘¶ê¢9Òu`ÿêù¤ªM"ÈÇ÷ÈçŽ÷t•ŒŸ‰ÒÕÕ…ÊÊJTVV"33Sõ˜î©4vì±Jr¢(¢««K[¬Ìºî÷ûµUc’ȉFS•?Æú]€Á‹Éâ¯~ o¿ 7νZÛô¢ZTZŽ·ÞëGËÿ.Àׯ›£­N¿ßçž{Nþ³Z­øáˆœœøý~¬Y³FYÐÚívC¯×£µµ………(..F8Æ‚ ‰D`2™T=VˆYž)ö|3 p¹\زe‹Ræóù°}ûvôõõƒ=Veeeª6ÇOø¹ûÛ·zàx|®»JcÞû´ÕSRª|†“ˆ»‰…=VI®««kÈ7(yö‡~XÛ|ÌæÏŸ¯ ±Lg3/»Ënþ ö—þOüÇýw%ÝåÝÓÁ[ïõCÿùÏMXPN§~¿’$¡©© °|ùr„ÃadeeŽ; öLÝzë­ÈÎÎVzO[ZZ`µZÇtëïïÇ­·Þª*+))Q‚*ÙÌ™3G|ž(_¿nôŸÿÞz¯ïžž>yVÉþ‰ÉdÓ9G4‘X%¹áV]÷ûý ÷7 yTvãÜ/$ýŤûs‰µi_œ­­J¿ß?¤÷3''Gé jiiÑhDnn.^xá„Ãaôõõ!''wÝuZZZ Š"öîÝ‹ÂÂÔ_ÈX>ÎòqŸêRá30‘&úîkš^¦t`å÷ûát:a0”»Gl6ª««Ç|H4…Á`õ‡, û•xB¡¶ˆâøLš5îc$7ν:é/&ÝîX®>—Ìhuuuxê©sÆ#÷ÝqÇðûýhiiQnCOOO‡ÙlFcc#:::”ž­xâõ*èõz9rDU&'¾_,òqޤ``¥=÷§Êg`"Å»ûzéÒ¥èîîž»¯åëƒ<4>y^9J-S2°EN§kÖ¬Akk+œN'¼^¯2äuÏ=÷`Ñ¢E)31¦ÛíF~~>0˜0¬Óé`0RfÿéÂÉ='X­_¿p:…Bðûýz½^ –²²²ÐßßíÛ·ã¶ÛnS¶ÏÎÎÆŽ;Î; 8oÞ<´µµ! )çï¦M›°uëVTWW# !ÀívÃåri7Ÿ4òq~s0 ¥©-væØGQQN:¥mN4¢)X=úè£hhh€Ëå›o¾‰ŠŠ åƒÒÞÞŽªª*D"‘1 Y˜L&ôõõ©’g'C4E{{;º»»Á `0ÄîÝ»±mÛ6ms¤·ß½ývmqÊ’+ó'&°ÊÉÉA0sª233áv»a³ÙÐÑÑ¡Kòp`¿ªgêÛßþö¨>SÈÈÈPÝmURR¯×‹;v 33k×®…ÓéÄOLþô2ù8§òPàTû \ ‹/Æ¡C‡´ÅD#šrU8Fee%¬V+***”ypbÃår¡££#釨zzz”µ«¢Ñ(úúú`·ÛqÅWàôéäŸÀC<ó>àêY3´U c·Û•ÄuI’Ð××wž(¹Mìg+''’$ ™WM’$ÕÜBF£Q™ê#ön¾’’tww«Þ7öõµ¯#o“è;eòq–;Mm¢(" yìÙ³³f%÷^”|¦\`õì³Ï|ðAm•J^^Þ»áäqïP(ŸÏƒÁ .gÊçóÁb±@— õÕbÍ™3555Ep:ˆF£xñűpáBmsš¢þòÑ_Ÿ¿ô³Ú*šòq–;MmÃÝ}Fr÷u¢‰¢¨ºîèt:8θÃår —Fáv»•ÜdƒÁ \w´Âá0œN§²‹n·{Ì9ÌSÍ” ¬äå2FJ Åà·ó’’Øívm6oÞ¬¬‘&ç6 Çét¢´´‹^¯EEE¨©©ÁæÍ›µMÇÅd2!;;³gÏÆöíÛQ\\ŒÆÆF?~<ð€¶9MQ¬.ÑVÑ3«éa¸»¯›››'ô®éîînø|¾ar ˆ– (--Evv¶’?ÜÑÑÌÌÌ!w÷ŽUvv6ü~?¶mÛ†`0ˆŠŠ ´¶¶Âjµª¦p8Œ%K– ‰ ¾¾Á`¹¹¹Jnæ´&M1f³Yï %’Õj•z{{µÕÉëõ*Ïåö¹¹¹ªv½½½’ÕjÒž&Þ§- ¥O[JWæ?.]™ÿ¸ò<Õ]wÏvéÊüÇ¥3|¤­¢ p惤+ó—®»g»¶*éMÕÏÀT"_;FûˆUUU%ªªªTå½½½’Ùl–ôz½êú@r8ª¶RÌ>Ä»¦i¯[MMM©¾¾^)ËÍÍ•Ìfók¥ü±m§›)7óºÅbA$A¼+Þm«±ë•…B!dff" ÆíÉÒif‘–—âˆ×>`ùòåªöÉìb¬C6úCσ‰»ñž§ºwÿý‘¸ç1%ÖÿûÿWLî*‰¢=çµÏSŲ›¿‚ÿ¸ÿ.mñ„ñûýÊ:—n·•••Ðëõ8|øpÂ{­äkÍùÖg•×t½žÉeò ±ä5?›šš““ ^·â½¼±×(Q‘––¨¨¨@VVŒF£²Èœ9s”œKN‡ÜÜ\ÜwßÐÕ 233•Þ«éhÊ Z,`ðÑ’»Lc§^¸¯¼ò 08{¹ÖW\¡-79ßKÇ–Ó¾»uzÿcMM†÷?þD[DS˜(Šp»Ý8pà¢Ñ(ü~?z{{±mÛ6TWWk›_Tmmm°Z­C‚*¸á†'NœÐVŠÑhÄîÝ»a0°fÍÌž=6› ˜?¾TÉS¥444 ÉKË\dZß\¥íÂJueee£ê†ììì”H.—K)“»0ƒÁ ª­LÛEš››+Ò*Ð¥:V’^¯—ššš¤`0¨ztvvj›O{Suä¦ï?-]™ÿ¸ôçþ3Ú*š=}g¤+ó—núþÓÚª¤7U?) *ÃeUUUªëB¼a´ %_Î÷Ú‡CÒ^¦õz½dµZUe²x×áÞ'^ÛXÁ`Pòz½JZ‹^¯W®9òõs¸m§»)×cu×]纎GšEƒKtPMr8V7ß|30xGÉD9{ö,222““»Ý®z$º{š’ïR›\ùèc€waN3fÌPF9öï߯\ÀéF.¶ŒŒ ttth‹¯½ö`îܹڪQ‰F£…BEQ¹Á«½½MMMèïïW¯={÷îÕ¼Â9>ŸoÚb*¦§§+sT wÛ§ßïGii)¬V«²,Çx,^¼P^^®*E6lP•×üùóÑÝÝ÷ç éC¾ÀŸýðÜŸ&§·˜^ÒÓÓa³Ù Ó锕;ü~?Ö®];dn¶‹íÎ;ïó©b‰¢ˆ;v¨VJ³ÙŒ¶¶6Õ5DEìÙ³Gy.kkkCff¦²ÐºlÑ¢EÀà‚é2ù:«]$ ¡´´¯¾úªª|:™r<ñÄÈÍÍEee%ÒÒÒàt:áóùàñx`³Ù°f͘ÍfÔÖÖj7»Ý‡Ã††å=|>Ÿr&ÂÀÀ¬V+î½÷Þ!·âNçoÓñŠËïœ>«­šñæ·I“µ_òq–;M}$ ííí@LÏP² Ãjµâž{îÇãA @uu5A@$2¹nQQúûû±hÑ"å:8Ü5*++ z½k×®U-1u÷Ýwƒó?Êzè!èõz,Y²¡PÕÕÕX±bôz= b^yz™’•Ñh„ßïG}}=²³³ÑÚÚŠÒÒRlݺLb?vìXB>0?ÿùÏár¹”÷¨©©ÁÆñôÓOk›ŽËÙ³gqúôiœ>}‡R=¦ó7‚óé=¯Ü 5(‹ÿ™=—“A>ε6ãd˜jŸÉf2™’nPÖÜÜ ¯×‹††,_¾÷ÜsÌf3‚ÁàQ˜’’”••¡¯¯¥¥¥hhh@QQ***Tí0xí”× }øá‡‘™™‰åË—šššTw¿›L&¥mee%233ñðÃ#;;[µ Öt4å¦[ ©íÈ'qãÜ«1ó²KµU€Ï¤YµE€OÞŒŸ“*žyé<ôMÈË\€ÿó/ßÑV'œvj‘d1Yûõýÿ%ö;±c]þyIò¬pp¾óSø30Ñ|>jjj‰DTåñ¦* ɔ챢©çÈ'q§÷Üéý¿8óÁGÚjÅ'ovÄ}¤:ó`ÏÉd/ ìñx”©>A’OQ]]­,«a0âæ5úýþ!KoÄ¾Ž A™VDê‹ÝÎb± ļêÄ’³å‹³µUÅhÏLáÏÀD ‡Ãؾ};6oÞŒ`0¨z$bjš^X%9y=§xé0UìåÈÐVOòÔ›îÕVM˜íÛ·cæÌ™èèè@gg'DQÄÊ•+•zŸÏ‡‡~›7oFoo/8€öövÕy …°fÍlܸ’$)½±¯ƒÁ¤ÙC‡a÷îÝXµjÖ¬Yƒ¢¢"ƒAÔÕÕá±ÇSm3‘äã|±‡yþŸŸ¼`ò…ï¾v:¼ûš.‡“œ<ãm¬3gÎ`ýúõ¨««2ãûTqä“xòù—'ýb2Ù³=Å¢Òr¼õ^?Zþw¾~ÝmuBét:”••aË–¿Ï>®]™À`0Àår©ÚD£Q˜Ífeæg¿ß—_~Y•Ï!¯J ÿé¢(*IÃ\ƒ3‰¨ÊDQÄìÙ³'|(ð·oõÀñø.\w•ǼCg•ž <ÿGOîá¼ÐsÂb±àرcq'Þ$ öX%9£Ñ8äTNNvîÜ÷vÙ±gNFg>ø§z´ÅÓš}þ<ÀÑIºØÎœ9Sõ\âå¹rúûûqë­·ªÚÈ «òÌÏN§yyyðù|Ê_¼ž'íÅìôéÓÈÎÎV•iÛLùøÚç_§­š4<ÿ'W4…ÕjU†¤y÷5]öX¥¨P(„Í›7_PRe"^c¢½øÊïñH}+þØû÷åŽï¸×Ξ¥j7üâ7'pOõ~üÓ×,¨ß°F[PÃ%‰ët:TUU¡¸¸:Nµ&Yly[ŸÏ‡íÛ·cÓ¦MX¼x1æÌ™ƒžždffªz¬0x§“L,\¸PÕ†ö+‘Ö<]ÿü]7ªîù.¾»èÜ! Ïÿó“íÝpc‡QZZª-€¸ç!ÑHØc•ä¢ÑèoPùùùXºt©¶ù”³ìæ¯àøŽûñ÷ß5í/&rU¨ëdÜEÆm`@Ýc"'ãßèõz9rDÕ&n¼ñFÀ¡C‡àr¹PRR»Ý“É„3gΨ¶‰gÖ¬YhmmU•i“â'‚$IuØ¿ú%mõ¤ãù~N§ó‚‚* NÚÜÜ÷Á ŠÆŠUŠÒëõü­}ÆŒX¸0yn%Iìfººjæçq³éðñ'Ãsm¯k«nëÖ­ªI{ì1X­V%™wÓ¦M¨¬¬„ßï‡(ЇÃÈÍÍ…ÕjUz±ä)BETWWcýúõšwjݺuèèè€ÏçSÞ2nÖx®íu|üÉßp³épÕÌÏk«/žÿ“#ö‹,‡iÜ´‹Rjðz½ç]hš¦žšƒÇ¤+ó—þç¿ùµU @*++“\.—@ åææYp¼ªªJ2›ÍÊ"­.—KÕ¦³³SYHV¯×KeeeRSS“û§ÇápÄ]$¶¾¾^ym«Õ*ƒAI¯×Oè¯ÿóßüÒ•ùK5i«hŠ«¯¯—䋇d6›%«Õ:äœ':æX¥¨TÈ¢ÄÏ~€ùëÏ-0ÞùÔÿÂÃÚ&4N=}g°àÁtí|Æ—i›Ð%Š"ÒÒÒ†Ìîóù000Àá@&9Q•yZbååå˜5‹9ÓqÆeXa»°ÿع»ó(1äã¹Âv=ƒªi¦«« C–aY¼x1Ž?®*#:VI®«« ™™™ªÇŠ+?ü°¶9Mòj?;ÄÙ´©îð¹ èž&ߌ3âÞqæÌ~¥1c`•äìv;$IR=úúúà÷û9#ð4•³ð«øúuspª÷4ƒ«©;|øï~|ýº9ÈYøUmõ¤n¥… YüBù|>ÕþÄ[¾H„1ïg(š”›Î'==F£Q5•ÇãÁÚµkqß}g’XJ] ¬ˆRP±ãܔխǴU4U-¿bŽëdn’^í—©dXaÁáp(ûÓÑѾ¾¾¤Š¥¹¹wÞy':„C‡¡¿¿‡NŠcO©…U’î›kìc*ýQ£±ùî¢ðµ/}ÑwûðÌK¯h«i žyéDßíÃ×¾ôÅIìééA]]¶xR‰¢·Û7ÀŽÉd‚ßïGÿ˜¶KvÅÅÅÊüU qa`•¤æÏŸ¯¬®îp8àõz•çMMM0›Íxä‘G´›Ñ4Rœðî g>üX[M£pæÃáÝÿs<ÇËãñÀb±Àf³Áf³!+u>ŸƒA©‡Ã‡ÃذaÚÚÚ ‚ªýpt:ü~? t:<R`±X ,‹2¡«v;¹­Ífƒ X´hæÍ›‡Øl6e ®Ÿ7Ò~á¹çžS•‰¢N§&t»Ý¨®®†(Šp:Ðét°X,ÊòHÉ@Û{FQ]]­jC4 ¬’”¼Fàœ9s Š¢2su"× ¼˜†ë‘kŽF¢ÅÛ/§Ó7±u¼äŽ µzñ×ð­¯YðßgÞÇæ½ÿ©­¦Qؼ÷?ñßgÞÇ·¾fÁêÅ_ÓVZ(BCCº»»ÑÞÞŽÕ«WcÛ¶mJ]MM Þ|óMtww£°°¥¥¥HOOÇÓO?ŒŒ 477«zG´ç`¬ôõõ¡··[·nU&_]¿~=Ž;†ææfìÛ·k×®»¬]»Vé™Ù¹s'^y壿¿_ ¤B¡ôzýy{mNŸþûr;üÛår¹ÐØØ Z~¿«V­Â£> uvww´M¶ììlœ:uJUV[[;¥zähr0°Jr===qŸ½âŠ+”åCRE¼`"sI Ù/Ê!ÙxV[Ö¨îðq¼üZjÛ˯¿¥Ü (Çñ²ÛíØ·oª««áóùpòäI%à8zô(ŠŠŠ”Ï±<Ü4íç"Vqq10À8ôôô «« }}}¸ûî»!JKKÑß߯ú¢"o§»ÄPQQ‘ÒK³gÏ<øàƒ1-ã‹w×\^^jkk„Óé„ÑhD4U%ƒçååÅluñÈAdìj&“ O?ýôEª¥ÔÃÀ*ÉÍŸ?mmmJ7: ݰaCÊ­8Ü"§“I¾Ûg,î¸ãޤ bo¸ö xèöÛ[öÆ_ÿöÿi›PýÛÿ‡-‡Ý~n¸ö Ú&cPXXˆk¯½«V­º(ƒÜó%?Fú¢âr¹––APWW§LÝRPP ,QÔÚÚŠ¬¬,í¦*555¸ãŽ;´Å°ÛíèïïG4E]]ÝE9cï ,Ñx0°JrF£‡ÆŽ;0{ölèt:,X°6› Úæ“Âï÷«r9b»Êå<ù!×ɉö‚ Œªk]7B.I8† °Ùl°X,ªž°ØíbÛÊí_yå,[¶ ºar@´DQÄsÏ=§±r¢¯Á`€Á`P† =j£Ñ¨jl6tƒ7h7¾P%wü#\7¿}«îu¾ Åç®y¿}« ®›ƒ’;þQ[=f'Nœ@vv6rrr0sæLÕ0ýâÅ‹QSS£œo~¿_•Ë”ˆafù ˜<´/Ï)Vee%Þ|óM%“‡ûŒF#œN'î½÷^dgglD£Q¸ÝnèõzÕȱ½_7nDYYº»»•Ïd2¡¼¼\i“,é òñ‹íáEååå)÷–’€v¢ó E"I’$eý6I’¤ÞÞ^I¯×K’4¸N\ì)ûÿ`0¨¬Aûˆm[UU%Iƒ¯ûž‡C ƒJÙlVÞ3v;I’¤ÜÜ\©©©Ii+ï«ËåR½¾^¯—z{{ãîWnn®òz^¯Wõ<77Wòz½R$Q^[nWVV&I’$™ÍfÕ{Y­Ö„¯w÷æŸ{¥¯Þÿ¤teþãÒcþƒÚjŠñ˜ÿ teþãÒWïRzóωY®³³SY[.77WªªªR­èõz%½^¯´‘ÏWið|–Ïáxçå|ýŒÈÛÊuÁ`P2›Í’Ãá¬V«j-ÑxÛÉmås\^OÞ‡Ø}ôz½ªý‰·.dSS“¤×ë•÷•?·±çzoo¯j>íqº˜êëë%½^¯ú9× ¤1c`•¢:;;• ÷d‹D"R}}½äõz•?¸Òàä‘þHÆþq—ÿxG[{‘ÿàÉØ…yµÛÅV±Á|’ÿ º\.¥<ö5äÀM~ïØýÐr8Ê{™Íf%Ôî“|Üíð«éÊüÇ¥+ó—~z°M[M’$ýô`›rŒ¿zî÷3݃AÉjµªÊ´ÚHŸã©. JÁ`Pùü‡S@ €ÓéT†´A@aa!*++G}›v¢D£QdggƒÆ&{N¦Ø\’¾¾¾a÷cݺuX¾|9A@nn.vïÞ æ€èõz„B!<÷ÜsÃæ€FäææŽjÈ"??/¼ðB¡,ËuÇ&Ú7o4áGßû6 ìçÍhîü/m“i­¹ó¿PöósIã?úÞ·ñÍ'÷÷“,æÏŸ¯L !‘›L&Øív‚€+VÀëõj7›6仯'ûóKS«$F±víZÜ|óÍXºt©ò°Ùl0 Xºt)f̘¡ÝlÂôôô(yéé骼$mžG4’ç1\ÎÇX8ÕûÚl6Õœ=±vî܉`0ˆææf´··#''G©{ðÁQ^^ŽŽŽŽa“|`Ù²ehmm,]ºT•#âv»•Ü*§Ó ¿ßòòräçç+mÌf³²¿¢(bïÞ½J]¢­½íëxà;™WÕ~œ8õ޶ɴtâÔ;pUí<ðL¬½íëÚ&Ó†ÑhDEEÚÛÛ•ÏEEE0ø…¥¯¯ï¼S,LeɲÌ¥.VI®§§())Q=òòò`±XPRR2©ß¬æÏŸ£Ñ¨$¯_{íµJÑhÄîÝ»±råJX,dgg£¾¾^I€õz½HKKS%¯kçëÍÒ6™VNð\5ÏáýÿŠÕ‹o¦ï~SÛ„ˆ(at’v’J*¢(âí·ßžÖß /„N§Coo¯ÜÉw–””@E,Z´ÇŽöî§TvÇögpô÷ÀM_º?.¸×_{•¶É”÷úßÃý»žÇ«x‹¿ò%<·i¶ ‘J(ÂæÍ›Ï;×ÑpX%¹h4ªÌ`¬5wî\dee¡±±qØÉÿ¦;ŸÏ‡½{÷Âh4BE˜Íflݺ(--E}}½êvñ©¤§ÿ ~Òˆã‘?ásŸý Êÿõv|Ç:_ÛlÊúeGîûéóøð¯Ÿ`¡ù°ëÞU˜£¿BÛŒH…_féB1°Jrápx؉5.\ˆ‚‚äææ¢½½][M¸ï§ÏãÙ£¿<üÝ%ØðáóɦЧ¶_ܵøk(ÿ×ÛµMˆÎ‹½W4 ¬ˆ¦ÿóB[÷ ·~ ?.X1d º©@’$Ü¿ëž=r.,[¹ßÿöÔ$i|Fúâ ÝÝÝÈÎÎV’û‰FƒU ‘»çÌ™3© ë45ü²£ ÷×Àÿ Í×àÇ…+`¹zêä–u¿#âþÚ8y—]òYü¸pÅ´ú¤±)Õ1éS1“&«°víZô÷÷+e¹¹¹øÉO~Â<Éë|÷ï:€Wÿðô—[îv`Õ-7i›¥œÆ_¿ ÏÏ[Ðÿþ‡ƒÉú+pý®ÿGD4 ¬’œ|çZ]]2×’(ŠxôÑG1oÞ¼a'Æ$ÎÇŸü ÷×Àsm¯¾õ5 Jïü&Òç}QÛ4é…OþÞý/áW¿ëÜ‘q~\¸—|æÓÚ¦D#EÇŽÉ'Tåsçβ7¸ÐÄ``•ä†Kž®œh´þãðqlßÿijÜÂ7pï²Å¸òŠËµM“Οy?yñ(*š0θ ›îü&þyÉBmS¢Q‘Æîïï‡^¯‡ÑhD[[\.¶lÙ¢mN4,Nšäf̘w¶ò3gÎ`Ö¬YÚb¢Qûç% qÌ{þ5+PÑüÜøýÁ³§o½×§mžÞz¯ž=-¸ñû?R‚ªÍÊÀ1ï} ªhÜäIƒÛÛÛ±sçNüð‡?Dss3\.–-[¦mN4¢Oýà?ø¶’ÇÕW_Ÿþô§øÃþ€K.¹§NÂÑ£G±qãFlÚ´ iiiÚMˆFí’Ï|ÿt“Ko²à̇á÷êÅ+Ñ?¡öWíx»ï >é%øÒ•?€vÄ~ÄÿÚõK¼ýà;¶ùø·YµÿøuýÑéîîF__–/_Žwß}ÇÇ­·ÞŠK.¹åååXµj•v¢aq(0È9U•••ÀàÚs;wîv¢ñzõÔ;¨ýU;êƒJÙ¼«ô¸Ýv=nϸ7νZÕ~"8õžo{Ï·¿Ž“ïýýÆ §=…ß²ák_J½œ0JN¢("-- »wïÆW¿úU¸Ýn477#`çÎL¹ 1a`EDC¼õ^êƒa<ßöºjXÐônùÊ—pË—çâ–¯Ìŵ³×›õÇÞÓøõïOá×ÿu ¿þý}÷ïï{ÝUÜžq=Öd¦ãº« ªíˆÁï÷Ãív£¯¯‚  »»‘HMMMüKcÂÀ*ɉ¢ˆ®®.m10˜Åeh¢…ºNâùö×ñ|Ûë8ýþ‡ªºkgÏ‚ùjÌWaºÊÓ ¸ræçqù%ŸÁå—~Ÿ¿ô\öÙOヿþ ùèc¼ÿÑ_ñþÇŸà¿þ‚è»}ˆ¼+"ún?"ïˆøcïiÕkϺüs¸=ãzÜn»öùóTuD- ño, «$ …™™©-8vQÓ¤ê|«¿þ¯SøÍ`Ï’6к³.ÿnùò\|ã+sqË—çbÁus´Mˆ&D4E[[ÛiÂá0ž}öYÞHcÂÀ*‰¢ˆ»ï¾^¯—ߦ袊¾Û‡È;¢òoäÝ> ¼ÿ!ÞÿøDÞùûݬŸ¿ô\~ÉgðùÏûwæåŸƒù ƒ=]1ÿ] ÃM_Ã+V)*à…^àV”´®úÞ€÷~ö¨¶Š(i‚€––m±‚9V4VœÇ*…E£Qm×ëEUU¬V+‚Á êÑÛÛË ŠÆŒ=VIn¸Õ×[ZZàõz¹¤ %-öXQªEo¿ý6S+(!X%¹áV_w8ü#@I¥¿ßºº:€ÉdÂC=“ɤmF4"VD4!XQ*q»ÝhmmEQQàäÉ“hmmž}ûø%–Æ„MV”*¢Ñ(²³³ÑÝÝ­*÷ûýxùå—y“ “׉ˆhZëééÅbÑãšk®áMB4f ¬RL(B(⇈(AæÌ™ƒîînˆâßç^€×^{9V4f ¬R„ÏçƒÁ`@ff&233a6›!Âá°¶)ÉdBQQÒÒÒ A€ÍfÃŽ;ðÐCi›ˆU ðù|¨©©AEEz{{!I:;;1kÖ,,Y²dÈ·,"":¿h4 ¿ß())ÁáDZtéR,]º>ø Ž;Æ+3&¯§N‡ÎÎθw¦8NÜ|ó͜ϊ’“×)Ù ·” Ñ…`U’ …B°Z­qƒ*X·n:¤-&""¢‹€U 0Ú"ÅW\¡-""¢QjiiN§ö!‚v¢q(0ɉ¢ˆÙ³g£··7n€åñx[¶lÑV]T ¤d …°aÃ<ýôÓÚ*ÅŒ3†1 ЇU p»ÝhooÇÓO? »Ý \»víBii)"‘,)é0°¢dÇ+š LO<ñ²³³Q^^®”uuuaïÞ½hjjbPEDD”$Øc•â¢Ñ(ÚÚÚàt:µUD{¬ˆh:bUŠëééQVc'""¢‹‹Q‚p(0É…Ãa”––j‹¢(Âh42ù’’‡‰h:b`•ä¢Ñ(µÅŠ“'O"2°¢¤ÃÀŠˆ¦#V)Ž· S²b`EDÓs¬ˆˆˆˆ„UгÛíì­¢Iuä“xñ•ßk‹êªï=¡ôx¥VD4&O>ÿ2v<ÿ²¶˜ˆˆXÑXyã$޼ñœ8õ΄÷Z¥"VD4jOÆôT±×Šˆh(VD4*ro•Œ½VDDC1°"¢Q‰í­’±×ŠˆH—¶·JÆ^+""5VDt^7νÇwÜã;îWÊäç7Îý‚ª-ÑtÆÀŠˆÎkæe—âÚÙ³píìYJ™ü<¶Œˆhºc`EDDD” \+ˆÆ$Þ€ŸI³Æ´›OÞìÐÅ}"¢TÀ+"""¢aI¼Þ$¹ÇJo¿]);ŸþÐó{¬ˆhŠaQ‚0°""""JјÄ¦cò:Ñ9ì±""""JöXјŒ¶7i´íâ¹m‰ˆ.&öX@§Ó yø|>m³I …†ì“ÓéD8VÚø|¾qí§ …BÚâiÃçó 9¶:NÛlÒ ‚ Ú‹Å¿ß¯mvA’áç$š XňŒƒAH’¤Ÿ‹6› ‚ (Rìvòûø|>¥Ý’%K°nÝ:TWW«~ÑhƒAy+ ¡¯¯óçφ9§EQñòx<Ê1‰wÞÑ8IDS)‰H’$IÁ`PÒëõ’$IRoo¯¤×ë¥ÎÎNI’$©³³SŠýh?†<‚Á $I’äp8$—Ë%õööJ’$IV«Uª¯¯—$I’¼^¯äõz•×ÉÍÍ•ªªªân—››+555IRÌþI’$¹\.e¹¼··W ƒCöSü9åòØ÷¯¯¯—rss•v‡Cjjj’"‘ˆ@u,ôz½òó çÊüÇ¥+ó×1ÚvñŒu[¯×+¹\.å¹ÃáPŽ×ëUýü¹¹¹Ê±Ñþž¼^ïß·ÃᤘóH>>MMM’ÙlVêäv’$IUUUÊ{j·ëì씬V«Ò¶¬¬Lªªª’"‘ˆò»—÷¥¬¬L’í~É¿·‘ÎéáΡúúzÉl6+ç`}}}ÜsŠˆÆŽ=V4%E"´µµÁçóáèÑ£èïïtuu!##éééÀàÊùrh´9Vv»]©ËË˃Ñh¬^½§N:t{÷îUz¢:::°ÿþ¸ÛÅPþŸ——‡;v<§Ów›Xz½^[„¬¬,´¶¶BED£Qtww#''===p8ªc‘‘‘¡Ý|Òœ8õü¡0ü¡¿‰ÉÏOœzGÕV«¤¤yyyª¤}ùX:t÷ÝwŸÒÖï÷˜'§Í±jnnVê222”ßNN"‘08¤ØÝÝ­ü¾kkkÑÐÐw;-ùÜ4™LÈÈÈPzjjjPPP ´‹Í±ªªªR†­G:§óòòP[[ hΡS§N¡¨¨H9ŸäL"ºp ¬hʉF£ÈÎÎ/’#]D'ÒÓO?ææf477£»»[u޵nÝ:,_¾‚ 77»wïØívèõz„B!<÷ÜsÈËËÓnª²gÏž¸H£Ñ§Ó‰ƒ¢±±EEEÚ&IáÚÙ³°~׬ßu@)[¿ë­oUµ‹Çãñ ¼¼‹/FAA–.]ªm2áŠŠŠ”ßw{{û°»ÉưjÕ*ÀúõëQWW‡p8 ‹Å“ɤÚV¶jÕ*´´´œ7yÝn·£¿¿Ñhuuuç=‡ˆèÂ1°¢)§§§z½N§éé骼¤ùó磭­MɉF£CòPbÿ?^K—.Eyy¹òÜãñ ›Ã´sçNƒA傜““£Ô=øàƒ(//GGGǰ=¢(¢ºº~¿=ôRÛûU\\Œ§žz 555ÊE|Μ9hiiQŽE8F[[›²Íd›yÙ¥pÚϱ–ÝüÜ8÷jm±ÊñãDZnÝ:Øív `ïÞ½Jöwáv»U¿‹Øã4^‹/FMMrî%hÒ …B0èîîF{{;***”ž£œœtwwcÛ¶mÈÏÏ×nª0p8hkk;ï9½qãF”••¡»»[9‡æÎ«Ú_æX%+šræÏŸ£ÑË`òúµ×^«ÔFìÞ½+W®„ÅbAvv6êëë• ›×ëEZZšêB“™™©šC(Þ” Z0›ÍJ¯D$Á< m ^øW¬XA`0`³Ù”‹¤<Œ·qãFífÊþÌž=‡ÆáÇ•ŽU«V¡¡¡n·Ðô’ÈmL&êëë±dÉØl6<ûì³u(žXs®§Q6ó²KQ”uþ}ÊÏÏÇÚµk!ž|òI¥Çƒ¿ 9IÛ`0 ¯¯Où]ÈÇ)6jiiQý¾G3¿“ÝnÇÆ±hÑ"‚€Ç{L‚Ó’!›Í›ÍƒÁ  ôŠŠŠÐÚÚ·÷1ÖÂ… ñòË/Ÿ÷œ–ÆØžJ§Ó‰ÜÜ\¤¥¥ Ñøpæu¢‹L§Ó¡··W¹Ê[II DQÄ¢E‹pìØ±óæWM–ÑΊ>ÚvZëwPò¬œötì,X¡m’Ò|>°eË¥L§Ó)C‡±¿"J=ì±"ºÈ¼^¯’ô,O·°jÕ*ø|>Ìž=›7oNš j2ȽV£í­J5‡ÇWýΫªª€ÁkïÞ½ª¤u"J-ì±"¢1mOÔhÛÅ#'°OµÞ*"šúØcEDc²ìæ¯`ÙÍ_Ñ'Ôk²§doM}ì±"¢ q!=VDD©Š=VDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆhÔA@(ÒÑ VDS@(‚ ðx<°X,0 Êz‡6› @\°Y§Ó©¦¶X,ˆF£ðù|ðx<aTë!ÑP ¬ˆ¦ˆ––,[¶ ÝÝÝ8|ø0Ö¬Yƒh4ŠÂÂB¼ð €cÇŽÁáp( ‡ÃaèõzeaæÖÖVTTT Y§N^Œ¸¥¥EY”šÁÑP ¬ˆ¦‡Ã»ÝHOO‡Ãá@OO²²²”Þ«^x<òúûû!Š"ZZZPXX¨¼ÆêÕ«• +–$I$ ‡Á`’$ ¾.” JÇ ˆR+¢)Îd2Ál6#£µµv»¹¹¹8xð öîÝ‹¬¬,í&Ess³À%:h#"š, ¬ˆ¦ˆ¶¶6„Ãa`pˆ¯¥¥sæÌ¢°°ÙÙÙ€[o½O=õ0xV~~¾òšDD4+¢)"##ÕÕÕ°X,X²d êëë• )++ øö·¿ ÈÉÉA$Q ކÓéS FD4Ýpf¢)  aóæÍhnnÖV]4 7þp|ÇýÚ*"¢)‹=VD4!Žï¸ŸAM;ì±""""JöX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`E4Øl6èt:èt:8N„Ãa¥Þï÷# ©¶IFÑhN§ƒ:‹>Ÿ¢(" )?Ÿö‘ ?¥VDÓT4ÅòåËQXXI’ÐÛÛ ƒÁ€•+W*mêêêpôèQÕvÉçóÁï÷k‹GFaµZa0ÐÑÑI’°oß>ìÝ»wß}7ìv;$I‚$Iðz½p8Ês»Ý®}9"¢ ÂÀŠhšêéé¬Zµ `4ñÐC¡¨¨ ZZZPZZ N§lçóù”ž!›Í¦êá‚ @€ÇãÁ`€ÅbÒÞï÷Ãb±@  ##ìM³X,JTìv±ž|òIddd ¢¢&“ žžŽ††´´´ j7!"š8M[V«U2›ÍRUU•‰D´Õ’Ãá¼^¯ò¼©©I2›ÍRoo¯ò\¯×+χ¤×ë¥`0(I’$Õ×׫ÚWUUI‡C’$IŠD"ªmå×–ëH’$IRgg§ªm,½^/Õ××k‹ãòz½ÊûMöXMcÍÍÍØ¼y3> ³Ù ‹Å‚@  m¦xæ™gPTT£ÑÈÉÉÙlFcc£ÒfÓ¦MÊ[FFöíÛ§´Ÿ9s&ZZZ”¶Ã9xð ÒÓÓÁ(³ÙŒ®®.mSô÷÷ãšk®Ñ] ¬ˆ¦1£Ñ§Ó ¿ßI’°qãF,_¾|Øa·Ó§Ok‹`4100 -œ={Û¶mƒÍfƒÓéÄË/¿¬Ô™L&dgg#-- ‚ `ýúõØ·o```mmmÊ¢ ˆD"qó½ôz=Þ~ûmm1ÑEÁÀŠhšòûýðx<ª²ââb8Ža{•fÍš¥-‚(Š˜9s¦¶°mÛ6Ü|óÍhoo‡ßïG^^žR‡ÑÑѾ¾>477£»»[顚9s&²³³ÑÜܬ<úúúPRRóêç8NÔÕÕi‹F¡Óé˜cED“ŠÑ45þ|lݺÕÕÕJ™ßïGKK 0ث۵nÝ:ÔÔÔ@E@(B$Qàµb{¸DQDyy¹ò<==]INî!"++ JÏ™(ŠÃS>ôÐChkkƒÇãQ‚¨p8ŒÜÜ\äææ* íDD“Ñ4•žžŽ¦¦&ÔÖÖ*ÍSO=…¦¦&¥ç¨¸¸ ÊœO999(**BZZt:6l؀Ç+9TZ^¯555Ðét¸ûî»±dÉ¥.`Ö¬YÊÔ’$a2™°sçN¬\¹:iii(**BNNNÌ«Ÿc2™ÐÑÑH$«Õ N‡•+WbõêÕøÉO~¢mND4¡t’ü׌ˆhUWWãðáêy«œN'–,Y‚ââbU["¢TÁ+"º(V­Z¥Ìo%, Ìf3ƒ*"Jiì±""""JöX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠhðù|ÐétC‹n·ÑhT» ƒN’$I[HDS‹ÏçCii)–.]ª”ïÝ»Ðëõèèè€ÉdRm7Z¢(¢«« sæÌòÑh===˜?>ŒF£ªŽˆhªaÑ4²téR”””(öövx½^ô÷÷£±±QÛ|Ôººº™™÷5‘™™‰®®.mÑ”ÃÀŠhš[¼x±¶ˆˆˆÆ‰Ñ4W^^ `ùý~Øl6UN–Çã(ŠJN‡ÌÌL@ii©Ò6 A§Ó¡´´™™ NA”m ¨ÞÃf³Áçó©Ú &OLE¸Ýnèt:ø|>Øl6 Õ>ɪ««¡Óé´UDDâS?øÁ~ -$¢©åÈ‘#øÕ¯~…O}êSèééÁ‘#GpäÈ|ÿûßÇÁƒáõz±fÍÕ6>Ÿ÷Üsnºé&ìܹ.— —\r ¶nÝŠ³gÏbùòå€Ë.» iiièèè€Ãá@QQ²²²°hÑ"üÃ?ü>õ©O!‰ÀåraõêÕøÇüGÜxãÀ`àöÝï~™™™ðù|¸ûî»ñþûïcÛ¶møä“OðOÿôOÊþÈ?C8F{{;\.–.]Šo¼»wïÆ×¿þuåue.— ~ø!jkkUåDDF"¢)ÏëõJâ>Ìf³äõz¥ÞÞ^Õ6f³Y2›Íª2I’$‡Ã!iÿtƒA €äõzUåRÌ{ƒAm•¤×ë¥ÜÜ\m±²M$Rær¹Tm{{{%½^/9Uy$‰Ûžˆh"q(hñz½$IyD"¡´´wß}·ªm]]öíÛ§*Ã`|"„B!ô÷÷ãæ›oF(R=fΜ 8xð v3TTT¨žF8N´´´¨¦·-..ŽiMD4±XMc&“ %%%p¹\hiiQå"ÙívtuuÁívC UÎÔ…zíµ×€Á¼¬ÌÌLÕãž{î h¶ŠOžbïJ¬­­…ÙlFzzzLK"¢‰ÅÀŠˆ0oÞ<À‰'”2›Í¦ä]­_¿@0„ËåRÚ$B0Tõ¢Å>JJJ´ÍãJOO‡ÕjEMM 08wVGG6nܨmJD4¡X‘B‚ èèè€×ëEEErrr`·Ûa·Û• ìBÝpà €_|Q[…h4 ŸÏ‡P(¤­Öƒ>ˆH$‚@ €]»v²²²´Íˆˆ&+¢iNE¥§GDþøÇ?À»ìÂá0¶oß®*/»Ý³ÙŒ†††!S%466¢´´gΜQ•$++ z½/¼ðàp8†ÌOD4Ѹ¤ Ñ40Ü’6'Ož„ßïG?ÊÊʰeË`°ÇÈl6C¯×£¢¢×\s ^|ñE444Àjµ¢¡¡Ú?ƒ°iÓ&P†ñÂá0,X«ÕŠÕ«Wcîܹp:À`ÏØòåËa6›±qãFÜpà xñűuëVX­V´··+¯/ÿ Ú÷åv»QYY ¨¯¯WÞ‡ˆhÒho$¢©g¤é‡T__¯ÝD ƒ’ÕjUÚåææJÊki555If³YiËëõJz½^y¿XÁ`PÊÍÍU¶3›ÍRYYÙé†{ßXÊëh·'"š ì±"¢)Cîs¹\C¦e "š ̱"¢)£ºº——§­""šì±"¢”çóù000€­[·Âáp ¹¹YÛ„ˆhR0°"¢”§Óé‡^¯—“‚ÑEÃÀŠˆˆˆ(A˜cEDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""JVDDDD ÂÀŠˆˆˆ(AX%+"""¢a`EDDD” ¬ˆˆˆˆ„Q‚0°""""Jÿ Îá)ùûŸÉIEND®B`‚pyenphase-pyenphase-901c49f/docs/data.md000066400000000000000000000010051513166356400202320ustar00rootroot00000000000000# Data The pyenphase package collects {py:class}`~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 a common denominator. Additional endpoints [can be requested](./requests.md#requests), but require application logic. ```{toctree} :maxdepth: 3 :hidden: data_production data_consumption phase_data data_inverters data_ensemble data_ctmeter data_raw endpoint_json known_issues ``` pyenphase-pyenphase-901c49f/docs/data_consumption.md000066400000000000000000000176561513166356400227130ustar00rootroot00000000000000# System_Consumption data This is the aggregated energy consumption by the house, as reported by the Envoy, class {py:class}`~pyenphase.models.system_consumption.EnvoySystemConsumption`. This is often referred to as total consumption. It is only available for metered Envoy with an installed and configured consumption CT Meter, either for net or total consumption. ```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}') ``` ## System_Consumption_Phases For [metered Envoy with multi-phase installations](./phase_data.md#phase-data), consumption phase data is available in Envoy attribute {py:attr}`~pyenphase.EnvoyData.system_consumption_phases` keyed by {py:class}`~pyenphase.const.PhaseNames`. ```python from pyenphase.const import PhaseNames, PHASENAMES data: EnvoyData = await envoy.update() if envoy.phase_count > 1 and data.system_consumption_phases: for phase in 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 {data.system_consumption_phases[phase].watt_hours_lifetime}') print(f'{phase} Last7DaysEnergy {data.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[PHASENAMES[0]].watt_hours_lifetime}') ``` ## Data sources The data is provided by one of the [updaters](updaters.md) below, ordered in their probe sequence. This data set is identified by the {py:class}`pyenphase.const.SupportedFeatures` flags {py:attr}`~pyenphase.const.SupportedFeatures.TOTAL_CONSUMPTION` or {py:attr}`~pyenphase.const.SupportedFeatures.NET_CONSUMPTION`, based on which consumption CT is installed. The first updater probe that returns either of the two feature flags will be used. ### {py:class}`~pyenphase.updaters.production.EnvoyProductionJsonUpdater` This is the default updater for consumption data. It provides data for aggregated phases and individual phases. Data is measured/calculated by the Envoy. | | | | | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | | endpoint | [`/production.json?details=1`](endpoint_json.md#productionjsondetails1) | | | json path aggregated | `consumption[?(@.type=='eim' && @.activeCount > 0 && (@.measurementType == 'total-consumption' \|\| @.measurementType == 'net-consumption'))]` | | | json path phases | `consumption[?(@.type=='eim' && @.activeCount > 0 && ((@.measurementType == 'total-consumption' \|\| @.measurementType == 'net-consumption'))].lines[\*]` | | | | | | | data | json node | uom | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watt_hours_lifetime` | whLifetime | Wh | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watt_hours_last_7_days` | whLastSevenDays | Wh | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watt_hours_today` | whToday | Wh | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watts_now` | wNow | W | ### {py:class}`~pyenphase.updaters.production.EnvoyProductionUpdater` This is an alternative updater for consumption data if the standard updater data is not available. It only provides data for aggregated phases. Data is measured/calculated by the Envoy. | | | | | --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | --- | | endpoint | [`/production`](endpoint_json.md#production) | | | json path | `consumption[?(@.type=='eim' && @.activeCount > 0 && (@.measurementType == 'total-consumption' \|\| @.measurementType == 'net-consumption'))]` | | | data | json node | uom | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watt_hours_lifetime` | whLifetime | Wh | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watt_hours_last_7_days` | whLastSevenDays | Wh | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watt_hours_today` | whToday | Wh | | {py:attr}`~pyenphase.models.system_consumption.EnvoySystemConsumption.watts_now` | wNow | W | pyenphase-pyenphase-901c49f/docs/data_ctmeter.md000066400000000000000000000344261513166356400217720ustar00rootroot00000000000000 # Current Transformer Data This section documents CT data for Envoy‑metered systems via {py:class}`~pyenphase.models.meters.EnvoyMeterData`. Depending on how many and which CT are installed, data is available in: - {py:attr}`pyenphase.EnvoyData.ctmeters`[{py:class}`~pyenphase.models.meters.CtType`] Legacy per‑type attributes remain for compatibility: - {py:attr}`pyenphase.EnvoyData.ctmeter_production` - {py:attr}`pyenphase.EnvoyData.ctmeter_consumption` - {py:attr}`pyenphase.EnvoyData.ctmeter_storage` These map to their counterparts {py:attr}`pyenphase.EnvoyData.ctmeters`[{py:class}`~pyenphase.models.meters.CtType`]. In some future version these may be deprecated. There are multiple CT types that can be installed. The CT meter types are enumerated as `production`, `storage`, `net-consumption`, `total-consumption`, `backfeed`, `load`, `evse` and `pv3p` by {py:class}`pyenphase.models.meters.CtType`. One or more of these can be installed and enabled. For multi-phase configurations, there will be one per phase. ```python data: EnvoyData = await envoy.update() production_ct = data.ctmeters[CtType.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 CTs are installed, use the Envoy property {py:attr}`~pyenphase.Envoy.ct_meter_count`. You can identify which CT meters are available via {py:attr}`pyenphase.Envoy.ct_meter_list`. To test presence of individual CT meters use {py:meth}`pyenphase.Envoy.meter_type` with a {py:class}`~pyenphase.models.meters.CtType` argument. The consumption CT can be either `net-consumption` (installed at the grid boundary) or `total-consumption` (measuring house load); see [ct-model](#ct-model) below. Which one is installed, is available in {py:attr}`pyenphase.Envoy.consumption_meter_type`. The IQ Metered collar includes an embedded `net-consumption` CT. ```python how_many_ct = envoy.ct_meter_count meter_list = envoy.ct_meter_list consumption_ct = 'installed' if envoy.consumption_meter_type else 'not installed' production_ct = 'installed' if envoy.meter_type(CtType.PRODUCTION) else 'not installed' storage_ct = 'installed' if CtType.STORAGE in meter_list else 'not installed' print(f'This Envoy has Production CT {production_ct}, Consumption CT {consumption_ct}, and Storage CT {storage_ct}') ``` ## Consumption CT options The consumption CT can be installed in two configurations: `Solar + Load` or `Load only`. The attribute {py:attr}`~pyenphase.Envoy.consumption_meter_type` indicates whether the CT is operating in `net-consumption` or `total-consumption` mode. In `net-consumption` mode, {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` reports cumulative site import (energy received from the grid), while {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` reports cumulative site export (energy sent to the grid).[^1][^2] In `total-consumption` mode, the CT reports only the house load. {py:attr}`~pyenphase.models.meters.EnvoyMeterData.active_power` is the instantaneous power; its sign reflects the direction of energy flow. [^1]: Provided the CT is installed on the main grid entry. Refer to the [CT Model](#ct-model) for delivered and received directions. [^2]: Variations between firmware releases may exist. ```python if (cttype := data.consumption_meter_type) == CtType.NET_CONSUMPTION: grid_import = data.ctmeters[cttype].energy_delivered grid_export = data.ctmeters[cttype].energy_received grid_power = data.ctmeters[cttype].active_power else: print("No net consumption CT installed") ``` ## Production CT Options The production CT measures solar production. {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` reports the energy generated by the solar array, while {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` reports energy consumed by the solar hardware. The latter is typically minimal (e.g., inverter consumption during dawn and dusk).[^2] ## Storage CT Options The storage CT measures battery charge and discharge. {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` reports energy discharged from the battery, while {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` reports energy charged to the battery.[^2] ## Backfeed CT Options The backfeed CT measures energy fed back from the Combiner to the switchboard. {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` reports energy fed back, while {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` reports received from the switchboard.[^2] ## Load CT Options The load CT measures energy flow between the combiner and backup loads (installations may vary with backup and non‑backup loads). Per the CT Model, {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` is energy towards the switchboard, and {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` is energy from the switchboard.[^2] ## EVSE CT Options The EVSE CT measures energy flow between the combiner and the EV charger. Per the CT Model, {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` is energy towards the switchboard, and {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` is energy from the switchboard.[^2] ## PV3P CT Options The PV3P CT measures solar production by third party PV. {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` reports the energy generated by the solar array, while {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` reports energy consumed by the solar hardware. The latter is typically minimal (e.g., consumption during dawn and dusk).[^2] ## CT Model Below is a generic model for installed CTs. Each CT can be considered as facing the switchboard and reporting energy delivered to the switchboard in its `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. When a combiner is used, several other CT types may be available. ![ct-combiner-model showing optional CT configuration](ct-combiner-model.png) > NOTE > > - This in no way represents a configuration direction, as actual configuration is driven by local rules, installer designs and Enphase installation guidelines. Variations may exist, based on specific needs or rules. This merely describes a simplified view and naming conventions used in this documentation to clarify integration operation. Refer to [Enphase documentation](https://enphase.com/installers/resources/documentation/communication) for more information. > - Some element positions, including PV3P, are assumed positions and still need confirmation. > - This is an independent publication and has not been authorized, sponsored, or otherwise approved by Enphase Energy, Inc. It is loosely based on Enphase technical brief “PCS integration in 4th-generation Enphase Energy Systemsâ€. ## Dual CT attributes, single production report attribute An Envoy metered with CTs installed, sources production and consumption data from the CT meters. The [system_production](data_production.md#system_production-data) data is collected from the production CT. The [system_consumption](data_consumption.md#system_consumption-data) data represents total house load and is either collected from the consumption CT in `total-consumption` mode or calculated by the Envoy from both production and consumption CTs when the consumption CT is in `net-consumption` mode. A single increasing/decreasing total of import and export is reported by the [`/production.json?details=1`](endpoint_json.md#productionjsondetails1) in `net-consumption` as `whLifetime` for energy and `wNow` for power. CT readings provide two monotonically increasing energy properties, `actEnergyDlvd` and `actEnergyRcvd`; power is reported in a single value `activePower`. ## Multi-phase CT For [metered Envoy with multi‑phase installations](./phase_data.md#phase-data), CT phase data is available in: - {py:attr}`pyenphase.EnvoyData.ctmeters_phases`[{py:class}`~pyenphase.models.meters.CtType`][{py:class}`~pyenphase.const.PhaseNames`] Legacy per‑type attributes remain for compatibility: - {py:attr}`pyenphase.EnvoyData.ctmeter_production_phases` - {py:attr}`pyenphase.EnvoyData.ctmeter_consumption_phases` - {py:attr}`pyenphase.EnvoyData.ctmeter_storage_phases` Phase data is only populated if CTs are installed on more than 1 phase for production and/or consumption phases. To detect if multiple phases are reporting, use the Envoy property {py:attr}`~pyenphase.Envoy.phase_count`. ```python data: EnvoyData = await envoy.update() if envoy.phase_count > 1: for phase, phase_data in data.ctmeters_phases.get(CtType.PRODUCTION, {}).items(): for key, value in vars(phase_data).items(): print(f'{phase} {key}: {value}') ``` ## Data sources The data is provided by the [updaters](updaters.md) below. This data set is identified by the {py:class}`pyenphase.const.SupportedFeatures` flag {py:attr}`~pyenphase.const.SupportedFeatures.CTMETERS`. In addition it returns {py:attr}`~pyenphase.const.SupportedFeatures.THREEPHASE` or {py:attr}`~pyenphase.const.SupportedFeatures.DUALPHASE` to signal if a multi-phase mode is active. ### {py:class}`~pyenphase.updaters.meters.EnvoyMetersUpdater` This is the default updater for CT data. It provides data for aggregated phases and individual phases. Data is measured/calculated by the Envoy. | | | | | ------------------------------------------------------------------- | ------------------------------------------------------------------------ | --- | | endpoint config | [`/ivp/meters`](endpoint_json.md#ivpmeters) | | | endpoint data | [`/ivp/meters/readings`](endpoint_json.md#ivpmetersreadings) | | | json path config | `$` | | | eid of production | `[?(@.measurementType=='production' && @.state=='enabled')][eid]` | | | eid of consumption | `[?(@.measurementType=='net-consumption' && @.state=='enabled')][eid]` | | | | `[?(@.measurementType=='total-consumption' && @.state=='enabled')][eid]` | | | eid of storage | `[?(@.measurementType=='storage' && @.state=='enabled')][eid]` | | | json path aggregated | `[?(@.eid==)]` | | | json path phases | `[?(@.eid==)].channels[*]` | | | | | | | class data | json node | uom | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.eid` | eid | | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.timestamp` | timestamp | | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_delivered` | actEnergyDlvd | Wh | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.energy_received` | actEnergyRcvd | Wh | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.active_power` | activePower | W | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.power_factor` | pwrFactor | | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.voltage` | voltage | V | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.current` | current | A | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.frequency` | freq | Hz | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.state` | state | | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.measurement_type` | measurementType | | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.metering_status` | meteringStatus | | | {py:attr}`~pyenphase.models.meters.EnvoyMeterData.status_flags` | statusFlags | | pyenphase-pyenphase-901c49f/docs/data_ensemble.md000066400000000000000000000072461513166356400221210ustar00rootroot00000000000000# 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-pyenphase-901c49f/docs/data_inverters.md000066400000000000000000000204221513166356400223370ustar00rootroot00000000000000# Inverter data Individual inverter data, available for all Envoy models as of firmware 3.9, class {py:class}`~pyenphase.models.inverter.EnvoyInverter`. ```python for sn, inv in data.inverters.items(): print(f'{sn} sn: {inv.serial_number}') print(f'{sn} watts: {inv.last_report_watts}') print(f'{sn} max watts: {inv.max_report_watts}') print(f'{sn} last report: {inv.last_report_date}') print(f'{sn} panel output: {inv.dc_voltage}V @ {inv.dc_current}A') print(f'{sn} output: {inv.ac_voltage}V @ {inv.ac_current}A {inv.ac_frequency}Hz') print(f'{sn} temperature: {inv.temperature}°C') print(f'{sn} energy produced: {inv.energy_produced} Wh') print(f'{sn} energy produced today: {inv.energy_today} Wh') print(f'{sn} lifetime energy produced: {inv.lifetime_energy} Wh') ``` ```{note} If the `/ivp/pdm/device_data` endpoint is not supported by the Envoy firmware, each {py:class}`~pyenphase.models.inverter.EnvoyInverter` will have `None` for the detailed attributes: `dc_voltage`, `dc_current`, `ac_voltage`, `ac_current`, `ac_frequency`, `temperature`, `energy_produced`, `energy_today`, and `lifetime_energy`. ``` ## Data sources The data is provided by one of the [updaters](updaters.md) below, ordered in their probe sequence. The base data set is identified by the {py:class}`pyenphase.const.SupportedFeatures` flag {py:attr}`~pyenphase.const.SupportedFeatures.INVERTERS` and {py:attr}`~pyenphase.const.SupportedFeatures.DETAILED_INVERTERS` for inverter details. First updater probe that returns the {py:attr}`~pyenphase.const.SupportedFeatures.INVERTERS` feature flag will be used. ### {py:class}`~pyenphase.updaters.device_data_inverters.EnvoyDeviceDataInvertersUpdater` This is the default updater for inverter data. It provides data for individual inverter production data as well as inverter device details. Data is measured/calculated by the Envoy. | | | | | ------------------------------------------------------------------------ | ------------------------------------------------------------ | --- | | endpoint | [`/ivp/pdm/device_data`](endpoint_json.md#ivppdmdevice_data) | | | json path | `[?(@.devName=='pcu')]` | | | | | | | data | json node | uom | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.serial_number` | `sn` | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.last_report_date` | `channels[0].lastReading.endDate` | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.last_report_watts` | `channels[0].watts.now` | W | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.max_report_watts` | `channels[0].watts.max` | W | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.dc_voltage` | `channels[0].lastReading.dcVoltageINmV` | V | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.dc_current` | `channels[0].lastReading.dcCurrentINmA` | A | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.ac_voltage` | `channels[0].lastReading.acVoltageINmV` | V | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.ac_current` | `channels[0].lastReading.acCurrentInmA` | A | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.ac_frequency` | `channels[0].lastReading.acFrequencyINmHz` | Hz | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.temperature` | `channels[0].lastReading.channelTemp` | °C | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.lifetime_energy` | `channels[0].lifetime.joulesProduced/3600` | Wh | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.energy_produced` | `channels[0].lastReading.joulesProduced/duration/3.6` | Wh | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.energy_today` | `channels[0].wattHours.today` | Wh | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.last_report_duration` | `channels[0].lastReading.duration` | s | ```{note} Raw fields for dc/ac voltage/current/frequency are provided in milli‑units (mV, mA, mHz) by the endpoint and are converted to V/A/Hz by the model. ``` ### {py:class}`~pyenphase.updaters.api_v1_production_inverters.EnvoyApiV1ProductionInvertersUpdater` This is the updater for base inverter data. It only provides data for individual inverter production data. Data is measured/calculated by the Envoy. | | | | | ------------------------------------------------------------------------ | --------------------------------------------------------------------------- | --- | | endpoint | [`/api/v1/production/inverters`](endpoint_json.md#apiv1productioninverters) | | | json path | `$` | | | | | | | data | json node | uom | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.serial_number` | `serialNumber` | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.last_report_date` | `lastReportDate` | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.last_report_watts` | `lastReportWatts` | W | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.max_report_watts` | `maxReportWatts` | W | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.dc_voltage` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.dc_current` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.ac_voltage` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.ac_current` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.ac_frequency` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.temperature` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.lifetime_energy` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.energy_produced` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.energy_today` | not available | | | {py:attr}`~pyenphase.models.inverter.EnvoyInverter.last_report_duration` | not available | | pyenphase-pyenphase-901c49f/docs/data_production.md000066400000000000000000000236011513166356400225060ustar00rootroot00000000000000# System_Production data This is the aggregated solar production data, as reported by the Envoy, class {py:class}`~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}') ``` ## System_Production_Phases For [metered Envoy with multi-phase installations](./phase_data.md#phase-data), production phase data is available in {py:attr}`~pyenphase.EnvoyData.system_production_phases` keyed by {py:class}`~pyenphase.const.PhaseNames`. ```python from pyenphase.const import PhaseNames, 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'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'watt_hours_lifetime : {data.system_production_phases[PHASENAMES[0]].watt_hours_lifetime}' ) ``` ## Data sources The data is provided by one of the [updaters](updaters.md) below, ordered in their probe sequence. This data set is identified by the {py:class}`pyenphase.const.SupportedFeatures` flag {py:attr}`~pyenphase.const.SupportedFeatures.PRODUCTION`. First updater probe that returns the feature flag will be used. ### {py:class}`~pyenphase.updaters.production.EnvoyProductionJsonUpdater` This is the default updater for production data. It provides data for aggregated phases and individual phases. Data is measured/calculated by the Envoy. | | | | | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | --- | | endpoint | [`/production.json?details=1`](endpoint_json.md#productionjsondetails1) | | | json path aggregated | `production[?(@.type=='eim' && @.activeCount > 0)]` | | | json path phases | `production[?(@.type=='eim' && @.activeCount > 0)].lines[*]` | | | | | | | class data | json node | uom | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_lifetime` | whLifetime | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_last_7_days` | whLastSevenDays | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_today` | whToday | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watts_now` | wNow | W | ### {py:class}`~pyenphase.updaters.production.EnvoyProductionUpdater` This is an alternative updater for production data if the standard updater data is not available. It only provides data for aggregated phases. Data is measured/calculated by the Envoy. | | | | | ------------------------------------------------------------------------------------------- | --------------------------------------------------- | --- | | endpoint | [`/production`](endpoint_json.md#production) | | | json path | `production[?(@.type=='eim' && @.activeCount > 0)]` | | | class data | json node | uom | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_lifetime` | whLifetime | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_last_7_days` | whLastSevenDays | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_today` | whToday | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watts_now` | wNow | W | ### {py:class}`~pyenphase.updaters.api_v1_production.EnvoyApiV1ProductionUpdater` This is an alternative updater for production data for non-metered Envoy or Envoy metered without installed CT. Previous updaters don't return data for this type. It only provides data for aggregated phases. Data is measured/calculated by the Envoy. | | | | | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --- | | endpoint | [`/api/v1/production`](./endpoint_json.md#apiv1production) | | | json path | `$` | | | class data | json node | uom | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_lifetime` | wattHoursLifetime | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_last_7_days` | wattHoursSevenDays | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_today` | wattHoursToday | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watts_now` | wattsNow | W | For Envoy‑metered systems without CTs installed on firmware 8.2.8.2.4264 or newer, the V1 Production endpoint may report stalled values. When `/info` indicates `is_meter`, fall back to the inverters section in the Production endpoint (handled by the next updater). ### {py:class}`~pyenphase.updaters.production.EnvoyProductionJsonFallbackUpdater` This is an alternative updater for production data for non-metered Envoy or Envoy metered without CT installed. The {py:class}`~pyenphase.updaters.api_v1_production.EnvoyApiV1ProductionUpdater` updater does not return data for some firmware versions. In that case, this updater falls back to the `inverters` section in the production report. It only provides data for aggregated phases. Data is measured/calculated by the Envoy. | | | | | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | --- | | endpoint | `/production.json?details=1` or `/production` | | | json path | `production[?(@.type=='inverters' && @.activeCount > 0)]` | | | class data | json node | uom | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_lifetime` | whLifetime | Wh | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_last_7_days` | not in report,
use unreliable whLastSevenDays from type=='eim' | | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watt_hours_today` | not in report,
use unreliable whToday from type=='eim' | | | {py:attr}`~pyenphase.models.system_production.EnvoySystemProduction.watts_now` | wNow | W | pyenphase-pyenphase-901c49f/docs/data_raw.md000066400000000000000000000021631513166356400211110ustar00rootroot00000000000000# 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-pyenphase-901c49f/docs/documenting.md000066400000000000000000000177561513166356400216610ustar00rootroot00000000000000# 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 ### Document links Direct links to code autodoc from documentation markup files should be done using MyST cross-references where possible. See the [python domain](https://www.sphinx-doc.org/en/master/usage/domains/python.html) for reference. ```text {py:class}`pyenphase.Envoy` {py:meth}`pyenphase.Envoy.setup` {py:attr}`pyenphase.const.SupportedFeatures.PRODUCTION` ``` resulting in {py:class}`pyenphase.Envoy`, {py:meth}`pyenphase.Envoy.setup` and {py:attr}`pyenphase.const.SupportedFeatures.PRODUCTION`. URL-style anchor links can be used, but they are fragile and may generate parser warnings. Prefer role-based links such as {py:attr}`pyenphase.const.SupportedFeatures.PRODUCTION`. If shorter names are preferred use one of: ```text {py:attr}`~pyenphase.const.SupportedFeatures.PRODUCTION` {py:meth}`setup method ` ``` resulting in {py:data}`~pyenphase.const.SupportedFeatures.PRODUCTION` and {py:meth}`setup method ` ### 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-pyenphase-901c49f/docs/endpoint_json.md000066400000000000000000000121261513166356400222000ustar00rootroot00000000000000# Endpoint JSON This section describes the Envoy data used by the library. Enphase's installer resource website documents the IQ Gateway local API. As it’s a dynamic resource, use the filters for “Communication Device†and select the Envoy or IQ Gateway types. This [example link](https://enphase.com/installers/resources/documentation/communication) pre-selects communication documents. Use the product filters for Envoy and the “Design and Tech Briefs†topic filter. A wealth of information on the Enphase local Envoy api is available from [Matthew1471's github repository](https://github.com/Matthew1471/Enphase-API), which is an excellent resource. The endpoints used by the library are: ```{include} ../src/pyenphase/const.py :start-after: Include in docs from here :end-before: Include in docs to here :literal: ``` ## /info ### description This endpoint is accessible without token authorization and provides information on system serial-number, part-numbers, running packages, firmware version and build date. It returns an xml formatted data set. ### xml ```{literalinclude} ./json_data/info.xml :language: xml ``` ## /home ### description This endpoint is accessible without token authorization and provides information on configured network interfaces and communication. It is used to retrieve active network device when using {py:attr}`~pyenphase.Envoy.interface_settings`. ### json ```{literalinclude} ./json_data/home.json :language: json ``` ## /api/v1/production ### description This endpoint is used for production data of a non‑metered Envoy or a metered Envoy without CTs installed. It only contains aggregated phase data. Data is measured/calculated by the Envoy. Also see [Known Issues](known_issues.md#production--consumption-data). ### JSON ```{literalinclude} ./json_data/api_v1_production.json :language: json ``` ## /api/v1/production/inverters ### description This is the endpoint used for basic inverter production data. ### JSON ```{literalinclude} ./json_data/api_v1_production_inverters.json :language: json ``` ## /ivp/meters ### description This is the endpoint used for installed CT meters configuration. ### JSON ```{literalinclude} ./json_data/ivp_meters.json :language: json ``` ## /ivp/meters/readings ### description This is the endpoint used for CT meter readings. ### JSON ```{literalinclude} ./json_data/ivp_meters_readings.json :language: json ``` ## /ivp/pdm/device_data ### description This is the endpoint used for detailed inverter data. Also see [Known Issues](known_issues.md#inverter-device-data). ### JSON ```{literalinclude} ./json_data/ivp_pdm_device_data.json :language: json ``` ## /production.json?details=1 ### description This is the default endpoint for production and consumption data. It contains data for aggregated and individual phases. Data is measured/calculated by the Envoy. Individual phase data is in the `lines` segment. - For non-metered Envoy, the `type: "eim"` sections are not present. - For Envoy-metered without a [_production_ CT](data_ctmeter.md#ct-model): - the `production` item where `type == "eim"` and `measurementType == "production"` has `activeCount == 0`. - For Envoy-metered with: - a [_net-consumption_ CT](data_ctmeter.md#ct-model), the _total-consumption_ data is calculated by the Envoy. - a [_total-consumption_ CT](data_ctmeter.md#ct-model), the _net-consumption_ data is calculated by the Envoy. - For Envoy-metered without any _consumption_ CT: - the `consumption` item where `type == "eim"` and `measurementType == "net-consumption"` has `activeCount == 0`; - the `consumption` item where `type == "eim"` and `measurementType == "total-consumption"` has `activeCount == 0`. Also see [Known Issues](known_issues.md#production--consumption-data). ### JSON ```{literalinclude} ./json_data/production_details.json :language: json ``` ## /production ### description This is an endpoint for production and consumption data used when older firmware is running in the Envoy and the [standard endpoint](#productionjsondetails1) is not providing data. It only contains data for aggregated phases, no individual phase data is available. Data is measured/calculated by the Envoy. - For non-metered Envoy, the `type: "eim"` sections are not present. - For Envoy-metered without a [_production_ CT](data_ctmeter.md#ct-model): - the `production` item where `type == "eim"` and `measurementType == "production"` has `activeCount == 0`. - For Envoy-metered with: - a [_net-consumption_ CT](data_ctmeter.md#ct-model), the _total-consumption_ data is calculated by the Envoy. - a [_total-consumption_ CT](data_ctmeter.md#ct-model), the _net-consumption_ data is calculated by the Envoy. - For Envoy-metered without any _consumption_ CT: - the `consumption` item where `type == "eim"` and `measurementType == "net-consumption"` has `activeCount == 0`; - the `consumption` item where `type == "eim"` and `measurementType == "total-consumption"` has `activeCount == 0`. ### Known issues Also see [Known Issues](known_issues.md#production--consumption-data). ### JSON ```{literalinclude} ./json_data/production.json :language: json ``` pyenphase-pyenphase-901c49f/docs/index.md000066400000000000000000000005031513166356400204320ustar00rootroot00000000000000# 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-pyenphase-901c49f/docs/installation.md000066400000000000000000000002601513166356400220240ustar00rootroot00000000000000# 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-pyenphase-901c49f/docs/json_data/000077500000000000000000000000001513166356400207455ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/docs/json_data/api_v1_production.json000066400000000000000000000001631513166356400252650ustar00rootroot00000000000000{ "wattHoursToday": 17645, "wattHoursSevenDays": 217726, "wattHoursLifetime": 19229325, "wattsNow": 5326 } pyenphase-pyenphase-901c49f/docs/json_data/api_v1_production_inverters.json000066400000000000000000000004601513166356400273660ustar00rootroot00000000000000[ { "serialNumber": "202020202020", "lastReportDate": 1748576887, "devType": 1, "lastReportWatts": 255, "maxReportWatts": 371 }, { "serialNumber": "202020202021", "lastReportDate": 1748576917, "devType": 1, "lastReportWatts": 78, "maxReportWatts": 309 } ] pyenphase-pyenphase-901c49f/docs/json_data/home.json000066400000000000000000000032751513166356400225770ustar00rootroot00000000000000{ "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": "01:02:03:04:05:06", "dhcp": true, "ip": "192.168.1.100", "signal_strength": 0, "signal_strength_max": 1, "carrier": false }, { "signal_strength": 4, "signal_strength_max": 5, "type": "wifi", "interface": "wlan0", "mac": "02:03:04:05:06:07", "dhcp": true, "ip": "192.168.1.101", "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-pyenphase-901c49f/docs/json_data/info.xml000066400000000000000000000045771513166356400224370ustar00rootroot00000000000000 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-pyenphase-901c49f/docs/json_data/ivp_meters.json000066400000000000000000000011101513166356400240060ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/docs/json_data/ivp_meters_readings.json000066400000000000000000000134431513166356400256760ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/docs/json_data/ivp_pdm_device_data.json000066400000000000000000000051541513166356400256130ustar00rootroot00000000000000{ "553648384": { "devName": "pcu", "sn": "202020202020", "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": "202020202021", "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 } } ] }, "deviceCount": 2, "deviceDataLimit": 50 } pyenphase-pyenphase-901c49f/docs/json_data/production.json000066400000000000000000000040331513166356400240260ustar00rootroot00000000000000{ "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 } ], "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 }, { "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 } ], "storage": [ { "type": "acb", "activeCount": 0, "readingTime": 0, "wNow": 0, "whNow": 0, "state": "idle" } ] } pyenphase-pyenphase-901c49f/docs/json_data/production_details.json000066400000000000000000000152211513166356400255340ustar00rootroot00000000000000{ "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-pyenphase-901c49f/docs/known_issues.md000066400000000000000000000033551513166356400220620ustar00rootroot00000000000000# Known Issues Issues have been reported with data; these vary by firmware version. Newer firmware may resolve these or introduce new issues. ## Production & Consumption data | data | envoy
type [^1] | issue | in firmware | | ------------------- | -------------------- | ---------------------------------------- | ----------- | | whToday | Mtr | late reset some time after midnight | | | | | reset to non-zero value | | | | | sudden value step changes | | | whLastSevenDays | Mtr | sudden value step changes | | | watt_hours_lifetime | NoCT | reset to zero when reaching 1.19 MWh | \<8.x | | | Std | 1.19 MWh value stepdown | | | all | NoCT | stalled values in V1 Production Endpoint | >= 8.2.4264 | [^1]: Std: Envoy standard (not metered). Mtr: Envoy metered. NoCT: Envoy metered without installed and configured CTs. ## Inverter device data The [inverter device data](endpoint_json.md#ivppdmdevice_data) includes a `deviceDataLimit` that appears to be fixed at 50. If more inverters are installed, only data for the first `deviceDataLimit` inverters is included, resulting in missing inverter data. When the reported `deviceCount` is greater than or equal to `deviceDataLimit`, data falls back to [/api/v1/production/inverters](endpoint_json.md#apiv1productioninverters) to avoid data loss; device detail data will then be unavailable for all inverters. pyenphase-pyenphase-901c49f/docs/license.md000066400000000000000000000000631513166356400207460ustar00rootroot00000000000000# License ```{include} ../LICENSE :literal : ``` pyenphase-pyenphase-901c49f/docs/make.bat000066400000000000000000000013751513166356400204160ustar00rootroot00000000000000@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-pyenphase-901c49f/docs/model_autodoc.md000066400000000000000000000134751513166356400221550ustar00rootroot00000000000000# Classes, methods and properties ```{eval-rst} .. autoclass:: pyenphase.Envoy :members: :undoc-members: :show-inheritance: :member-order: alphabetical :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.auth.EnvoyAuth :members: :undoc-members: :show-inheritance: :member-order: alphabetical :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.auth.EnvoyTokenAuth :members: :undoc-members: :show-inheritance: :member-order: alphabetical :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.auth.EnvoyLegacyAuth :members: :undoc-members: :show-inheritance: :member-order: alphabetical :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.firmware.EnvoyFirmware :members: :undoc-members: :show-inheritance: :member-order: alphabetical :class-doc-from: init ``` ```{eval-rst} .. autoclass:: pyenphase.EnvoyData :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ```{eval-rst} .. automodule:: pyenphase.const :members: :exclude-members: SupportedFeatures :undoc-members: :show-inheritance: :member-order: alphabetical ``` ```{eval-rst} .. automodule:: pyenphase.models.common :members: :undoc-members: :show-inheritance: :member-order: alphabetical :exclude-members: CommonProperties ``` ```{include} updaters.md ``` ## Supported Features ```{eval-rst} .. autoclass:: pyenphase.const.SupportedFeatures :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ## Common Properties ```{eval-rst} .. autoclass:: pyenphase.models.common.CommonProperties :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ## Base class ```{eval-rst} .. autoclass:: pyenphase.updaters.base.EnvoyUpdater :members: :undoc-members: :show-inheritance: :member-order: alphabetical :private-members: :class-doc-from: init ``` ## production ```{eval-rst} .. automodule:: pyenphase.updaters.production :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ```{eval-rst} .. automodule:: pyenphase.updaters.api_v1_production :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ## Inverters ```{eval-rst} .. automodule:: pyenphase.updaters.device_data_inverters :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ```{eval-rst} .. automodule:: pyenphase.updaters.api_v1_production_inverters :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ## EnvoyEnsemble ```{eval-rst} .. automodule:: pyenphase.updaters.ensemble :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ## EnvoyTariff ```{eval-rst} .. automodule:: pyenphase.updaters.tariff :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` ## Current Transformers ```{eval-rst} .. automodule:: pyenphase.updaters.meters :members: :undoc-members: :show-inheritance: :member-order: alphabetical ``` # Models ## EnvoySystemProduction ```{eval-rst} .. autoclass:: pyenphase.models.system_production.EnvoySystemProduction :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoySystemConsumption ```{eval-rst} .. autoclass:: pyenphase.models.system_consumption.EnvoySystemConsumption :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyInverter ```{eval-rst} .. autoclass:: pyenphase.models.inverter.EnvoyInverter :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyEncharge ```{eval-rst} .. autoclass:: pyenphase.models.encharge.EnvoyEncharge :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyEnchargeAggregate ```{eval-rst} .. autoclass:: pyenphase.models.encharge.EnvoyEnchargeAggregate :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyEnchargePower ```{eval-rst} .. autoclass:: pyenphase.models.encharge.EnvoyEnchargePower :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyEnpower ```{eval-rst} .. autoclass:: pyenphase.models.enpower.EnvoyEnpower :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyACBPower ```{eval-rst} .. autoclass:: pyenphase.models.acb.EnvoyACBPower :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## Envoy Aggregate Battery SOC ```{eval-rst} .. autoclass:: pyenphase.models.acb.EnvoyBatteryAggregate :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## Envoy Dry Contacts ```{eval-rst} .. automodule:: pyenphase.models.dry_contacts :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyCollar ```{eval-rst} .. automodule:: pyenphase.models.collar :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## EnvoyC6CC ```{eval-rst} .. automodule:: pyenphase.models.c6combiner :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## CT Meters ```{eval-rst} .. automodule:: pyenphase.models.meters :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` ## Interface data ```{eval-rst} .. autoclass:: pyenphase.models.home.EnvoyInterfaceInformation :members: :undoc-members: :show-inheritance: :member-order: groupwise ``` # Utilities ## JSON Helper functions for JSON. ```{eval-rst} .. autofunction:: pyenphase.json.json_loads ``` ## 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: alphabetical ``` pyenphase-pyenphase-901c49f/docs/phase_data.md000066400000000000000000000040011513166356400214110ustar00rootroot00000000000000# Phase data For a metered Envoy with installed and configured current transformers (CT meters) in `three`‑phase mode and more than one active phase, data for individual phases is reported for solar production in {py:attr}`pyenphase.EnvoyData.system_production_phases` and house consumption in {py:attr}`pyenphase.EnvoyData.system_consumption_phases`. Upon completion of the [probe](usage_intro.md#data-collection) call, the phase setup is available. The {py:attr}`~pyenphase.Envoy.phase_count`, {py:attr}`~pyenphase.Envoy.ct_meter_count`, {py:attr}`~pyenphase.Envoy.phase_mode`, and {py:attr}`~pyenphase.Envoy.consumption_meter_type` are available from the Envoy model. Phase names are enumerated as `L1`, `L2`, and `L3` by {py:class}`pyenphase.const.PhaseNames`. Phase modes are enumerated as `single`, `split`, and `three` by {py:class}`pyenphase.models.meters.EnvoyPhaseMode`. CT meter types are enumerated as `production`, `storage`, `net-consumption`, and `total-consumption` by {py:class}`pyenphase.models.meters.CtType`. Be aware that `phase_count` and `phase_mode` apply for all configured CTs. The metered Envoy can, however, be configured with only 1, 2, or all 3 CT types. In this case, the unused CT data in `system_production_phases`, `system_consumption_phases`, or `ctmeter_storage_phases` will be `None`. The Envoy property {py:attr}`pyenphase.Envoy.active_phase_count` returns how many phases are present in the production/consumption reports. This is 0 for `single` configurations. ```python from pyenphase import Envoy 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}') ``` pyenphase-pyenphase-901c49f/docs/requests.md000066400000000000000000000037271513166356400212110ustar00rootroot00000000000000# 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 myjson_data = await myresponse.json() await envoy.close() ``` You can run the package using {py:meth}`Envoy.request() ` only (without calling [probe](usage_intro.md#probe) and [update](usage_intro.md#update)), which provides an API into the Envoy without using the internally pre-configured data collections. ## ClientResponse {py:meth}`Envoy.request() ` returns an [aiohttp.ClientResponse](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse) as the result. [^1] [^1]: This is a breaking change from version 1 where an httpx.Response was returned. To access the response data, use [aiohttp.ClientResponse.read()](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse.read) for the raw bytes, [aiohttp.ClientResponse.text()](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse.text) for a decoded `str`, or [aiohttp.ClientResponse.json()](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientResponse.json) for a parsed JSON object. Note that `ClientResponse.json()` uses Python’s standard decoder `json.loads` by default. To use a different decoder, pass it via the `loads=` parameter, for example: ```python import orjson myjson_data = await myresponse.json(loads=orjson.loads) ``` pyenphase-pyenphase-901c49f/docs/updaters.md000066400000000000000000000061541513166356400211620ustar00rootroot00000000000000# Updaters ## Introduction Available data from the Envoy depends on the actual model, firmware, and installed components. The pyenphase library internally implements _Updaters_ to obtain the data. Each updater is specialized for one or more members of {py:class}`pyenphase.EnvoyData`, and its _Probe_ method is called by {py:meth}`pyenphase.Envoy.probe` to detect whether the Envoy offers a specific dataset. If supported, the method returns the relevant feature mask. If any features are returned, the updater’s update() method is then used by {py:meth}`pyenphase.Envoy.update` to collect the actual data. The various datasets relate to one or more {py:class}`pyenphase.const.SupportedFeatures` feature flags. For example, the {py:attr}`pyenphase.const.SupportedFeatures.PRODUCTION` supported feature flag relates to the {py:class}`pyenphase.models.system_production.EnvoySystemProduction` data class which reports Solar production values. This flag can be set by either {py:class}`pyenphase.updaters.production.EnvoyProductionUpdater` or {py:class}`pyenphase.updaters.api_v1_production.EnvoyApiV1ProductionUpdater` updaters. Multiple updaters may exist to provide data for a single dataset/feature. For example, Solar production data which is provided by all models may come from different sources. In the most basic Envoy model this data comes from a different endpoint compared to an Envoy equipped with Current Transformers. In both cases the updaters must be able to provide the same data for the {py:class}`pyenphase.models.system_production.EnvoySystemProduction` data class. This can be implemented in the same updater or in multiple updaters. An updater is passed the previously identified features to its probe method. If its feature is already included in the passed list, the updater should back off and not report it again. As a result, only the first updater reporting the feature will be used for data collection. An updater provides data for one or more features, typically (but not exclusively) sourced from a single endpoint on the Envoy. Multiple updaters may source from the same endpoint, as responses are locally cached during a single collection cycle to avoid duplicate requests. Although each updater has its specific scope, some may need to share information with other updaters or make operational information available for common use in the {py:class}`pyenphase.envoy.Envoy` class. The probe methods can store this information in {py:class}`pyenphase.models.common.CommonProperties`. This information is reset by {py:meth}`pyenphase.models.common.CommonProperties.reset_probe_properties` at each probe start to avoid _sticking_ values. The base class {py:class}`pyenphase.updaters.base.EnvoyUpdater` defines the abstract methods {py:meth}`pyenphase.updaters.base.EnvoyUpdater.probe` and {py:meth}`pyenphase.updaters.base.EnvoyUpdater.update`, which updaters must implement. Probe initializes the updater and is called during {py:meth}`pyenphase.Envoy.probe` (once per probe cycle); it must return a {py:class}`pyenphase.const.SupportedFeatures` mask indicating the data it can provide. Update is then invoked repeatedly to collect the data. pyenphase-pyenphase-901c49f/docs/usage.md000066400000000000000000000011001513166356400204210ustar00rootroot00000000000000# 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-pyenphase-901c49f/docs/usage_authentication.md000066400000000000000000000146661513166356400235450ustar00rootroot00000000000000# 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-pyenphase-901c49f/docs/usage_intro.md000066400000000000000000000064521513166356400216530ustar00rootroot00000000000000# 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-pyenphase-901c49f/poetry.lock000066400000000000000000006450641513166356400202660ustar00rootroot00000000000000# This file is automatically @generated by Poetry 2.2.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.13.3" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a372fd5afd301b3a89582817fdcdb6c34124787c70dbcc616f259013e7eef7"}, {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:147e422fd1223005c22b4fe080f5d93ced44460f5f9c105406b753612b587821"}, {file = "aiohttp-3.13.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:859bd3f2156e81dd01432f5849fc73e2243d4a487c4fd26609b1299534ee1845"}, {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dca68018bf48c251ba17c72ed479f4dafe9dbd5a73707ad8d28a38d11f3d42af"}, {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fee0c6bc7db1de362252affec009707a17478a00ec69f797d23ca256e36d5940"}, {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c048058117fd649334d81b4b526e94bde3ccaddb20463a815ced6ecbb7d11160"}, {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:215a685b6fbbfcf71dfe96e3eba7a6f58f10da1dfdf4889c7dd856abe430dca7"}, {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2c184bb1fe2cbd2cefba613e9db29a5ab559323f994b6737e370d3da0ac455"}, {file = "aiohttp-3.13.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75ca857eba4e20ce9f546cd59c7007b33906a4cd48f2ff6ccf1ccfc3b646f279"}, {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81e97251d9298386c2b7dbeb490d3d1badbdc69107fb8c9299dd04eb39bddc0e"}, {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c0e2d366af265797506f0283487223146af57815b388623f0357ef7eac9b209d"}, {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e239d501f73d6db1522599e14b9b321a7e3b1de66ce33d53a765d975e9f4808"}, {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0db318f7a6f065d84cb1e02662c526294450b314a02bd9e2a8e67f0d8564ce40"}, {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:bfc1cc2fe31a6026a8a88e4ecfb98d7f6b1fec150cfd708adbfd1d2f42257c29"}, {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af71fff7bac6bb7508956696dce8f6eec2bbb045eceb40343944b1ae62b5ef11"}, {file = "aiohttp-3.13.3-cp310-cp310-win32.whl", hash = "sha256:37da61e244d1749798c151421602884db5270faf479cf0ef03af0ff68954c9dd"}, {file = "aiohttp-3.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:7e63f210bc1b57ef699035f2b4b6d9ce096b5914414a49b0997c839b2bd2223c"}, {file = "aiohttp-3.13.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b6073099fb654e0a068ae678b10feff95c5cae95bbfcbfa7af669d361a8aa6b"}, {file = "aiohttp-3.13.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cb93e166e6c28716c8c6aeb5f99dfb6d5ccf482d29fe9bf9a794110e6d0ab64"}, {file = "aiohttp-3.13.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28e027cf2f6b641693a09f631759b4d9ce9165099d2b5d92af9bd4e197690eea"}, {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b61b7169ababd7802f9568ed96142616a9118dd2be0d1866e920e77ec8fa92a"}, {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:80dd4c21b0f6237676449c6baaa1039abae86b91636b6c91a7f8e61c87f89540"}, {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:65d2ccb7eabee90ce0503c17716fc77226be026dcc3e65cce859a30db715025b"}, {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5b179331a481cb5529fca8b432d8d3c7001cb217513c94cd72d668d1248688a3"}, {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d4c940f02f49483b18b079d1c27ab948721852b281f8b015c058100e9421dd1"}, {file = "aiohttp-3.13.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9444f105664c4ce47a2a7171a2418bce5b7bae45fb610f4e2c36045d85911d3"}, {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:694976222c711d1d00ba131904beb60534f93966562f64440d0c9d41b8cdb440"}, {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f33ed1a2bf1997a36661874b017f5c4b760f41266341af36febaf271d179f6d7"}, {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e636b3c5f61da31a92bf0d91da83e58fdfa96f178ba682f11d24f31944cdd28c"}, {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5d2d94f1f5fcbe40838ac51a6ab5704a6f9ea42e72ceda48de5e6b898521da51"}, {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2be0e9ccf23e8a94f6f0650ce06042cefc6ac703d0d7ab6c7a917289f2539ad4"}, {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9af5e68ee47d6534d36791bbe9b646d2a7c7deb6fc24d7943628edfbb3581f29"}, {file = "aiohttp-3.13.3-cp311-cp311-win32.whl", hash = "sha256:a2212ad43c0833a873d0fb3c63fa1bacedd4cf6af2fee62bf4b739ceec3ab239"}, {file = "aiohttp-3.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:642f752c3eb117b105acbd87e2c143de710987e09860d674e068c4c2c441034f"}, {file = "aiohttp-3.13.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b903a4dfee7d347e2d87697d0713be59e0b87925be030c9178c5faa58ea58d5c"}, {file = "aiohttp-3.13.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a45530014d7a1e09f4a55f4f43097ba0fd155089372e105e4bff4ca76cb1b168"}, {file = "aiohttp-3.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27234ef6d85c914f9efeb77ff616dbf4ad2380be0cda40b4db086ffc7ddd1b7d"}, {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d32764c6c9aafb7fb55366a224756387cd50bfa720f32b88e0e6fa45b27dcf29"}, {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b1a6102b4d3ebc07dad44fbf07b45bb600300f15b552ddf1851b5390202ea2e3"}, {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c014c7ea7fb775dd015b2d3137378b7be0249a448a1612268b5a90c2d81de04d"}, {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2b8d8ddba8f95ba17582226f80e2de99c7a7948e66490ef8d947e272a93e9463"}, {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ae8dd55c8e6c4257eae3a20fd2c8f41edaea5992ed67156642493b8daf3cecc"}, {file = "aiohttp-3.13.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:01ad2529d4b5035578f5081606a465f3b814c542882804e2e8cda61adf5c71bf"}, {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bb4f7475e359992b580559e008c598091c45b5088f28614e855e42d39c2f1033"}, {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c19b90316ad3b24c69cd78d5c9b4f3aa4497643685901185b65166293d36a00f"}, {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:96d604498a7c782cb15a51c406acaea70d8c027ee6b90c569baa6e7b93073679"}, {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:084911a532763e9d3dd95adf78a78f4096cd5f58cdc18e6fdbc1b58417a45423"}, {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7a4a94eb787e606d0a09404b9c38c113d3b099d508021faa615d70a0131907ce"}, {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:87797e645d9d8e222e04160ee32aa06bc5c163e8499f24db719e7852ec23093a"}, {file = "aiohttp-3.13.3-cp312-cp312-win32.whl", hash = "sha256:b04be762396457bef43f3597c991e192ee7da460a4953d7e647ee4b1c28e7046"}, {file = "aiohttp-3.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:e3531d63d3bdfa7e3ac5e9b27b2dd7ec9df3206a98e0b3445fa906f233264c57"}, {file = "aiohttp-3.13.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5dff64413671b0d3e7d5918ea490bdccb97a4ad29b3f311ed423200b2203e01c"}, {file = "aiohttp-3.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9"}, {file = "aiohttp-3.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3"}, {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf"}, {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:697753042d57f4bf7122cab985bf15d0cef23c770864580f5af4f52023a56bd6"}, {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6de499a1a44e7de70735d0b39f67c8f25eb3d91eb3103be99ca0fa882cdd987d"}, {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37239e9f9a7ea9ac5bf6b92b0260b01f8a22281996da609206a84df860bc1261"}, {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0"}, {file = "aiohttp-3.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fc290605db2a917f6e81b0e1e0796469871f5af381ce15c604a3c5c7e51cb730"}, {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91"}, {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:49a03727c1bba9a97d3e93c9f93ca03a57300f484b6e935463099841261195d3"}, {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3d9908a48eb7416dc1f4524e69f1d32e5d90e3981e4e37eb0aa1cd18f9cfa2a4"}, {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2712039939ec963c237286113c68dbad80a82a4281543f3abf766d9d73228998"}, {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7bfdc049127717581866fa4708791220970ce291c23e28ccf3922c700740fdc0"}, {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591"}, {file = "aiohttp-3.13.3-cp313-cp313-win32.whl", hash = "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf"}, {file = "aiohttp-3.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e"}, {file = "aiohttp-3.13.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:ea37047c6b367fd4bd632bff8077449b8fa034b69e812a18e0132a00fae6e808"}, {file = "aiohttp-3.13.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6fc0e2337d1a4c3e6acafda6a78a39d4c14caea625124817420abceed36e2415"}, {file = "aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c685f2d80bb67ca8c3837823ad76196b3694b0159d232206d1e461d3d434666f"}, {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6"}, {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:34749271508078b261c4abb1767d42b8d0c0cc9449c73a4df494777dc55f0687"}, {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82611aeec80eb144416956ec85b6ca45a64d76429c1ed46ae1b5f86c6e0c9a26"}, {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2fff83cfc93f18f215896e3a190e8e5cb413ce01553901aca925176e7568963a"}, {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bbe7d4cecacb439e2e2a8a1a7b935c25b812af7a5fd26503a66dadf428e79ec1"}, {file = "aiohttp-3.13.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b928f30fe49574253644b1ca44b1b8adbd903aa0da4b9054a6c20fc7f4092a25"}, {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603"}, {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8542f41a62bcc58fc7f11cf7c90e0ec324ce44950003feb70640fc2a9092c32a"}, {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5e1d8c8b8f1d91cd08d8f4a3c2b067bfca6ec043d3ff36de0f3a715feeedf926"}, {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:90455115e5da1c3c51ab619ac57f877da8fd6d73c05aacd125c5ae9819582aba"}, {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:042e9e0bcb5fba81886c8b4fbb9a09d6b8a00245fd8d88e4d989c1f96c74164c"}, {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2eb752b102b12a76ca02dff751a801f028b4ffbbc478840b473597fc91a9ed43"}, {file = "aiohttp-3.13.3-cp314-cp314-win32.whl", hash = "sha256:b556c85915d8efaed322bf1bdae9486aa0f3f764195a0fb6ee962e5c71ef5ce1"}, {file = "aiohttp-3.13.3-cp314-cp314-win_amd64.whl", hash = "sha256:9bf9f7a65e7aa20dd764151fb3d616c81088f91f8df39c3893a536e279b4b984"}, {file = "aiohttp-3.13.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:05861afbbec40650d8a07ea324367cb93e9e8cc7762e04dd4405df99fa65159c"}, {file = "aiohttp-3.13.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2fc82186fadc4a8316768d61f3722c230e2c1dcab4200d52d2ebdf2482e47592"}, {file = "aiohttp-3.13.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0add0900ff220d1d5c5ebbf99ed88b0c1bbf87aa7e4262300ed1376a6b13414f"}, {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29"}, {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:add1da70de90a2569c5e15249ff76a631ccacfe198375eead4aadf3b8dc849dc"}, {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b47b7ba335d2e9b1239fa571131a87e2d8ec96b333e68b2a305e7a98b0bae2"}, {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4dce1c718e38081c8f35f323209d4c1df7d4db4bab1b5c88a6b4d12b74587"}, {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34bac00a67a812570d4a460447e1e9e06fae622946955f939051e7cc895cfab8"}, {file = "aiohttp-3.13.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19884d2ee70b06d9204b2727a7b9f983d0c684c650254679e716b0b77920632"}, {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64"}, {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b0d95340658b9d2f11d9697f59b3814a9d3bb4b7a7c20b131df4bcef464037c0"}, {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:a1e53262fd202e4b40b70c3aff944a8155059beedc8a89bba9dc1f9ef06a1b56"}, {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d60ac9663f44168038586cab2157e122e46bdef09e9368b37f2d82d354c23f72"}, {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:90751b8eed69435bac9ff4e3d2f6b3af1f57e37ecb0fbeee59c0174c9e2d41df"}, {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fc353029f176fd2b3ec6cfc71be166aba1936fe5d73dd1992ce289ca6647a9aa"}, {file = "aiohttp-3.13.3-cp314-cp314t-win32.whl", hash = "sha256:2e41b18a58da1e474a057b3d35248d8320029f61d70a37629535b16a0c8f3767"}, {file = "aiohttp-3.13.3-cp314-cp314t-win_amd64.whl", hash = "sha256:44531a36aa2264a1860089ffd4dce7baf875ee5a6079d5fb42e261c704ef7344"}, {file = "aiohttp-3.13.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31a83ea4aead760dfcb6962efb1d861db48c34379f2ff72db9ddddd4cda9ea2e"}, {file = "aiohttp-3.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:988a8c5e317544fdf0d39871559e67b6341065b87fceac641108c2096d5506b7"}, {file = "aiohttp-3.13.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b174f267b5cfb9a7dba9ee6859cecd234e9a681841eb85068059bc867fb8f02"}, {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:947c26539750deeaee933b000fb6517cc770bbd064bad6033f1cff4803881e43"}, {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9ebf57d09e131f5323464bd347135a88622d1c0976e88ce15b670e7ad57e4bd6"}, {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4ae5b5a0e1926e504c81c5b84353e7a5516d8778fbbff00429fe7b05bb25cbce"}, {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ba0eea45eb5cc3172dbfc497c066f19c41bac70963ea1a67d51fc92e4cf9a80"}, {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bae5c2ed2eae26cc382020edad80d01f36cb8e746da40b292e68fec40421dc6a"}, {file = "aiohttp-3.13.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8a60e60746623925eab7d25823329941aee7242d559baa119ca2b253c88a7bd6"}, {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e50a2e1404f063427c9d027378472316201a2290959a295169bcf25992d04558"}, {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:9a9dc347e5a3dc7dfdbc1f82da0ef29e388ddb2ed281bfce9dd8248a313e62b7"}, {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b46020d11d23fe16551466c77823df9cc2f2c1e63cc965daf67fa5eec6ca1877"}, {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:69c56fbc1993fa17043e24a546959c0178fe2b5782405ad4559e6c13975c15e3"}, {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b99281b0704c103d4e11e72a76f1b543d4946fea7dd10767e7e1b5f00d4e5704"}, {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:40c5e40ecc29ba010656c18052b877a1c28f84344825efa106705e835c28530f"}, {file = "aiohttp-3.13.3-cp39-cp39-win32.whl", hash = "sha256:56339a36b9f1fc708260c76c87e593e2afb30d26de9ae1eb445b5e051b98a7a1"}, {file = "aiohttp-3.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:c6b8568a3bb5819a0ad087f16d40e5a3fb6099f39ea1d5625a3edc1e923fc538"}, {file = "aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88"}, ] [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 (>=1.2) ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "brotlicffi (>=1.2) ; 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.10\"" 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.10\"" 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 = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] [[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.10.6" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "coverage-7.10.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:70e7bfbd57126b5554aa482691145f798d7df77489a177a6bef80de78860a356"}, {file = "coverage-7.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e41be6f0f19da64af13403e52f2dec38bbc2937af54df8ecef10850ff8d35301"}, {file = "coverage-7.10.6-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c61fc91ab80b23f5fddbee342d19662f3d3328173229caded831aa0bd7595460"}, {file = "coverage-7.10.6-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10356fdd33a7cc06e8051413140bbdc6f972137508a3572e3f59f805cd2832fd"}, {file = "coverage-7.10.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80b1695cf7c5ebe7b44bf2521221b9bb8cdf69b1f24231149a7e3eb1ae5fa2fb"}, {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2e4c33e6378b9d52d3454bd08847a8651f4ed23ddbb4a0520227bd346382bbc6"}, {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c8a3ec16e34ef980a46f60dc6ad86ec60f763c3f2fa0db6d261e6e754f72e945"}, {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7d79dabc0a56f5af990cc6da9ad1e40766e82773c075f09cc571e2076fef882e"}, {file = "coverage-7.10.6-cp310-cp310-win32.whl", hash = "sha256:86b9b59f2b16e981906e9d6383eb6446d5b46c278460ae2c36487667717eccf1"}, {file = "coverage-7.10.6-cp310-cp310-win_amd64.whl", hash = "sha256:e132b9152749bd33534e5bd8565c7576f135f157b4029b975e15ee184325f528"}, {file = "coverage-7.10.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c706db3cabb7ceef779de68270150665e710b46d56372455cd741184f3868d8f"}, {file = "coverage-7.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e0c38dc289e0508ef68ec95834cb5d2e96fdbe792eaccaa1bccac3966bbadcc"}, {file = "coverage-7.10.6-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:752a3005a1ded28f2f3a6e8787e24f28d6abe176ca64677bcd8d53d6fe2ec08a"}, {file = "coverage-7.10.6-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:689920ecfd60f992cafca4f5477d55720466ad2c7fa29bb56ac8d44a1ac2b47a"}, {file = "coverage-7.10.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec98435796d2624d6905820a42f82149ee9fc4f2d45c2c5bc5a44481cc50db62"}, {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b37201ce4a458c7a758ecc4efa92fa8ed783c66e0fa3c42ae19fc454a0792153"}, {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2904271c80898663c810a6b067920a61dd8d38341244a3605bd31ab55250dad5"}, {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5aea98383463d6e1fa4e95416d8de66f2d0cb588774ee20ae1b28df826bcb619"}, {file = "coverage-7.10.6-cp311-cp311-win32.whl", hash = "sha256:e3fb1fa01d3598002777dd259c0c2e6d9d5e10e7222976fc8e03992f972a2cba"}, {file = "coverage-7.10.6-cp311-cp311-win_amd64.whl", hash = "sha256:f35ed9d945bece26553d5b4c8630453169672bea0050a564456eb88bdffd927e"}, {file = "coverage-7.10.6-cp311-cp311-win_arm64.whl", hash = "sha256:99e1a305c7765631d74b98bf7dbf54eeea931f975e80f115437d23848ee8c27c"}, {file = "coverage-7.10.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5b2dd6059938063a2c9fee1af729d4f2af28fd1a545e9b7652861f0d752ebcea"}, {file = "coverage-7.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:388d80e56191bf846c485c14ae2bc8898aa3124d9d35903fef7d907780477634"}, {file = "coverage-7.10.6-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:90cb5b1a4670662719591aa92d0095bb41714970c0b065b02a2610172dbf0af6"}, {file = "coverage-7.10.6-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:961834e2f2b863a0e14260a9a273aff07ff7818ab6e66d2addf5628590c628f9"}, {file = "coverage-7.10.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf9a19f5012dab774628491659646335b1928cfc931bf8d97b0d5918dd58033c"}, {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99c4283e2a0e147b9c9cc6bc9c96124de9419d6044837e9799763a0e29a7321a"}, {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:282b1b20f45df57cc508c1e033403f02283adfb67d4c9c35a90281d81e5c52c5"}, {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cdbe264f11afd69841bd8c0d83ca10b5b32853263ee62e6ac6a0ab63895f972"}, {file = "coverage-7.10.6-cp312-cp312-win32.whl", hash = "sha256:a517feaf3a0a3eca1ee985d8373135cfdedfbba3882a5eab4362bda7c7cf518d"}, {file = "coverage-7.10.6-cp312-cp312-win_amd64.whl", hash = "sha256:856986eadf41f52b214176d894a7de05331117f6035a28ac0016c0f63d887629"}, {file = "coverage-7.10.6-cp312-cp312-win_arm64.whl", hash = "sha256:acf36b8268785aad739443fa2780c16260ee3fa09d12b3a70f772ef100939d80"}, {file = "coverage-7.10.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ffea0575345e9ee0144dfe5701aa17f3ba546f8c3bb48db62ae101afb740e7d6"}, {file = "coverage-7.10.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:95d91d7317cde40a1c249d6b7382750b7e6d86fad9d8eaf4fa3f8f44cf171e80"}, {file = "coverage-7.10.6-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3e23dd5408fe71a356b41baa82892772a4cefcf758f2ca3383d2aa39e1b7a003"}, {file = "coverage-7.10.6-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f3f56e4cb573755e96a16501a98bf211f100463d70275759e73f3cbc00d4f27"}, {file = "coverage-7.10.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db4a1d897bbbe7339946ffa2fe60c10cc81c43fab8b062d3fcb84188688174a4"}, {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fd7879082953c156d5b13c74aa6cca37f6a6f4747b39538504c3f9c63d043d"}, {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:28395ca3f71cd103b8c116333fa9db867f3a3e1ad6a084aa3725ae002b6583bc"}, {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:61c950fc33d29c91b9e18540e1aed7d9f6787cc870a3e4032493bbbe641d12fc"}, {file = "coverage-7.10.6-cp313-cp313-win32.whl", hash = "sha256:160c00a5e6b6bdf4e5984b0ef21fc860bc94416c41b7df4d63f536d17c38902e"}, {file = "coverage-7.10.6-cp313-cp313-win_amd64.whl", hash = "sha256:628055297f3e2aa181464c3808402887643405573eb3d9de060d81531fa79d32"}, {file = "coverage-7.10.6-cp313-cp313-win_arm64.whl", hash = "sha256:df4ec1f8540b0bcbe26ca7dd0f541847cc8a108b35596f9f91f59f0c060bfdd2"}, {file = "coverage-7.10.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c9a8b7a34a4de3ed987f636f71881cd3b8339f61118b1aa311fbda12741bff0b"}, {file = "coverage-7.10.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dd5af36092430c2b075cee966719898f2ae87b636cefb85a653f1d0ba5d5393"}, {file = "coverage-7.10.6-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b0353b0f0850d49ada66fdd7d0c7cdb0f86b900bb9e367024fd14a60cecc1e27"}, {file = "coverage-7.10.6-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d6b9ae13d5d3e8aeca9ca94198aa7b3ebbc5acfada557d724f2a1f03d2c0b0df"}, {file = "coverage-7.10.6-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:675824a363cc05781b1527b39dc2587b8984965834a748177ee3c37b64ffeafb"}, {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:692d70ea725f471a547c305f0d0fc6a73480c62fb0da726370c088ab21aed282"}, {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:851430a9a361c7a8484a36126d1d0ff8d529d97385eacc8dfdc9bfc8c2d2cbe4"}, {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d9369a23186d189b2fc95cc08b8160ba242057e887d766864f7adf3c46b2df21"}, {file = "coverage-7.10.6-cp313-cp313t-win32.whl", hash = "sha256:92be86fcb125e9bda0da7806afd29a3fd33fdf58fba5d60318399adf40bf37d0"}, {file = "coverage-7.10.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6b3039e2ca459a70c79523d39347d83b73f2f06af5624905eba7ec34d64d80b5"}, {file = "coverage-7.10.6-cp313-cp313t-win_arm64.whl", hash = "sha256:3fb99d0786fe17b228eab663d16bee2288e8724d26a199c29325aac4b0319b9b"}, {file = "coverage-7.10.6-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6008a021907be8c4c02f37cdc3ffb258493bdebfeaf9a839f9e71dfdc47b018e"}, {file = "coverage-7.10.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5e75e37f23eb144e78940b40395b42f2321951206a4f50e23cfd6e8a198d3ceb"}, {file = "coverage-7.10.6-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0f7cb359a448e043c576f0da00aa8bfd796a01b06aa610ca453d4dde09cc1034"}, {file = "coverage-7.10.6-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c68018e4fc4e14b5668f1353b41ccf4bc83ba355f0e1b3836861c6f042d89ac1"}, {file = "coverage-7.10.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cd4b2b0707fc55afa160cd5fc33b27ccbf75ca11d81f4ec9863d5793fc6df56a"}, {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4cec13817a651f8804a86e4f79d815b3b28472c910e099e4d5a0e8a3b6a1d4cb"}, {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f2a6a8e06bbda06f78739f40bfb56c45d14eb8249d0f0ea6d4b3d48e1f7c695d"}, {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:081b98395ced0d9bcf60ada7661a0b75f36b78b9d7e39ea0790bb4ed8da14747"}, {file = "coverage-7.10.6-cp314-cp314-win32.whl", hash = "sha256:6937347c5d7d069ee776b2bf4e1212f912a9f1f141a429c475e6089462fcecc5"}, {file = "coverage-7.10.6-cp314-cp314-win_amd64.whl", hash = "sha256:adec1d980fa07e60b6ef865f9e5410ba760e4e1d26f60f7e5772c73b9a5b0713"}, {file = "coverage-7.10.6-cp314-cp314-win_arm64.whl", hash = "sha256:a80f7aef9535442bdcf562e5a0d5a5538ce8abe6bb209cfbf170c462ac2c2a32"}, {file = "coverage-7.10.6-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:0de434f4fbbe5af4fa7989521c655c8c779afb61c53ab561b64dcee6149e4c65"}, {file = "coverage-7.10.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6e31b8155150c57e5ac43ccd289d079eb3f825187d7c66e755a055d2c85794c6"}, {file = "coverage-7.10.6-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:98cede73eb83c31e2118ae8d379c12e3e42736903a8afcca92a7218e1f2903b0"}, {file = "coverage-7.10.6-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f863c08f4ff6b64fa8045b1e3da480f5374779ef187f07b82e0538c68cb4ff8e"}, {file = "coverage-7.10.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b38261034fda87be356f2c3f42221fdb4171c3ce7658066ae449241485390d5"}, {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0e93b1476b79eae849dc3872faeb0bf7948fd9ea34869590bc16a2a00b9c82a7"}, {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ff8a991f70f4c0cf53088abf1e3886edcc87d53004c7bb94e78650b4d3dac3b5"}, {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ac765b026c9f33044419cbba1da913cfb82cca1b60598ac1c7a5ed6aac4621a0"}, {file = "coverage-7.10.6-cp314-cp314t-win32.whl", hash = "sha256:441c357d55f4936875636ef2cfb3bee36e466dcf50df9afbd398ce79dba1ebb7"}, {file = "coverage-7.10.6-cp314-cp314t-win_amd64.whl", hash = "sha256:073711de3181b2e204e4870ac83a7c4853115b42e9cd4d145f2231e12d670930"}, {file = "coverage-7.10.6-cp314-cp314t-win_arm64.whl", hash = "sha256:137921f2bac5559334ba66122b753db6dc5d1cf01eb7b64eb412bb0d064ef35b"}, {file = "coverage-7.10.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90558c35af64971d65fbd935c32010f9a2f52776103a259f1dee865fe8259352"}, {file = "coverage-7.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8953746d371e5695405806c46d705a3cd170b9cc2b9f93953ad838f6c1e58612"}, {file = "coverage-7.10.6-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c83f6afb480eae0313114297d29d7c295670a41c11b274e6bca0c64540c1ce7b"}, {file = "coverage-7.10.6-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7eb68d356ba0cc158ca535ce1381dbf2037fa8cb5b1ae5ddfc302e7317d04144"}, {file = "coverage-7.10.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b15a87265e96307482746d86995f4bff282f14b027db75469c446da6127433b"}, {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fc53ba868875bfbb66ee447d64d6413c2db91fddcfca57025a0e7ab5b07d5862"}, {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efeda443000aa23f276f4df973cb82beca682fd800bb119d19e80504ffe53ec2"}, {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9702b59d582ff1e184945d8b501ffdd08d2cee38d93a2206aa5f1365ce0b8d78"}, {file = "coverage-7.10.6-cp39-cp39-win32.whl", hash = "sha256:2195f8e16ba1a44651ca684db2ea2b2d4b5345da12f07d9c22a395202a05b23c"}, {file = "coverage-7.10.6-cp39-cp39-win_amd64.whl", hash = "sha256:f32ff80e7ef6a5b5b606ea69a36e97b219cd9dc799bcf2963018a4d8f788cfbf"}, {file = "coverage-7.10.6-py3-none-any.whl", hash = "sha256:92c4ecf6bf11b2e85fd4d8204814dc26e6a19f0c9d938c207c5cb0eadfcabbe3"}, {file = "coverage-7.10.6.tar.gz", hash = "sha256:f644a3ae5933a552a29dbb9aa2f90c677a875f80ebea028e5a52a4f429044b90"}, ] [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 = "distlib" version = "0.4.0" description = "Distribution utilities" optional = false python-versions = "*" groups = ["dev"] files = [ {file = "distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16"}, {file = "distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d"}, ] [[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.10\"" 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 = "filelock" version = "3.20.3" description = "A platform independent file lock." optional = false python-versions = ">=3.10" groups = ["dev"] files = [ {file = "filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1"}, {file = "filelock-3.20.3.tar.gz", hash = "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1"}, ] [[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 = "identify" version = "2.6.14" description = "File identification library for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "identify-2.6.14-py2.py3-none-any.whl", hash = "sha256:11a073da82212c6646b1f39bb20d4483bfb9543bd5566fec60053c4bb309bf2e"}, {file = "identify-2.6.14.tar.gz", hash = "sha256:663494103b4f717cb26921c52f8751363dc89db64364cd836a9bf1535f53cd6a"}, ] [package.extras] license = ["ukkonen"] [[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.2" 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.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388"}, {file = "lxml-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153"}, {file = "lxml-6.0.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31"}, {file = "lxml-6.0.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9"}, {file = "lxml-6.0.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8"}, {file = "lxml-6.0.2-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba"}, {file = "lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c"}, {file = "lxml-6.0.2-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c"}, {file = "lxml-6.0.2-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321"}, {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1"}, {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34"}, {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a"}, {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c"}, {file = "lxml-6.0.2-cp310-cp310-win32.whl", hash = "sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b"}, {file = "lxml-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0"}, {file = "lxml-6.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5"}, {file = "lxml-6.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607"}, {file = "lxml-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938"}, {file = "lxml-6.0.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d"}, {file = "lxml-6.0.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438"}, {file = "lxml-6.0.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964"}, {file = "lxml-6.0.2-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d"}, {file = "lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7"}, {file = "lxml-6.0.2-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178"}, {file = "lxml-6.0.2-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553"}, {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb"}, {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a"}, {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c"}, {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7"}, {file = "lxml-6.0.2-cp311-cp311-win32.whl", hash = "sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46"}, {file = "lxml-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078"}, {file = "lxml-6.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285"}, {file = "lxml-6.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456"}, {file = "lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924"}, {file = "lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f"}, {file = "lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534"}, {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564"}, {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f"}, {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0"}, {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192"}, {file = "lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0"}, {file = "lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092"}, {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f"}, {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8"}, {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f"}, {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6"}, {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322"}, {file = "lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849"}, {file = "lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f"}, {file = "lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6"}, {file = "lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77"}, {file = "lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f"}, {file = "lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452"}, {file = "lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048"}, {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df"}, {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1"}, {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916"}, {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd"}, {file = "lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6"}, {file = "lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a"}, {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679"}, {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659"}, {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484"}, {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2"}, {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314"}, {file = "lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2"}, {file = "lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7"}, {file = "lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf"}, {file = "lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe"}, {file = "lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d"}, {file = "lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d"}, {file = "lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5"}, {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0"}, {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba"}, {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0"}, {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d"}, {file = "lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37"}, {file = "lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9"}, {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917"}, {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f"}, {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8"}, {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a"}, {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c"}, {file = "lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b"}, {file = "lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed"}, {file = "lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8"}, {file = "lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d"}, {file = "lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d"}, {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9"}, {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e"}, {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d"}, {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec"}, {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272"}, {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f"}, {file = "lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312"}, {file = "lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca"}, {file = "lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c"}, {file = "lxml-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a656ca105115f6b766bba324f23a67914d9c728dafec57638e2b92a9dcd76c62"}, {file = "lxml-6.0.2-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c54d83a2188a10ebdba573f16bd97135d06c9ef60c3dc495315c7a28c80a263f"}, {file = "lxml-6.0.2-cp38-cp38-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:1ea99340b3c729beea786f78c38f60f4795622f36e305d9c9be402201efdc3b7"}, {file = "lxml-6.0.2-cp38-cp38-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af85529ae8d2a453feee4c780d9406a5e3b17cee0dd75c18bd31adcd584debc3"}, {file = "lxml-6.0.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fe659f6b5d10fb5a17f00a50eb903eb277a71ee35df4615db573c069bcf967ac"}, {file = "lxml-6.0.2-cp38-cp38-win32.whl", hash = "sha256:5921d924aa5468c939d95c9814fa9f9b5935a6ff4e679e26aaf2951f74043512"}, {file = "lxml-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:0aa7070978f893954008ab73bb9e3c24a7c56c054e00566a21b553dc18105fca"}, {file = "lxml-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694"}, {file = "lxml-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90"}, {file = "lxml-6.0.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62"}, {file = "lxml-6.0.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444"}, {file = "lxml-6.0.2-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad"}, {file = "lxml-6.0.2-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48"}, {file = "lxml-6.0.2-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93"}, {file = "lxml-6.0.2-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c"}, {file = "lxml-6.0.2-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c"}, {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf"}, {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6"}, {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84"}, {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb"}, {file = "lxml-6.0.2-cp39-cp39-win32.whl", hash = "sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f"}, {file = "lxml-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304"}, {file = "lxml-6.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa"}, {file = "lxml-6.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6"}, {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba"}, {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5"}, {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4"}, {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d"}, {file = "lxml-6.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d"}, {file = "lxml-6.0.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700"}, {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee"}, {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f"}, {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9"}, {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a"}, {file = "lxml-6.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e"}, {file = "lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62"}, ] [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 = "nodeenv" version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] [[package]] name = "orjson" version = "3.11.5" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "orjson-3.11.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:df9eadb2a6386d5ea2bfd81309c505e125cfc9ba2b1b99a97e60985b0b3665d1"}, {file = "orjson-3.11.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc70da619744467d8f1f49a8cadae5ec7bbe054e5232d95f92ed8737f8c5870"}, {file = "orjson-3.11.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:073aab025294c2f6fc0807201c76fdaed86f8fc4be52c440fb78fbb759a1ac09"}, {file = "orjson-3.11.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:835f26fa24ba0bb8c53ae2a9328d1706135b74ec653ed933869b74b6909e63fd"}, {file = "orjson-3.11.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667c132f1f3651c14522a119e4dd631fad98761fa960c55e8e7430bb2a1ba4ac"}, {file = "orjson-3.11.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42e8961196af655bb5e63ce6c60d25e8798cd4dfbc04f4203457fa3869322c2e"}, {file = "orjson-3.11.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75412ca06e20904c19170f8a24486c4e6c7887dea591ba18a1ab572f1300ee9f"}, {file = "orjson-3.11.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6af8680328c69e15324b5af3ae38abbfcf9cbec37b5346ebfd52339c3d7e8a18"}, {file = "orjson-3.11.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a86fe4ff4ea523eac8f4b57fdac319faf037d3c1be12405e6a7e86b3fbc4756a"}, {file = "orjson-3.11.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e607b49b1a106ee2086633167033afbd63f76f2999e9236f638b06b112b24ea7"}, {file = "orjson-3.11.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7339f41c244d0eea251637727f016b3d20050636695bc78345cce9029b189401"}, {file = "orjson-3.11.5-cp310-cp310-win32.whl", hash = "sha256:8be318da8413cdbbce77b8c5fac8d13f6eb0f0db41b30bb598631412619572e8"}, {file = "orjson-3.11.5-cp310-cp310-win_amd64.whl", hash = "sha256:b9f86d69ae822cabc2a0f6c099b43e8733dda788405cba2665595b7e8dd8d167"}, {file = "orjson-3.11.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9c8494625ad60a923af6b2b0bd74107146efe9b55099e20d7740d995f338fcd8"}, {file = "orjson-3.11.5-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:7bb2ce0b82bc9fd1168a513ddae7a857994b780b2945a8c51db4ab1c4b751ebc"}, {file = "orjson-3.11.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67394d3becd50b954c4ecd24ac90b5051ee7c903d167459f93e77fc6f5b4c968"}, {file = "orjson-3.11.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:298d2451f375e5f17b897794bcc3e7b821c0f32b4788b9bcae47ada24d7f3cf7"}, {file = "orjson-3.11.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa5e4244063db8e1d87e0f54c3f7522f14b2dc937e65d5241ef0076a096409fd"}, {file = "orjson-3.11.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1db2088b490761976c1b2e956d5d4e6409f3732e9d79cfa69f876c5248d1baf9"}, {file = "orjson-3.11.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2ed66358f32c24e10ceea518e16eb3549e34f33a9d51f99ce23b0251776a1ef"}, {file = "orjson-3.11.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2021afda46c1ed64d74b555065dbd4c2558d510d8cec5ea6a53001b3e5e82a9"}, {file = "orjson-3.11.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b42ffbed9128e547a1647a3e50bc88ab28ae9daa61713962e0d3dd35e820c125"}, {file = "orjson-3.11.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8d5f16195bb671a5dd3d1dbea758918bada8f6cc27de72bd64adfbd748770814"}, {file = "orjson-3.11.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c0e5d9f7a0227df2927d343a6e3859bebf9208b427c79bd31949abcc2fa32fa5"}, {file = "orjson-3.11.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:23d04c4543e78f724c4dfe656b3791b5f98e4c9253e13b2636f1af5d90e4a880"}, {file = "orjson-3.11.5-cp311-cp311-win32.whl", hash = "sha256:c404603df4865f8e0afe981aa3c4b62b406e6d06049564d58934860b62b7f91d"}, {file = "orjson-3.11.5-cp311-cp311-win_amd64.whl", hash = "sha256:9645ef655735a74da4990c24ffbd6894828fbfa117bc97c1edd98c282ecb52e1"}, {file = "orjson-3.11.5-cp311-cp311-win_arm64.whl", hash = "sha256:1cbf2735722623fcdee8e712cbaaab9e372bbcb0c7924ad711b261c2eccf4a5c"}, {file = "orjson-3.11.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:334e5b4bff9ad101237c2d799d9fd45737752929753bf4faf4b207335a416b7d"}, {file = "orjson-3.11.5-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:ff770589960a86eae279f5d8aa536196ebda8273a2a07db2a54e82b93bc86626"}, {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed24250e55efbcb0b35bed7caaec8cedf858ab2f9f2201f17b8938c618c8ca6f"}, {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a66d7769e98a08a12a139049aac2f0ca3adae989817f8c43337455fbc7669b85"}, {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86cfc555bfd5794d24c6a1903e558b50644e5e68e6471d66502ce5cb5fdef3f9"}, {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a230065027bc2a025e944f9d4714976a81e7ecfa940923283bca7bbc1f10f626"}, {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b29d36b60e606df01959c4b982729c8845c69d1963f88686608be9ced96dbfaa"}, {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74099c6b230d4261fdc3169d50efc09abf38ace1a42ea2f9994b1d79153d477"}, {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e697d06ad57dd0c7a737771d470eedc18e68dfdefcdd3b7de7f33dfda5b6212e"}, {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e08ca8a6c851e95aaecc32bc44a5aa75d0ad26af8cdac7c77e4ed93acf3d5b69"}, {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e8b5f96c05fce7d0218df3fdfeb962d6b8cfff7e3e20264306b46dd8b217c0f3"}, {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddbfdb5099b3e6ba6d6ea818f61997bb66de14b411357d24c4612cf1ebad08ca"}, {file = "orjson-3.11.5-cp312-cp312-win32.whl", hash = "sha256:9172578c4eb09dbfcf1657d43198de59b6cef4054de385365060ed50c458ac98"}, {file = "orjson-3.11.5-cp312-cp312-win_amd64.whl", hash = "sha256:2b91126e7b470ff2e75746f6f6ee32b9ab67b7a93c8ba1d15d3a0caaf16ec875"}, {file = "orjson-3.11.5-cp312-cp312-win_arm64.whl", hash = "sha256:acbc5fac7e06777555b0722b8ad5f574739e99ffe99467ed63da98f97f9ca0fe"}, {file = "orjson-3.11.5-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3b01799262081a4c47c035dd77c1301d40f568f77cc7ec1bb7db5d63b0a01629"}, {file = "orjson-3.11.5-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:61de247948108484779f57a9f406e4c84d636fa5a59e411e6352484985e8a7c3"}, {file = "orjson-3.11.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:894aea2e63d4f24a7f04a1908307c738d0dce992e9249e744b8f4e8dd9197f39"}, {file = "orjson-3.11.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ddc21521598dbe369d83d4d40338e23d4101dad21dae0e79fa20465dbace019f"}, {file = "orjson-3.11.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cce16ae2f5fb2c53c3eafdd1706cb7b6530a67cc1c17abe8ec747f5cd7c0c51"}, {file = "orjson-3.11.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e46c762d9f0e1cfb4ccc8515de7f349abbc95b59cb5a2bd68df5973fdef913f8"}, {file = "orjson-3.11.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7345c759276b798ccd6d77a87136029e71e66a8bbf2d2755cbdde1d82e78706"}, {file = "orjson-3.11.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75bc2e59e6a2ac1dd28901d07115abdebc4563b5b07dd612bf64260a201b1c7f"}, {file = "orjson-3.11.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:54aae9b654554c3b4edd61896b978568c6daa16af96fa4681c9b5babd469f863"}, {file = "orjson-3.11.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4bdd8d164a871c4ec773f9de0f6fe8769c2d6727879c37a9666ba4183b7f8228"}, {file = "orjson-3.11.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a261fef929bcf98a60713bf5e95ad067cea16ae345d9a35034e73c3990e927d2"}, {file = "orjson-3.11.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c028a394c766693c5c9909dec76b24f37e6a1b91999e8d0c0d5feecbe93c3e05"}, {file = "orjson-3.11.5-cp313-cp313-win32.whl", hash = "sha256:2cc79aaad1dfabe1bd2d50ee09814a1253164b3da4c00a78c458d82d04b3bdef"}, {file = "orjson-3.11.5-cp313-cp313-win_amd64.whl", hash = "sha256:ff7877d376add4e16b274e35a3f58b7f37b362abf4aa31863dadacdd20e3a583"}, {file = "orjson-3.11.5-cp313-cp313-win_arm64.whl", hash = "sha256:59ac72ea775c88b163ba8d21b0177628bd015c5dd060647bbab6e22da3aad287"}, {file = "orjson-3.11.5-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e446a8ea0a4c366ceafc7d97067bfd55292969143b57e3c846d87fc701e797a0"}, {file = "orjson-3.11.5-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:53deb5addae9c22bbe3739298f5f2196afa881ea75944e7720681c7080909a81"}, {file = "orjson-3.11.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82cd00d49d6063d2b8791da5d4f9d20539c5951f965e45ccf4e96d33505ce68f"}, {file = "orjson-3.11.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3fd15f9fc8c203aeceff4fda211157fad114dde66e92e24097b3647a08f4ee9e"}, {file = "orjson-3.11.5-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df95000fbe6777bf9820ae82ab7578e8662051bb5f83d71a28992f539d2cda7"}, {file = "orjson-3.11.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92a8d676748fca47ade5bc3da7430ed7767afe51b2f8100e3cd65e151c0eaceb"}, {file = "orjson-3.11.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa0f513be38b40234c77975e68805506cad5d57b3dfd8fe3baa7f4f4051e15b4"}, {file = "orjson-3.11.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1863e75b92891f553b7922ce4ee10ed06db061e104f2b7815de80cdcb135ad"}, {file = "orjson-3.11.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4be86b58e9ea262617b8ca6251a2f0d63cc132a6da4b5fcc8e0a4128782c829"}, {file = "orjson-3.11.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:b923c1c13fa02084eb38c9c065afd860a5cff58026813319a06949c3af5732ac"}, {file = "orjson-3.11.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:1b6bd351202b2cd987f35a13b5e16471cf4d952b42a73c391cc537974c43ef6d"}, {file = "orjson-3.11.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bb150d529637d541e6af06bbe3d02f5498d628b7f98267ff87647584293ab439"}, {file = "orjson-3.11.5-cp314-cp314-win32.whl", hash = "sha256:9cc1e55c884921434a84a0c3dd2699eb9f92e7b441d7f53f3941079ec6ce7499"}, {file = "orjson-3.11.5-cp314-cp314-win_amd64.whl", hash = "sha256:a4f3cb2d874e03bc7767c8f88adaa1a9a05cecea3712649c3b58589ec7317310"}, {file = "orjson-3.11.5-cp314-cp314-win_arm64.whl", hash = "sha256:38b22f476c351f9a1c43e5b07d8b5a02eb24a6ab8e75f700f7d479d4568346a5"}, {file = "orjson-3.11.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1b280e2d2d284a6713b0cfec7b08918ebe57df23e3f76b27586197afca3cb1e9"}, {file = "orjson-3.11.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d8a112b274fae8c5f0f01954cb0480137072c271f3f4958127b010dfefaec"}, {file = "orjson-3.11.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0a2ae6f09ac7bd47d2d5a5305c1d9ed08ac057cda55bb0a49fa506f0d2da00"}, {file = "orjson-3.11.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0d87bd1896faac0d10b4f849016db81a63e4ec5df38757ffae84d45ab38aa71"}, {file = "orjson-3.11.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:801a821e8e6099b8c459ac7540b3c32dba6013437c57fdcaec205b169754f38c"}, {file = "orjson-3.11.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69a0f6ac618c98c74b7fbc8c0172ba86f9e01dbf9f62aa0b1776c2231a7bffe5"}, {file = "orjson-3.11.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea7339bdd22e6f1060c55ac31b6a755d86a5b2ad3657f2669ec243f8e3b2bdb"}, {file = "orjson-3.11.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4dad582bc93cef8f26513e12771e76385a7e6187fd713157e971c784112aad56"}, {file = "orjson-3.11.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:0522003e9f7fba91982e83a97fec0708f5a714c96c4209db7104e6b9d132f111"}, {file = "orjson-3.11.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7403851e430a478440ecc1258bcbacbfbd8175f9ac1e39031a7121dd0de05ff8"}, {file = "orjson-3.11.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5f691263425d3177977c8d1dd896cde7b98d93cbf390b2544a090675e83a6a0a"}, {file = "orjson-3.11.5-cp39-cp39-win32.whl", hash = "sha256:61026196a1c4b968e1b1e540563e277843082e9e97d78afa03eb89315af531f1"}, {file = "orjson-3.11.5-cp39-cp39-win_amd64.whl", hash = "sha256:09b94b947ac08586af635ef922d69dc9bc63321527a3a04647f4986a73f4bd30"}, {file = "orjson-3.11.5.tar.gz", hash = "sha256:82393ab47b4fe44ffd0a7659fa9cfaacc717eb617c93cde83795f14af5c2e9d5"}, ] [[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 = "platformdirs" version = "4.4.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85"}, {file = "platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf"}, ] [package.extras] docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.14.1)"] [[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 = "pre-commit" version = "4.5.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.10" groups = ["dev"] files = [ {file = "pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77"}, {file = "pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61"}, ] [package.dependencies] cfgv = ">=2.0.0" identify = ">=1.0.0" nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" [[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 = "9.0.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ {file = "pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b"}, {file = "pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11"}, ] [package.dependencies] colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} iniconfig = ">=1.0.1" packaging = ">=22" 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.3.0" description = "Pytest support for asyncio" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ {file = "pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5"}, {file = "pytest_asyncio-1.3.0.tar.gz", hash = "sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5"}, ] [package.dependencies] backports-asyncio-runner = {version = ">=1.1,<2", markers = "python_version < \"3.11\""} pytest = ">=8.2,<10" typing-extensions = {version = ">=4.12", markers = "python_version < \"3.13\""} [package.extras] docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] [[package]] name = "pytest-cov" version = "7.0.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861"}, {file = "pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1"}, ] [package.dependencies] coverage = {version = ">=7.10.6", extras = ["toml"]} pluggy = ">=1.2" pytest = ">=7" [package.extras] testing = ["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 = "python-jsonpath" version = "2.0.2" description = "JSONPath, JSON Pointer and JSON Patch for Python." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "python_jsonpath-2.0.2-py3-none-any.whl", hash = "sha256:3f8ab612f815ce10c03bf0deaede87235f3381b109a60b4a22744069953627e3"}, {file = "python_jsonpath-2.0.2.tar.gz", hash = "sha256:41abb6660b3ee54d5ae77e4b0e901049fb1662ad90de241f038df47edc75ee60"}, ] [package.extras] strict = ["iregexp-check (>=0.1.4)", "regex"] [[package]] name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" groups = ["dev", "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 = "5.0.0" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ {file = "syrupy-5.0.0-py3-none-any.whl", hash = "sha256:c848e1a980ca52a28715cd2d2b4d434db424699c05653bd1158fb31cf56e9546"}, {file = "syrupy-5.0.0.tar.gz", hash = "sha256:3282fe963fa5d4d3e47231b16d1d4d0f4523705e8199eeb99a22a1bc9f5942f2"}, ] [package.dependencies] pytest = ">=8.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.10\""} [[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.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" groups = ["main", "dev"] markers = "python_version < \"3.13\"" files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, ] [[package]] name = "urllib3" version = "2.6.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4"}, {file = "urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"}, ] [package.extras] brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "virtualenv" version = "20.36.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "virtualenv-20.36.1-py3-none-any.whl", hash = "sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f"}, {file = "virtualenv-20.36.1.tar.gz", hash = "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba"}, ] [package.dependencies] distlib = ">=0.3.7,<1" filelock = {version = ">=3.20.1,<4", markers = "python_version >= \"3.10\""} platformdirs = ">=3.9.1,<5" typing-extensions = {version = ">=4.13.2", markers = "python_version < \"3.11\""} [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[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 = "aedbecdfdcdae7a8bf212fde32a4a27f50518f23a96fe6cfd4d81cef1bf09d65" pyenphase-pyenphase-901c49f/pyproject.toml000066400000000000000000000114131513166356400207670ustar00rootroot00000000000000[project] name = "pyenphase" version = "2.4.3" 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.4.3" 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,<10" pytest-cov = ">=5,<8" types-orjson = "^3.6.2" aioresponses = ">=0.7.6" pytest-asyncio = ">=0.21.1,<1.4.0" syrupy = ">=4.5,<6.0" pytest-timeout = "^2.4.0" python-jsonpath = "^2.0.1" pre-commit = "^4.3.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-pyenphase-901c49f/renovate.json000066400000000000000000000001011513166356400205610ustar00rootroot00000000000000{ "extends": ["github>browniebroke/renovate-configs:python"] } pyenphase-pyenphase-901c49f/script/000077500000000000000000000000001513166356400173575ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/script/setup000077500000000000000000000002011513166356400204360ustar00rootroot00000000000000#!/bin/sh set -e # Install all dependencies: pip3 install poetry poetry install # Install pre-commit hooks: pre-commit install pyenphase-pyenphase-901c49f/setup.py000066400000000000000000000003571513166356400175720ustar00rootroot00000000000000#!/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-pyenphase-901c49f/src/000077500000000000000000000000001513166356400166425ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/000077500000000000000000000000001513166356400206365ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/__init__.py000066400000000000000000000031271513166356400227520ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/auth.py000066400000000000000000000365521513166356400221640ustar00rootroot00000000000000"""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 | None = None 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.get("is_consumer", False) self._manager_token = response_json.get("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 return an empty string. :return: token string """ return self._manager_token if self._manager_token is not None else "" @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-pyenphase-901c49f/src/pyenphase/const.py000066400000000000000000000103241513166356400223360ustar00rootroot00000000000000"""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") # Include in docs from here # 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" # Include in docs to here 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 = 120 #: no more request retries after this elapsed time MAX_PROBE_REQUEST_DELAY = 50 #: no more probe request retries after this elapsed time MAX_REQUEST_ATTEMPTS = 4 #: maximum retry attempts 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-pyenphase-901c49f/src/pyenphase/envoy.py000066400000000000000000001267571513166356400223720ustar00rootroot00000000000000"""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, overload 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_PROBE_REQUEST_DELAY, 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. In that case call :py:meth:`Envoy.close` before application exit. :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 :any:`MAX_REQUEST_ATTEMPTS` times or :any:`MAX_PROBE_REQUEST_DELAY` 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_PROBE_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. Probe retries on client connection issues or timeouts. Will retry up to :any:`MAX_REQUEST_ATTEMPTS` times or :any:`MAX_PROBE_REQUEST_DELAY` sec elapsed at next try, which ever comes first. :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 :any:`MAX_REQUEST_ATTEMPTS` times or :any:`MAX_REQUEST_DELAY` 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 %s to %s with data %s", method if method else "POST", 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 @overload def _meter_type(self, *types: CtType) -> CtType | None: ... @overload def _meter_type(self, *types: str) -> str | None: ... def _meter_type(self, *types: CtType | str) -> CtType | str | None: """Return if ct meter type is installed.""" assert self._common_properties is not None, "Call setup() first" # nosec if not self._common_properties.meter_types: return None for type in types: if type in self._common_properties.meter_types: return type return None @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. """ return self._meter_type(CtType.NET_CONSUMPTION, CtType.TOTAL_CONSUMPTION) @property def production_meter_type(self) -> CtType | None: """ Return the type of production ct meter installed (Production or None) as read from the Envoy. """ return self._meter_type(CtType.PRODUCTION) @property def storage_meter_type(self) -> CtType | None: """Return the type of storage ct meter installed (Storage or None) as read from the Envoy.""" return self._meter_type(CtType.STORAGE) @overload def meter_type(self, meter_type: CtType) -> CtType | None: ... @overload def meter_type(self, meter_type: str) -> str | None: ... def meter_type(self, meter_type: CtType | str) -> CtType | str | None: """Return the type of ct meter installed as read from the Envoy.""" return self._meter_type(meter_type) @property def ct_meter_list(self) -> list[CtType | str]: """Return the list 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.meter_types @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 CT found, type of CTs 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}" for ct_type in self.ct_meter_list: model = f"{model}, {ct_type} 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-pyenphase-901c49f/src/pyenphase/exceptions.py000066400000000000000000000063231513166356400233750ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/firmware.py000066400000000000000000000160741513166356400230340ustar00rootroot00000000000000"""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_PROBE_REQUEST_DELAY, MAX_REQUEST_ATTEMPTS 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_PROBE_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 :any:`MAX_REQUEST_ATTEMPTS` times or :any:`MAX_PROBE_REQUEST_DELAY` 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 :any:`MAX_REQUEST_ATTEMPTS` times or :any:`MAX_PROBE_REQUEST_DELAY` elapsed at next try, which ever comes first on network or remote protocol errors. .. 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-pyenphase-901c49f/src/pyenphase/json.py000066400000000000000000000014701513166356400221630ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/000077500000000000000000000000001513166356400221215ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/models/__init__.py000066400000000000000000000000001513166356400242200ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/models/acb.py000066400000000000000000000065341513166356400232300ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/c6combiner.py000066400000000000000000000032431513166356400245240ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/collar.py000066400000000000000000000041401513166356400237460ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/common.py000066400000000000000000000070271513166356400237710ustar00rootroot00000000000000"""Model for common properties of an envoy.""" from dataclasses import dataclass, field from ..models.meters import EnvoyPhaseMode @dataclass(slots=True) class CommonProperties: """ Model for common properties for EnvoyUpdater class updaters. Class :class:`EnvoyUpdater` implementations each collect a specific data set or information that can be provided by an Envoy. Depending on the actual model, firmware, and installed an Envoy may need one or more updaters to provide all data components, for :any:`pyenphase.Envoy.update`. Although each updater has its specific scope, some may need to share information or make operational information available. One set of properties are used during probe to share amongst updaters and with client applications. These should be reset at each probe run. A second set of properties are specific for an updater during its runtime. The updater is in control of resetting the property as needed. """ # probe properties here, also add to reset_probe_properties # shared amongst production updaters, needs reset before probe #: Probe property, Fallback production endpoints for Metered without CT. #: Solar production data has to be collected from different #: sources in the Envoy, depending on actual Envoy configuration, #: each utilizing a different updater. This list will be filled #: with candidate updaters to use. production_fallback_list: list[str] = field( default_factory=list ) #: Fallback production endpoints for Metered without CT #: ACB batteries report current power in production and in the Ensemble SECCTRL endpoint #: The Ensemble updater should only report combined ACB and Encharge if production reported 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 #: meters updater, number of phases configured in envoy phase_count: int = 0 #: meters updater, number of active ct meters ct_meter_count: int = 0 #: meters updater, phase mode configured in the CT meters phase_mode: EnvoyPhaseMode | None = None #: meters updater, list of installed meter types, if installed meter_types: list[str] = field(default_factory=list) #: production updater, number of phases actually reporting phase data active_phase_count: int = 0 def reset_probe_properties(self, is_metered: bool = False) -> None: """ Reset common properties at start of probe. Probe common properties are reset at each probe by :any:`Envoy.probe` to avoid sticking values. This should only be done for common properties shared among updaters. Any common properties set outside of probe or controlled by a specific updater, should be reset at different moments by the owner of the property. Shared common properties to reset: - 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 :return: None """ # shared amongst production updaters self.production_fallback_list = [] self.imeter_info = is_metered # shared between production and ensemble self.acb_batteries_reported = 0 pyenphase-pyenphase-901c49f/src/pyenphase/models/dry_contacts.py000066400000000000000000000075401513166356400251750ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/encharge.py000066400000000000000000000070511513166356400242520ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/enpower.py000066400000000000000000000037201513166356400241540ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/envoy.py000066400000000000000000000140031513166356400236310ustar00rootroot00000000000000"""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 ) #: CT power & energy values, only for Envoy metered with CT installed. #: Keyed by :any:`CtType` ctmeters: dict[str, EnvoyMeterData] = field(default_factory=dict) #: CT power & energy phase values, only for Envoy metered with CT installed. #: Keyed by :any:`CtType` and :any:`PhaseNames` ctmeters_phases: dict[str, dict[str, EnvoyMeterData]] = field(default_factory=dict) # these are still here for backward compatibility #: Production CT power & energy values, only for Envoy metered with production CT installed #: #: May be deprecated in a future version, use :any:`ctmeters` [:any:`CtType.PRODUCTION`] instead #: ctmeter_production: EnvoyMeterData | None = None #: Consumption CT power & energy values, only for Envoy metered with consumption CT installed #: #: May be deprecated in a future version, use :any:`ctmeters` [:any:`CtType.TOTAL_CONSUMPTION`] or :any:`ctmeters` [:any:`CtType.NET_CONSUMPTION`] instead #: ctmeter_consumption: EnvoyMeterData | None = None #: Storage CT power & energy values, only for Envoy metered with storage CT installed #: #: May be deprecated in a future version, use :any:`ctmeters` [:any:`CtType.STORAGE`] instead #: ctmeter_storage: EnvoyMeterData | None = None #: Individual phase production CT power & energy values, keyed by :any:`PhaseNames`, #: only for Envoy metered with production CT installed #: #: May be deprecated in a future version, use :any:`ctmeters_phases` [:any:`CtType.PRODUCTION`] instead #: 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 #: #: May be deprecated in a future version, use :any:`ctmeters_phases` [:any:`CtType.TOTAL_CONSUMPTION`] or :any:`ctmeters_phases` [:any:`CtType.NET_CONSUMPTION`] instead #: 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 #: #: May be deprecated in a future version, use :any:`ctmeters_phases` [:any:`CtType.STORAGE`] instead #: 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-pyenphase-901c49f/src/pyenphase/models/home.py000066400000000000000000000102541513166356400234250ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/inverter.py000066400000000000000000000063531513166356400243400ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/meters.py000066400000000000000000000077551513166356400240100ustar00rootroot00000000000000"""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): #: Solar production to main panel or Combiner/System controller PRODUCTION = "production" #: Net consumption between main panel and grid NET_CONSUMPTION = "net-consumption" #: Total consumption between main panel and house load TOTAL_CONSUMPTION = "total-consumption" #: Power and energy between battery and main panel or Combiner/System controller STORAGE = "storage" #: Power and energy backfeed between Combiner/System controller and main panel BACKFEED = "backfeed" #: Power and energy assumed between Combiner/System controller and backup load LOAD = "load" #: Power and Energy between Combiner/System controller and EV charger EVSE = "evse" #: Power and energy between 3rd-party solar and Combiner/System controller PV3P = "pv3p" 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 exchange 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-pyenphase-901c49f/src/pyenphase/models/storage_settings.py000066400000000000000000000000001513166356400260450ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/models/system_consumption.py000066400000000000000000000046471513166356400264700ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/system_production.py000066400000000000000000000070241513166356400262700ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/models/tariff.py000066400000000000000000000073101513166356400237470ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/py.typed000066400000000000000000000000001513166356400223230ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/ssl.py000066400000000000000000000034451513166356400220170ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/updaters/000077500000000000000000000000001513166356400224655ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/updaters/__init__.py000066400000000000000000000000001513166356400245640ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/src/pyenphase/updaters/api_v1_production.py000066400000000000000000000057521513166356400264750ustar00rootroot00000000000000import 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-pyenphase-901c49f/src/pyenphase/updaters/api_v1_production_inverters.py000066400000000000000000000036001513166356400305640ustar00rootroot00000000000000import 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-pyenphase-901c49f/src/pyenphase/updaters/base.py000066400000000000000000000142521513166356400237550ustar00rootroot00000000000000from 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: """ Base class for Envoy updaters. Updaters should implement a subclass of EnvoyUpdater. .. code-block:: python class EnvoyXyzUpdater(EnvoyUpdater): :param envoy_version: firmware version Envoy is running :param probe_request: callable specified by :any:`Envoy` to send probe request to the Envoy during :any:`Envoy.probe` :param request: callable specified by :any:`Envoy` to send request to the Envoy during :any:`Envoy.update` :param common_properties: properties to share between probe and update or between updaters """ 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. Updaters should use this to collect data during :any:`update` method. .. code-block:: python xyz_json: dict[str, Any] = await self._json_request( "/xyz/endpoint" ) :param end_point: Envoy endpoint to request. See :any:`Envoy.request` :raises EnvoyHTTPStatusError: If http status not in 2xx range :return: JSON content from response :seealso: :any:`Envoy.request` """ 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. Updaters should use this to collect data during :any:`probe` method. .. code-block:: python xyz_json: dict[str, Any] = await self._json_probe_request( "/xyz/endpoint" ) :param end_point: Envoy endpoint to request. See :any:`Envoy.probe` :raises EnvoyHTTPStatusError: If http status not in 2xx range :return: JSON content from response :seealso: :any:`Envoy.probe_request` """ 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. Updater must implement a probe method to report which features it supports. Probe method of each registered updater is called by :any:`Envoy.probe`. Intent of probe is to determine if this updater should be used to obtain the data in its scope from the Envoy. If the Envoy model does not provide the data the method should return None. If the Envoy model does provide the data in scope, the method should return a supported features mask for which it can provide data. Any supported feature that is already included in the passed discovered_features parameter should NOT be included in the result as these are already provided by another updater and this updater should back off from providing that feature data. .. code-block:: python async def probe( self, discovered_features: SupportedFeatures ) -> SupportedFeatures | None: \"\"\"Probe the Envoy for this endpoint and return SupportedFeatures.\"\"\" if SupportedFeatures.MY_FEATURE in discovered_features: # Already discovered from another updater return None try: json_data: dict[str, Any] = await self._json_probe_request(MY_ENDPOINT) except ENDPOINT_PROBE_EXCEPTIONS as e: _LOGGER.debug("Endpoint not found at %s: %s", MY_ENDPOINT, e) return None # process data return SupportedFeatures.MY_FEATURE :param discovered_features: Mask of already discovered SupportedFeatures :return: Mask of SupportedFeatures to be added to already discovered features (and not yet in discovered_features). """ @abstractmethod async def update(self, envoy_data: EnvoyData) -> None: """ Get data from the Envoy and store in EnvoyData. Updater must implement an update method to add/update data in :any:`EnvoyData`. Update method of each registered updater is called by :any:`Envoy.update`. The update method is expected to obtain the required data from the envoy, map it to the internal data model and store the data. It should also store retrieved raw data in :any:`EnvoyData.raw` .. code-block:: python async def update(self, envoy_data: EnvoyData) -> None: \"\"\"Get data from the Envoy and store in EnvoyData.\"\"\" json_data = await self._json_request(self.end_point) envoy_data.raw[self.end_point] = json_data # store applicable data in envoy_data :param envoy_data: Envoy data model to store collected data in """ pyenphase-pyenphase-901c49f/src/pyenphase/updaters/device_data_inverters.py000066400000000000000000000077111513166356400273760ustar00rootroot00000000000000import 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-pyenphase-901c49f/src/pyenphase/updaters/ensemble.py000066400000000000000000000150151513166356400246330ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/updaters/generator.py000066400000000000000000000033501513166356400250260ustar00rootroot00000000000000import 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-pyenphase-901c49f/src/pyenphase/updaters/meters.py000066400000000000000000000222761513166356400243470ustar00rootroot00000000000000"""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 ) meter_types: list[str] #: CT types found 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) ) meter_eids: dict[int | str, str] #: CT identifiers 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.meter_types = self.meter_types 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 :any:SupportedFeatures.CTMETERS if CT are found and enabled. Set Threephase or Dualphase supported feature if Envoy is in one of these setups. Set common properties (phase_count, ct_meter_count, phase_mode, meter_types) to default or discovered values. These 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, only available on Envoy metered if configured ) self.phase_mode = ( None # Phase mode only if ct meters are installed and configured ) # track found ct meter measurement types self.meter_types = [] # 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.meter_eids = {} 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 for meter in meters_json: if meter["state"] == CtState.ENABLED: # remember what meter is installed self.meter_types.append(meter_type := meter["measurementType"]) # save meter identifier for link between /ivp/meters and /ivp/meters/readings self.meter_eids[meter["eid"]] = meter_type 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 EnvoyMeterData in ctmeters for any meters enabled during probe. If more than one phase is active, store per-phase data in ctmeters_phases. Match data in ivp/meters and ivp/meters/reading using the eid field in both datasets. For backward compatibility, ctmeter_production/ctmeter_consumption/ctmeter_storage and their phase equivalents are still set to reference the corresponding entries in ctmeters[CtType] and ctmeters_phases[CtType]. :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 status_by_eid = {ct["eid"]: ct for ct in meters_status} for meter in meters_readings: eid = meter["eid"] if not (ct_status := status_by_eid.get(eid)): # 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 in self.meter_eids: # if meter was enabled (eid known) store ctmeter data envoy_data.ctmeters[meter_type := self.meter_eids[eid]] = ( EnvoyMeterData.from_api(meter, ct_status) ) # if more than 1 phase is configured, store ctmeters phase data if phase_data := _meter_data_for_phases(phase_range, meter, ct_status): envoy_data.ctmeters_phases[meter_type] = phase_data # Next part is for backward compatibility # May plan to remove in some future breaking change version if meter_type == CtType.PRODUCTION: envoy_data.ctmeter_production = envoy_data.ctmeters[meter_type] if phase_data: envoy_data.ctmeter_production_phases = ( envoy_data.ctmeters_phases[meter_type] ) elif meter_type in ( CtType.NET_CONSUMPTION, CtType.TOTAL_CONSUMPTION, ): envoy_data.ctmeter_consumption = envoy_data.ctmeters[meter_type] if phase_data: envoy_data.ctmeter_consumption_phases = ( envoy_data.ctmeters_phases[meter_type] ) elif meter_type == CtType.STORAGE: envoy_data.ctmeter_storage = envoy_data.ctmeters[meter_type] if phase_data: envoy_data.ctmeter_storage_phases = envoy_data.ctmeters_phases[ meter_type ] # End of backward compatibility 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-pyenphase-901c49f/src/pyenphase/updaters/production.py000066400000000000000000000236171513166356400252360ustar00rootroot00000000000000"""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-pyenphase-901c49f/src/pyenphase/updaters/tariff.py000066400000000000000000000030221513166356400243070ustar00rootroot00000000000000import 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-pyenphase-901c49f/tests/000077500000000000000000000000001513166356400172155ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/__init__.py000066400000000000000000000000001513166356400213140ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/__snapshots__/000077500000000000000000000000001513166356400220335ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/__snapshots__/test_acb.ambr000066400000000000000000020066341513166356400244750ustar00rootroot00000000000000# 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ '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, }), }), 'ctmeters_phases': dict({ 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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-pyenphase-901c49f/tests/__snapshots__/test_ct_meters.ambr000066400000000000000000031322061513166356400257310ustar00rootroot00000000000000# serializer version: 1 # name: test_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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_current_transformers[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, 'ctmeters': dict({ '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, }), }), 'ctmeters_phases': dict({ 'production': 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, }), }), }), '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_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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_current_transformers[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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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_current_transformers[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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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_current_transformers[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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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_current_transformers[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, }), }), 'ctmeters': dict({ 'backfeed': dict({ 'active_power': -686, 'current': 11.488, 'eid': 704644352, 'energy_delivered': 4, 'energy_received': 7015, 'frequency': 0.0, 'measurement_type': 'backfeed', 'metering_status': 'normal', 'power_factor': -0.991, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974751, 'voltage': 120.58, }), 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'backfeed': dict({ : dict({ 'active_power': -662, 'current': 5.73, 'eid': 1778386193, 'energy_delivered': 4, 'energy_received': 7015, 'frequency': 0.0, 'measurement_type': 'backfeed', 'metering_status': 'normal', 'power_factor': -0.991, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974751, 'voltage': 120.587, }), : dict({ 'active_power': 0, 'current': 5.722, 'eid': 1778386194, 'energy_delivered': 0, 'energy_received': 0, 'frequency': 0.0, 'measurement_type': 'backfeed', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974751, 'voltage': 0.0, }), }), 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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, }), }), }) # --- # name: test_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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_without_current_transformers[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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, }), }), }) # --- pyenphase-pyenphase-901c49f/tests/__snapshots__/test_endpoints.ambr000066400000000000000000027161441513166356400257570ustar00rootroot00000000000000# 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ '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, }), }), 'ctmeters_phases': dict({ 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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-pyenphase-901c49f/tests/__snapshots__/test_ensemble.ambr000066400000000000000000031317511513166356400255420ustar00rootroot00000000000000# 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ '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, }), }), 'ctmeters_phases': dict({ 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, }), }), 'ctmeters': dict({ 'backfeed': dict({ 'active_power': -686, 'current': 11.488, 'eid': 704644352, 'energy_delivered': 4, 'energy_received': 7015, 'frequency': 0.0, 'measurement_type': 'backfeed', 'metering_status': 'normal', 'power_factor': -0.991, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974751, 'voltage': 120.58, }), 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'backfeed': dict({ : dict({ 'active_power': -662, 'current': 5.73, 'eid': 1778386193, 'energy_delivered': 4, 'energy_received': 7015, 'frequency': 0.0, 'measurement_type': 'backfeed', 'metering_status': 'normal', 'power_factor': -0.991, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974751, 'voltage': 120.587, }), : dict({ 'active_power': 0, 'current': 5.722, 'eid': 1778386194, 'energy_delivered': 0, 'energy_received': 0, 'frequency': 0.0, 'measurement_type': 'backfeed', 'metering_status': 'normal', 'power_factor': 0.0, 'state': 'enabled', 'status_flags': list([ ]), 'timestamp': 1752974751, 'voltage': 0.0, }), }), 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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-pyenphase-901c49f/tests/__snapshots__/test_net_consumption.ambr000066400000000000000000024112621513166356400271710ustar00rootroot00000000000000# 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ '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, }), }), 'ctmeters_phases': dict({ 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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, 'ctmeters': dict({ }), 'ctmeters_phases': dict({ }), '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, }), }), 'ctmeters': dict({ 'net-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, }), '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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), 'storage': 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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ 'net-consumption': 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, }), }), 'production': 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, }), }), }), '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, 'ctmeters': dict({ 'net-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, }), '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, }), }), 'ctmeters_phases': dict({ }), '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-pyenphase-901c49f/tests/common.py000066400000000000000000000354241513166356400210670ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/conftest.py000066400000000000000000000026761513166356400214270ustar00rootroot00000000000000import 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-pyenphase-901c49f/tests/fixtures/000077500000000000000000000000001513166356400210665ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/000077500000000000000000000000001513166356400216175ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/api_v1_production000066400000000000000000000001621513166356400251660ustar00rootroot00000000000000{ "wattHoursToday": 5481, "wattHoursSevenDays": 389581, "wattHoursLifetime": 93706280, "wattsNow": 5463 } pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/api_v1_production_inverters000066400000000000000000000125031513166356400272710ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/3.17.3/api_v1_production_inverters_log.json000066400000000000000000000002021513166356400310730ustar00rootroot00000000000000{"headers": {"date": "Wed, 09 Aug 2023 01:11:03 GMT", "content-type": "application/json", "content-length": "5456"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/api_v1_production_log.json000066400000000000000000000002011513166356400267710ustar00rootroot00000000000000{"headers": {"date": "Wed, 09 Aug 2023 01:11:03 GMT", "content-type": "application/json", "content-length": "116"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/info000066400000000000000000000023531513166356400225000ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.17.3/info_log.json000066400000000000000000000002021513166356400243000ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/ivp_ensemble_dry_contacts000066400000000000000000000000401513166356400267600ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531513166356400305760ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/ivp_ensemble_inventory000066400000000000000000000000401513166356400263210ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/ivp_ensemble_inventory_log.json000066400000000000000000000001531513166356400301370ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/ivp_ss_dry_contact_settings000066400000000000000000000000401513166356400273500ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531513166356400311660ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/production000066400000000000000000000007431513166356400237340ustar00rootroot00000000000000

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-pyenphase-901c49f/tests/fixtures/3.17.3/production.json000066400000000000000000000010431513166356400246760ustar00rootroot00000000000000
Emu

Page Not Found

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

pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/production.json_log.json000066400000000000000000000002421513166356400265070ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.17.3/production_log.json000066400000000000000000000002421513166356400255370ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/000077500000000000000000000000001513166356400215335ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/info000066400000000000000000000023521513166356400224130ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.7.0/info_log.json000066400000000000000000000002021513166356400242140ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/ivp_ensemble_dry_contacts000066400000000000000000000000401513166356400266740ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531513166356400305120ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/ivp_ensemble_inventory000066400000000000000000000000401513166356400262350ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/ivp_ensemble_inventory_log.json000066400000000000000000000001531513166356400300530ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/ivp_ss_dry_contact_settings000066400000000000000000000000401513166356400272640ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531513166356400311020ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/production000066400000000000000000000007431513166356400236500ustar00rootroot00000000000000

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-pyenphase-901c49f/tests/fixtures/3.7.0/production.json000066400000000000000000000010431513166356400246120ustar00rootroot00000000000000
Emu

Page Not Found

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

pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/production.json_log.json000066400000000000000000000002421513166356400264230ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.7.0/production_log.json000066400000000000000000000002421513166356400254530ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/000077500000000000000000000000001513166356400216155ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/admin_lib_tariff000066400000000000000000000010431513166356400250070ustar00rootroot00000000000000
Emu

Page Not Found

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

pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/admin_lib_tariff_log.json000066400000000000000000000002421513166356400266200ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/api_v1_production000066400000000000000000000001641513166356400251660ustar00rootroot00000000000000{ "wattHoursToday": 25151, "wattHoursSevenDays": 240671, "wattHoursLifetime": 138475913, "wattsNow": 4324 } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/api_v1_production_inverters000066400000000000000000000125111513166356400272660ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/3.8.10/api_v1_production_inverters_log.json000066400000000000000000000002021513166356400310710ustar00rootroot00000000000000{"headers": {"date": "Wed, 20 Dec 2023 00:57:11 GMT", "content-type": "application/json", "content-length": "5449"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/api_v1_production_log.json000066400000000000000000000002011513166356400267670ustar00rootroot00000000000000{"headers": {"date": "Wed, 20 Dec 2023 00:57:11 GMT", "content-type": "application/json", "content-length": "116"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/info000066400000000000000000000023541513166356400224770ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.8.10/info_log.json000066400000000000000000000002021513166356400242760ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_dry_contacts000066400000000000000000000000401513166356400267560ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531513166356400305740ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_generator000066400000000000000000000000401513166356400262500ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_generator_log.json000066400000000000000000000001531513166356400300660ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_inventory000066400000000000000000000000401513166356400263170ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_inventory_log.json000066400000000000000000000001531513166356400301350ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_power000066400000000000000000000000401513166356400254160ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_power_log.json000066400000000000000000000001531513166356400272340ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_secctrl000066400000000000000000000000401513166356400257210ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_secctrl_log.json000066400000000000000000000001531513166356400275370ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_status000066400000000000000000000000401513166356400256050ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ensemble_status_log.json000066400000000000000000000001531513166356400274230ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_meters000066400000000000000000000000131513166356400237070ustar00rootroot00000000000000Error: 401 pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_meters_log.json000066400000000000000000000002571513166356400255320ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"1703033831\"", "content-type": "text/plain", "content-length": "10"}, "code": 401} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_meters_readings000066400000000000000000000000401513166356400255630ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_meters_readings_log.json000066400000000000000000000001531513166356400274010ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_sc_pvlimit000066400000000000000000000000401513166356400245610ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_sc_pvlimit_log.json000066400000000000000000000001531513166356400263770ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_dry_contact_settings000066400000000000000000000000401513166356400273460ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531513166356400311640ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_gen_config000066400000000000000000000000401513166356400252130ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_gen_config_log.json000066400000000000000000000001531513166356400270310ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_gen_schedule000066400000000000000000000000401513166356400255420ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_gen_schedule_log.json000066400000000000000000000001531513166356400273600ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_pel_settings000066400000000000000000000000401513166356400256150ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/ivp_ss_pel_settings_log.json000066400000000000000000000001531513166356400274330ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/production000066400000000000000000000007431513166356400237320ustar00rootroot00000000000000

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-pyenphase-901c49f/tests/fixtures/3.8.10/production.json000066400000000000000000000010431513166356400246740ustar00rootroot00000000000000
Emu

Page Not Found

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

pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/production.json_log.json000066400000000000000000000002421513166356400265050ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.8.10/production_log.json000066400000000000000000000002421513166356400255350ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "application/json", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/000077500000000000000000000000001513166356400216265ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/api_v1_production000066400000000000000000000001611513166356400251740ustar00rootroot00000000000000{ "wattHoursToday": 1460, "wattHoursSevenDays": 130349, "wattHoursLifetime": 6012540, "wattsNow": 1271 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/api_v1_production_inverters000066400000000000000000000030771513166356400273060ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/3.9.36/api_v1_production_inverters_log.json000066400000000000000000000002301513166356400311030ustar00rootroot00000000000000{ "headers": { "date": "Wed, 09 Aug 2023 00:58:22 GMT", "content-type": "application/json", "content-length": "1491" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/api_v1_production_log.json000066400000000000000000000002271513166356400270100ustar00rootroot00000000000000{ "headers": { "date": "Wed, 09 Aug 2023 00:58:22 GMT", "content-type": "application/json", "content-length": "103" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/info000066400000000000000000000021541513166356400225060ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.9.36/info_log.json000066400000000000000000000002241513166356400243130ustar00rootroot00000000000000{ "headers": { "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/xml" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ensemble_dry_contacts000066400000000000000000000000401513166356400267670ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001751513166356400306110ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ensemble_inventory000066400000000000000000000000401513166356400263300ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ensemble_inventory_log.json000066400000000000000000000001751513166356400301520ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ensemble_power000066400000000000000000000000401513166356400254270ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ensemble_power_log.json000066400000000000000000000001751513166356400272510ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ss_dry_contact_settings000066400000000000000000000000401513166356400273570ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001751513166356400312010ustar00rootroot00000000000000{ "headers": { "content-type": "application/json; charset=ISO-8859-4", "content-length": "31" }, "code": 404 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/production000066400000000000000000000347221513166356400237470ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.9.36/production.json000066400000000000000000000350131513166356400247110ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.9.36/production.json_log.json000066400000000000000000000002711513166356400265200ustar00rootroot00000000000000{ "headers": { "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36/production_log.json000066400000000000000000000002711513166356400255500ustar00rootroot00000000000000{ "headers": { "pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/000077500000000000000000000000001513166356400234555ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/admin_lib_tariff000066400000000000000000000000131513166356400266430ustar00rootroot00000000000000Error: 401 pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/admin_lib_tariff_log.json000066400000000000000000000002571513166356400304660ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"1694046744\"", "content-type": "text/plain", "content-length": "10"}, "code": 401} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/api_v1_production000066400000000000000000000001471513166356400270270ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 14578520, "wattsNow": 0 } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/api_v1_production_inverters000066400000000000000000000001321513166356400311220ustar00rootroot00000000000000{ "status": 401, "error": "", "info": "Authentication required", "moreInfo": "" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/api_v1_production_inverters_log.json000066400000000000000000000002531513166356400327370ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/api_v1_production_log.json000066400000000000000000000002011513166356400306270ustar00rootroot00000000000000{"headers": {"date": "Thu, 07 Sep 2023 00:32:20 GMT", "content-type": "application/json", "content-length": "103"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/info000066400000000000000000000021541513166356400243350ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/info_log.json000066400000000000000000000001721513166356400261440ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/xml"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_dry_contacts000066400000000000000000000000401513166356400306160ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_dry_contacts_log.json000066400000000000000000000001531513166356400324340ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_generator000066400000000000000000000000401513166356400301100ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_generator_log.json000066400000000000000000000001531513166356400317260ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_inventory000066400000000000000000000000401513166356400301570ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_inventory_log.json000066400000000000000000000001531513166356400317750ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_secctrl000066400000000000000000000000401513166356400275610ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_secctrl_log.json000066400000000000000000000001531513166356400313770ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_status000066400000000000000000000000401513166356400274450ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ensemble_status_log.json000066400000000000000000000001531513166356400312630ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_meters000066400000000000000000000000401513166356400255470ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_meters_log.json000066400000000000000000000001531513166356400273650ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_meters_readings000066400000000000000000000000401513166356400274230ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_meters_readings_log.json000066400000000000000000000001531513166356400312410ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_sc_pvlimit000066400000000000000000000000401513166356400264210ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_sc_pvlimit_log.json000066400000000000000000000001531513166356400302370ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_dry_contact_settings000066400000000000000000000000401513166356400312060ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001531513166356400330240ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_config000066400000000000000000000000401513166356400270530ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_config_log.json000066400000000000000000000001531513166356400306710ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_schedule000066400000000000000000000000401513166356400274020ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_gen_schedule_log.json000066400000000000000000000001531513166356400312200ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_pel_settings000066400000000000000000000000401513166356400274550ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/ivp_ss_pel_settings_log.json000066400000000000000000000001531513166356400312730ustar00rootroot00000000000000{"headers": {"content-type": "application/json; charset=ISO-8859-4", "content-length": "31"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/production000066400000000000000000000347221513166356400255760ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/production.json000066400000000000000000000350131513166356400265400ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/production.json_log.json000066400000000000000000000002331513166356400303450ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/3.9.36_bad_auth/production_log.json000066400000000000000000000002331513166356400273750ustar00rootroot00000000000000{"headers": {"pragma": "no-cache", "expires": "1", "cache-control": "no-cache", "content-type": "text/html", "transfer-encoding": "chunked"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/000077500000000000000000000000001513166356400216765ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/admin_lib_tariff000066400000000000000000000005341513166356400250740ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/admin_lib_tariff_log.json000066400000000000000000000003021513166356400266760ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/api_v1_production000066400000000000000000000001601513166356400252430ustar00rootroot00000000000000{ "wattHoursToday": 126, "wattHoursSevenDays": 179142, "wattHoursLifetime": 26785314, "wattsNow": 231 } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/api_v1_production_inverters000066400000000000000000000054451513166356400273570ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/4.10.35/api_v1_production_inverters_log.json000066400000000000000000000002701513166356400311570ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/api_v1_production_log.json000066400000000000000000000002671513166356400270640ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/info000066400000000000000000000032101513166356400225500ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/4.10.35/info_log.json000066400000000000000000000003241513166356400243640ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_dry_contacts000066400000000000000000000000401513166356400270370ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_dry_contacts_log.json000066400000000000000000000002531513166356400306560ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_generator000066400000000000000000000000401513166356400263310ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_generator_log.json000066400000000000000000000002531513166356400301500ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_inventory000066400000000000000000000000401513166356400264000ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_inventory_log.json000066400000000000000000000002531513166356400302170ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_power000066400000000000000000000000401513166356400254770ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_power_log.json000066400000000000000000000002531513166356400273160ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_secctrl000066400000000000000000000000401513166356400260020ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_secctrl_log.json000066400000000000000000000002531513166356400276210ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_status000066400000000000000000000000401513166356400256660ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ensemble_status_log.json000066400000000000000000000002531513166356400275050ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_meters000066400000000000000000000007121513166356400237760ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_meters_log.json000066400000000000000000000001641513166356400256100ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-length": "457"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_meters_readings000066400000000000000000000114171513166356400256560ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_meters_readings_log.json000066400000000000000000000001651513166356400274650ustar00rootroot00000000000000{"headers": {"date": "Thu, 21 Sep 2023 13:03:40 GMT", "connection": "close", "content-length": "4878"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_sc_pvlimit000066400000000000000000000000401513166356400246420ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_sc_pvlimit_log.json000066400000000000000000000002531513166356400264610ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_dry_contact_settings000066400000000000000000000000401513166356400274270ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_dry_contact_settings_log.json000066400000000000000000000002531513166356400312460ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_gen_config000066400000000000000000000000401513166356400252740ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_gen_config_log.json000066400000000000000000000002531513166356400271130ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_gen_schedule000066400000000000000000000000401513166356400256230ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_gen_schedule_log.json000066400000000000000000000002531513166356400274420ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_pel_settings000066400000000000000000000000401513166356400256760ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/ivp_ss_pel_settings_log.json000066400000000000000000000002531513166356400275150ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/production000066400000000000000000000000641513166356400240070ustar00rootroot00000000000000

401 Unauthorized

pyenphase-pyenphase-901c49f/tests/fixtures/4.10.35/production.json000066400000000000000000000027001513166356400247560ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/production.json_log.json000066400000000000000000000003421513166356400265670ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/4.10.35/production_log.json000066400000000000000000000003271513166356400256220ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"Kz8MZRV4a9h25Ea4+ikZbKDannY=\"", "connection": "close", "content-type": "text/html", "content-length": "51"}, "code": 401} pyenphase-pyenphase-901c49f/tests/fixtures/4.2.27/000077500000000000000000000000001513166356400216205ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/4.2.27/api_v1_production000066400000000000000000000001631513166356400251700ustar00rootroot00000000000000{ "wattHoursToday": 17920, "wattHoursSevenDays": 276614, "wattHoursLifetime": 10279087, "wattsNow": 5894 } pyenphase-pyenphase-901c49f/tests/fixtures/4.2.27/info000066400000000000000000000034211513166356400224760ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/4.2.27/production.json000066400000000000000000000035461513166356400247110ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/4.2.33/000077500000000000000000000000001513166356400216155ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/4.2.33/api_v1_production000066400000000000000000000001631513166356400251650ustar00rootroot00000000000000{ "wattHoursToday": 17920, "wattHoursSevenDays": 276614, "wattHoursLifetime": 10279087, "wattsNow": 5894 } pyenphase-pyenphase-901c49f/tests/fixtures/4.2.33/api_v1_production_inverters000066400000000000000000000167631513166356400273030ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/4.2.33/info000066400000000000000000000030231513166356400224710ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/4.2.33/ivp_meters000066400000000000000000000006331513166356400237170ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/4.2.33/ivp_meters_readings000066400000000000000000000045021513166356400255720ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/4.2.33/production.json000066400000000000000000000022431513166356400246770ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/5.0.49/000077500000000000000000000000001513166356400216235ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/5.0.49/api_v1_production000066400000000000000000000001621513166356400251720ustar00rootroot00000000000000{ "wattHoursToday": 5046, "wattHoursSevenDays": 445686, "wattHoursLifetime": 88742152, "wattsNow": 4859 } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.49/api_v1_production_inverters000066400000000000000000000136331513166356400273020ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/5.0.49/info000066400000000000000000000034211513166356400225010ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/5.0.49/production.json000066400000000000000000000005121513166356400247020ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/5.0.62/000077500000000000000000000000001513166356400216165ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/admin_lib_tariff000066400000000000000000000003011513166356400250040ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/admin_lib_tariff_log.json000066400000000000000000000003021513166356400266160ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/api_v1_production000066400000000000000000000001641513166356400251670ustar00rootroot00000000000000{ "wattHoursToday": 20161, "wattHoursSevenDays": 366671, "wattHoursLifetime": 133798553, "wattsNow": 7907 } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/api_v1_production_inverters000066400000000000000000000136321513166356400272740ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/5.0.62/api_v1_production_inverters_log.json000066400000000000000000000002701513166356400310770ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/api_v1_production_log.json000066400000000000000000000002671513166356400270040ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/info000066400000000000000000000034211513166356400224740ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/5.0.62/info_log.json000066400000000000000000000003241513166356400243040ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_dry_contacts000066400000000000000000000000401513166356400267570ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_dry_contacts_log.json000066400000000000000000000002531513166356400305760ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_generator000066400000000000000000000000401513166356400262510ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_generator_log.json000066400000000000000000000002531513166356400300700ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_inventory000066400000000000000000000000401513166356400263200ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_inventory_log.json000066400000000000000000000002531513166356400301370ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_power000066400000000000000000000000401513166356400254170ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_power_log.json000066400000000000000000000002531513166356400272360ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_secctrl000066400000000000000000000000401513166356400257220ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_secctrl_log.json000066400000000000000000000002531513166356400275410ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_status000066400000000000000000000000401513166356400256060ustar00rootroot00000000000000{ "error" : "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ensemble_status_log.json000066400000000000000000000002531513166356400274250ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_meters000066400000000000000000000000031513166356400237070ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_meters_log.json000066400000000000000000000001621513166356400255260ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "2"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_meters_readings000066400000000000000000000000031513166356400255630ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_meters_readings_log.json000066400000000000000000000001621513166356400274020ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "2"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_sc_pvlimit000066400000000000000000000000361513166356400245670ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_sc_pvlimit_log.json000066400000000000000000000001631513166356400264010ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_dry_contact_settings000066400000000000000000000000361513166356400273540ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_dry_contact_settings_log.json000066400000000000000000000001631513166356400311660ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:25 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_gen_config000066400000000000000000000000361513166356400252210ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_gen_config_log.json000066400000000000000000000001631513166356400270330ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_gen_schedule000066400000000000000000000000361513166356400255500ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_gen_schedule_log.json000066400000000000000000000001631513166356400273620ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_pel_settings000066400000000000000000000000361513166356400256230ustar00rootroot00000000000000 { "err": "404 - Not Found" } pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/ivp_ss_pel_settings_log.json000066400000000000000000000001631513166356400274350ustar00rootroot00000000000000{"headers": {"date": "Tue, 12 Sep 2023 21:55:26 GMT", "connection": "close", "content-length": "29"}, "code": 404} pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/production000066400000000000000000000000641513166356400237270ustar00rootroot00000000000000

401 Unauthorized

pyenphase-pyenphase-901c49f/tests/fixtures/5.0.62/production.json000066400000000000000000000003201513166356400246720ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/production.json_log.json000066400000000000000000000003421513166356400265070ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/5.0.62/production_log.json000066400000000000000000000003271513166356400255420ustar00rootroot00000000000000{"headers": {"www-authenticate": "Digest qop=\"auth\", realm=\"enphaseenergy.com\", nonce=\"Td4AZZWMIuPzNdOwn+N1MAFCm9k=\"", "connection": "close", "content-type": "text/html", "content-length": "51"}, "code": 401} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130/000077500000000000000000000000001513166356400216775ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130/api_v1_production000066400000000000000000000001661513166356400252520ustar00rootroot00000000000000{ "wattHoursLifetime" : 3659478, "wattHoursSevenDays" : 149944, "wattHoursToday" : 58, "wattsNow" : 133 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130/api_v1_production_inverters000066400000000000000000000037241513166356400273560ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.130/info000066400000000000000000000040071513166356400225560ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.3.130/ivp_ensemble_inventory000066400000000000000000000000031513166356400264000ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130/production000066400000000000000000000045351513166356400240170ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.130/production.json000066400000000000000000000040611513166356400247610ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/000077500000000000000000000000001513166356400250315ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/admin_lib_tariff000066400000000000000000000030471513166356400302310ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/admin_lib_tariff_log.json000066400000000000000000000006131513166356400320360ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/api_v1_production000066400000000000000000000001621513166356400304000ustar00rootroot00000000000000{ "wattHoursToday": 14498, "wattHoursSevenDays": 185978, "wattHoursLifetime": 4545576, "wattsNow": 4454 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/api_v1_production_inverters000066400000000000000000000043341513166356400325060ustar00rootroot00000000000000[ { "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 } ] api_v1_production_inverters_log.json000066400000000000000000000005021513166356400342310ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/api_v1_production_log.json000066400000000000000000000005011513166356400322060ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/info000066400000000000000000000041771513166356400257200ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/info_log.json000066400000000000000000000005751513166356400275270ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_dry_contacts000066400000000000000000000010531513166356400321770ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_dry_contacts_log.json000066400000000000000000000002661513166356400340150ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_generator000066400000000000000000000010531513166356400314710ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_generator_log.json000066400000000000000000000002661513166356400333070ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_inventory000066400000000000000000000000031513166356400315320ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_inventory_log.json000066400000000000000000000004331513166356400333520ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_power000066400000000000000000000010531513166356400306370ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_power_log.json000066400000000000000000000002661513166356400324550ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_secctrl000066400000000000000000000010531513166356400311420ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_secctrl_log.json000066400000000000000000000002661513166356400327600ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_status000066400000000000000000000010531513166356400310260ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ensemble_status_log.json000066400000000000000000000002661513166356400326440ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_meters000066400000000000000000000007131513166356400271320ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_meters_log.json000066400000000000000000000004351513166356400307440ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_meters_readings000066400000000000000000000112461513166356400310110ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_meters_readings_log.json000066400000000000000000000004361513166356400326210ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_sc_pvlimit000066400000000000000000000010531513166356400300020ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_sc_pvlimit_log.json000066400000000000000000000002661513166356400316200ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ss_dry_contact_settings000066400000000000000000000010531513166356400325670ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
ivp_ss_dry_contact_settings_log.json000066400000000000000000000002661513166356400343260ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_config000066400000000000000000000010531513166356400304340ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_config_log.json000066400000000000000000000002661513166356400322520ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_schedule000066400000000000000000000010531513166356400307630ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ss_gen_schedule_log.json000066400000000000000000000002661513166356400326010ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ss_pel_settings000066400000000000000000000010531513166356400310360ustar00rootroot00000000000000 401 Authorization Required

401 Authorization Required


Redirecting to
pyenphase-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/ivp_ss_pel_settings_log.json000066400000000000000000000002661513166356400326540ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/production000066400000000000000000000026341513166356400271470ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/production.json000066400000000000000000000026301513166356400301130ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/production.json_log.json000066400000000000000000000006131513166356400317230ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.130_no_consumption/production_log.json000066400000000000000000000006131513166356400307530ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/000077500000000000000000000000001513166356400261205ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/admin_lib_tariff000066400000000000000000000033221513166356400313140ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/admin_lib_tariff_log.json000066400000000000000000000006131513166356400331250ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/api_v1_production000066400000000000000000000001421513166356400314650ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 0, "wattsNow": 689 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/api_v1_production_inverters000066400000000000000000000020421513166356400335670ustar00rootroot00000000000000[ { "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 } ] api_v1_production_inverters_log.json000066400000000000000000000005021513166356400353200ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/api_v1_production_log.json000066400000000000000000000005011513166356400332750ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/info000066400000000000000000000041771513166356400270070ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/info_log.json000066400000000000000000000005751513166356400306160ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400332660ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400350230ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_generator000066400000000000000000000002771513166356400325670ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400343150ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_inventory000066400000000000000000000000031513166356400326210ustar00rootroot00000000000000[] ivp_ensemble_inventory_log.json000066400000000000000000000004331513166356400343620ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_power000066400000000000000000000000271513166356400317260ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_power_log.json000066400000000000000000000004341513166356400335410ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_secctrl000066400000000000000000000013301513166356400322270ustar00rootroot00000000000000{ "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 } ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400337660ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_status000066400000000000000000000045621513166356400321250ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ensemble_status_log.json000066400000000000000000000004361513166356400337320ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters000066400000000000000000000007471513166356400302300ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters_log.json000066400000000000000000000004351513166356400320330ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters_readings000066400000000000000000000113541513166356400321000ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_meters_readings_log.json000066400000000000000000000004361513166356400337100ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_sc_pvlimit000066400000000000000000000000611513166356400310670ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400327040ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400336670ustar00rootroot00000000000000{ "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": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400354140ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_config000066400000000000000000000000031513166356400315150ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400333350ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_schedule000066400000000000000000000000031513166356400320440ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400336640ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_pel_settings000066400000000000000000000000251513166356400321230ustar00rootroot00000000000000{ "PEL": false } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/ivp_ss_pel_settings_log.json000066400000000000000000000004341513166356400337400ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/production000066400000000000000000000047321513166356400302370ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/production.json000066400000000000000000000047461513166356400312140ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/production.json_log.json000066400000000000000000000006131513166356400330120ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_metered_disabled_cts/production_log.json000066400000000000000000000006131513166356400320420ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/000077500000000000000000000000001513166356400250625ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/_readme000066400000000000000000000014141513166356400264010ustar00rootroot000000000000007.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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/admin_lib_tariff000066400000000000000000000131621513166356400302610ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/api_v1_production000066400000000000000000000001601513166356400304270ustar00rootroot00000000000000{ "wattHoursToday": 4374, "wattHoursSevenDays": 111089, "wattHoursLifetime": 3183742, "wattsNow": 689 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/api_v1_production_inverters000066400000000000000000000020421513166356400325310ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/info000066400000000000000000000041771513166356400257510ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400322300ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_generator000066400000000000000000000002771513166356400315310ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_inventory000066400000000000000000000000031513166356400315630ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_power000066400000000000000000000000271513166356400306700ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_secctrl000066400000000000000000000013301513166356400311710ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ensemble_status000066400000000000000000000045621513166356400310670ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_meters000066400000000000000000000007121513166356400271620ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_meters_readings000066400000000000000000000113541513166356400310420ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_sc_pvlimit000066400000000000000000000000611513166356400300310ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400326310ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_gen_config000066400000000000000000000000031513166356400304570ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_gen_schedule000066400000000000000000000000031513166356400310060ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/ivp_ss_pel_settings000066400000000000000000000000251513166356400310650ustar00rootroot00000000000000{ "PEL": false } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/production000066400000000000000000000046571513166356400272070ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.466_with_cts_3phase/production.json000066400000000000000000000206341513166356400301500ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/000077500000000000000000000000001513166356400217105ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517/admin_lib_tariff000066400000000000000000000112001513166356400250760ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/admin_lib_tariff_log.json000066400000000000000000000006131513166356400267150ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/api_v1_production000066400000000000000000000001631513166356400252600ustar00rootroot00000000000000{ "wattHoursToday": 17645, "wattHoursSevenDays": 217726, "wattHoursLifetime": 19229325, "wattsNow": 5326 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517/api_v1_production_inverters000066400000000000000000000063751513166356400273740ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.517/api_v1_production_inverters_log.json000066400000000000000000000005021513166356400311670ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/api_v1_production_log.json000066400000000000000000000005011513166356400270650ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/info000066400000000000000000000041771513166356400225770ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.3.517/info_log.json000066400000000000000000000005751513166356400244060ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_dry_contacts000066400000000000000000000005231513166356400270570ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400306720ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_generator000066400000000000000000000002771513166356400263570ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400301640ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_inventory000066400000000000000000000107751513166356400264320ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400302340ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_power000066400000000000000000000007541513166356400255250ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_power_log.json000066400000000000000000000004351513166356400273320ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_secctrl000066400000000000000000000013671513166356400260310ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400276350ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_status000066400000000000000000000463421513166356400257170ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ensemble_status_log.json000066400000000000000000000004371513166356400275230ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_sc_pvlimit000066400000000000000000000000611513166356400246570ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400264740ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_dry_contact_settings000066400000000000000000000043421513166356400274520ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400312630ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_gen_config000066400000000000000000000000031513166356400253050ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400271250ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_gen_schedule000066400000000000000000000000031513166356400256340ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400274540ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_pel_settings000066400000000000000000000004621513166356400257200ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/ivp_ss_pel_settings_log.json000066400000000000000000000004351513166356400275310ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/production000066400000000000000000000047721513166356400240330ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/production.json000066400000000000000000000047751513166356400250060ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517/production.json_log.json000066400000000000000000000006131513166356400266020ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517/production_log.json000066400000000000000000000006131513166356400256320ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/000077500000000000000000000000001513166356400257725ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/admin_lib_tariff000066400000000000000000000112061513166356400311660ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/admin_lib_tariff_log.json000066400000000000000000000006131513166356400327770ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/api_v1_production000066400000000000000000000001631513166356400313420ustar00rootroot00000000000000{ "wattHoursToday": 17645, "wattHoursSevenDays": 217726, "wattHoursLifetime": 19229325, "wattsNow": 5326 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/api_v1_production_inverters000066400000000000000000000063751513166356400334560ustar00rootroot00000000000000[ { "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 } ] api_v1_production_inverters_log.json000066400000000000000000000005021513166356400351720ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/api_v1_production_log.json000066400000000000000000000005011513166356400331470ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/info000066400000000000000000000041771513166356400266610ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/info_log.json000066400000000000000000000005751513166356400304700ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_dry_contacts000066400000000000000000000005231513166356400331410ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400346750ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_generator000066400000000000000000000002771513166356400324410ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400341670ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_inventory000066400000000000000000000107751513166356400325140ustar00rootroot00000000000000[ { "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 } ] } ] ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400342370ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_power000066400000000000000000000007541513166356400316070ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_power_log.json000066400000000000000000000004351513166356400334140ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_secctrl000066400000000000000000000013671513166356400321130ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400337170ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_status000066400000000000000000000463421513166356400320010ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ensemble_status_log.json000066400000000000000000000004371513166356400336050ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_sc_pvlimit000066400000000000000000000000611513166356400307410ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400325560ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_dry_contact_settings000066400000000000000000000043421513166356400335340ustar00rootroot00000000000000{ "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": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400352660ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_config000066400000000000000000000000031513166356400313670ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400332070ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_schedule000066400000000000000000000000031513166356400317160ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400335360ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_pel_settings000066400000000000000000000004621513166356400320020ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/ivp_ss_pel_settings_log.json000066400000000000000000000004351513166356400336130ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/production000066400000000000000000000047721513166356400301150ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/production.json000066400000000000000000000047751513166356400310700ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/production.json_log.json000066400000000000000000000006131513166356400326640ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_legacy_savings_mode/production_log.json000066400000000000000000000006131513166356400317140ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/000077500000000000000000000000001513166356400235355ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/admin_lib_tariff000066400000000000000000000324561513166356400267430ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/admin_lib_tariff_log.json000066400000000000000000000006131513166356400305420ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/api_v1_production000066400000000000000000000001651513166356400271070ustar00rootroot00000000000000{ "wattHoursToday": 11149, "wattHoursSevenDays": 18431000, "wattHoursLifetime": 18442149, "wattsNow": 2683 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/api_v1_production_inverters000066400000000000000000000036551513166356400312170ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/api_v1_production_inverters_log.json000066400000000000000000000005021513166356400330140ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/api_v1_production_log.json000066400000000000000000000005011513166356400307120ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/info000066400000000000000000000041771513166356400244240ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/info_log.json000066400000000000000000000005751513166356400262330ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400307030ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400325170ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_generator000066400000000000000000000002771513166356400302040ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400320110ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_inventory000066400000000000000000000107701513166356400302520ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400320610ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_power000066400000000000000000000010151513166356400273410ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_power_log.json000066400000000000000000000004351513166356400311570ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_secctrl000066400000000000000000000013761513166356400276560ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400314620ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_status000066400000000000000000000471211513166356400275400ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ensemble_status_log.json000066400000000000000000000004371513166356400313500ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_meters000066400000000000000000000007121513166356400256350ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_meters_log.json000066400000000000000000000004351513166356400274500ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_meters_readings000066400000000000000000000114331513166356400275130ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_meters_readings_log.json000066400000000000000000000004361513166356400313250ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_sc_pvlimit000066400000000000000000000000611513166356400265040ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400303210ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400313040ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400331100ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_gen_config000066400000000000000000000000031513166356400271320ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400307520ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_gen_schedule000066400000000000000000000000031513166356400274610ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400313010ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_pel_settings000066400000000000000000000000251513166356400275400ustar00rootroot00000000000000{ "PEL": false } pyenphase-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/ivp_ss_pel_settings_log.json000066400000000000000000000004341513166356400313550ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/production000066400000000000000000000027041513166356400256510ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/production.json000066400000000000000000000027051513166356400266220ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/production.json_log.json000066400000000000000000000006131513166356400304270ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.3.517_system_2/production_log.json000066400000000000000000000006131513166356400274570ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/000077500000000000000000000000001513166356400243405ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/api_v1_production000066400000000000000000000001611513166356400277060ustar00rootroot00000000000000{ "wattHoursToday": 10363, "wattHoursSevenDays": 101742, "wattHoursLifetime": 1544282, "wattsNow": 586 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/api_v1_production_inverters000066400000000000000000000036411513166356400320150ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/api_v1_production_inverters_log.json000066400000000000000000000005541513166356400336260ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/api_v1_production_log.json000066400000000000000000000005531513166356400315240ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/info000066400000000000000000000040101513166356400252110ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/info_log.json000066400000000000000000000006631513166356400270340ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400315060ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005031513166356400333160ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ensemble_inventory000066400000000000000000000000031513166356400310410ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ensemble_inventory_log.json000066400000000000000000000005011513166356400326550ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ensemble_power000066400000000000000000000000271513166356400301460ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ensemble_power_log.json000066400000000000000000000005021513166356400317550ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400321070ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005041513166356400337070ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/production000066400000000000000000000006411513166356400264520ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/production.json000066400000000000000000000005071513166356400274230ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/production.json_log.json000066400000000000000000000007011513166356400312300ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.114_without_cts/production_log.json000066400000000000000000000007011513166356400302600ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175/000077500000000000000000000000001513166356400217135ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175/api_v1_production000066400000000000000000000001711513166356400252620ustar00rootroot00000000000000{ "wattHoursLifetime" : 8717473, "wattHoursSevenDays" : 107011, "wattHoursToday" : 7883, "wattsNow" : 3391 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175/api_v1_production_inverters000066400000000000000000000042131513166356400273640ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175/home000066400000000000000000000027171513166356400225750ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175/info000066400000000000000000000040071513166356400225720ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.6.175/ivp_ensemble_dry_contacts000066400000000000000000000005231513166356400270620ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175/ivp_ensemble_inventory000066400000000000000000000000031513166356400264140ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400274620ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175/production000066400000000000000000000006021513166356400240220ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175/production.json000066400000000000000000000005101513166356400247700ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/000077500000000000000000000000001513166356400235735ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_standard/api_v1_production000066400000000000000000000001621513166356400271420ustar00rootroot00000000000000{ "wattHoursToday": 36462, "wattHoursSevenDays": 189712, "wattHoursLifetime": 6139406, "wattsNow": 5740 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_standard/api_v1_production_inverters000066400000000000000000000070531513166356400312510ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/api_v1_production_inverters_log.json000066400000000000000000000005541513166356400330610ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/api_v1_production_log.json000066400000000000000000000005531513166356400307570ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/info000066400000000000000000000042001513166356400244450ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/info_log.json000066400000000000000000000006631513166356400262670ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400307410ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005031513166356400325510ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ensemble_inventory000066400000000000000000000000031513166356400302740ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ensemble_inventory_log.json000066400000000000000000000005011513166356400321100ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ensemble_power000066400000000000000000000000271513166356400274010ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ensemble_power_log.json000066400000000000000000000005021513166356400312100ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400313420ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005041513166356400331420ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/production000066400000000000000000000005101513166356400257000ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/production.json000066400000000000000000000005101513166356400266500ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/production.json_log.json000066400000000000000000000007011513166356400304630ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_standard/production_log.json000066400000000000000000000007011513166356400275130ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/000077500000000000000000000000001513166356400231165ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/admin_lib_tariff000066400000000000000000000034071513166356400263160ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/admin_lib_tariff_log.json000066400000000000000000000006131513166356400301230ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/api_v1_production000066400000000000000000000001401513166356400264610ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 0, "wattsNow": 0 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/api_v1_production_inverters000066400000000000000000000040751513166356400305750ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/api_v1_production_inverters_log.json000066400000000000000000000005021513166356400323750ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/api_v1_production_log.json000066400000000000000000000005001513166356400302720ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/info000066400000000000000000000036071513166356400240020ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.6.175_total/info_log.json000066400000000000000000000005751513166356400256140ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400302640ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400321000ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_generator000066400000000000000000000002771513166356400275650ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400313720ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_inventory000066400000000000000000000000031513166356400276170ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_inventory_log.json000066400000000000000000000004331513166356400314370ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_power000066400000000000000000000000271513166356400267240ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_power_log.json000066400000000000000000000004341513166356400305370ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_secctrl000066400000000000000000000013321513166356400272270ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400310430ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_status000066400000000000000000000044771513166356400271300ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ensemble_status_log.json000066400000000000000000000004361513166356400307300ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_meters000066400000000000000000000007141513166356400252200ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_meters_log.json000066400000000000000000000004351513166356400270310ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_meters_readings000066400000000000000000000111211513166356400270660ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_meters_readings_log.json000066400000000000000000000004361513166356400307060ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_sc_pvlimit000066400000000000000000000000611513166356400260650ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400277020ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400306650ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400324710ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_gen_config000066400000000000000000000000031513166356400265130ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400303330ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_gen_schedule000066400000000000000000000000031513166356400270420ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400306620ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_pel_settings000066400000000000000000000000251513166356400271210ustar00rootroot00000000000000{ "PEL": false } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_total/ivp_ss_pel_settings_log.json000066400000000000000000000004341513166356400307360ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/production000066400000000000000000000024311513166356400252270ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/production.json000066400000000000000000000024321513166356400262000ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/production.json_log.json000066400000000000000000000006131513166356400300100ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_total/production_log.json000066400000000000000000000006131513166356400270400ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/000077500000000000000000000000001513166356400236175ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/admin_lib_tariff000066400000000000000000000033221513166356400270130ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/admin_lib_tariff_log.json000066400000000000000000000006131513166356400306240ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/api_v1_production000066400000000000000000000001601513166356400271640ustar00rootroot00000000000000{ "wattHoursToday": 4374, "wattHoursSevenDays": 111089, "wattHoursLifetime": 3183742, "wattsNow": 689 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/api_v1_production_inverters000066400000000000000000000020421513166356400312660ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/api_v1_production_inverters_log.json000066400000000000000000000005021513166356400330760ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/api_v1_production_log.json000066400000000000000000000005011513166356400307740ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/info000066400000000000000000000041771513166356400245060ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/info_log.json000066400000000000000000000005751513166356400263150ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400307650ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400326010ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_generator000066400000000000000000000002771513166356400302660ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400320730ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_inventory000066400000000000000000000000031513166356400303200ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_inventory_log.json000066400000000000000000000004331513166356400321400ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_power000066400000000000000000000000271513166356400274250ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_power_log.json000066400000000000000000000004341513166356400312400ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_secctrl000066400000000000000000000013301513166356400277260ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400315440ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_status000066400000000000000000000045621513166356400276240ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ensemble_status_log.json000066400000000000000000000004361513166356400314310ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_meters000066400000000000000000000007121513166356400257170ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_meters_log.json000066400000000000000000000004351513166356400275320ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_meters_readings000066400000000000000000000113541513166356400275770ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_meters_readings_log.json000066400000000000000000000004361513166356400314070ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_sc_pvlimit000066400000000000000000000000611513166356400265660ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400304030ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400313660ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400331720ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_config000066400000000000000000000000031513166356400272140ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400310340ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_schedule000066400000000000000000000000031513166356400275430ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400313630ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_pel_settings000066400000000000000000000000251513166356400276220ustar00rootroot00000000000000{ "PEL": false } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/ivp_ss_pel_settings_log.json000066400000000000000000000004341513166356400314370ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/production000066400000000000000000000026541513166356400257370ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/production.json000066400000000000000000000026621513166356400267060ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/production.json_log.json000066400000000000000000000006131513166356400305110ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts/production_log.json000066400000000000000000000006131513166356400275410ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/000077500000000000000000000000001513166356400250625ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/_readme000066400000000000000000000015301513166356400264000ustar00rootroot000000000000007.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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/admin_lib_tariff000066400000000000000000000033221513166356400302560ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/admin_lib_tariff_log.json000066400000000000000000000006131513166356400320670ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/api_v1_production000066400000000000000000000001601513166356400304270ustar00rootroot00000000000000{ "wattHoursToday": 4374, "wattHoursSevenDays": 111089, "wattHoursLifetime": 3183742, "wattsNow": 689 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/api_v1_production_inverters000066400000000000000000000020421513166356400325310ustar00rootroot00000000000000[ { "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 } ] api_v1_production_inverters_log.json000066400000000000000000000005021513166356400342620ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/api_v1_production_log.json000066400000000000000000000005011513166356400322370ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/info000066400000000000000000000041771513166356400257510ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/info_log.json000066400000000000000000000005751513166356400275600ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400322300ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400337650ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_generator000066400000000000000000000002771513166356400315310ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400333360ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_inventory000066400000000000000000000000031513166356400315630ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_inventory_log.json000066400000000000000000000004331513166356400334030ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_power000066400000000000000000000000271513166356400306700ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_power_log.json000066400000000000000000000004341513166356400325030ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_secctrl000066400000000000000000000013301513166356400311710ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400330070ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_status000066400000000000000000000045621513166356400310670ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ensemble_status_log.json000066400000000000000000000004361513166356400326740ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters000066400000000000000000000007121513166356400271620ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters_log.json000066400000000000000000000004351513166356400307750ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters_readings000066400000000000000000000113541513166356400310420ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_meters_readings_log.json000066400000000000000000000004361513166356400326520ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_sc_pvlimit000066400000000000000000000000611513166356400300310ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400316460ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400326310ustar00rootroot00000000000000{ "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": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400343560ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_config000066400000000000000000000000031513166356400304570ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400322770ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_schedule000066400000000000000000000000031513166356400310060ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400326260ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_pel_settings000066400000000000000000000000251513166356400310650ustar00rootroot00000000000000{ "PEL": false } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/ivp_ss_pel_settings_log.json000066400000000000000000000004341513166356400327020ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/production000066400000000000000000000046571513166356400272070ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/production.json000066400000000000000000000205401513166356400301440ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/production.json_log.json000066400000000000000000000006131513166356400317540ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.175_with_cts_3phase/production_log.json000066400000000000000000000006131513166356400310040ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/000077500000000000000000000000001513166356400266025ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/admin_lib_tariff000066400000000000000000000044541513166356400320050ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/admin_lib_tariff_log.json000066400000000000000000000006131513166356400336070ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/api_v1_production000066400000000000000000000001521513166356400321500ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 73002, "wattHoursLifetime": 2432969, "wattsNow": 0 } api_v1_production_inverters000066400000000000000000000013541513166356400341770ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t[ { "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.json000066400000000000000000000005011513166356400360010ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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} api_v1_production_log.json000066400000000000000000000005011513166356400337000ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/info000066400000000000000000000040071513166356400274610ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/info_log.json000066400000000000000000000005751513166356400313000ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400337500ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400355050ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_generator000066400000000000000000000002771513166356400332510ustar00rootroot00000000000000{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400347770ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_inventory000066400000000000000000000022461513166356400333160ustar00rootroot00000000000000[ { "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 } ] } ] ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400350470ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_power000066400000000000000000000002651513166356400324140ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "122249097612", "real_power_mw": 0, "apparent_power_mva": 0, "soc": 15 } ] } ivp_ensemble_power_log.json000066400000000000000000000004351513166356400341450ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_secctrl000066400000000000000000000014161513166356400327160ustar00rootroot00000000000000{ "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 } ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400344500ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ensemble_status000066400000000000000000000212501513166356400326000ustar00rootroot00000000000000{ "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 } } ivp_ensemble_status_log.json000066400000000000000000000004361513166356400343350ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_meters000066400000000000000000000007121513166356400307020ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_meters_log.json000066400000000000000000000004351513166356400325150ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_meters_readings000066400000000000000000000113441513166356400325610ustar00rootroot00000000000000[ { "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 } ] } ] ivp_meters_readings_log.json000066400000000000000000000004361513166356400343130ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_sc_pvlimit000066400000000000000000000000611513166356400315510ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400333660ustar00rootroot00000000000000{"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} ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400342720ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{ "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": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400360760ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_gen_config000066400000000000000000000000031513166356400321770ustar00rootroot00000000000000{} ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400337400ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_gen_schedule000066400000000000000000000000031513166356400325260ustar00rootroot00000000000000{} ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400342670ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/ivp_ss_pel_settings000066400000000000000000000000251513166356400326050ustar00rootroot00000000000000{ "PEL": false } ivp_ss_pel_settings_log.json000066400000000000000000000004341513166356400343430ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/production000066400000000000000000000026051513166356400307160ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/production.json000066400000000000000000000026201513166356400316630ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/production.json_log.json000066400000000000000000000006131513166356400334740ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/7.6.185_with_cts_and_battery_3t/production_log.json000066400000000000000000000006131513166356400325240ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/000077500000000000000000000000001513166356400216175ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.1.41/api_v1_production000066400000000000000000000001641513166356400251700ustar00rootroot00000000000000{ "wattHoursToday": 54042, "wattHoursSevenDays": 1455161, "wattHoursLifetime": 1509203, "wattsNow": 12997 } pyenphase-pyenphase-901c49f/tests/fixtures/8.1.41/api_v1_production_inverters000066400000000000000000000147671513166356400273070ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.1.41/api_v1_production_inverters_log.json000066400000000000000000000005021513166356400310760ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/api_v1_production_log.json000066400000000000000000000005011513166356400267740ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/info000066400000000000000000000036611513166356400225030ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.1.41/info_log.json000066400000000000000000000005751513166356400243150ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_dry_contacts000066400000000000000000000005171513166356400267710ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400306010ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_inventory000066400000000000000000000064341513166356400263360ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400301430ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_power000066400000000000000000000005401513166356400254250ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_power_log.json000066400000000000000000000004351513166356400272410ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_secctrl000066400000000000000000000015571513166356400257410ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400275440ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_status000066400000000000000000000361171513166356400256250ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ensemble_status_log.json000066400000000000000000000004371513166356400274320ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ss_dry_contact_settings000066400000000000000000000043261513166356400273630ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.1.41/ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400311720ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/production000066400000000000000000000026751513166356400237420ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/production.json000066400000000000000000000027041513166356400247030ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/production.json_log.json000066400000000000000000000006131513166356400265110ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.1.41/production_log.json000066400000000000000000000006131513166356400255410ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/000077500000000000000000000000001513166356400274635ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/admin_lib_tariff000066400000000000000000000314111513166356400326570ustar00rootroot00000000000000{ "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" } ] } ] } } } admin_lib_tariff_log.json000066400000000000000000000006131513166356400344110ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/api_v1_production000066400000000000000000000001521513166356400330310ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 73002, "wattHoursLifetime": 2432969, "wattsNow": 0 } api_v1_production_inverters000066400000000000000000000013541513166356400350600ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split[ { "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.json000066400000000000000000000005011513166356400366620ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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} api_v1_production_log.json000066400000000000000000000005011513166356400345610ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "106", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/info000066400000000000000000000040071513166356400303420ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/info_log.json000066400000000000000000000005751513166356400321610ustar00rootroot00000000000000{"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} ivp_ensemble_dry_contacts000066400000000000000000000005231513166356400345530ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400363660ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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} ivp_ensemble_generator000066400000000000000000000002771513166356400340530ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 0 } ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400356600ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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} ivp_ensemble_inventory000066400000000000000000000154211513166356400341170ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split[ { "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 } ] } ] ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400357300ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "1189", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_power000066400000000000000000000014011513166356400332660ustar00rootroot00000000000000{ "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 } ] } ivp_ensemble_power_log.json000066400000000000000000000004351513166356400350260ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "180", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_secctrl000066400000000000000000000017071513166356400336020ustar00rootroot00000000000000{ "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 } ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400353310ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "781", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ensemble_status000066400000000000000000000212501513166356400334610ustar00rootroot00000000000000{ "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 } } ivp_ensemble_status_log.json000066400000000000000000000004361513166356400352160ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "8871", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff"}, "code": 200} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_meters000066400000000000000000000012501513166356400315610ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_meters_log.json000066400000000000000000000004351513166356400333760ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_meters_readings000066400000000000000000000142551513166356400334460ustar00rootroot00000000000000[ { "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 } ] } ] ivp_meters_readings_log.json000066400000000000000000000004361513166356400351740ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_sc_pvlimit000066400000000000000000000000611513166356400324320ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400341700ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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} ivp_ss_dry_contact_settings000066400000000000000000000042371513166356400351510ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{ "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.json000066400000000000000000000004361513166356400367570ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_gen_config000066400000000000000000000000031513166356400330600ustar00rootroot00000000000000{} ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400346210ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_gen_schedule000066400000000000000000000000031513166356400334070ustar00rootroot00000000000000{} ivp_ss_gen_schedule_log.json000066400000000000000000000004331513166356400351500ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/ivp_ss_pel_settings000066400000000000000000000000251513166356400334660ustar00rootroot00000000000000{ "PEL": false } ivp_ss_pel_settings_log.json000066400000000000000000000004341513166356400352240ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/production000066400000000000000000000043231513166356400315760ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/production.json000066400000000000000000000043231513166356400325460ustar00rootroot00000000000000{ "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" } ] } production.json_log.json000066400000000000000000000006131513166356400342760ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_3cts_and_battery_split/production_log.json000066400000000000000000000006131513166356400334050ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/000077500000000000000000000000001513166356400265465ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/_readme000066400000000000000000000002511513166356400300630ustar00rootroot000000000000008.2.127_with_generator_running https://github.com/pyenphase/pyenphase/issues/106#issuecomment-2163569516 Snapshot taken when generator was running during power outage pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/admin_lib_tariff000066400000000000000000000130511513166356400317420ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/admin_lib_tariff_log.json000066400000000000000000000004361513166356400335560ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/api_v1_production000066400000000000000000000001621513166356400321150ustar00rootroot00000000000000{ "wattHoursToday": 2135, "wattHoursSevenDays": 359546, "wattHoursLifetime": 15096793, "wattsNow": 2248 } api_v1_production_inverters000066400000000000000000000075021513166356400341440ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running[ { "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 } ] api_v1_production_inverters_log.json000066400000000000000000000005021513166356400357460ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/api_v1_production_log.json000066400000000000000000000005011513166356400337230ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/info000066400000000000000000000045621513166356400274330ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/info_log.json000066400000000000000000000005751513166356400312440ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_dry_contacts000066400000000000000000000005231513166356400337150ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400354510ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_generator000066400000000000000000000002761513166356400332140ustar00rootroot00000000000000{ "admin_state": "close", "oper_state": "close", "admin_mode": 2, "schedule": 1, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 1, "type": 1 } ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400347430ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_inventory000066400000000000000000000044221513166356400332600ustar00rootroot00000000000000[ { "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 } ] } ] ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400350130ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_power000066400000000000000000000003031513166356400323510ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "492234001350", "real_power_mw": -1250000, "apparent_power_mva": -1250000, "soc": 98 } ] } ivp_ensemble_power_log.json000066400000000000000000000004351513166356400341110ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_secctrl000066400000000000000000000017031513166356400326610ustar00rootroot00000000000000{ "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 } ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400344140ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ensemble_status000066400000000000000000000176041513166356400325540ustar00rootroot00000000000000{ "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" } } ivp_ensemble_status_log.json000066400000000000000000000004361513166356400343010ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_meters000066400000000000000000000007121513166356400306460ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_meters_log.json000066400000000000000000000004351513166356400324610ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_meters_readings000066400000000000000000000114421513166356400325240ustar00rootroot00000000000000[ { "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 } ] } ] ivp_meters_readings_log.json000066400000000000000000000004361513166356400342570ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_sc_pvlimit000066400000000000000000000000611513166356400315150ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400333320ustar00rootroot00000000000000{"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} ivp_ss_dry_contact_settings000066400000000000000000000043661513166356400342370ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{ "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": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400360420ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ss_gen_config000066400000000000000000000006361513166356400321570ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ss_gen_config_log.json000066400000000000000000000004351513166356400337650ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ss_gen_schedule000066400000000000000000000020171513166356400325010ustar00rootroot00000000000000{ "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" } ivp_ss_gen_schedule_log.json000066400000000000000000000004361513166356400342360ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/ivp_ss_pel_settings000066400000000000000000000004621513166356400325560ustar00rootroot00000000000000{ "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 } ivp_ss_pel_settings_log.json000066400000000000000000000004351513166356400343100ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/production000066400000000000000000000047521513166356400306670ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/production.json000066400000000000000000000047541513166356400316410ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/production.json_log.json000066400000000000000000000006131513166356400334400ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.127_with_generator_running/production_log.json000066400000000000000000000006131513166356400324700ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/000077500000000000000000000000001513166356400245235ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/admin_lib_tariff000066400000000000000000000114351513166356400277230ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/api_v1_production000066400000000000000000000001561513166356400300750ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 1583, "wattHoursLifetime": 1583, "wattsNow": 4 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/api_v1_production_inverters000066400000000000000000000005411513166356400321740ustar00rootroot00000000000000[ { "serialNumber": "121734002573", "lastReportDate": 1746702346, "devType": 1, "lastReportWatts": 169, "maxReportWatts": 255 }, { "serialNumber": "121734002908", "lastReportDate": 1746702376, "devType": 1, "lastReportWatts": 167, "maxReportWatts": 255 } ] pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/info000066400000000000000000000043611513166356400254050ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400316710ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_generator000066400000000000000000000002771513166356400311720ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_inventory000066400000000000000000000000031513166356400312240ustar00rootroot00000000000000[] pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_power000066400000000000000000000000271513166356400303310ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_secctrl000066400000000000000000000016101513166356400306330ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ensemble_status000066400000000000000000000026061513166356400305250ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_meters000066400000000000000000000007141513166356400266250ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_meters_readings000066400000000000000000000111111513166356400304720ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_sc_pvlimit000066400000000000000000000000611513166356400274720ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400322720ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ss_gen_config000066400000000000000000000000031513166356400301200ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ss_gen_schedule000066400000000000000000000000031513166356400304470ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/ivp_ss_pel_settings000066400000000000000000000000251513166356400305260ustar00rootroot00000000000000{ "PEL": false } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/production000066400000000000000000000046341513166356400266430ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4264_metered_noct/production.json000066400000000000000000000204351513166356400276100ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/000077500000000000000000000000001513166356400275555ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/admin_lib_tariff000066400000000000000000000225461513166356400327620ustar00rootroot00000000000000{ "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" } ] } ] } } } admin_lib_tariff_log.json000066400000000000000000000005461513166356400345100ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "3059", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/api_v1_production000066400000000000000000000001751513166356400331300ustar00rootroot00000000000000{ "wattHoursToday": 12364, "wattHoursSevenDays": 13418759, "wattHoursLifetime": 13431123, "wattsNow": 7081 } api_v1_production_inverters000066400000000000000000000137561513166356400351630ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split[ { "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.json000066400000000000000000000006221513166356400367600ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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 } api_v1_production_log.json000066400000000000000000000006211513166356400346560ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "117", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/info000066400000000000000000000045541513166356400304430ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/info_log.json000066400000000000000000000007451513166356400322520ustar00rootroot00000000000000{ "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 } ivp_ensemble_dry_contacts000066400000000000000000000005231513166356400346450ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "closed" }, { "id": "NO1", "status": "closed" }, { "id": "NO2", "status": "closed" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000005451513166356400364620ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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 } ivp_ensemble_generator000066400000000000000000000002771513166356400341450ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split{ "admin_state": "unknown", "oper_state": "open", "admin_mode": 0, "schedule": 0, "start_soc": 100, "stop_soc": -1, "exc_on": 0, "present": 0, "type": 1 } ivp_ensemble_generator_log.json000066400000000000000000000005451513166356400357540ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "190", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } ivp_ensemble_inventory000066400000000000000000000154051513166356400342130ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split[ { "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 } ] } ] ivp_ensemble_inventory_log.json000066400000000000000000000005461513166356400360240ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "6916", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_power000066400000000000000000000015431513166356400333670ustar00rootroot00000000000000{ "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 } ] } ivp_ensemble_power_log.json000066400000000000000000000005451513166356400351220ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "866", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_secctrl000066400000000000000000000017111513166356400336670ustar00rootroot00000000000000{ "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 } ivp_ensemble_secctrl_log.json000066400000000000000000000005451513166356400354250ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "968", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ensemble_status000066400000000000000000000757011513166356400335650ustar00rootroot00000000000000{ "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" } } ivp_ensemble_status_log.json000066400000000000000000000005471513166356400353130ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "31680", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_meters000066400000000000000000000012501513166356400316530ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_meters_log.json000066400000000000000000000005451513166356400334720ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_meters_readings000066400000000000000000000162371513166356400335420ustar00rootroot00000000000000[ { "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 } ] } ] ivp_meters_readings_log.json000066400000000000000000000005461513166356400352700ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "7412", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_sc_pvlimit000066400000000000000000000000611513166356400325240ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } ivp_sc_pvlimit_log.json000066400000000000000000000005441513166356400342640ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "48", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } ivp_ss_dry_contact_settings000066400000000000000000000043251513166356400352410ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split{ "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.json000066400000000000000000000005461513166356400370530ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_gen_config000066400000000000000000000000031513166356400331520ustar00rootroot00000000000000{} ivp_ss_gen_config_log.json000066400000000000000000000005431513166356400347150ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_gen_schedule000066400000000000000000000000031513166356400335010ustar00rootroot00000000000000{} ivp_ss_gen_schedule_log.json000066400000000000000000000005431513166356400352440ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "2", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/ivp_ss_pel_settings000066400000000000000000000004621513166356400335650ustar00rootroot00000000000000{ "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 } ivp_ss_pel_settings_log.json000066400000000000000000000005451513166356400353210ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/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": "305", "connection": "keep-alive", "strict-transport-security": "max-age=63072000; includeSubdomains", "x-frame-options": "DENY", "x-content-type-options": "nosniff" }, "code": 200 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/production000066400000000000000000000050051513166356400316660ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/production.json000066400000000000000000000152631513166356400326450ustar00rootroot00000000000000{ "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" } ] } production.json_log.json000066400000000000000000000007631513166356400343760ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split{ "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-pyenphase-901c49f/tests/fixtures/8.2.4286_with_3cts_and_battery_split/production_log.json000066400000000000000000000007631513166356400335050ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/000077500000000000000000000000001513166356400253365ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/admin_lib_tariff000066400000000000000000000030351513166356400305330ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/admin_lib_tariff_log.json000066400000000000000000000004361513166356400323460ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/api_v1_production000066400000000000000000000001611513166356400307040ustar00rootroot00000000000000{ "wattHoursToday": 13233, "wattHoursSevenDays": 86068, "wattHoursLifetime": 1243605, "wattsNow": 2675 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/api_v1_production_inverters000066400000000000000000000043271513166356400330150ustar00rootroot00000000000000[ { "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 } ] api_v1_production_inverters_log.json000066400000000000000000000005021513166356400345360ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/api_v1_production_log.json000066400000000000000000000005011513166356400325130ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/info000066400000000000000000000042421513166356400262160ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/info_log.json000066400000000000000000000005751513166356400300340ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400325040ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } ivp_ensemble_dry_contacts_log.json000066400000000000000000000004351513166356400342410ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_generator000066400000000000000000000002771513166356400320050ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_generator_log.json000066400000000000000000000004351513166356400336120ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_inventory000066400000000000000000000021761513166356400320540ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_inventory_log.json000066400000000000000000000004361513166356400336620ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_power000066400000000000000000000000271513166356400311440ustar00rootroot00000000000000{ "devices:": [] } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_power_log.json000066400000000000000000000004341513166356400327570ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_secctrl000066400000000000000000000016111513166356400314470ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_secctrl_log.json000066400000000000000000000004351513166356400332630ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_status000066400000000000000000000064171513166356400313440ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ensemble_status_log.json000066400000000000000000000004361513166356400331500ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_meters000066400000000000000000000007121513166356400274360ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_meters_log.json000066400000000000000000000004351513166356400312510ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_meters_readings000066400000000000000000000113521513166356400313140ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_meters_readings_log.json000066400000000000000000000004361513166356400331260ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_pdm_device_data000066400000000000000000000745771513166356400312530ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_pdm_device_data_log.json000066400000000000000000000004371513166356400330440ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_sc_pvlimit000066400000000000000000000000611513166356400303050ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_sc_pvlimit_log.json000066400000000000000000000004341513166356400321220ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ss_dry_contact_settings000066400000000000000000000043171513166356400331020ustar00rootroot00000000000000{ "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": [] } ] } ivp_ss_dry_contact_settings_log.json000066400000000000000000000004361513166356400346320ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_config000066400000000000000000000000031513166356400307330ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_config_log.json000066400000000000000000000004331513166356400325530ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_schedule000066400000000000000000000000031513166356400312620ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ss_gen_schedule.json000066400000000000000000000000031513166356400322320ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ss_pel_settings000066400000000000000000000004621513166356400313460ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/ivp_ss_pel_settings_log.json000066400000000000000000000004351513166356400331570ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/production000066400000000000000000000026741513166356400274600ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/production.json000066400000000000000000000040441513166356400304210ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/production.json_details_1000066400000000000000000000046611513166356400323530ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/production.json_details_1.json000066400000000000000000000072301513166356400333160ustar00rootroot00000000000000{ "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 } ] } production.json_details_1_log.json000066400000000000000000000006131513166356400340760ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data{"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-pyenphase-901c49f/tests/fixtures/8.2.4345_with_device_data/production_log.json000066400000000000000000000006131513166356400312600ustar00rootroot00000000000000{"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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/000077500000000000000000000000001513166356400224415ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/admin_lib_tariff000066400000000000000000000060421513166356400256370ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/admin_lib_tariff_log.json000066400000000000000000000005461513166356400274530ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/api_v1_production000066400000000000000000000001671513166356400260150ustar00rootroot00000000000000{ "wattHoursToday": 125, "wattHoursSevenDays": 41194, "wattHoursLifetime": 19213249, "wattsNow": 412 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/api_v1_production_inverters000066400000000000000000000066261513166356400301240ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/api_v1_production_inverters_log.json000066400000000000000000000006221513166356400317230ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/api_v1_production_log.json000066400000000000000000000006211513166356400276210ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/info000066400000000000000000000045561513166356400233310ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/info_log.json000066400000000000000000000007451513166356400251360ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400276070ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005451513166356400314250ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_generator000066400000000000000000000002771513166356400271100ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_generator_log.json000066400000000000000000000005451513166356400307170ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_inventory000066400000000000000000000023101513166356400271450ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_inventory_log.json000066400000000000000000000005461513166356400307670ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_power000066400000000000000000000002771513166356400262560ustar00rootroot00000000000000{ "devices:": [ { "serial_num": "122311091641", "real_power_mw": 105000, "apparent_power_mva": 105000, "soc": 54 } ] } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_power_log.json000066400000000000000000000005451513166356400300650ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_secctrl000066400000000000000000000016761513166356400265650ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_secctrl_log.json000066400000000000000000000005451513166356400303700ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_status000066400000000000000000000142111513166356400264360ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ensemble_status_log.json000066400000000000000000000005461513166356400302550ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_meters000066400000000000000000000007121513166356400245410ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_meters_log.json000066400000000000000000000005451513166356400263560ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_meters_readings000066400000000000000000000113271513166356400264210ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_meters_readings_log.json000066400000000000000000000005461513166356400302330ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_sc_pvlimit000066400000000000000000000000611513166356400254100ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_sc_pvlimit_log.json000066400000000000000000000005441513166356400272270ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_dry_contact_settings000066400000000000000000000027271513166356400302100ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005461513166356400320160ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_config000066400000000000000000000000031513166356400260360ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_config_log.json000066400000000000000000000005431513166356400276600ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_schedule000066400000000000000000000000031513166356400263650ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_gen_schedule_log.json000066400000000000000000000005431513166356400302070ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_pel_settings000066400000000000000000000003771513166356400264560ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/ivp_ss_pel_settings_log.json000066400000000000000000000005451513166356400302640ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/production000066400000000000000000000047171513166356400245630ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/production.json000066400000000000000000000111351513166356400255230ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/production.json_log.json000066400000000000000000000007631513166356400273410ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.2.4382_ACB/production_log.json000066400000000000000000000007631513166356400263710ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/000077500000000000000000000000001513166356400233375ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/admin_lib_tariff000066400000000000000000000170071513166356400265400ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/admin_lib_tariff_log.json000066400000000000000000000005461513166356400303510ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/api_v1_production000066400000000000000000000001501513166356400267030ustar00rootroot00000000000000{ "wattHoursToday": 0, "wattHoursSevenDays": 0, "wattHoursLifetime": 0, "wattsNow": 0 } pyenphase-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/api_v1_production_inverters000066400000000000000000000056001513166356400310110ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/api_v1_production_inverters_log.json000066400000000000000000000006221513166356400326210ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/api_v1_production_log.json000066400000000000000000000006201513166356400305160ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/home000066400000000000000000000042321513166356400242130ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/home_log.json000066400000000000000000000007631513166356400260310ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/info000066400000000000000000000044071513166356400242220ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/info_log.json000066400000000000000000000005461513166356400260330ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_dry_contacts000066400000000000000000000005131513166356400305050ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "open" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_dry_contacts_log.json000066400000000000000000000005451513166356400323230ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_generator000066400000000000000000000002771513166356400300060ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_generator_log.json000066400000000000000000000005451513166356400316150ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_inventory000066400000000000000000000100461513166356400300500ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_inventory_log.json000066400000000000000000000005461513166356400316650ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_power000066400000000000000000000005471513166356400271540ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_power_log.json000066400000000000000000000005451513166356400307630ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_secctrl000066400000000000000000000024061513166356400274530ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_secctrl_log.json000066400000000000000000000005461513166356400312670ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_status000066400000000000000000000360671513166356400273510ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ensemble_status_log.json000066400000000000000000000005471513166356400311540ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_meters000066400000000000000000000030331513166356400254360ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_meters_log.json000066400000000000000000000005461513166356400272550ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_meters_readings000066400000000000000000000436711513166356400273260ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_meters_readings_log.json000066400000000000000000000005471513166356400311320ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_sc_pvlimit000066400000000000000000000000611513166356400263060ustar00rootroot00000000000000{ "enable": false, "pv_limit_pct": 100 } pyenphase-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_sc_pvlimit_log.json000066400000000000000000000005441513166356400301250ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_dry_contact_settings000066400000000000000000000055171513166356400311060ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_dry_contact_settings_log.json000066400000000000000000000005461513166356400327140ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_gen_config000066400000000000000000000000031513166356400267340ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_gen_config_log.json000066400000000000000000000005431513166356400305560ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_gen_schedule000066400000000000000000000000031513166356400272630ustar00rootroot00000000000000{} pyenphase-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_gen_schedule_log.json000066400000000000000000000005431513166356400311050ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_pel_settings000066400000000000000000000004621513166356400273470ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/ivp_ss_pel_settings_log.json000066400000000000000000000005451513166356400311620ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/production000066400000000000000000000046751513166356400254640ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/production.json000066400000000000000000000204741513166356400264270ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/production.json_log.json000066400000000000000000000007631513166356400302370ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.1598_collar/production_log.json000066400000000000000000000007631513166356400272670ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/000077500000000000000000000000001513166356400231725ustar00rootroot00000000000000pyenphase-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/admin_lib_tariff000066400000000000000000000060241513166356400263700ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/info000066400000000000000000000045771513166356400240650ustar00rootroot00000000000000 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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_dry_contacts000066400000000000000000000005151513166356400303420ustar00rootroot00000000000000{ "dry_contacts": [ { "id": "NC1", "status": "closed" }, { "id": "NC2", "status": "open" }, { "id": "NO1", "status": "open" }, { "id": "NO2", "status": "open" } ] } pyenphase-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_inventory000066400000000000000000000066201513166356400277060ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_power000066400000000000000000000005411513166356400270010ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_ensemble_secctrl000066400000000000000000000022031513166356400273010ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_meters000066400000000000000000000007121513166356400252720ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_meters_readings000066400000000000000000000157351513166356400271610ustar00rootroot00000000000000[ { "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_pdm_device_data000066400000000000000000000744341513166356400270770ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/ivp_ss_dry_contact_settings000066400000000000000000000043221513166356400307320ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/fixtures/8.3.5167_3rd-pv/production.json000066400000000000000000000211271513166356400262560ustar00rootroot00000000000000{ "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-pyenphase-901c49f/tests/syrupy.py000066400000000000000000000031101513166356400211350ustar00rootroot00000000000000from 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-pyenphase-901c49f/tests/test_acb.py000066400000000000000000000251731513166356400213630ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_auth.py000066400000000000000000000450571513166356400216020ustar00rootroot00000000000000"""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_enlighten_json_missing_is_consumer_with_7_6_175_standard( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test response from Enlighten is missing is_consumer and manager keys""" 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 missing is_consumer and manager keys in JSON override_mock( 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", }, ) envoy = Envoy("127.0.0.1", client=test_client_session) await envoy.setup() await envoy.authenticate("username", "password") assert isinstance(envoy.auth, EnvoyTokenAuth) assert not envoy.auth.is_consumer assert envoy.auth.manager_token == "" @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-pyenphase-901c49f/tests/test_ct_meters.py000066400000000000000000001114141513166356400226150ustar00rootroot00000000000000"""Test envoy metered with enabled and disabled CT""" import logging from typing import Any import aiohttp import jsonpath import pytest from aioresponses import aioresponses from syrupy.assertion import SnapshotAssertion from pyenphase import register_updater from pyenphase.const import ( PHASENAMES, SupportedFeatures, ) from pyenphase.models.meters import ( CtMeterData, CtType, EnvoyMeterData, EnvoyPhaseMode, ) 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, ) # we're testing, ignore some issue reports # pyright: reportPrivateUsage=false 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, production CT, net-consumption 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, production CT, net-consumption 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"] with pytest.raises(ValueError): EnvoySystemProduction.from_production_phase(production_data, 0) # 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 # should not have phase data after removing phase data from source assert data.ctmeters_phases == {} @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, production CT, net-consumption 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, production CT, total-consumption 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, production CT, net-consumption 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 @pytest.mark.asyncio async def test_yet_unknown_ct_with_8_2_127_with_3cts_and_battery_split( mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession ) -> None: """Test meters model with yet unknown ct type in meters config and readings""" # 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) yet_unknown_ct_type: str = "this_should_work" # change last meter type to one not in CtType meters_data = await load_json_list_fixture(version, "ivp_meters") meter = meters_data[-1] assert meter meter["measurementType"] = yet_unknown_ct_type del meters_data[-1] meters_data.append(meter) override_mock( mock_aioresponse, "get", "https://127.0.0.1/ivp/meters", status=200, payload=meters_data, repeat=True, ) envoy = await get_mock_envoy(test_client_session) data = envoy.data assert data is not None # verify yet unknown type is now in ct list and has data with this label assert yet_unknown_ct_type in envoy.ct_meter_list assert data.ctmeters[yet_unknown_ct_type] assert data.ctmeters[yet_unknown_ct_type].state == meter["state"] assert data.ctmeters[yet_unknown_ct_type].eid == meter["eid"] assert envoy.meter_type(yet_unknown_ct_type) == yet_unknown_ct_type # last one in original list was storage ct. Should not be there anymore assert data.ctmeter_storage is None assert CtType.STORAGE not in data.ctmeters assert CtType.STORAGE not in data.ctmeters_phases @pytest.mark.parametrize( ("test_properties",), [ pytest.param( { "ctMeters": 2, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="4.10.35", ), pytest.param( { "ctMeters": 1, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "meter_types": [ CtType.PRODUCTION, ], }, id="7.3.130_no_consumption", ), pytest.param( { "ctMeters": 2, "phaseCount": 3, "phaseMode": EnvoyPhaseMode.THREE, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="7.3.466_with_cts_3phase", ), pytest.param( { "ctMeters": 2, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="7.3.517_system_2", ), pytest.param( { "ctMeters": 2, "phaseCount": 1, "phaseMode": EnvoyPhaseMode.THREE, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="7.6.175_with_cts", ), pytest.param( { "ctMeters": 2, "phaseCount": 3, "phaseMode": EnvoyPhaseMode.THREE, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="7.6.175_with_cts_3phase", ), pytest.param( { "ctMeters": 2, "phaseCount": 1, "phaseMode": EnvoyPhaseMode.THREE, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="7.6.185_with_cts_and_battery_3t", ), pytest.param( { "ctMeters": 3, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, CtType.STORAGE, ], }, id="8.2.127_with_3cts_and_battery_split", ), pytest.param( { "ctMeters": 2, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="8.2.127_with_generator_running", ), pytest.param( { "ctMeters": 3, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, CtType.STORAGE, ], }, id="8.2.4286_with_3cts_and_battery_split", ), pytest.param( { "ctMeters": 2, "phaseCount": 1, "phaseMode": EnvoyPhaseMode.THREE, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, ], }, id="8.2.4345_with_device_data", ), pytest.param( { "ctMeters": 4, "phaseCount": 2, "phaseMode": EnvoyPhaseMode.SPLIT, "meter_types": [ CtType.NET_CONSUMPTION, CtType.PRODUCTION, CtType.STORAGE, "backfeed", ], }, id="8.3.1598_collar", ), ], ) @pytest.mark.asyncio async def test_current_transformers( snapshot: SnapshotAssertion, caplog: pytest.LogCaptureFixture, test_properties: dict[str, Any], mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, request: pytest.FixtureRequest, ) -> None: """Test Current transformer data and properties.""" caplog.set_level(logging.WARNING) start_7_firmware_mock(mock_aioresponse) # verify test parameter completeness assert len(test_properties) == 4 # get version and fixture folder from test id version: Any = request.node.callspec.id await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) # load data data = envoy.data assert data is not None assert data == snapshot # verify expected properties assert envoy.ct_meter_count == test_properties["ctMeters"] assert envoy.phase_count == test_properties["phaseCount"] assert envoy.phase_mode == test_properties["phaseMode"] # if we have ct meters we should have CTMETERS feature and if no meters not assert envoy.ct_meter_count == len(envoy.ct_meter_list) assert envoy._supported_features has_ctmeters = bool(envoy._supported_features & SupportedFeatures.CTMETERS) meter_count_not_zero = bool(envoy.ct_meter_count > 0) assert has_ctmeters == meter_count_not_zero # test if expected meters were found for cttype in test_properties["meter_types"]: assert envoy.meter_type(cttype) # test for unexpected meters showing up for cttype in envoy.ct_meter_list: assert cttype in test_properties["meter_types"] # are all CT types represented correctly in model description for cttype in envoy.ct_meter_list: assert (cttype in envoy.envoy_model) == (envoy.meter_type(cttype) is not None) # backward compatibility test, verify individual meter types are still found and in model # if no xxx meter is reported then xxx_meter_type should not report one and other way around # if no xxx meter is reported then it should not show in modelname and other way around has_meter = bool( (CtType.TOTAL_CONSUMPTION in envoy.ct_meter_list) or (CtType.NET_CONSUMPTION in envoy.ct_meter_list) ) meter_type_present = bool(envoy.consumption_meter_type is not None) meter_in_model = bool(str(envoy.consumption_meter_type) in envoy.envoy_model) assert has_meter == meter_type_present assert has_meter == meter_in_model has_meter = bool(CtType.PRODUCTION in envoy.ct_meter_list) meter_type_present = bool(envoy.production_meter_type is not None) meter_in_model = bool(str(envoy.production_meter_type) in envoy.envoy_model) assert has_meter == meter_type_present assert has_meter == meter_in_model has_meter = bool(CtType.STORAGE in envoy.ct_meter_list) meter_type_present = bool(envoy.storage_meter_type is not None) meter_in_model = bool(str(envoy.storage_meter_type) in envoy.envoy_model) assert has_meter == meter_type_present assert has_meter == meter_in_model # end backward compatibility test # verify meter data meter_json = await load_json_fixture(version, "ivp_meters") meter_data_json = await load_json_fixture(version, "ivp_meters_readings") # get all enabled meters enabled_meters: list[Any] = jsonpath.findall("[?(@.state=='enabled')]", meter_json) # envoy should have same count assert envoy.ct_meter_count == len(enabled_meters) # validate each meter data for meter in enabled_meters: meters_data: list[Any] = jsonpath.findall( f"[?(@.eid=={meter['eid']})]", meter_data_json ) assert meters_data[0] meter_data = meters_data[0] cttype = meter["measurementType"] ctdata = data.ctmeters[cttype] assert ctdata.energy_delivered == round(meter_data["actEnergyDlvd"]) assert ctdata.energy_received == round(meter_data["actEnergyRcvd"]) assert ctdata.active_power == round(meter_data["activePower"]) assert ctdata.voltage == meter_data["voltage"] assert ctdata.current == meter_data["current"] assert ctdata.frequency == meter_data["freq"] assert ctdata.state == meter["state"] assert ctdata.metering_status == meter["meteringStatus"] assert ctdata.status_flags == meter.get("statusFlags") # backward compatibility test # specific xxx meter data should match ctmeters[xxx] data meter_match = bool(cttype == CtType.PRODUCTION) data_match = bool(data.ctmeter_production == data.ctmeters[cttype]) assert meter_match == data_match meter_match = bool(cttype in (CtType.NET_CONSUMPTION, CtType.TOTAL_CONSUMPTION)) data_match = bool(data.ctmeter_consumption == data.ctmeters[cttype]) assert meter_match == data_match meter_match = bool(cttype == CtType.STORAGE) data_match = bool(data.ctmeter_storage == data.ctmeters[cttype]) assert meter_match == data_match # end backward compatibility test # test phase data, if phase count is <=1 no phase data should be present multiple_phases = bool(envoy.phase_count > 1) phase_data_len_equals_count = bool( len(data.ctmeters_phases.get(cttype, {})) == envoy.phase_count ) assert multiple_phases == phase_data_len_equals_count for i in range(0, envoy.phase_count if envoy.phase_count > 1 else 0): phase_data: Any = jsonpath.findall( f"[?(@.eid=={meter['eid']})]['channels'][*]", meter_data_json )[i] assert data.ctmeters_phases[cttype].get(PHASENAMES[i]) is not None ctdata_phase = data.ctmeters_phases[cttype][PHASENAMES[i]] assert ctdata_phase.energy_delivered == round(phase_data["actEnergyDlvd"]) assert ctdata_phase.energy_received == round(phase_data["actEnergyRcvd"]) assert ctdata_phase.active_power == round(phase_data["activePower"]) assert ctdata_phase.voltage == phase_data["voltage"] assert ctdata_phase.frequency == phase_data["freq"] assert ctdata_phase.state == meter["state"] assert ctdata_phase.metering_status == meter["meteringStatus"] assert ctdata_phase.status_flags == meter.get("statusFlags") # backward compatibility, verify individual phase data matches dict data # specific xxx meter should match ctmeters_phases[xxx] data meter_match = bool(cttype == CtType.PRODUCTION) data_match = bool( data.ctmeter_production_phases == data.ctmeters_phases.get(cttype) ) assert meter_match == data_match meter_match = bool( cttype in (CtType.NET_CONSUMPTION, CtType.TOTAL_CONSUMPTION) ) data_match = bool( data.ctmeter_consumption_phases == data.ctmeters_phases.get(cttype) ) assert meter_match == data_match meter_match = bool(cttype == CtType.STORAGE) data_match = bool( data.ctmeter_storage_phases == data.ctmeters_phases.get(cttype) ) assert meter_match == data_match # end compatibility @pytest.mark.parametrize( ("test_properties",), [ pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="5.0.62", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.3.130", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.3.466_metered_disabled_cts", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.3.517", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.3.517_legacy_savings_mode", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.6.114_without_cts", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.6.175", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.6.175_standard", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="7.6.175_total", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="8.1.41", ), pytest.param( { "ctMeters": 0, "phaseCount": 1, "phaseMode": None, "meter_types": [], }, id="8.2.4264_metered_noct", ), ], ) @pytest.mark.asyncio async def test_without_current_transformers( snapshot: SnapshotAssertion, caplog: pytest.LogCaptureFixture, test_properties: dict[str, Any], mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession, request: pytest.FixtureRequest, ) -> None: """Test Current transformer data when none are installed.""" caplog.set_level(logging.WARNING) start_7_firmware_mock(mock_aioresponse) # verify test parameter completeness assert len(test_properties) == 4 # get version and fixture folder from test id version: Any = request.node.callspec.id await prep_envoy(mock_aioresponse, "127.0.0.1", version) envoy = await get_mock_envoy(test_client_session) # load data data = envoy.data assert data is not None assert data == snapshot # verify expected properties assert envoy.ct_meter_count == test_properties["ctMeters"] assert envoy.phase_count == test_properties["phaseCount"] assert envoy.phase_mode == test_properties["phaseMode"] # if we have ct meters we should have CTMETERS feature and not if no meters assert envoy.ct_meter_count == len(envoy.ct_meter_list) assert envoy._supported_features has_ctmeters = bool(envoy._supported_features & SupportedFeatures.CTMETERS) meter_count_not_zero = bool(envoy.ct_meter_count > 0) assert has_ctmeters == meter_count_not_zero # backward compatibility test, verify individual meter types are still found and in model # if no xxx meter is reported then xxx_meter_type should not report one and other way around # if no xxx meter is reported then it should not show in modelname and other way around has_meter = bool( (CtType.TOTAL_CONSUMPTION in envoy.ct_meter_list) or (CtType.NET_CONSUMPTION in envoy.ct_meter_list) ) meter_type_present = bool(envoy.consumption_meter_type is not None) meter_in_model = bool(str(envoy.consumption_meter_type) in envoy.envoy_model) assert has_meter == meter_type_present assert has_meter == meter_in_model has_meter = bool(CtType.PRODUCTION in envoy.ct_meter_list) meter_type_present = bool(envoy.production_meter_type is not None) meter_in_model = bool(str(envoy.production_meter_type) in envoy.envoy_model) assert has_meter == meter_type_present assert has_meter == meter_in_model has_meter = bool(CtType.STORAGE in envoy.ct_meter_list) meter_type_present = bool(envoy.storage_meter_type is not None) meter_in_model = bool(str(envoy.storage_meter_type) in envoy.envoy_model) assert has_meter == meter_type_present assert has_meter == meter_in_model # end backward compatibility test pyenphase-pyenphase-901c49f/tests/test_drycontacts.py000066400000000000000000000033501513166356400231640ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_endpoints.py000066400000000000000000001102211513166356400226260ustar00rootroot00000000000000"""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 .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, ) # we're testing, ignore private member access # pyright: reportPrivateUsage=false LOGGER = logging.getLogger(__name__) @pytest.mark.parametrize( ( "version", "part_number", "supported_features", "updaters", "phase_count", "production_phases", "consumption_phases", ), [ ( "5.0.62", "800-00551-r02", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "7.6.114_without_cts", "800-00656-r06", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, 1, {}, {}, ), ( "7.6.175", "800-00555-r03", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, 1, {}, {}, ), ( "7.6.175_total", "800-00654-r06", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, {}, {}, ), ( "7.6.175_standard", "800-00656-r06", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyApiV1ProductionUpdater": SupportedFeatures.PRODUCTION, }, 1, {}, {}, ), ( "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, {}, {}, ), ( "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, { 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, }, }, ), ( "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, { 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, }, }, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, {}, {}, ), ( "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, { 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, }, }, ), ( "8.2.4264_metered_noct", "800-00554-r03", SupportedFeatures.INVERTERS | SupportedFeatures.PRODUCTION | SupportedFeatures.TARIFF, { "EnvoyApiV1ProductionInvertersUpdater": SupportedFeatures.INVERTERS, "EnvoyProductionJsonFallbackUpdater": SupportedFeatures.PRODUCTION, "EnvoyTariffUpdater": SupportedFeatures.TARIFF, }, 1, {}, {}, ), ( "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, {}, {}, ), ], 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, production_phases: dict[str, dict[str, Any]], 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) 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 # verify expected properties assert envoy.firmware == version.split("_")[0] assert envoy.serial_number assert envoy.part_number == part_number assert updater_features(envoy._updaters) == updaters assert envoy._supported_features == supported_features assert envoy.phase_count == phase_count # 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" ) # 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 caplog.clear() await envoy.request("/api/v1/production/inverters", data=test_data, method="PUT") # Check that at least one PUT request was made to this URL cnt, request_data = latest_request( mock_aioresponse, "PUT", "/api/v1/production/inverters" ) assert cnt == 1 assert orjson.loads(request_data) == test_data # verify debug log shows correct method assert "Sending PUT to" in caplog.text # change data to recognize this from previous requests caplog.clear() 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 # verify debug log shows correct method assert "Sending POST to" in caplog.text caplog.clear() # 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"] # 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-pyenphase-901c49f/tests/test_ensemble.py000066400000000000000000001172541513166356400224320ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_firmware.py000066400000000000000000000142771513166356400224550ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_home.py000066400000000000000000000133111513166356400215550ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_net_consumption.py000066400000000000000000000337651513166356400240700ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_post_v7_endpoints.py000066400000000000000000000174521513166356400243230ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_pre_v7_endpoints.py000066400000000000000000001161241513166356400241200ustar00rootroot00000000000000"""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-pyenphase-901c49f/tests/test_retries.py000066400000000000000000000477311513166356400223170ustar00rootroot00000000000000"""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