pax_global_header 0000666 0000000 0000000 00000000064 14677501631 0014524 g ustar 00root root 0000000 0000000 52 comment=011be040704ba444775c4e1740cce63373def1af
python-p1monitor-3.1.0/ 0000775 0000000 0000000 00000000000 14677501631 0014774 5 ustar 00root root 0000000 0000000 python-p1monitor-3.1.0/.devcontainer/ 0000775 0000000 0000000 00000000000 14677501631 0017533 5 ustar 00root root 0000000 0000000 python-p1monitor-3.1.0/.devcontainer/devcontainer.json 0000664 0000000 0000000 00000005004 14677501631 0023106 0 ustar 00root root 0000000 0000000 {
"name": "${containerWorkspaceFolderBasename}",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"customizations": {
"codespaces": {
"openFiles": ["README.md"]
},
"vscode": {
"extensions": [
"GitHub.copilot",
"GitHub.vscode-github-actions",
"GitHub.vscode-pull-request-github",
"Tyriar.sort-lines",
"charliermarsh.ruff",
"esbenp.prettier-vscode",
"mhutchie.git-graph",
"ms-python.python",
"oderwat.indent-rainbow",
"redhat.vscode-yaml",
"ryanluker.vscode-coverage-gutters"
],
"settings": {
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.organizeImports": true
}
},
"coverage-gutters.customizable.context-menu": true,
"coverage-gutters.customizable.status-bar-toggler-watchCoverageAndVisibleEditors-enabled": true,
"coverage-gutters.showGutterCoverage": false,
"coverage-gutters.showLineCoverage": true,
"coverage-gutters.xmlname": "coverage.xml",
"python.analysis.extraPaths": ["${workspaceFolder}/src"],
"python.defaultInterpreterPath": ".venv/bin/python",
"python.formatting.provider": "ruff",
"python.linting.enabled": true,
"python.linting.mypyEnabled": true,
"python.linting.pylintEnabled": true,
"python.testing.cwd": "${workspaceFolder}",
"python.testing.pytestArgs": ["--cov-report=xml"],
"python.testing.pytestEnabled": true,
"ruff.importStrategy": "fromEnvironment",
"ruff.interpreter": [".venv/bin/python"],
"terminal.integrated.defaultProfile.linux": "zsh"
}
}
},
"features": {
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers-contrib/features/poetry:2": {},
"ghcr.io/devcontainers-contrib/features/pre-commit:2": {},
"ghcr.io/devcontainers/features/common-utils:2": {
"installOhMyZsh": true
},
"ghcr.io/devcontainers-contrib/features/zsh-plugins:0": {
"plugins": "git zsh-autosuggestions zsh-syntax-highlighting zsh-completions",
"omzPlugins": "https://github.com/zsh-users/zsh-autosuggestions.git https://github.com/zsh-users/zsh-syntax-highlighting.git https://github.com/zsh-users/zsh-completions.git"
},
"ghcr.io/devcontainers/features/python:1": {
"installTools": false
}
}
}
python-p1monitor-3.1.0/.gitattributes 0000664 0000000 0000000 00000000052 14677501631 0017664 0 ustar 00root root 0000000 0000000 * text=auto eol=lf
*.py whitespace=error
python-p1monitor-3.1.0/.github/ 0000775 0000000 0000000 00000000000 14677501631 0016334 5 ustar 00root root 0000000 0000000 python-p1monitor-3.1.0/.github/CODEOWNERS 0000664 0000000 0000000 00000000031 14677501631 0017721 0 ustar 00root root 0000000 0000000 .github/* @klaasnicolaas
python-p1monitor-3.1.0/.github/FUNDING.yml 0000664 0000000 0000000 00000000057 14677501631 0020153 0 ustar 00root root 0000000 0000000 ---
github: klaasnicolaas
ko_fi: klaasnicolaas
python-p1monitor-3.1.0/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 14677501631 0020517 5 ustar 00root root 0000000 0000000 python-p1monitor-3.1.0/.github/ISSUE_TEMPLATE/bug_report.yml 0000664 0000000 0000000 00000003070 14677501631 0023412 0 ustar 00root root 0000000 0000000 ---
name: ๐ Bug Report
description: File a bug/issue
title: "
"
labels:
- bug
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: A concise description of what you're experiencing.
validations:
required: false
- type: textarea
attributes:
label: Expected Behavior
description: A concise description of what you expected to happen.
validations:
required: false
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. In this environment...
2. With this config...
3. Run '...'
4. See error...
validations:
required: false
- type: textarea
attributes:
label: Environment
description: |
Please describe your execution environment providing as much detail as possible
render: Markdown
validations:
required: false
- type: textarea
attributes:
label: Anything else?
description: |
Links? References? Anything that will give us more context about the issue you are encountering!
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
validations:
required: false
python-p1monitor-3.1.0/.github/ISSUE_TEMPLATE/config.yml 0000664 0000000 0000000 00000000404 14677501631 0022505 0 ustar 00root root 0000000 0000000 ---
blank_issues_enabled: true
contact_links:
- name: โ Ask a Question
url: https://github.com/klaasnicolaas/python-p1monitor/discussions/new/choose
about: We use GitHub issues for tracking bugs / feature requests, check discussions for questions.
python-p1monitor-3.1.0/.github/ISSUE_TEMPLATE/feature_request.yml 0000664 0000000 0000000 00000002267 14677501631 0024454 0 ustar 00root root 0000000 0000000 ---
name: ๐ Feature Request
description: Request a new feature or enhancement
title: ""
labels:
- enhancement
- new-feature
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the feature you want.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: How would this feature be useful?
description: Describe any use cases this solves or frustrations it alleviates.
validations:
required: false
- type: textarea
attributes:
label: Describe the solution you'd like
description: If you have an idea on how to do this, let us know here!
validations:
required: false
- type: textarea
attributes:
label: Describe alternatives you've considered
description: If there's some workaround or alternative solutions, let us know here!
validations:
required: false
- type: textarea
attributes:
label: Anything else?
description: Any other relevant information or background.
validations:
required: false
python-p1monitor-3.1.0/.github/PULL_REQUEST_TEMPLATE.md 0000664 0000000 0000000 00000001410 14677501631 0022131 0 ustar 00root root 0000000 0000000 ## Proposed change
## Additional information
- This PR fixes or closes issue: fixes #
## Checklist
- [ ] I have updated the documentation if needed.
- [ ] I have updated the tests if needed.
python-p1monitor-3.1.0/.github/labels.yml 0000664 0000000 0000000 00000006243 14677501631 0020326 0 ustar 00root root 0000000 0000000 ---
- name: "breaking-change"
color: d93f0b
description: "A breaking change for existing users."
- name: "bug"
color: fc2929
description: "Inconsistencies or issues which will cause a problem for users."
- name: "bugfix"
color: ededed
description: "Fixing a bug."
- name: "documentation"
color: 0052cc
description: "Solely about the documentation of the project."
- name: "enhancement"
color: 1d76db
description: "Enhancement of the code, not introducing new features."
- name: "refactor"
color: 1d76db
description: "Improvement of existing code, not introducing new features."
- name: "performance"
color: 1d76db
description: "Improving performance, not introducing new features."
- name: "new-feature"
color: 0e8a16
description: "New features or request."
- name: "maintenance"
color: 2af79e
description: "Generic maintenance tasks."
- name: "ci"
color: 1d76db
description: "Work that improves the continue integration."
- name: "dependencies"
color: 1d76db
description: "Upgrade or downgrade of project dependencies."
- name: "in-progress"
color: fbca04
description: "Issue is currently being resolved by a developer."
- name: "stale"
color: fef2c0
description: "There has not been activity on this issue or PR for quite some time."
- name: "no-stale"
color: fef2c0
description: "This issue or PR is exempted from the stable bot."
- name: "wontfix"
color: ffffff
description: "This issue or PR will not be fixed."
- name: "cleanup"
color: ef75d5
description: "Cleanup of code."
- name: "sync"
color: 00a6ed
description: "Syncing with upstream github config repository."
- name: "security"
color: ee0701
description: "Marks a security issue that needs to be resolved asap."
- name: "incomplete"
color: fef2c0
description: "Marks a PR or issue that is missing information."
- name: "invalid"
color: fef2c0
description: "Marks a PR or issue that is missing information."
- name: "duplicate"
color: cfd3d7
description: "This issue or pull request already exists."
- name: "beginner-friendly"
color: 0e8a16
description: "Good first issue for people wanting to contribute to the project."
- name: "help-wanted"
color: 0e8a16
description: "We need some extra helping hands or expertise in order to resolve this."
- name: "hacktoberfest"
description: "Issues/PRs are participating in the Hacktoberfest."
color: fbca04
- name: "hacktoberfest-accepted"
description: "Issues/PRs are participating in the Hacktoberfest."
color: fbca04
- name: "priority-critical"
color: ee0701
description: "This should be dealt with ASAP. Not fixing this issue would be a serious error."
- name: "priority-high"
color: b60205
description: "After critical issues are fixed, these should be dealt with before any further issues."
- name: "priority-medium"
color: 0e8a16
description: "This issue may be useful, and needs some attention."
- name: "priority-low"
color: e4ea8a
description: "Nice addition, maybe... someday..."
- name: "major"
color: b60205
description: "This PR causes a major version bump in the version number."
- name: "minor"
color: 0e8a16
description: "This PR causes a minor version bump in the version number."
python-p1monitor-3.1.0/.github/release-drafter.yml 0000664 0000000 0000000 00000002450 14677501631 0022125 0 ustar 00root root 0000000 0000000 ---
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
change-template: "- #$NUMBER $TITLE @$AUTHOR"
sort-direction: ascending
categories:
- title: "๐จ Breaking changes"
labels:
- "breaking-change"
- title: "โจ New features"
labels:
- "new-feature"
- title: "๐ Bug fixes"
labels:
- "bugfix"
- title: "๐ Enhancements"
labels:
- "enhancement"
- "refactor"
- "performance"
- title: "๐งฐ Maintenance"
labels:
- "maintenance"
- "ci"
- title: "๐ Documentation"
labels:
- "documentation"
- title: "โฌ๏ธ Dependency updates"
collapse-after: 5
labels:
- "dependencies"
exclude-labels:
- "sync"
version-resolver:
major:
labels:
- "major"
- "breaking-change"
minor:
labels:
- "minor"
- "new-feature"
patch:
labels:
- "bugfix"
- "chore"
- "ci"
- "dependencies"
- "documentation"
- "enhancement"
- "performance"
- "refactor"
default: patch
template: |
## What's changed
_To receive a notification on new releases, click on **Watch** > **Custom** > **Releases** on the top._
$CHANGES
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
python-p1monitor-3.1.0/.github/renovate.json 0000664 0000000 0000000 00000002070 14677501631 0021051 0 ustar 00root root 0000000 0000000 {
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"timezone": "Europe/Amsterdam",
"schedule": ["before 6am every weekday"],
"rebaseWhen": "behind-base-branch",
"dependencyDashboard": true,
"labels": ["dependencies"],
"lockFileMaintenance": {
"enabled": true,
"automerge": true
},
"commitMessagePrefix": "โฌ๏ธ",
"packageRules": [
{
"matchManagers": ["poetry"],
"addLabels": ["python"]
},
{
"matchManagers": ["poetry"],
"matchDepTypes": ["dev"],
"rangeStrategy": "pin"
},
{
"matchManagers": ["poetry"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
},
{
"matchManagers": ["github-actions"],
"addLabels": ["github_actions"],
"rangeStrategy": "pin",
"extractVersion": "^(?v\\d+\\.\\d+\\.\\d+)$",
"versioning": "regex:^v(?\\d+)(\\.(?\\d+)\\.(?\\d+))?$"
},
{
"matchManagers": ["github-actions"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
}
]
}
python-p1monitor-3.1.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14677501631 0020371 5 ustar 00root root 0000000 0000000 python-p1monitor-3.1.0/.github/workflows/linting.yaml 0000664 0000000 0000000 00000012527 14677501631 0022730 0 ustar 00root root 0000000 0000000 ---
name: Linting
# yamllint disable-line rule:truthy
on:
push:
pull_request:
workflow_dispatch:
env:
DEFAULT_PYTHON: "3.11"
jobs:
codespell:
name: codespell
runs-on: ubuntu-latest
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install Python dependencies
run: poetry install --no-interaction
- name: ๐ Check code for common misspellings
run: poetry run pre-commit run codespell --all-files
ruff:
name: Ruff
runs-on: ubuntu-latest
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install Python dependencies
run: poetry install --no-interaction
- name: ๐ Run Ruff linter
run: poetry run ruff check --output-format=github .
- name: ๐ Run Ruff formatter
run: poetry run ruff format --check .
pre-commit-hooks:
name: pre-commit-hooks
runs-on: ubuntu-latest
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install Python dependencies
run: poetry install --no-interaction
- name: ๐ Check Python AST
run: poetry run pre-commit run check-ast --all-files
- name: ๐ Check for case conflicts
run: poetry run pre-commit run check-case-conflict --all-files
- name: ๐ Check docstring is first
run: poetry run pre-commit run check-docstring-first --all-files
- name: ๐ Check that executables have shebangs
run: poetry run pre-commit run check-executables-have-shebangs --all-files
- name: ๐ Check JSON files
run: poetry run pre-commit run check-json --all-files
- name: ๐ Check for merge conflicts
run: poetry run pre-commit run check-merge-conflict --all-files
- name: ๐ Check for broken symlinks
run: poetry run pre-commit run check-symlinks --all-files
- name: ๐ Check TOML files
run: poetry run pre-commit run check-toml --all-files
- name: ๐ Check XML files
run: poetry run pre-commit run check-xml --all-files
- name: ๐ Check YAML files
run: poetry run pre-commit run check-yaml --all-files
- name: ๐ Detect Private Keys
run: poetry run pre-commit run detect-private-key --all-files
- name: ๐ Check End of Files
run: poetry run pre-commit run end-of-file-fixer --all-files
- name: ๐ Trim Trailing Whitespace
run: poetry run pre-commit run trailing-whitespace --all-files
pylint:
name: pylint
runs-on: ubuntu-latest
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install Python dependencies
run: poetry install --no-interaction
- name: ๐ Run pylint
run: poetry run pre-commit run pylint --all-files
yamllint:
name: yamllint
runs-on: ubuntu-latest
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install Python dependencies
run: poetry install --no-interaction
- name: ๐ Run yamllint
run: poetry run yamllint .
python-p1monitor-3.1.0/.github/workflows/lock.yaml 0000664 0000000 0000000 00000001006 14677501631 0022202 0 ustar 00root root 0000000 0000000 ---
name: Lock
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "0 3 * * *"
workflow_dispatch:
jobs:
inactivity-lock:
name: Lock issues and PRs
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- name: ๐ Lock closed issues and PRs
uses: klaasnicolaas/action-inactivity-lock@v1.1.1
with:
days-inactive-issues: 30
lock-reason-issues: ""
days-inactive-prs: 1
lock-reason-prs: ""
python-p1monitor-3.1.0/.github/workflows/pr-labels.yaml 0000664 0000000 0000000 00000001040 14677501631 0023131 0 ustar 00root root 0000000 0000000 ---
name: PR Labels
# yamllint disable-line rule:truthy
on:
pull_request_target:
types:
- opened
- labeled
- unlabeled
- synchronize
workflow_call:
jobs:
validate:
name: Verify
runs-on: ubuntu-latest
steps:
- name: ๐ท Verify PR has a valid label
uses: klaasnicolaas/action-pr-labels@v2.0.1
with:
valid-labels: >-
breaking-change, bugfix, documentation, enhancement, sync,
refactor, performance, new-feature, maintenance, ci, dependencies
python-p1monitor-3.1.0/.github/workflows/release-drafter.yaml 0000664 0000000 0000000 00000000675 14677501631 0024332 0 ustar 00root root 0000000 0000000 ---
name: Release Drafter
# yamllint disable-line rule:truthy
on:
push:
branches:
- main
workflow_dispatch:
jobs:
update_release_draft:
name: โ๏ธ Draft release
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: read
steps:
- name: ๐ Run Release Drafter
uses: release-drafter/release-drafter@v6.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
python-p1monitor-3.1.0/.github/workflows/release.yaml 0000664 0000000 0000000 00000004444 14677501631 0022703 0 ustar 00root root 0000000 0000000 ---
name: Release
# yamllint disable rule:line-length
# yamllint disable-line rule:truthy
on:
release:
types:
- published
env:
DEFAULT_PYTHON: "3.11"
jobs:
release:
name: Releasing to PyPi
runs-on: ubuntu-latest
environment: release
permissions:
id-token: write
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install dependencies
run: poetry install --no-interaction
- name: ๐ Set package version
run: |
version="${{ github.event.release.tag_name }}"
version="${version,,}"
version="${version#v}"
poetry version --no-interaction "${version}"
- name: ๐ Build package
run: poetry build --no-interaction
- name: ๐ Publish package to PyPi
uses: pypa/gh-action-pypi-publish@release/v1
tweet:
name: ๐ฆ Tweet the release
runs-on: ubuntu-latest
needs: release
steps:
- uses: Eomm/why-don-t-you-tweet@v2.0.0
with:
# GitHub event payload
# https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#release
tweet-message: |
โฌ๏ธ ${{ github.event.release.tag_name }} of ${{ github.event.repository.name }} just released ๐ #update @klaasnicolaas #python #package #P1monitor #p1 #ztatz #release #bot #assistant
Check out the release notes here: ${{ github.event.release.html_url }}
env:
# Get your tokens from https://developer.twitter.com/apps
TWITTER_CONSUMER_API_KEY: ${{ secrets.TWITTER_CONSUMER_API_KEY }}
TWITTER_CONSUMER_API_SECRET: ${{ secrets.TWITTER_CONSUMER_API_SECRET }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
python-p1monitor-3.1.0/.github/workflows/stale.yaml 0000664 0000000 0000000 00000002660 14677501631 0022371 0 ustar 00root root 0000000 0000000 ---
name: Stale
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "0 1 * * *"
workflow_dispatch:
jobs:
stale:
name: ๐งน Clean up stale issues and PRs
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- name: ๐ Run stale
uses: actions/stale@v9.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 30
days-before-close: 7
remove-stale-when-updated: true
stale-issue-label: "stale"
exempt-issue-labels: "no-stale,help-wanted"
stale-issue-message: >
There hasn't been any activity on this issue recently, so we
clean up some of the older and inactive issues.
Please make sure to update to the latest version and
check if that solves the issue. Let us know if that works for you
by leaving a comment ๐
This issue has now been marked as stale and will be closed if no
further activity occurs. Thanks!
stale-pr-label: "stale"
exempt-pr-labels: "no-stale"
stale-pr-message: >
There hasn't been any activity on this pull request recently. This
pull request has been automatically marked as stale because of that
and will be closed if no further activity occurs within 7 days.
Thank you for your contributions.
python-p1monitor-3.1.0/.github/workflows/sync-labels.yaml 0000664 0000000 0000000 00000001012 14677501631 0023463 0 ustar 00root root 0000000 0000000 ---
name: Sync labels
# yamllint disable-line rule:truthy
on:
push:
branches:
- main
paths:
- .github/labels.yml
workflow_dispatch:
jobs:
labels:
name: โป๏ธ Sync labels
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Run Label Syncer
uses: micnncim/action-label-syncer@v1.3.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
python-p1monitor-3.1.0/.github/workflows/tests.yaml 0000664 0000000 0000000 00000004370 14677501631 0022423 0 ustar 00root root 0000000 0000000 ---
name: Testing
# yamllint disable-line rule:truthy
on:
push:
pull_request:
workflow_dispatch:
env:
DEFAULT_PYTHON: "3.11"
jobs:
pytest:
name: Python ${{ matrix.python }}
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.11", "3.12"]
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ matrix.python }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ matrix.python }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install dependencies
run: poetry install --no-interaction
- name: ๐ Run pytest
run: poetry run pytest --cov src tests
- name: โฌ๏ธ Upload coverage artifact
uses: actions/upload-artifact@v4.4.0
with:
name: coverage-${{ matrix.python }}
include-hidden-files: true
path: .coverage
coverage:
runs-on: ubuntu-latest
needs: pytest
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
with:
fetch-depth: 0
- name: โฌ๏ธ Download coverage data
uses: actions/download-artifact@v4.1.8
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: 'poetry'
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install dependencies
run: poetry install --no-interaction
- name: ๐ Process coverage results
run: |
poetry run coverage combine coverage*/.coverage*
poetry run coverage xml -i
- name: ๐ Upload coverage report
uses: codecov/codecov-action@v4.6.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
python-p1monitor-3.1.0/.github/workflows/typing.yaml 0000664 0000000 0000000 00000001573 14677501631 0022575 0 ustar 00root root 0000000 0000000 ---
name: Typing
# yamllint disable-line rule:truthy
on:
push:
pull_request:
workflow_dispatch:
env:
DEFAULT_PYTHON: "3.11"
jobs:
mypy:
name: mypy
runs-on: ubuntu-latest
steps:
- name: โคต๏ธ Check out code from GitHub
uses: actions/checkout@v4.2.0
- name: ๐ Set up Poetry
run: pipx install poetry
- name: ๐ Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "poetry"
- name: ๐ Install workflow dependencies
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: ๐ Install dependencies
run: poetry install --no-interaction
- name: ๐ Run mypy
run: poetry run mypy examples src tests
python-p1monitor-3.1.0/.gitignore 0000664 0000000 0000000 00000003323 14677501631 0016765 0 ustar 00root root 0000000 0000000 # 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/
pip-wheel-metadata/
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
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.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
# celery beat schedule file
celerybeat-schedule
# 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/
# Visual Studio Code
.vscode
# ruff
.ruff_cache
# Pyre type checker
.pyre/
setup.py
.python-version
python-p1monitor-3.1.0/.pre-commit-config.yaml 0000664 0000000 0000000 00000007512 14677501631 0021262 0 ustar 00root root 0000000 0000000 ---
repos:
- repo: local
hooks:
- id: ruff-check
name: ๐ถ Ruff Linter
language: system
types: [python]
entry: poetry run ruff check --fix
require_serial: true
stages: [commit, push, manual]
- id: ruff-format
name: ๐ถ Ruff Formatter
language: system
types: [python]
entry: poetry run ruff format
require_serial: true
stages: [commit, push, manual]
- id: check-ast
name: ๐ Check Python AST
language: system
types: [python]
entry: poetry run check-ast
- id: check-case-conflict
name: ๐ Check for case conflicts
language: system
entry: poetry run check-case-conflict
- id: check-docstring-first
name: โน๏ธ Check docstring is first
language: system
types: [python]
entry: poetry run check-docstring-first
- id: check-executables-have-shebangs
name: ๐ง Check that executables have shebangs
language: system
types: [text, executable]
entry: poetry run check-executables-have-shebangs
stages: [commit, push, manual]
- id: check-json
name: ๏ฝ Check JSON files
language: system
types: [json]
entry: poetry run check-json
- id: check-merge-conflict
name: ๐ฅ Check for merge conflicts
language: system
types: [text]
entry: poetry run check-merge-conflict
- id: check-symlinks
name: ๐ Check for broken symlinks
language: system
types: [symlink]
entry: poetry run check-symlinks
- id: check-toml
name: โ
Check TOML files
language: system
types: [toml]
entry: poetry run check-toml
- id: check-xml
name: โ
Check XML files
entry: poetry run check-xml
language: system
types: [xml]
- id: check-yaml
name: โ
Check YAML files
language: system
types: [yaml]
entry: poetry run check-yaml
- id: codespell
name: โ
Check code for common misspellings
language: system
types: [text]
exclude: ^poetry\.lock$
entry: poetry run codespell
- id: detect-private-key
name: ๐ต๏ธ Detect Private Keys
language: system
types: [text]
entry: poetry run detect-private-key
- id: end-of-file-fixer
name: โฎ Fix End of Files
language: system
types: [text]
entry: poetry run end-of-file-fixer
stages: [commit, push, manual]
- id: mypy
name: ๐ Static type checking using mypy
language: system
types: [python]
entry: poetry run mypy
- id: no-commit-to-branch
name: ๐ Don't commit to main branch
language: system
entry: poetry run no-commit-to-branch
pass_filenames: false
always_run: true
args:
- --branch=main
- id: poetry
name: ๐ Check pyproject with Poetry
language: system
entry: poetry check
pass_filenames: false
always_run: true
- id: pylint
name: ๐ Starring code with pylint
language: system
types: [python]
entry: poetry run pylint
- id: pytest
name: ๐งช Running tests and test coverage with pytest
language: system
types: [python]
entry: poetry run pytest
pass_filenames: false
- id: trailing-whitespace
name: โ Trim Trailing Whitespace
language: system
types: [text]
entry: poetry run trailing-whitespace-fixer
stages: [commit, push, manual]
- id: yamllint
name: ๐ Check YAML files with yamllint
language: system
types: [yaml]
entry: poetry run yamllint
python-p1monitor-3.1.0/.yamllint 0000664 0000000 0000000 00000002432 14677501631 0016627 0 ustar 00root root 0000000 0000000 ---
ignore: |
.venv/lib
.copier-answers.yml
rules:
braces:
level: error
min-spaces-inside: 0
max-spaces-inside: 1
min-spaces-inside-empty: -1
max-spaces-inside-empty: -1
brackets:
level: error
min-spaces-inside: 0
max-spaces-inside: 0
min-spaces-inside-empty: -1
max-spaces-inside-empty: -1
colons:
level: error
max-spaces-before: 0
max-spaces-after: 1
commas:
level: error
max-spaces-before: 0
min-spaces-after: 1
max-spaces-after: 1
comments:
level: error
require-starting-space: true
min-spaces-from-content: 1
comments-indentation:
level: error
document-end:
level: error
present: false
document-start:
level: error
present: true
empty-lines:
level: error
max: 1
max-start: 0
max-end: 1
hyphens:
level: error
max-spaces-after: 1
indentation:
level: error
spaces: 2
indent-sequences: true
check-multi-line-strings: false
key-duplicates:
level: error
line-length:
level: warning
max: 120
allow-non-breakable-words: true
allow-non-breakable-inline-mappings: true
new-line-at-end-of-file:
level: error
new-lines:
level: error
type: unix
trailing-spaces:
level: error
truthy:
level: error
python-p1monitor-3.1.0/CODE_OF_CONDUCT.md 0000664 0000000 0000000 00000012545 14677501631 0017602 0 ustar 00root root 0000000 0000000 # Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socioeconomic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
- Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or
advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email
address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
hello@student-techlife.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][mozilla coc].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][faq]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[mozilla coc]: https://github.com/mozilla/diversity
[faq]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
python-p1monitor-3.1.0/CONTRIBUTING.md 0000664 0000000 0000000 00000002235 14677501631 0017227 0 ustar 00root root 0000000 0000000 # Contributing
When contributing to this repository, please first discuss the change you wish
to make via issue, email, or any other method with the owners of this repository
before making a change.
Please note we have a code of conduct, please follow it in all your interactions
with the project.
## Issues and feature requests
You've found a bug in the source code, a mistake in the documentation or maybe
you'd like a new feature? You can help us by submitting an issue to our
[GitHub Repository][github]. Before you create an issue, make sure you search
the archive, maybe your question was already answered.
Even better: You could submit a pull request with a fix / new feature!
## Pull request process
1. Search our repository for open or closed [pull requests][prs] that relates
to your submission. You don't want to duplicate effort.
1. You may merge the pull request in once you have the sign-off of two other
developers, or if you do not have permission to do that, you may request
the second reviewer to merge it for you.
[github]: https://github.com/klaasnicolaas/python-p1monitor/issues
[prs]: https://github.com/klaasnicolaas/python-p1monitor/pulls
python-p1monitor-3.1.0/LICENSE 0000664 0000000 0000000 00000002065 14677501631 0016004 0 ustar 00root root 0000000 0000000 # MIT License
Copyright (c) 2021-2024 Klaas Schoute
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.
python-p1monitor-3.1.0/README.md 0000664 0000000 0000000 00000017342 14677501631 0016262 0 ustar 00root root 0000000 0000000

[![GitHub Release][releases-shield]][releases]
[![Python Versions][python-versions-shield]][pypi]
![Project Stage][project-stage-shield]
![Project Maintenance][maintenance-shield]
[![License][license-shield]](LICENSE)
[![GitHub Activity][commits-shield]][commits-url]
[![PyPi Downloads][downloads-shield]][downloads-url]
[![GitHub Last Commit][last-commit-shield]][commits-url]
[![Open in Dev Containers][devcontainer-shield]][devcontainer]
[![Build Status][build-shield]][build-url]
[![Typing Status][typing-shield]][typing-url]
[![Maintainability][maintainability-shield]][maintainability-url]
[![Code Coverage][codecov-shield]][codecov-url]
Asynchronous Python client for the P1 Monitor API.
## About
There are many ways to read the serial port (P1) of your smart meter and what you do with the data that comes out. With this python library your platform can read [P1 Monitor][p1-monitor] via the API and use the data for example for an integration in [Home Assistant][home-assistant].
## Installation
```bash
pip install p1monitor
```
## Usage
```python
import asyncio
from p1monitor import P1Monitor
async def main():
"""Show example on getting P1 Monitor data."""
async with P1Monitor(host="192.168.1.2", port=80) as client:
smartmeter = await client.smartmeter()
watermeter = await client.watermeter()
settings = await client.settings()
phases = await client.phases()
print(smartmeter)
print(watermeter)
print(settings)
print(phases)
if __name__ == "__main__":
asyncio.run(main())
```
More examples can be found in the [examples folder](./examples/).
## Class: `P1Monitor`
This is the main class that you will use to interact with the P1 Monitor.
| Parameter | Required | Description |
| --------- | -------- | -------------------------------------------- |
| `host` | `True` | The IP address of the P1 Monitor. |
| `port` | `False` | The port of the P1 Monitor. Default is `80`. |
## Data
There is a lot of data that you can read via the API:
### SmartMeter
- Gas Consumption
- Power Consumption / Production
- Energy Consumption Low/High
- Energy Production Low/High
- Energy Tariff Period
### Phases
- Voltage phases L1/2/3
- Current Phases L1/2/3
- Power consumed phases L1/2/3
- Power Produced phases L1/2/3
### WaterMeter
> [!IMPORTANT]
> WaterMeter is only available when you run version 1.1.0 or higher due the use of the new v2 API url.
- Day Consumption (liters)
- Total Consumption (m3)
- Day Pulse count
### Settings
- Gas Consumption Price
- Energy Consumption Price Low/High
- Energy Production Price Low/High
## Contributing
This is an active open-source project. We are always open to people who want to
use the code or contribute to it.
We've set up a separate document for our
[contribution guidelines](CONTRIBUTING.md).
Thank you for being involved! :heart_eyes:
## Setting up development environment
The simplest way to begin is by utilizing the [Dev Container][devcontainer]
feature of Visual Studio Code or by opening a CodeSpace directly on GitHub.
By clicking the button below you immediately start a Dev Container in Visual Studio Code.
[![Open in Dev Containers][devcontainer-shield]][devcontainer]
This Python project relies on [Poetry][poetry] as its dependency manager,
providing comprehensive management and control over project dependencies.
You need at least:
- Python 3.11+
- [Poetry][poetry-install]
Install all packages, including all development requirements:
```bash
poetry install
```
Poetry creates by default an virtual environment where it installs all
necessary pip packages, to enter or exit the venv run the following commands:
```bash
poetry shell
exit
```
Setup the pre-commit check, you must run this inside the virtual environment:
```bash
pre-commit install
```
*Now you're all set to get started!*
As this repository uses the [pre-commit][pre-commit] framework, all changes
are linted and tested with each commit. You can run all checks and tests
manually, using the following command:
```bash
poetry run pre-commit run --all-files
```
To run just the Python tests:
```bash
poetry run pytest
```
To update the [syrupy](https://github.com/tophat/syrupy) snapshot tests:
```bash
poetry run pytest --snapshot-update
```
## License
MIT License
Copyright (c) 2021-2024 Klaas Schoute
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.
[build-shield]: https://github.com/klaasnicolaas/python-p1monitor/actions/workflows/tests.yaml/badge.svg
[build-url]: https://github.com/klaasnicolaas/python-p1monitor/actions/workflows/tests.yaml
[commits-shield]: https://img.shields.io/github/commit-activity/y/klaasnicolaas/python-p1monitor.svg
[commits-url]: https://github.com/klaasnicolaas/python-p1monitor/commits/main
[codecov-shield]: https://codecov.io/gh/klaasnicolaas/python-p1monitor/branch/main/graph/badge.svg?token=G4FIVHJVZR
[codecov-url]: https://codecov.io/gh/klaasnicolaas/python-p1monitor
[devcontainer-shield]: https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue&logo=visualstudiocode
[devcontainer]: https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/klaasnicolaas/python-p1monitor
[downloads-shield]: https://img.shields.io/pypi/dm/p1monitor
[downloads-url]: https://pypistats.org/packages/p1monitor
[license-shield]: https://img.shields.io/github/license/klaasnicolaas/python-p1monitor.svg
[last-commit-shield]: https://img.shields.io/github/last-commit/klaasnicolaas/python-p1monitor.svg
[maintenance-shield]: https://img.shields.io/maintenance/yes/2024.svg
[maintainability-shield]: https://api.codeclimate.com/v1/badges/443c476612a574d82467/maintainability
[maintainability-url]: https://codeclimate.com/github/klaasnicolaas/python-p1monitor/maintainability
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
[pypi]: https://pypi.org/project/p1monitor/
[python-versions-shield]: https://img.shields.io/pypi/pyversions/p1monitor
[typing-shield]: https://github.com/klaasnicolaas/python-p1monitor/actions/workflows/typing.yaml/badge.svg
[typing-url]: https://github.com/klaasnicolaas/python-p1monitor/actions/workflows/typing.yaml
[releases-shield]: https://img.shields.io/github/release/klaasnicolaas/python-p1monitor.svg
[releases]: https://github.com/klaasnicolaas/python-p1monitor/releases
[p1-monitor]: https://www.ztatz.nl/p1-monitor
[home-assistant]: https://www.home-assistant.io
[poetry-install]: https://python-poetry.org/docs/#installation
[poetry]: https://python-poetry.org
[pre-commit]: https://pre-commit.com
python-p1monitor-3.1.0/assets/ 0000775 0000000 0000000 00000000000 14677501631 0016276 5 ustar 00root root 0000000 0000000 python-p1monitor-3.1.0/assets/header_p1monitor-min.png 0000664 0000000 0000000 00000307030 14677501631 0023030 0 ustar 00root root 0000000 0000000 PNG
IHDR ช ธด)> gAMA ฑa sRGB ฎฮ้ pHYs ๚PLTEGpL{{{wxy~zz{~~y]Lhzzzxyyxxx~~~|}}ะf4wxxะf3|||vwxyyyyzzuuu7=>ttt{||pqpijjrsruvw}}~mnnddd ฯe2vvvlml !ooobccwwwhhhvwwz{{MPR9>@kkkruv?CEfffaa`{zxgggILNtvvฮ^Mh=@BRUV^``BFIyxtYZZํํํY\^ehiEIKอd0y]
|ytUXYBA@lhaFEC@IP]]]cfgบb1IRYณ`1y^QRRolf`hn:DMzwpowzQZa~|wEMT9@GM[gW_d|nsw}{ty{WVTNV\Oi[djBP\w|~urnS`iZhrPPNqok %)HVavwp(*,hd_hpv.02rk`vph\YUa\Vamu644_WNUcntmdd`[xslldZelqjoqSLFMLJimmณณณIIHวศศRj!w`i`V|Tj*VPKy~MHCXTOJC>mrs:IWiuz.:F#}wlcry^cfe\Qซซช+3;๘๗๖phYพพพ8p".ฆฆฆeVG{sZaKpVอ=ูKๅๅไQE8T^ไฑฺf้รฐิwJบยฅ๒ืสแก๘์็AXkบTคฌQsx>ovปrL^~$lu๓ไq)vMุีมนชyK\-}Z)V\Pฉ1biรฃm
tRNS e$Yจ๚๙ IDATxฺ์ฝ{PS๗ึ g|ฮ9
Iภ` แ3\ส-ๅN นษ5\Q๔
ฑฬt๔T;ึK๋ฉึฑตตฺi{ฺi3๓๋๕ถs:๓ฬทฯ฿๚์หI แ*่^ถ๋Fๅณ_y๏๕yฏต๋ฟโO๘ใ๗V'Aง%HทAจี๛<=ถบ
oOภ/:}+Tผค๐dุย฿฿๚'กโeำ7fท็โ๖ว?แOๅ2๔Di็he2#ำีษJ>อB5ชฉ bตQํ๏ไ๛ใโดำย4ถๆฝำj๊x๐ฅPM
j*จX"ช-ฑฌิฝ่งPM
j*จXT/๋?ธ๚6Tฅฺ.๓v๛นsPจKกB๕ฦYชฐ?8#๕]~
ีช)TSAกzP
ยฺิํ๚ลษแถ
วลyyปร^
ีTPจฆ ฺำษ~ขหษ!QญJH๐pฝชฉ PM+Bต็v2ชwluCUฉท
หผ;E(TSAก
*Vjฒฎฃ๋oBง'&สท
ซิB5ชฉ b=PMฬWม฿5ช้LfB Zญ๔๕uผชฉ PM+Eตงี๒ง wPํํญTชถฉใ/
j*(TSAลJQํ`๑Wั฿MTK)TSAก
*ึWU[R ๒tีL__น\.p>E(TSAก
*Vj0\VB5ชฉ bรชj\Vษำ-T๛ลแแษส๘ํn"ชฉ PM+Fu@.ชB๕vกp6ฅ4ฤ}์RจฆB5Tฌชฦdu{จf'%mศ_ย)Bก
ีTPฑ
จร๒๎ พ;>><,
฿ถ,
bง%ะC,๋ซXถใwุล"cแ&พ฿rวv๋_:#' ฺใ5 ๚Rจธซั/0๖บฌฦฐ0฿฿UAu[จ>๑; pงQq$๘M|ุF๊,ํ6์ฺใลb8mๆ;๙๛๙จL&6)n~:)ฌ'ว๎์ืิภjZ`เ:
๊Lธ}ฃ\ไัhซjOwPปฌ,pไ1หk{Tณ,ลiอย๎ ธI/qBa๗ท ง0แฅฌญจyH
ใMกzฦ๖ 6ํ๑: ธฬ['T๊็
hbยยส]3Tย>B๚,`ีถํ;ฒไ\lY9๒๋r๗เภbใ
ทc_๐วผ8ช].V/"ยB๕2ึโBัฒอี/ีกuฬภฌชJย YรฒX{,ฒศ5uLฐยู^ฃ[G"ฐ
๚<๎DmณHช๛ืe~46:ซCC9Xpน\๔%44=Lฃm฿๎อคSจv{ญj4Iนชฑ็ํแมฦV##8ุผฑ/มมุ(ฑๅํฝPํแล~๊จจๆ ฐ๕[พพ๋๊_ํSำึyฟAvTีค
@&ท@พ&งI๚ๅCศณR*,g9ฟบฉ\ฌ|ฬ`คัม;ACC!๛ไแ \aotYณTTำh๐/เฮ๙/๔w}โั๒๓*+(Tปนญ"~~Hแซ1K\ ๑ลดHlยbุหqฉจฆัเMs๙:Zhh@ อ%ชszณหส^9TNส5l)hย~กYu;$@eฑyวญCbnดถื๐6๎ฤb~ฟปqn0ฝ=ฑPฤ็+Av!8>ค๐E" N6\๔W ีฆฃัหๅkj$!Iฎืึv๙๒ฉZ
ีฎRL&hF(หใdh
งP8[
_&นPรษ|Pช\ฃZฃ pตฃRปย
Wีฅ7Hbปํ;kๅCดo,ฐญศ๒a๙8stุ)d3ี bฟษ"ๅถY๖ว!ๅIN,ี
"ชฤG(TP]เี=ชj
๊ีG๕ปฏชK'Y-mlถูLx1ํณ๐ถขฃ(ท\tL>;มด}ข
ผใๆๅ๏งคะก\ฎHฤD+่เ๓ฑ_^rอ้ภภP<๐ส[ร
(O,7๒%ทย๛\6{cๆฐษจลแa1O$ED44ศ๘<เ\ึภMx$*ช๑รฝะK%Iฃ?Hกัd2พ่๚๋รWkk4๋๑#"ผข8"ัภ :ชุXddPจvM่ะ`Oศ็Gฃ%-ๅ(<พน๘jถญล`|-ขลศ
แ'ึ1P;แแฑ!m๊ฆL HฤZChVS#LาญญG/]อำ่ฅฐdh4M>OษงACซ=|8oสP้่พD8Aฃ5ี๙B-aOZTตขฑ๗พชye ห้ํE$๎+
TNB5?ZจfG5ไ๐ฃF๊ำปvUU}iม"Qt๔ภd z?/จ0lT๐๛ป@:Uำ@แลษL&๔b!ฒฯjเ Es3
jWจฆั9