pyjecteur/README.md
2024-10-09 23:46:35 +02:00

2.2 KiB

pyjecteur

Obtenir un nix-shell avec pyjecteur (équivalent d'un virtualenv mais avec nix)

Installer nix (curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install) puis executer

nix-shell -A prod

Documentation rapide

pyjecteur.widget.Widget

Contient la logique d'interaction avec le module DMX-USB. Pour l'utiliser, il suffit d'instancier l'objet puis d'appler la méthode set_dmx:

def set_dmx(self, addr: int, data: bytes, addr_starting: int = 0) -> None:
    """
    Set dmx values that will be sent.

    If `auto_commit` is set to false, to provided configuration won't be
    sent but memorized until the next call to `Widget.commit()` (or a call
    to this function with `auto_commit = True`).
    """

Il existe aussi pyjecteur.dummy.Widget qui ne requiert pas de device physique.

Pour des interactions à plus haut niveau, continuez de lire

pyjecteur.lights.Universe

Objet représentant un Univers.

class Universe:
    """Represents a DMX universe.

    Manages the adress space and responsibles for sending DMX to widget when
    `Universe.update_dmx()` is called.
    """

    def __init__(self, widget):
        """
        Initializes the Universe

        widget must be a class providing `widget.set_dmx(data, address)`
        """

    def register(self, light: "AbstractLight", address: int) -> None:
        """
        Register a light at the specified address
        """

    def update_dmx(self, light: "AbstractLight", data: Union[bytearray, bytes]) -> None:
        """
        Update the dmx data of the specified light
        """

Interéagir avec un projecteur

Globalement, il faut instancier l'objet représentant le projecteur puis l'enregister sur son Univers (Universe.register(light, address), ATTENTION les addresses commencent à 0).

Ensuite il y a deux façon de changer les paramètres:

  1. Changer les attributs (projo.pan = 100)
  2. Changer les addresses directement avec la notation index (change la valeur à l'addresse addresse_projo + index)

Déclaration d'un nouveau type de projecteur

S'inspirer du fichier pyjecteur/fixtures.py