zigpy / zigpy-znp

TI CC2531, CC13x2, CC26x2 radio support for Zigpy and ZHA
GNU General Public License v3.0
144 stars 40 forks source link

Dependencies are unclear to me - Docker /alpine/v3.16 #215

Closed tido- closed 1 year ago

tido- commented 1 year ago

I have no knowledge about Python, but it looks to me like a dependency hell. I guess it is really tough for a developer to finally (and each change on python modules) take a fresh copy of a distro and check if dependencies still fit or is it easier to offer a binary? In his write down it sounded like a walk in the park: https://www.reddit.com/r/homeassistant/comments/qzwya8/configuring_zigbee_usb_adapter/

Anyway, my story. I have Home Assistant Supervised (It leverages Docker /alpine/v3.16/, which is managed by the Home Assistant Supervisor) that is running on a Raspbian (Debian Bullseye). docker exec -it homeassistant bash -> so I work directly inside Docker, not via Webinterface of HoAss. I have created the virtual environment, according to the instruction.

You need to install into the alpine OS: apk add gcc-arm-none-eabi gcc musl-dev python3-dev libffi-dev openssl-dev libressl-dev cargo

And then inside the virtual environment:

pip install zigpy-znp  (I got errors on executing)
pip install --upgrade pip
pip install pyparsing pyparser setuptools
pip install zigpy-znp

It stopps now here:

Building wheels for collected packages: cryptography
  Building wheel for cryptography (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for cryptography (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [246 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-armv7l-cpython-310
      creating build/lib.linux-armv7l-cpython-310/cryptography
      copying src/cryptography/utils.py -> build/lib.linux-armv7l-cpython-310/cryptography
      copying src/cryptography/fernet.py -> build/lib.linux-armv7l-cpython-310/cryptography
      copying src/cryptography/exceptions.py -> build/lib.linux-armv7l-cpython-310/cryptography
      copying src/cryptography/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography
      copying src/cryptography/__about__.py -> build/lib.linux-armv7l-cpython-310/cryptography
      creating build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/oid.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/ocsp.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/name.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/general_name.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/extensions.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/certificate_transparency.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/base.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      copying src/cryptography/x509/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/x509
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat
      copying src/cryptography/hazmat/_oid.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat
      copying src/cryptography/hazmat/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/poly1305.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/padding.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/keywrap.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/hmac.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/hashes.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/constant_time.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/cmac.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/_serialization.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/_cipheralgorithm.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/_asymmetric.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      copying src/cryptography/hazmat/primitives/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings
      copying src/cryptography/hazmat/bindings/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends
      copying src/cryptography/hazmat/backends/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/twofactor
      copying src/cryptography/hazmat/primitives/twofactor/totp.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/twofactor
      copying src/cryptography/hazmat/primitives/twofactor/hotp.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/twofactor
      copying src/cryptography/hazmat/primitives/twofactor/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/twofactor
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/serialization
      copying src/cryptography/hazmat/primitives/serialization/ssh.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/serialization
      copying src/cryptography/hazmat/primitives/serialization/pkcs7.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/serialization
      copying src/cryptography/hazmat/primitives/serialization/pkcs12.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/serialization
      copying src/cryptography/hazmat/primitives/serialization/base.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/serialization
      copying src/cryptography/hazmat/primitives/serialization/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/serialization
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      copying src/cryptography/hazmat/primitives/kdf/x963kdf.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      copying src/cryptography/hazmat/primitives/kdf/scrypt.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      copying src/cryptography/hazmat/primitives/kdf/pbkdf2.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      copying src/cryptography/hazmat/primitives/kdf/kbkdf.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      copying src/cryptography/hazmat/primitives/kdf/hkdf.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      copying src/cryptography/hazmat/primitives/kdf/concatkdf.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      copying src/cryptography/hazmat/primitives/kdf/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/kdf
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/ciphers
      copying src/cryptography/hazmat/primitives/ciphers/modes.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/ciphers
      copying src/cryptography/hazmat/primitives/ciphers/base.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/ciphers
      copying src/cryptography/hazmat/primitives/ciphers/algorithms.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/ciphers
      copying src/cryptography/hazmat/primitives/ciphers/aead.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/ciphers
      copying src/cryptography/hazmat/primitives/ciphers/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/ciphers
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/x448.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/x25519.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/utils.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/types.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/rsa.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/padding.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/ed448.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/ed25519.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/ec.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/dsa.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/dh.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      copying src/cryptography/hazmat/primitives/asymmetric/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/primitives/asymmetric
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/openssl
      copying src/cryptography/hazmat/bindings/openssl/binding.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/openssl
      copying src/cryptography/hazmat/bindings/openssl/_conditional.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/openssl
      copying src/cryptography/hazmat/bindings/openssl/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/openssl
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/x448.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/utils.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/rsa.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/poly1305.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/hmac.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/hashes.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/ed448.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/ed25519.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/ec.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/dsa.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/dh.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/decode_asn1.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/cmac.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/ciphers.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/backend.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/aead.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      copying src/cryptography/hazmat/backends/openssl/__init__.py -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/backends/openssl
      running egg_info
      writing src/cryptography.egg-info/PKG-INFO
      writing dependency_links to src/cryptography.egg-info/dependency_links.txt
      writing requirements to src/cryptography.egg-info/requires.txt
      writing top-level names to src/cryptography.egg-info/top_level.txt
      reading manifest file 'src/cryptography.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      no previously-included directories found matching 'docs/_build'
      warning: no previously-included files found matching 'vectors'
      warning: no previously-included files matching '*' found under directory 'vectors'
      warning: no previously-included files matching '*' found under directory '.github'
      warning: no previously-included files found matching 'release.py'
      warning: no previously-included files found matching '.readthedocs.yml'
      warning: no previously-included files found matching 'ci-constraints-requirements.txt'
      warning: no previously-included files found matching 'mypy.ini'
      adding license file 'LICENSE'
      adding license file 'LICENSE.APACHE'
      adding license file 'LICENSE.BSD'
      adding license file 'LICENSE.PSF'
      writing manifest file 'src/cryptography.egg-info/SOURCES.txt'
      /tmp/pip-build-env-_92i56x7/overlay/lib/python3.10/site-packages/setuptools/command/build_py.py:201: _Warning: Package 'cryptography.hazmat.bindings._rust' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'cryptography.hazmat.bindings._rust' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'cryptography.hazmat.bindings._rust' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'cryptography.hazmat.bindings._rust' to be distributed and are
              already explicitly excluding 'cryptography.hazmat.bindings._rust' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      /tmp/pip-build-env-_92i56x7/overlay/lib/python3.10/site-packages/setuptools/command/build_py.py:201: _Warning: Package 'cryptography.hazmat.bindings._rust.openssl' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'cryptography.hazmat.bindings._rust.openssl' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'cryptography.hazmat.bindings._rust.openssl' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'cryptography.hazmat.bindings._rust.openssl' to be distributed and are
              already explicitly excluding 'cryptography.hazmat.bindings._rust.openssl' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      copying src/cryptography/py.typed -> build/lib.linux-armv7l-cpython-310/cryptography
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust
      copying src/cryptography/hazmat/bindings/_rust/__init__.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust
      copying src/cryptography/hazmat/bindings/_rust/_openssl.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust
      copying src/cryptography/hazmat/bindings/_rust/asn1.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust
      copying src/cryptography/hazmat/bindings/_rust/ocsp.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust
      copying src/cryptography/hazmat/bindings/_rust/pkcs7.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust
      copying src/cryptography/hazmat/bindings/_rust/x509.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust
      creating build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust/openssl
      copying src/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust/openssl
      copying src/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi -> build/lib.linux-armv7l-cpython-310/cryptography/hazmat/bindings/_rust/openssl
      running build_ext
      running build_rust
      [RUSTFLAGS=-Ctarget-feature=-crt-static] cargo rustc --lib --message-format=json-render-diagnostics --manifest-path src/rust/Cargo.toml --release -v --features pyo3/abi3-py36 pyo3/extension-module -- --crate-type cdylib
          Updating crates.io index
      warning: spurious network error (2 tries remaining): failed to close memory window; couldn't find LRU: ; class=Os (2)
      warning: spurious network error (1 tries remaining): failed to close memory window; couldn't find LRU: ; class=Os (2)
      error: failed to get `asn1` as a dependency of package `cryptography-rust v0.1.0 (/tmp/pip-install-igbhwbmc/cryptography_da01a3b43667457c90f3700471c29269/src/rust)`

      Caused by:
        failed to fetch `https://github.com/rust-lang/crates.io-index`

      Caused by:
        failed to close memory window; couldn't find LRU: ; class=Os (2)

          =============================DEBUG ASSISTANCE=============================
          If you are seeing a compilation error please try the following steps to
          successfully install cryptography:
          1) Upgrade to the latest pip and try again. This will fix errors for most
             users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
          2) Read https://cryptography.io/en/latest/installation/ for specific
             instructions for your platform.
          3) Check our frequently asked questions for more information:
             https://cryptography.io/en/latest/faq/
          4) Ensure you have a recent Rust toolchain installed:
             https://cryptography.io/en/latest/installation/#rust

          Python: 3.10.10
          platform: Linux-6.1.21-v7+-armv7l-with
          pip: n/a
          setuptools: 67.7.2
          setuptools_rust: 1.6.0
          rustc: 1.60.0
          =============================DEBUG ASSISTANCE=============================

      error: `cargo rustc --lib --message-format=json-render-diagnostics --manifest-path src/rust/Cargo.toml --release -v --features 'pyo3/abi3-py36 pyo3/extension-module' -- --crate-type cdylib` failed with code 101
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for cryptography
Failed to build cryptography
ERROR: Could not build wheels for cryptography, which is required to install pyproject.toml-based projects

After all, hours of searching and retry, to only reset the NVRAM to issue a new security-key for my CC2531 Zigbee-Stick.

Do you have some guidance to escape this try and error?

puddly commented 1 year ago

I have created the virtual environment, according to the instruction.

Just run the command directly, you don't need to install anything. zigpy-znp is already installed within Home Assistant OS.

Also, you don't actually need to drop into the CLI to perform an energy scan, or to reset anything. Forming a new network with ZHA does both and securely picks a randomly-generated network key, in addition to scanning for a new channel automatically (in 2023.5.0 or above).

tido- commented 1 year ago

@puddly thank you very much indeed and I mean it. I spent at least 6 hours before I wrote this message.

To save others time, I have some suggestions, after understanding it. Don't get mad at me I just try to help. In a situation where I don't know what am I doing I follow your guidance, and this is how it came across for me.

https://github.com/zigpy/zigpy-znp on this README.md it is written:

Home Assistant

Stable releases of zigpy-znp are automatically installed when you install the ZHA component. (To keep the terminology within HA, it is in the menu called integration) so I suggest a change like: Stable releases of zigpy-znp are automatically installed when you install the Zigbee Home Automation (ZHA) integration. At first use of ZHA, I would write it out.

Could you add another line like: So, you can test it right away no further install is needed. In HA you can skip the "installation section" and go to the section: Tools

This is also true for: zigpy-cli README.md On zigpy-cli, a reference that it is already installed is missing here.

I stumbled over "no install is needed", mainly on this site TOOLS.md. https://github.com/zigpy/zigpy-znp/blob/dev/TOOLS.md zigpy-znp is already installed by Home Assistant's ZHA component (To keep the terminology within HA, it is in the menu called integration).

CC2531 if I look straight for this, I am asked one more time to: "Once you are inside of the virtualenv (if you created one)" https://github.com/zigpy/zigpy-znp/blob/dev/TOOLS.md#network-migration-for-coordinator-upgrades

As you have recommended in your post, I unistalled and re-installed ZHA. The third option upon install was to create a new network and a new key :+1:

Thank you for the software, I will now test the "Flash write" on CC2531 :)