myPyllant 0.9.2__tar.gz → 0.9.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. {mypyllant-0.9.2 → mypyllant-0.9.4}/.github/workflows/build-test.yaml +17 -11
  2. {mypyllant-0.9.2 → mypyllant-0.9.4}/.pre-commit-config.yaml +12 -9
  3. mypyllant-0.9.4/Dockerfile +16 -0
  4. {mypyllant-0.9.2 → mypyllant-0.9.4}/PKG-INFO +10 -14
  5. {mypyllant-0.9.2 → mypyllant-0.9.4}/README.md +9 -13
  6. {mypyllant-0.9.2 → mypyllant-0.9.4}/pyproject.toml +30 -1
  7. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/api.py +5 -5
  8. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/const.py +1 -0
  9. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/enums.py +6 -0
  10. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/http_client.py +2 -2
  11. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/models.py +28 -2
  12. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/current_system.json +96 -0
  13. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/device_buckets.json +130 -0
  14. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/diagnostic_trouble_codes.json +32 -0
  15. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/energy_management.json +18 -0
  16. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/rbr.json +3 -0
  17. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/rts.json +3 -0
  18. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/ship_self.json +9 -0
  19. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b/system.json +295 -0
  20. mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/homes.json +28 -0
  21. mypyllant-0.9.4/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d/control_identifier.json +3 -0
  22. mypyllant-0.9.4/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/connection_status.json +3 -0
  23. mypyllant-0.9.4/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/mpc.json +3 -0
  24. mypyllant-0.9.4/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/time_zone.json +3 -0
  25. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/find_countries.py +3 -3
  26. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/test_api.py +11 -0
  27. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/utils.py +6 -0
  28. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/utils.py +8 -7
  29. mypyllant-0.9.4/uv.lock +1603 -0
  30. mypyllant-0.9.2/Dockerfile +0 -15
  31. mypyllant-0.9.2/dev-requirements.txt +0 -17
  32. mypyllant-0.9.2/run_venv.sh +0 -9
  33. {mypyllant-0.9.2 → mypyllant-0.9.4}/.devcontainer.json +0 -0
  34. {mypyllant-0.9.2 → mypyllant-0.9.4}/.dockerignore +0 -0
  35. {mypyllant-0.9.2 → mypyllant-0.9.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  36. {mypyllant-0.9.2 → mypyllant-0.9.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  37. {mypyllant-0.9.2 → mypyllant-0.9.4}/.github/dependabot.yml +0 -0
  38. {mypyllant-0.9.2 → mypyllant-0.9.4}/.github/workflows/docker.yaml +0 -0
  39. {mypyllant-0.9.2 → mypyllant-0.9.4}/.gitignore +0 -0
  40. {mypyllant-0.9.2 → mypyllant-0.9.4}/.vscode/settings.json +0 -0
  41. {mypyllant-0.9.2 → mypyllant-0.9.4}/.vscode/tasks.json +0 -0
  42. {mypyllant-0.9.2 → mypyllant-0.9.4}/LICENSE +0 -0
  43. {mypyllant-0.9.2 → mypyllant-0.9.4}/logo.png +0 -0
  44. {mypyllant-0.9.2 → mypyllant-0.9.4}/scripts/precommit +0 -0
  45. {mypyllant-0.9.2 → mypyllant-0.9.4}/scripts/setup +0 -0
  46. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/__init__.py +0 -0
  47. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/export.py +0 -0
  48. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/py.typed +0 -0
  49. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/report.py +0 -0
  50. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/sample.py +0 -0
  51. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/__init__.py +0 -0
  52. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/conftest.py +0 -0
  53. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/connection_status.json +0 -0
  54. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/control_identifier.json +0 -0
  55. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/current_system.json +0 -0
  56. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/diagnostic_trouble_codes.json +0 -0
  57. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/mpc.json +0 -0
  58. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/rbr.json +0 -0
  59. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/rooms.json +0 -0
  60. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/rts.json +0 -0
  61. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/system.json +0 -0
  62. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/fc9ac9ea562b2a82a48708045a7c628e33c0de4b/time_zone.json +0 -0
  63. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense/homes.json +0 -0
  64. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ambisense2.yaml +0 -0
  65. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/connection_status.json +0 -0
  66. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/control_identifier.json +0 -0
  67. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/current_system.json +0 -0
  68. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/device_buckets.json +0 -0
  69. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/diagnostic_trouble_codes.json +0 -0
  70. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/energy_management.json +0 -0
  71. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/mpc.json +0 -0
  72. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/rbr.json +0 -0
  73. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/rooms.json +0 -0
  74. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/rts.json +0 -0
  75. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/ship_self.json +0 -0
  76. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/system.json +0 -0
  77. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/d6f61ab2a0ad4fb8d70e8b7c4faade70f6d2e9fe/time_zone.json +0 -0
  78. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_cooling/homes.json +0 -0
  79. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/connection_status.json +0 -0
  80. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/control_identifier.json +0 -0
  81. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/current_system.json +0 -0
  82. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/device_buckets.json +0 -0
  83. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/diagnostic_trouble_codes.json +0 -0
  84. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/energy_management.json +0 -0
  85. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/mpc.json +0 -0
  86. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/rbr.json +0 -0
  87. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/rooms.json +0 -0
  88. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/rts.json +0 -0
  89. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/ship_self.json +0 -0
  90. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/system.json +0 -0
  91. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/547b5314b17a38830125171aa35b04ad87ef2de6/time_zone.json +0 -0
  92. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/heatpump_heat_curve/homes.json +0 -0
  93. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_cooling.yaml +0 -0
  94. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/1835c08766437e41a9c69bdf454e0ec8bfb0e82f/connection_status.json +0 -0
  95. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/1835c08766437e41a9c69bdf454e0ec8bfb0e82f/control_identifier.json +0 -0
  96. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/1835c08766437e41a9c69bdf454e0ec8bfb0e82f/current_system.json +0 -0
  97. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/1835c08766437e41a9c69bdf454e0ec8bfb0e82f/device_buckets.json +0 -0
  98. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/1835c08766437e41a9c69bdf454e0ec8bfb0e82f/firmware_update_required.json +0 -0
  99. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/1835c08766437e41a9c69bdf454e0ec8bfb0e82f/system.json +0 -0
  100. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/1835c08766437e41a9c69bdf454e0ec8bfb0e82f/time_zone.json +0 -0
  101. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/no_system/homes.json +0 -0
  102. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/connection_status.json +0 -0
  103. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/control_identifier.json +0 -0
  104. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/current_system.json +0 -0
  105. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/device_buckets.json +0 -0
  106. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/diagnostic_trouble_codes.json +0 -0
  107. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/mpc.json +0 -0
  108. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/system.json +0 -0
  109. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/7571042b8af21b829bda040425f77a76706b03d7/time_zone.json +0 -0
  110. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/one_system_two_heatpumps/homes.json +0 -0
  111. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/connection_status.json +0 -0
  112. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/control_identifier.json +0 -0
  113. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/current_system.json +0 -0
  114. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/device_buckets.json +0 -0
  115. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/diagnostic_trouble_codes.json +0 -0
  116. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/mpc.json +0 -0
  117. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/rts.json +0 -0
  118. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/system.json +0 -0
  119. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/3692f21be10859c90ac96ada644badd442d5f9c2/time_zone.json +0 -0
  120. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/rts/homes.json +0 -0
  121. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532 → mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b}/connection_status.json +0 -0
  122. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532 → mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b}/control_identifier.json +0 -0
  123. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532 → mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b}/mpc.json +0 -0
  124. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532 → mypyllant-0.9.4/src/myPyllant/tests/data/systemflow_and_energymanagerstate/dbe49b89a27d4cea8ca1d00634c4a01b}/time_zone.json +0 -0
  125. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532}/connection_status.json +0 -0
  126. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532}/control_identifier.json +0 -0
  127. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532/current_system.json +0 -0
  128. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532/device_buckets.json +0 -0
  129. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532/diagnostic_trouble_codes.json +0 -0
  130. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532}/mpc.json +0 -0
  131. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532/system.json +0 -0
  132. {mypyllant-0.9.2/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/e763593de7370e8d6f90fea50daacd9883e2e532}/time_zone.json +0 -0
  133. {mypyllant-0.9.2/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e}/connection_status.json +0 -0
  134. {mypyllant-0.9.2/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e}/control_identifier.json +0 -0
  135. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e/current_system.json +0 -0
  136. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e/device_buckets.json +0 -0
  137. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e/diagnostic_trouble_codes.json +0 -0
  138. {mypyllant-0.9.2/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e}/mpc.json +0 -0
  139. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e/system.json +0 -0
  140. {mypyllant-0.9.2/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e → mypyllant-0.9.4/src/myPyllant/tests/data/two_systems/eed6a6500c47dc8f433846e845bb662e13fe469e}/time_zone.json +0 -0
  141. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/two_systems/homes.json +0 -0
  142. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e/claims.json +0 -0
  143. {mypyllant-0.9.2/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d → mypyllant-0.9.4/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e}/connection_status.json +0 -0
  144. {mypyllant-0.9.2/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d → mypyllant-0.9.4/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e}/control_identifier.json +0 -0
  145. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e/current_system.json +0 -0
  146. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e/device_buckets.json +0 -0
  147. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e/diagnostic_trouble_codes.json +0 -0
  148. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e/system.json +0 -0
  149. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ventilation/7f73f3852ea7775da288da3e6dc2fac2f298ea3e/time_zone.json +0 -0
  150. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/ventilation/homes.json +0 -0
  151. {mypyllant-0.9.2/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670 → mypyllant-0.9.4/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d}/connection_status.json +0 -0
  152. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d/current_system.json +0 -0
  153. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d/device_buckets.json +0 -0
  154. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d/diagnostic_trouble_codes.json +0 -0
  155. {mypyllant-0.9.2/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670 → mypyllant-0.9.4/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d}/mpc.json +0 -0
  156. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d/rts.json +0 -0
  157. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d/system.json +0 -0
  158. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vr940f/ab2f4a951a7e71431585d56871d447d4ba8be78d/time_zone.json +0 -0
  159. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vr940f/homes.json +0 -0
  160. {mypyllant-0.9.2/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e → mypyllant-0.9.4/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670}/connection_status.json +0 -0
  161. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670/control_identifier.json +0 -0
  162. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670/current_system.json +0 -0
  163. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670/device_buckets.json +0 -0
  164. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670/diagnostic_trouble_codes.json +0 -0
  165. {mypyllant-0.9.2/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e → mypyllant-0.9.4/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670}/mpc.json +0 -0
  166. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670/system.json +0 -0
  167. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700/214ff1c13404bfd2d9350da3bfe86d45b9a7d670/time_zone.json +0 -0
  168. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700/homes.json +0 -0
  169. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_dhw.yaml +0 -0
  170. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/control_identifier.json +0 -0
  171. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/current_system.json +0 -0
  172. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/device_buckets.json +0 -0
  173. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/diagnostic_trouble_codes.json +0 -0
  174. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/rts.json +0 -0
  175. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_flexotherm/4d6354e40143a24b8caa0666a79f705b3df9e59e/system.json +0 -0
  176. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_flexotherm/homes.json +0 -0
  177. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_mpc_rts.yaml +0 -0
  178. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/data/vrc700_ventilation.yaml +0 -0
  179. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/generate_test_data.py +0 -0
  180. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/run_function_test.py +0 -0
  181. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/test_countries.py +0 -0
  182. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/test_export.py +0 -0
  183. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/test_generate_test_data.py +0 -0
  184. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/test_models.py +0 -0
  185. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/test_sample.py +0 -0
  186. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/test_utils.py +0 -0
  187. {mypyllant-0.9.2 → mypyllant-0.9.4}/src/myPyllant/tests/update_sample.py +0 -0
@@ -12,33 +12,39 @@ jobs:
12
12
  permissions:
13
13
  id-token: write
14
14
  steps:
15
- - uses: actions/checkout@v4
16
- - name: Set up Python
15
+ - uses: actions/checkout@v5
16
+
17
+ - name: "Set up Python"
17
18
  uses: actions/setup-python@v5
18
19
  with:
19
- python-version: "3.10"
20
- cache: pip
21
- cache-dependency-path: dev-requirements.txt
22
- - name: Install dependencies
23
- run: |
24
- python -m pip install --upgrade pip
25
- pip install -r dev-requirements.txt
20
+ python-version-file: "pyproject.toml"
21
+
22
+ - name: Install uv
23
+ uses: astral-sh/setup-uv@v6
24
+
25
+ - name: Install the project
26
+ run: uv sync --locked --all-extras --dev
27
+
26
28
  - uses: pre-commit/action@v3.0.0
27
29
  env:
28
30
  SKIP: pytest
31
+
29
32
  - name: set pythonpath
30
33
  run: |
31
34
  echo "PYTHONPATH=${PYTHONPATH}:${PWD}/src" >> $GITHUB_ENV
35
+
32
36
  - name: Test with pytest
33
37
  run: |
34
- pytest
38
+ uv run pytest
39
+
35
40
  - name: Build a binary wheel and a source tarball
36
41
  run: >-
37
- python -m
42
+ uv run -m
38
43
  build
39
44
  --sdist
40
45
  --wheel
41
46
  --outdir dist/
47
+
42
48
  - name: Publish distribution to PyPI
43
49
  if: startsWith(github.ref, 'refs/tags')
44
50
  uses: pypa/gh-action-pypi-publish@release/v1
@@ -1,12 +1,17 @@
1
1
  repos:
2
+ - repo: https://github.com/astral-sh/uv-pre-commit
3
+ # uv version.
4
+ rev: 0.8.24
5
+ hooks:
6
+ - id: uv-lock
2
7
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
- rev: v0.1.9
8
+ rev: v0.13.3
4
9
  hooks:
5
10
  - id: ruff
6
11
  args: [ --fix ]
7
12
  - id: ruff-format
8
13
  - repo: https://github.com/codespell-project/codespell
9
- rev: v2.2.2
14
+ rev: v2.4.1
10
15
  hooks:
11
16
  - id: codespell
12
17
  args:
@@ -15,7 +20,7 @@ repos:
15
20
  - --quiet-level=2
16
21
  exclude_types: [ csv, json ]
17
22
  - repo: https://github.com/pre-commit/pre-commit-hooks
18
- rev: v4.4.0
23
+ rev: v6.0.0
19
24
  hooks:
20
25
  - id: check-executables-have-shebangs
21
26
  - id: check-json
@@ -30,24 +35,22 @@ repos:
30
35
  hooks:
31
36
  - id: mypy
32
37
  name: mypy
33
- entry: run_venv.sh
38
+ entry: uv run mypy
34
39
  args:
35
- - mypy
36
40
  - --pretty
37
41
  - --show-error-codes
38
42
  - --show-error-context
39
43
  - --check-untyped-defs
40
- language: script
44
+ language: system
41
45
  pass_filenames: true
42
46
  files: ^src/.+\.py$
43
47
  exclude: ^src/myPyllant/tests/
44
48
  - id: pytest
45
49
  name: pytest
46
- entry: run_venv.sh
50
+ entry: uv run pytest
47
51
  args:
48
- - pytest
49
52
  - --no-cov
50
53
  - -n4
51
- language: script
54
+ language: system
52
55
  pass_filenames: false
53
56
  files: ^src/.+\.(py|json|yaml)$
@@ -0,0 +1,16 @@
1
+ FROM python:3.13-slim
2
+
3
+ WORKDIR /build
4
+
5
+ RUN apt update \
6
+ && apt install -y git pipx \
7
+ && rm -rf /var/lib/apt/lists/* \
8
+ && pipx install uv
9
+
10
+ ENV PATH="$PATH:/root/.local/bin"
11
+
12
+ COPY . .
13
+
14
+ RUN uv run pre-commit install
15
+
16
+ CMD uv run pytest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: myPyllant
3
- Version: 0.9.2
3
+ Version: 0.9.4
4
4
  Summary: A Python library to interact with the API behind the myVAILLANT app
5
5
  Project-URL: Homepage, https://github.com/signalkraft/myPyllant
6
6
  Project-URL: Bug Tracker, https://github.com/signalkraft/myPyllant/issues
@@ -44,7 +44,7 @@ pip install myPyllant
44
44
  ..or use Docker, if you just want to use it as a CLI tool:
45
45
 
46
46
  ```shell
47
- docker run -ti ghcr.io/signalkraft/mypyllant:latest python3 -m myPyllant.export user password brand --country country
47
+ docker run -ti ghcr.io/signalkraft/mypyllant:latest uv run -m myPyllant.export user password brand --country country
48
48
  ```
49
49
 
50
50
  ## Usage
@@ -143,21 +143,17 @@ See https://github.com/signalkraft/mypyllant-component/blob/main/README.md#teste
143
143
 
144
144
  ## Contributing
145
145
 
146
- > **Warning**
146
+ > [!WARNING]
147
147
  >
148
- > You need at least Python 3.10
148
+ > You need at least Python 3.10 and [uv installed](https://docs.astral.sh/uv/getting-started/installation/)
149
149
 
150
150
  I'm happy to accept PRs, if you run the pre-commit checks and test your changes:
151
151
 
152
152
  ```shell
153
153
  git clone https://github.com/signalkraft/myPyllant.git
154
154
  cd myPyllant
155
- python3 -m venv .venv
156
- source .venv/bin/activate
157
- pip install -r dev-requirements.txt
158
- pip install -e .
159
- pre-commit install
160
- pytest
155
+ uv run pre-commit install
156
+ uv run pytest
161
157
  ```
162
158
 
163
159
  ### Supporting new Countries
@@ -166,7 +162,7 @@ The myVAILLANT app uses Keycloak and OIDC for authentication, with a realm for e
166
162
  There is a script to check which countries are supported:
167
163
 
168
164
  ```shell
169
- python3 -m myPyllant.tests.find_countries
165
+ uv run -m myPyllant.tests.find_countries
170
166
  ```
171
167
 
172
168
  Copy the resulting dictionary into [src/myPyllant/const.py](src/myPyllant/const.py)
@@ -176,14 +172,14 @@ Copy the resulting dictionary into [src/myPyllant/const.py](src/myPyllant/const.
176
172
  Because the myVAILLANT API isn't documented, you can help the development of this library by contributing test data:
177
173
 
178
174
  ```shell
179
- python3 -m myPyllant.tests.generate_test_data -h
180
- python3 -m myPyllant.tests.generate_test_data username password brand --country country
175
+ uv run -m myPyllant.tests.generate_test_data -h
176
+ uv run -m myPyllant.tests.generate_test_data username password brand --country country
181
177
  ```
182
178
 
183
179
  ..or use Docker:
184
180
 
185
181
  ```shell
186
- docker run -v $(pwd)/test_data:/build/src/myPyllant/tests/json -ti ghcr.io/signalkraft/mypyllant:latest python3 -m myPyllant.tests.generate_test_data username password brand --country country
182
+ docker run -v $(pwd)/test_data:/build/src/myPyllant/tests/json -ti ghcr.io/signalkraft/mypyllant:latest uv run -m myPyllant.tests.generate_test_data username password brand --country country
187
183
  ```
188
184
 
189
185
  With docker, the results will be put into `test_data/`.
@@ -28,7 +28,7 @@ pip install myPyllant
28
28
  ..or use Docker, if you just want to use it as a CLI tool:
29
29
 
30
30
  ```shell
31
- docker run -ti ghcr.io/signalkraft/mypyllant:latest python3 -m myPyllant.export user password brand --country country
31
+ docker run -ti ghcr.io/signalkraft/mypyllant:latest uv run -m myPyllant.export user password brand --country country
32
32
  ```
33
33
 
34
34
  ## Usage
@@ -127,21 +127,17 @@ See https://github.com/signalkraft/mypyllant-component/blob/main/README.md#teste
127
127
 
128
128
  ## Contributing
129
129
 
130
- > **Warning**
130
+ > [!WARNING]
131
131
  >
132
- > You need at least Python 3.10
132
+ > You need at least Python 3.10 and [uv installed](https://docs.astral.sh/uv/getting-started/installation/)
133
133
 
134
134
  I'm happy to accept PRs, if you run the pre-commit checks and test your changes:
135
135
 
136
136
  ```shell
137
137
  git clone https://github.com/signalkraft/myPyllant.git
138
138
  cd myPyllant
139
- python3 -m venv .venv
140
- source .venv/bin/activate
141
- pip install -r dev-requirements.txt
142
- pip install -e .
143
- pre-commit install
144
- pytest
139
+ uv run pre-commit install
140
+ uv run pytest
145
141
  ```
146
142
 
147
143
  ### Supporting new Countries
@@ -150,7 +146,7 @@ The myVAILLANT app uses Keycloak and OIDC for authentication, with a realm for e
150
146
  There is a script to check which countries are supported:
151
147
 
152
148
  ```shell
153
- python3 -m myPyllant.tests.find_countries
149
+ uv run -m myPyllant.tests.find_countries
154
150
  ```
155
151
 
156
152
  Copy the resulting dictionary into [src/myPyllant/const.py](src/myPyllant/const.py)
@@ -160,14 +156,14 @@ Copy the resulting dictionary into [src/myPyllant/const.py](src/myPyllant/const.
160
156
  Because the myVAILLANT API isn't documented, you can help the development of this library by contributing test data:
161
157
 
162
158
  ```shell
163
- python3 -m myPyllant.tests.generate_test_data -h
164
- python3 -m myPyllant.tests.generate_test_data username password brand --country country
159
+ uv run -m myPyllant.tests.generate_test_data -h
160
+ uv run -m myPyllant.tests.generate_test_data username password brand --country country
165
161
  ```
166
162
 
167
163
  ..or use Docker:
168
164
 
169
165
  ```shell
170
- docker run -v $(pwd)/test_data:/build/src/myPyllant/tests/json -ti ghcr.io/signalkraft/mypyllant:latest python3 -m myPyllant.tests.generate_test_data username password brand --country country
166
+ docker run -v $(pwd)/test_data:/build/src/myPyllant/tests/json -ti ghcr.io/signalkraft/mypyllant:latest uv run -m myPyllant.tests.generate_test_data username password brand --country country
171
167
  ```
172
168
 
173
169
  With docker, the results will be put into `test_data/`.
@@ -17,6 +17,35 @@ dependencies = [
17
17
  ]
18
18
  dynamic = ["version"]
19
19
 
20
+ [dependency-groups]
21
+ dev = [
22
+ {include-group = "lint"},
23
+ {include-group = "test"}
24
+ ]
25
+
26
+ test = [
27
+ "aioresponses~=0.7.7",
28
+ "pytest>=8.3.0",
29
+ "aiohttp>=3.8.0",
30
+ "pytest-aiohttp~=1.0.5",
31
+ "pytest-asyncio~=0.24.0",
32
+ "pytest-cov~=5.0.0",
33
+ "pytest-mock~=3.14.0",
34
+ "pytest-xdist>=3.3.0",
35
+ "build~=1.2.1",
36
+ "freezegun~=1.5.1",
37
+ "country_list~=1.1.0",
38
+ "requests~=2.31.0",
39
+ "pydantic>=2.10,<3.0",
40
+ ]
41
+
42
+ lint = [
43
+ "pre-commit~=4.0.1",
44
+ "mypy~=1.13.0",
45
+ "types-requests~=2.32.0.20240712",
46
+ "types-PyYAML~=6.0.12.20240917",
47
+ ]
48
+
20
49
  [project.urls]
21
50
  "Homepage" = "https://github.com/signalkraft/myPyllant"
22
51
  "Bug Tracker" = "https://github.com/signalkraft/myPyllant/issues"
@@ -44,7 +73,7 @@ filterwarnings = ["ignore:Inheritance class CountingClientSession from ClientSes
44
73
  omit = ["*/tests/*"]
45
74
 
46
75
  [tool.mypy]
47
- python_version = "3.10"
76
+ python_version = "3.13"
48
77
  pretty = true
49
78
  follow_imports = "silent"
50
79
  warn_incomplete_stub = true
@@ -201,7 +201,7 @@ class MyPyllantAPI:
201
201
  if "Location" not in resp.headers:
202
202
  raise AuthenticationFailed("Login failed")
203
203
  logger.debug(
204
- f'Got location from authorize endpoint: {resp.headers["Location"]}'
204
+ f"Got location from authorize endpoint: {resp.headers['Location']}"
205
205
  )
206
206
  parsed_url = urlparse(resp.headers["Location"])
207
207
  code = parse_qs(parsed_url.query)["code"]
@@ -930,9 +930,9 @@ class MyPyllantAPI:
930
930
  )
931
931
 
932
932
  if start and end:
933
- system.configuration["system"][
934
- "manual_cooling_start_date"
935
- ] = datetime_format(start)
933
+ system.configuration["system"]["manual_cooling_start_date"] = (
934
+ datetime_format(start)
935
+ )
936
936
  system.configuration["system"]["manual_cooling_end_date"] = datetime_format(
937
937
  end
938
938
  )
@@ -1243,7 +1243,7 @@ class MyPyllantAPI:
1243
1243
  try:
1244
1244
  tz = (await response.json())["timeZone"]
1245
1245
  return ZoneInfo(key=tz)
1246
- except KeyError:
1246
+ except (KeyError, TypeError):
1247
1247
  logger.warning("Couldn't get timezone from API")
1248
1248
  return None
1249
1249
 
@@ -11,6 +11,7 @@ BRANDS = {
11
11
  "vaillant": "Vaillant",
12
12
  "sdbg": "Saunier Duval",
13
13
  "bulex": "Bulex",
14
+ "glow-worm": "Glow-worm",
14
15
  }
15
16
  DEFAULT_BRAND = "vaillant"
16
17
  COUNTRIES = {
@@ -135,3 +135,9 @@ class AmbisenseRoomOperationMode(MyPyllantEnum):
135
135
  MANUAL = "MANUAL"
136
136
  OFF = "OFF"
137
137
  AUTO = "AUTO"
138
+
139
+
140
+ class EnergyManagerState(MyPyllantEnum):
141
+ STANDBY = "STANDBY"
142
+ DHW = "DHW"
143
+ HEATING = "HEATING"
@@ -25,9 +25,9 @@ class CountingClientSession(aiohttp.ClientSession):
25
25
  super().__init__(*args, **kwargs)
26
26
  self.request_count = 0
27
27
 
28
- async def _request(self, method, url, **kwargs):
28
+ async def _request(self, method, str_or_url, **kwargs):
29
29
  self.request_count += 1
30
- return await super()._request(method, url, **kwargs)
30
+ return await super()._request(method, str_or_url, **kwargs)
31
31
 
32
32
 
33
33
  async def on_request_start(session, context, params: aiohttp.TraceRequestStartParams):
@@ -27,6 +27,7 @@ from myPyllant.enums import (
27
27
  AmbisenseRoomOperationMode,
28
28
  VentilationOperationModeVRC700,
29
29
  ZoneOperatingType,
30
+ EnergyManagerState,
30
31
  )
31
32
  from myPyllant.utils import datetime_parse, prepare_field_value_for_dict
32
33
 
@@ -551,7 +552,9 @@ class DomesticHotWater(MyPyllantDataClass):
551
552
  system_id: str
552
553
  index: int
553
554
  control_identifier: ControlIdentifier
554
- current_special_function: DHWCurrentSpecialFunction | DHWCurrentSpecialFunctionVRC700
555
+ current_special_function: (
556
+ DHWCurrentSpecialFunction | DHWCurrentSpecialFunctionVRC700
557
+ )
555
558
  max_setpoint: float
556
559
  min_setpoint: float
557
560
  operation_mode_dhw: DHWOperationMode | DHWOperationModeVRC700
@@ -596,7 +599,9 @@ class Ventilation(MyPyllantDataClass):
596
599
  control_identifier: ControlIdentifier
597
600
  maximum_day_fan_stage: int
598
601
  maximum_night_fan_stage: int
599
- operation_mode_ventilation: VentilationOperationMode | VentilationOperationModeVRC700
602
+ operation_mode_ventilation: (
603
+ VentilationOperationMode | VentilationOperationModeVRC700
604
+ )
600
605
  time_program_ventilation: dict
601
606
 
602
607
  @classmethod
@@ -1139,6 +1144,27 @@ class System(MyPyllantDataClass):
1139
1144
  )
1140
1145
  return None
1141
1146
 
1147
+ @property
1148
+ def system_flow_temperature(self) -> float | None:
1149
+ try:
1150
+ return self.state["system"]["system_flow_temperature"]
1151
+ except KeyError:
1152
+ logger.debug(
1153
+ "Could not get system flow temperature from system control state"
1154
+ )
1155
+ return None
1156
+
1157
+ @property
1158
+ def energy_manager_state(self) -> EnergyManagerState | None:
1159
+ try:
1160
+ return EnergyManagerState(self.state["system"]["energy_manager_state"])
1161
+ except (KeyError, ValueError) as e:
1162
+ logger.debug(
1163
+ "Could not get energy manager state from system control state",
1164
+ exc_info=e,
1165
+ )
1166
+ return None
1167
+
1142
1168
  @property
1143
1169
  def is_cooling_allowed(self) -> bool:
1144
1170
  return any([z.is_cooling_allowed for z in self.zones]) or any(
@@ -0,0 +1,96 @@
1
+ {
2
+ "system_type": "HYBRID",
3
+ "has_emf_capable_devices": true,
4
+ "primary_heat_generator": {
5
+ "device_uuid": "40f450aeeee14302bf9e13e01b9d6a0c",
6
+ "ebus_id": "HMU03",
7
+ "spn": 351,
8
+ "bus_coupler_address": 0,
9
+ "article_number": "0010021122",
10
+ "emfValid": true,
11
+ "device_serial_number": "18f34e048e8f49309cb175459642e894",
12
+ "device_type": "HEATPUMP",
13
+ "first_data": "2025-03-07T10:07:08.286Z",
14
+ "last_data": "2025-04-05T21:33:38.372Z",
15
+ "data": [
16
+ {
17
+ "operation_mode": "DOMESTIC_HOT_WATER",
18
+ "value_type": "CONSUMED_ELECTRICAL_ENERGY",
19
+ "calculated": false,
20
+ "from": "2025-03-07T10:07:08.63Z",
21
+ "to": "2025-04-05T21:33:36.965Z"
22
+ },
23
+ {
24
+ "operation_mode": "HEATING",
25
+ "value_type": "CONSUMED_ELECTRICAL_ENERGY",
26
+ "calculated": false,
27
+ "from": "2025-03-07T10:07:08.286Z",
28
+ "to": "2025-04-05T21:33:36.606Z"
29
+ },
30
+ {
31
+ "operation_mode": "DOMESTIC_HOT_WATER",
32
+ "value_type": "EARNED_ENVIRONMENT_ENERGY",
33
+ "calculated": false,
34
+ "from": "2025-03-07T10:07:09.473Z",
35
+ "to": "2025-04-05T21:33:37.997Z"
36
+ },
37
+ {
38
+ "operation_mode": "HEATING",
39
+ "value_type": "EARNED_ENVIRONMENT_ENERGY",
40
+ "calculated": false,
41
+ "from": "2025-03-07T10:07:09.301Z",
42
+ "to": "2025-04-05T21:33:37.715Z"
43
+ },
44
+ {
45
+ "operation_mode": "HEATING",
46
+ "value_type": "HEAT_GENERATED",
47
+ "calculated": true,
48
+ "from": "2025-03-07T10:07:09.301Z",
49
+ "to": "2025-04-05T21:33:36.606Z"
50
+ },
51
+ {
52
+ "operation_mode": "DOMESTIC_HOT_WATER",
53
+ "value_type": "HEAT_GENERATED",
54
+ "calculated": true,
55
+ "from": "2025-03-07T10:07:09.473Z",
56
+ "to": "2025-04-05T21:33:36.965Z"
57
+ }
58
+ ],
59
+ "product_name": "aroTHERM plus"
60
+ },
61
+ "secondary_heat_generators": [
62
+ {
63
+ "device_uuid": "b0855086cd0145eb96f35d9d9d038b20",
64
+ "ebus_id": "BAI00",
65
+ "spn": 375,
66
+ "bus_coupler_address": 24,
67
+ "article_number": "0010023697",
68
+ "emfValid": true,
69
+ "device_serial_number": "529ea1aefc90483f906fc0f844966902",
70
+ "device_type": "BOILER",
71
+ "first_data": "2025-03-07T10:07:10.739Z",
72
+ "last_data": "2025-04-05T21:33:42.044Z",
73
+ "data": [
74
+ {
75
+ "operation_mode": "DOMESTIC_HOT_WATER",
76
+ "value_type": "CONSUMED_ELECTRICAL_ENERGY",
77
+ "calculated": false,
78
+ "from": "2025-03-07T10:07:11.801Z",
79
+ "to": "2025-04-05T21:33:42.044Z"
80
+ },
81
+ {
82
+ "operation_mode": "HEATING",
83
+ "value_type": "CONSUMED_ELECTRICAL_ENERGY",
84
+ "calculated": false,
85
+ "from": "2025-03-07T10:07:11.426Z",
86
+ "to": "2025-04-05T21:33:41.403Z"
87
+ }
88
+ ],
89
+ "product_name": "eloBLOCK VE 28 / 14 EU I"
90
+ }
91
+ ],
92
+ "electric_backup_heater": null,
93
+ "solar_station": null,
94
+ "ventilation": null,
95
+ "gateway": null
96
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "startDate": "2024-10-29T00:00:00Z",
3
+ "endDate": "2024-10-30T00:00:00Z",
4
+ "resolution": "HOUR",
5
+ "operationMode": "COOLING",
6
+ "energyType": "CONSUMED_ELECTRICAL_ENERGY",
7
+ "totalConsumption": 0.0,
8
+ "data": [
9
+ {
10
+ "startDate": "2024-10-29T00:00:00Z",
11
+ "endDate": "2024-10-29T01:00:00Z",
12
+ "value": 0.0
13
+ },
14
+ {
15
+ "startDate": "2024-10-29T01:00:00Z",
16
+ "endDate": "2024-10-29T02:00:00Z",
17
+ "value": 0.0
18
+ },
19
+ {
20
+ "startDate": "2024-10-29T02:00:00Z",
21
+ "endDate": "2024-10-29T03:00:00Z",
22
+ "value": 0.0
23
+ },
24
+ {
25
+ "startDate": "2024-10-29T03:00:00Z",
26
+ "endDate": "2024-10-29T04:00:00Z",
27
+ "value": 0.0
28
+ },
29
+ {
30
+ "startDate": "2024-10-29T04:00:00Z",
31
+ "endDate": "2024-10-29T05:00:00Z",
32
+ "value": 0.0
33
+ },
34
+ {
35
+ "startDate": "2024-10-29T05:00:00Z",
36
+ "endDate": "2024-10-29T06:00:00Z",
37
+ "value": 0.0
38
+ },
39
+ {
40
+ "startDate": "2024-10-29T06:00:00Z",
41
+ "endDate": "2024-10-29T07:00:00Z",
42
+ "value": 0.0
43
+ },
44
+ {
45
+ "startDate": "2024-10-29T07:00:00Z",
46
+ "endDate": "2024-10-29T08:00:00Z",
47
+ "value": 0.0
48
+ },
49
+ {
50
+ "startDate": "2024-10-29T08:00:00Z",
51
+ "endDate": "2024-10-29T09:00:00Z",
52
+ "value": 0.0
53
+ },
54
+ {
55
+ "startDate": "2024-10-29T09:00:00Z",
56
+ "endDate": "2024-10-29T10:00:00Z",
57
+ "value": 0.0
58
+ },
59
+ {
60
+ "startDate": "2024-10-29T10:00:00Z",
61
+ "endDate": "2024-10-29T11:00:00Z",
62
+ "value": 0.0
63
+ },
64
+ {
65
+ "startDate": "2024-10-29T11:00:00Z",
66
+ "endDate": "2024-10-29T12:00:00Z",
67
+ "value": 0.0
68
+ },
69
+ {
70
+ "startDate": "2024-10-29T12:00:00Z",
71
+ "endDate": "2024-10-29T13:00:00Z",
72
+ "value": 0.0
73
+ },
74
+ {
75
+ "startDate": "2024-10-29T13:00:00Z",
76
+ "endDate": "2024-10-29T14:00:00Z",
77
+ "value": 0.0
78
+ },
79
+ {
80
+ "startDate": "2024-10-29T14:00:00Z",
81
+ "endDate": "2024-10-29T15:00:00Z",
82
+ "value": 0.0
83
+ },
84
+ {
85
+ "startDate": "2024-10-29T15:00:00Z",
86
+ "endDate": "2024-10-29T16:00:00Z",
87
+ "value": 0.0
88
+ },
89
+ {
90
+ "startDate": "2024-10-29T16:00:00Z",
91
+ "endDate": "2024-10-29T17:00:00Z",
92
+ "value": 0.0
93
+ },
94
+ {
95
+ "startDate": "2024-10-29T17:00:00Z",
96
+ "endDate": "2024-10-29T18:00:00Z",
97
+ "value": 0.0
98
+ },
99
+ {
100
+ "startDate": "2024-10-29T18:00:00Z",
101
+ "endDate": "2024-10-29T19:00:00Z",
102
+ "value": 0.0
103
+ },
104
+ {
105
+ "startDate": "2024-10-29T19:00:00Z",
106
+ "endDate": "2024-10-29T20:00:00Z",
107
+ "value": 0.0
108
+ },
109
+ {
110
+ "startDate": "2024-10-29T20:00:00Z",
111
+ "endDate": "2024-10-29T21:00:00Z",
112
+ "value": 0.0
113
+ },
114
+ {
115
+ "startDate": "2024-10-29T21:00:00Z",
116
+ "endDate": "2024-10-29T22:00:00Z",
117
+ "value": 0.0
118
+ },
119
+ {
120
+ "startDate": "2024-10-29T22:00:00Z",
121
+ "endDate": "2024-10-29T23:00:00Z",
122
+ "value": 0.0
123
+ },
124
+ {
125
+ "startDate": "2024-10-29T23:00:00Z",
126
+ "endDate": "2024-10-30T00:00:00Z",
127
+ "value": 0.0
128
+ }
129
+ ]
130
+ }
@@ -0,0 +1,32 @@
1
+ [
2
+ {
3
+ "serialNumber": "668e137808d84713adccc7181de2927f",
4
+ "articleNumber": "0020260914",
5
+ "codes": []
6
+ },
7
+ {
8
+ "serialNumber": "18f34e048e8f49309cb175459642e894",
9
+ "articleNumber": "0010021122",
10
+ "codes": []
11
+ },
12
+ {
13
+ "serialNumber": "696a1d22482a4cd3b2af6073e332ebca",
14
+ "articleNumber": "8000015501",
15
+ "codes": []
16
+ },
17
+ {
18
+ "serialNumber": "016bf4d685ba47fdb610c104ba30bbbb",
19
+ "articleNumber": "0010031643",
20
+ "codes": []
21
+ },
22
+ {
23
+ "serialNumber": "690deeb5034641d09a8db61aa79ce906",
24
+ "articleNumber": "0020184846",
25
+ "codes": []
26
+ },
27
+ {
28
+ "serialNumber": "529ea1aefc90483f906fc0f844966902",
29
+ "articleNumber": "0010023697",
30
+ "codes": []
31
+ }
32
+ ]