Version History =============== 1.15.1 - 2026-01-26 ------------------- - bugfix: remove syntax-warning from error in redaction regex. (#244, #249) - bugfix: corrected typo in documentation (#252) - documentation: reset colors to furo-default for better readability in dark mode 1.15.0 - 2025-05-17 ------------------- - support added for Python 3.14 - FritzConnection: - additional argument `redact_debug_log` (default: False) for optional redacting response in debug output. (#238) (#241) - new method `get_cpu_temperatures()` providing a list of the last recent cpu-temperatures. (Rewrite of #232). - FritzCall: - new attribute `Path` for the class `Call` to access an optional phone message. (#231) - FritzStatus: - new method `get_avm_device_log()` to access system events. Requires FritzOS 8. (#234) - bugfix: in rare cases a session id of None has prevented a successfull request of the http-interface. - **removed**: - `fritzconnection.lib.fritzhomeauto.FritzHomeAutomation.device_informations()`, deprecated in 1.9.0 - `fritzconnection.lib.fritzstatus.FritzStatus.uptime()`, deprecated in 1.9.0 - `fritzconnection.lib.fritzwlan.FritzWLAN.channel_infos()`, deprecated in 1.9.0 1.14.0 - 2024-08-12 ------------------- - support added for Python 3.13 - New FritzTopology module: represents the mesh-topology graph. - FritzWLAN: - internal function `_get_beacon_security()` removed and substituted with a mapping. (#224) - added ability to output QR code as string stream with ANSI or unicode. (#223) - new property `is_hidden` for wlan ssid. Internal use of this property to handle hidden SSID in QR codes. Parameter `hidden` removed from `FritzWLAN.get_wifi_qr_code()`. (#221) - bugfix: fixed potential password leak in QR code for an unencrypted connection. (#225, #226) - FritzHomeAutomation: - bugfix: converting data from actors which are reporting missing data as non integer values. Missing data are now represented by `None`. (#215) - bugfix: some devices may not return system-information the propper way, causing errors on the cli output. In these cases the system-information will get ignored. (#214) - documentation: some typos corrected. (#202, #204) - testing: `tox.ini` removed because of change to `nox`. Change from `pylint` to `ruff` for linting. - **deprecation**: use of the `json` cache-format is discouraged. Use the default pickle-format instead. The highly dynamic TR-064 parser may get an ouverhaul in the future and to reduce the complexity of the parser the support of `json` for caching will be removed. 1.13.2 - 2023-09-17 ------------------- - bugfix: fix a crash in the cache-verification in case the cache is activated in combination with the Fritz!Box default-ip and multiple AVM-devices are connected in the local network, so an arbitrary device may respond (which would also be a bug in applications using fritzconnection anyway) (introduced in version 1.10.0). - bugfix: fix broken reconnection of fritzmonitor in case of socket loss. (#196) - cleaner type-hints for public api. - documentation: Style change to "Furo" and minor content improvements. 1.13.1 - 2023-08-20 ------------------- - bugfix: added a missing import to the `/docs/requirements.in` file to generate the API-documentation on readthedocs.org (introduced in version 1.13.0). 1.13.0 - 2023-08-19 ------------------- - support added for Python 3.12 - support removed for Python 3.6 - type-hints added for the public API. - test-tool changed from `tox` to `nox`. - documentation-structure adapted according to changed requirements by `readthedocs.org`. - command-line interface: the check for a given password has been removed and substituted by a meaningfull error message in case of an authorization failure. Not every service is password-protected and passwords can optional provided by the environment. Therefore there is no need to require a password at cli level. (Motivated by #192) - bugfix: unneeded required password removed from the `fritzstatus` command-line interface. (#192) - bugfix: make `fritzwlan.get_beacon_security()` work with older router models not supporting the `NewX_AVM-DE_PossibleBeaconTypes` argument. (#191) - **deprecation**: `fritzconnection.lib.fritzphonebook.list_phonebooks()` 1.12.2 - 2023-07-09 ------------------- - bugfix in 'setup.py`: add `long_description_content_type="text/markdown"`, because it is not used as default. 1.12.1 - 2023-07-09 ------------------- - FritzCall: - New method `hangup()`. (#184) - FritzHosts: - bugfix: removed issues preventing the method `get_hosts_attributes()` to return a list of dictionaries representing the host-attributes. (#190) 1.12.0 - 2023-03-08 ------------------- - FritzConnection: - New method `call_http()` for accessing the (aha-)http-interface. - bugfix: create cache directory if not existing. (#183) - FritzHttp: - New core module to access the (aha-)http-interface. - FritzHomeAutomation: - New class `HomeAutomationDevice`. Represents properties and state of a home-automation device. - New method `get_homeautomation_device()`. - New method `get_homeautomation_devices()`. - New method `get_device_information_list()`. Substitutes the `device_information()` method. - FritzMonitor: - bugfix: create new socket on lost connection. (#179) - **Deprecations**: - `fritzconnection.lib.fritzhomeauto.FritzHomeAutomation.device_information()` 1.11.0 - 2023-01-28 ------------------- - FritzConnection: - New property `updatecheck` allows access to router attributes without permissions (#168) - Faster cache validation. - Exceptions: - New `FritzAuthorizationError` raised on calling actions without the proper permissions (#170) 1.10.3 - 2022-09-08 ------------------- - upper limit for dependency pinning removed to support installation on more recent environments. 1.10.2 - 2022-09-04 ------------------- - bugfix: missing `self` in `FritzStatus.get_device_info()` (introduced in 1.10.0) (#165) - dependencies pinned for `requests` not supporting Python 3.6 since version 2.28.0 and for `segno` (which still works with EOL versions). 1.10.1 - 2022-09-01 ------------------- - bugfix: cli argument forwarding (introduced in 1.10.0) (#164) - enhancement: cli flag `-y` to suppress cache-verification now implies `-x` (use cache) 1.10.0 - 2022-08-24 ------------------- - FritzConnection: - API cache integration added: for faster start up times the router API can optional get saved in a cache-file. This can save up to several seconds run-time on instantiation. - FritzHosts: - New method `get_hosts_attributes` providing a list of dictionaries with the attribues of all known hosts (#134) - FritzStatus: - New property `update_available` (#156) - New property `connection_service` - New property `has_wan_support` (#162) - New property `has_wan_enabled` (#147) - New property `upnp_enabled()` (#153) - New property `device_has_mesh_support` (#146) - New method `get_default_connection_service` (#146) - New method `get_device_info()` (#155) - FritzWLAN: - QR-code now supports encryption information for the described network by auto-detecting the security settings (which is optional but set to default) (#139) - Testing: - requires opencv to check qr-codes - covering Python 3.11 - New class `ArgumentNamespace` added in `fritzconnection.lib.fritztools` for convenient handling of dictionaries returned from `FritzConnection.call_action()` calls. - Better error message in case application access is disabled (#142) 1.9.1 - 2022-01-17 ------------------ - bugfix: AttributeError in `FritzHomeAutomation.device_information()` removed - bug introduced in 1.9.0 (#138) - enhancement: `FritzWLAN.get_wifi_qr_code()` forwards the optional `security` and `hidden` parameters to `segno`. (#139) 1.9.0 - 2022-01-05 ------------------ - FritzWLAN: - New method `get_wifi_qr_code()` for QR-code creation for wifi-access (#133). Requires `segno` as dependency. See `installation <./install.html>`_ for details. The method is also inherited by FritzGuestWLAN. - New method `channel_info()` (#131) - FritzHomeAutomation: New method `device_information()` (#131) - **Deprecations**: - `fritzconnection.lib.fritzhomeauto.FritzHomeAutomation.device_informations()` - `fritzconnection.lib.fritzstatus.FritzStatus.uptime()` - `fritzconnection.lib.fritzwlan.FritzWLAN.channel_infos()` - Documentation improvements 1.8.0 - 2021-12-27 ------------------ - FritzConnection: new command line option `-R` to reboot the system - FritzHosts: - New method `get_generic_host_entries` returning a generator to iterate over all entries as reported by the method `get_generic_host_entry`. - The methods `get_active_hosts` and `get_hosts_info` provide additional host attributes (#127) - Refactoring of the logging module `fritzconnection.core.logger` (introduced in 1.7.0). Now emitting messages from INFO-level and up by default. - Connection errors with the router raised from the underlying `urllib3` library are caught and raised again as FritzConnectionException preserving the connection error information (#128) 1.7.2 - 2021-11-14 ------------------ - bugfix: logger deactivated by default (#123) 1.7.1 - 2021-10-10 ------------------ - Tests extended for Python 3.10 1.7.0 - 2021-09-25 ------------------ - New FritzWLAN-methods: - `enable` and `disable` to enable and disable a wlan network. - `get_password` and `set_password` to get the current password or set a new one for a wlan network. - New FritzGuestWLAN library class. - New FritzConnection method `reboot`. - New logging module `fritzconnection.core.logger`. 1.6.0 - 2021-07-24 ------------------ - New arguments for FritzConnection: `pool_connections` and `pool_maxsize` to adapt the default urllib3 settings (used by requests). (#114). - New properties `FritzStatus.device_uptime` and `FritzStatus.connection_uptime``; the latter a replacement for `FritzStatus.uptime` – still existing as an alias. (#104) - bugfix: html-escape arguments in case that special characters are allowed by the protocol. (#115) - bugfix: `FritzStatus.bytes_sent` will return the 32 bit value from older Fritz!Box models. (#110) - bugfix: raise `FritzActionError` on accessing the mesh topology information from a device not having accesss to this information. (#107) - adding code-of-conduct and contributing files to the repository. 1.5.0 - 2021-05-01 ------------------ - Compatibility with Fritz!OS 7.24 and newer: takes the last logged in username as default in case that a username is not provided. 1.4.2 - 2021-03-06 ------------------ - bugfix: byte_formatter may return wrong numbers on values < 1 and has raised math domain error on values == 0. (bug introduced with version 1.4.1) (#87) 1.4.1 - 2021-02-13 ------------------ - bugfix: FritzStatus library now returns a 32 bit value for *bytes_received* for older Fritz!OS versions not providing the newer 64 bit information instead of raising an exception. (bug introduced with version 1.3.0) (#82) - change: Output of bitrate changed to log10 based calculation (#45, #52) 1.4.0 - 2020-11-29 ------------------ - New core module fritzmonitor for reporting realtime phone call events (#76). - Library class FritzStatus with additional properties: *attenuation*, *str_attenuation*, *noise_margin* and *str_noise_margin* (#69) - Library class FritzHost with additional method *get_host_name* (#75) - Namespace prefix for xml-arguments removed (#66) - Test extended for Python 3.9 (#73) 1.3.4 - 2020-08-06 ------------------ - bugfix: session ignored timeout settings (#63) 1.3.3 - 2020-07-17 ------------------ - bugfix: soap-xml encoding corrected (#59) - bugfix: soap-xml tag-attribute separation fixed (#60) 1.3.2 - 2020-07-11 ------------------ - bugfix: converting arguments returned from soap calls (#58) 1.3.1 - 2020-06-28 ------------------ - authorisation now supports 'myfritz.net' access (#48) - internal refactorings 1.3.0 - 2020-06-21 ------------------ - Library class FritzStatus reports the sent and received bytes now as 64 bit integers and provides easy access to realtime monitor data. - Library class FritzHost provides more methods to access devices, including *wake on LAN* and net topology information. - Library class FritzPhonebook has a new method *get_all_name_numbers()* to fix a bug of *get_all_names()* reporting just one name in case that a phonebook holds multiple entries of the same name. - Boolean arguments send to the router as *1* and *0* can also be given as the Python datatypes *True* and *False* (#30). - Flag -c added to fritzconnection cli interface to report the complete api. - pip installation no longer includes the tests (#39). - pypi classifier changed to *Development Status :: 5 - Production/Stable* 0.8.5 - 2020-06-01 ------------------ - updates the pinned lxml-dependency from version 4.3.4 to 4.5.1 - last version to support Python 2.7, <=3.5 (no more updates) 1.2.1 - 2020-03-21 ------------------ - Library modules handling complex datatypes (urls) can now reuse fritzconnection sessions. 1.2.0 - 2020-01-07 ------------------ - TLS for router communication added. - Command line tools take the new option -e for encrypted connection. - Sessions added for faster connections (significant speed up for TLS) - Functional tests added addressing a physical router. Skipped if no router present. - Bugfix for rendering the documentation of the FritzPhonebook-API (bug introduced in 1.1.1) 1.1.1 - 2019-12-29 ------------------ - Bugfix in FritzConnection default parameters preventing the usage of library modules (bug introduced in 1.1.0) - Minor bugfix in FritzPhonebook storing image-urls 1.1.0 - 2019-12-28 ------------------ - FritzConnection takes a new optional parameter `timeout` limiting the time waiting for a router response. - FritzPhonebook module rewritten for Python 3 without lxml-dependency and added again to the library (missing in version 1.0). - Library module FritzStatus adapted to Python 3. 1.0.1 - 2019-12-21 ------------------ - Bugfix in fritzinspection for command line based inspection of the Fritz!Box API. 1.0.0 - 2019-12-20 ------------------ - Requires Python 3.6 or newer. The 0.8.x release is the last version supporting Python 2.7 and Python 3 up to 3.5 - The ``lxml`` library is no longer a dependency. - New project layout. Library modules are now located in the new ``lib`` package. - Rewrite of the description parser. - Errors reported by the Fritz!Box are now raising specific exceptions. 0.8.4 - 2019-12-16 ------------------ - Bugfix in connection.reconnect(). This bug has been introduced with version 0.8.0. For versions 0.8.0 to 0.8.3 'reconnect' requires a password because of a changed service call. - Documentation updated. 0.8.3 - 2019-09-09 ------------------ - Fix broken test (new in version 0.8.0) - Minor code enhancements 0.8.2 - 2019-08-27 ------------------ - Unified version numbering of the modules. - ServiceError, ActionError and AuthorizationError are also importable from the package. - Some code cleanup. Changes in the development process: .hgignore removed and .gitignore added, changes in setup.py, readme changed to restructured text. As Atlassian has announced to drop support for mercurial on ``bitbucket`` und will remove the according repositories (in June 2020), development of fritzconnection has converted from ``hg`` to ``git`` and the repository has been transfered to ``github``. Unfortunately the issue- and discussion-history will be lost this way (even by keeping the new git-repository at bitbucket). 0.8.1 - 2019-08-24 ------------------ FritzStatus: bugfix requiring a password in combination with fritzconnection >= 0.8.0 FritzStatus: added the ``external_ipv6`` attribute FritzStatus: added the ``max_linked_bit_rate`` attribute for the physical rate. Also added the ``str_max_linked_bit_rate`` attribute for a more readable output. (password must be provided for these infomations) FritzConnection: added the ``AuthorizationError`` exception. 0.8.0 - 2019-08-20 ------------------ Bugfix how servicenames are extracted from the xml-description files. However, the api has not changed. The requirements are now fixed for lxml (4.3.4) and requests (2.22.0) as these versions are still supporting python 2.7 0.7.1 - 0.7.3 ~ 2019-07-24 -------------------------- Bugfixes, no new features or other changes. 0.7.0 - 2019-07-21 ------------------ FritzConnection does now check for the environment variables ``FRITZ_USER`` and ``FRITZ_PASSWORD`` in case that neither user nor password are given. FritzStatus now accepts user and password as keyword-parameters. Keep in mind, that FritzBoxes may return different information about the status depending whether these are gathered with or without a password. 0.6.5 - 2017-07-12 ------------------ There is a new attribute *package_version*: >>> import fritzconnection >>> fritzconnection.package_version 0.6.5 Because every module of the fritzconnection-package has it's own version, version-history of the package gets confusing over time. From now on every change of the content of the package is indicated by the the package-version. Every unchanged module keeps it's version. So i.e. the recent package-version is 0.6.5 but the fritzconnection-module is still in version 0.6 cause nothing has changed in this module since then. 0.6 --- FritzConnection now uses long qualified names as ``servicename``, i.e. ``WLANConfiguration:1`` or ``WLANConfiguration:2``. So these servicenames can now be used to call actions on different services with the same name: >>> connection = FritzConnection() >>> info = connection.call_action('WANIPConnection:2', 'GetInfo') For backward compatibility servicename-extensions like ':2' can be omitted on calling 'call_action'. In this case FritzConnection will use the extension ':1' as default. On calling unknown services or actions in both cases KeyErrors has been raised. Calling an unknown service (or one unaccessible without a password) will now raise a ``ServiceError``. Calling an invalid action on a service will raise an ``ActionError``. Both Exceptions are Subclasses from the new ``FritzConnectionException``. The Exception classes can get imported from fritzconnection: >>> from fritzconnection import ServiceError, ActionError < 0.6 ----- Continuous update of features and bugfixes since first import at 2013-05-01 on bitbucket using mercurial.