Module Python

Installation

Pour installer ce module, vous pouvez utiliser la commande

python3.14 -m pip install x.phs1903@2

Ou pour installer le module dans un nouvel environnement virtuel,

python3.14 -m pipenv install xphs1903@2

Utilisation

Ce module assume que son compagnon Arduino a aussi été installé. Une fois le programme Arduino inclut en exemple compilé et téléchargé, vous pouvez lancer le programme demo.py ainsi:

python3.14 -m xphs1903

Pour l’inclure à votre projet, utilisez l’énoncé import xphs1903 normal de Python.

Implémentation

Fonctionnalités de base.

class xphs1903.outils.FilCopie(orig: Queue, *args: __annotationlib_name_1__ | Callable)[source]

This constructor should always be called with keyword arguments. Arguments are:

group should be None; reserved for future extension when a ThreadGroup class is implemented.

target is the callable object to be invoked by the run() method. Defaults to None, meaning nothing is called.

name is the thread name. By default, a unique name is constructed of the form « Thread-N » where N is a small decimal number.

args is a list or tuple of arguments for the target invocation. Defaults to ().

kwargs is a dictionary of keyword arguments for the target invocation. Defaults to {}.

context is the contextvars.Context value to use for the thread. The default value is None, which means to check sys.flags.thread_inherit_context. If that flag is true, use a copy of the context of the caller. If false, use an empty context. To explicitly start with an empty context, pass a new instance of contextvars.Context(). To explicitly start with a copy of the current context, pass the value from contextvars.copy_context().

If a subclass overrides the constructor, it must make sure to invoke the base class constructor (Thread.__init__()) before doing anything else to the thread.

Paramètres:
  • orig (Queue)

  • args (__annotationlib_name_1__ | Callable)

join()[source]

Wait until the thread terminates.

This blocks the calling thread until the thread whose join() method is called terminates – either normally or through an unhandled exception or until the optional timeout occurs.

When the timeout argument is present and not None, it should be a floating-point number specifying a timeout for the operation in seconds (or fractions thereof). As join() always returns None, you must call is_alive() after join() to decide whether a timeout happened – if the thread is still alive, the join() call timed out.

When the timeout argument is not present or None, the operation will block until the thread terminates.

A thread can be join()ed many times.

join() raises a RuntimeError if an attempt is made to join the current thread as that would cause a deadlock. It is also an error to join() a thread before it has been started and attempts to do so raises the same exception.

run()[source]

Method representing the thread’s activity.

You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.

xphs1903.outils.paires(x: iter, n: int = 2)[source]

Retourne des tranches de x de taille n.

# Source - https://stackoverflow.com/a/1335618 # Posted by Nadia Alramli, modified by community. See post “Timeline” for change history # Retrieved 2026-05-14, License - CC BY-SA 2.5

list_of_slices = zip(*(iter(the_list),) * slice_size)

Paramètres:
  • x (iter)

  • n (int)

Définitions de base pour les autres modules du paquet xphs1903.

class xphs1903.outils.definitions.ObjetImmuable(cls: type, *args: GenericArgsType, **kargs: GenericKArgsType)[source]

Capsule pour rendre la modification d’un objet peu praticable.

Encapsule un objet pour rendre sa modification impraticable.

C’est une classe de convenance pour plus facilement gérer des objets dont certains paramètres ne devraient pas être modifiés sans grande considération. Le cas d’utilisation précis qui a mené à la création de la classe est celui des lignes de communication série, qui une fois créées, ne devraient pas voir leurs paramètres modifiés sans un changement équivalent pour l’interlocuteur. La solution simple est d’empêcher toute modification après l’initialisation.

Paramètres:
  • cls (type)

  • args (GenericArgsType)

  • kargs (GenericKArgsType)

fixer() None[source]

Rend l’objet immuable.

Type renvoyé:

None

libérer() None[source]

Rend l’objet muable.

Type renvoyé:

None

xphs1903.outils.definitions.estimmuable(obj: ObjetImmuable) bool[source]

Retourne si un objet est actuellement immuable.

Renvoie:

Si un objet est actuellement immuable

Paramètres:

obj (ObjetImmuable)

Type renvoyé:

bool

xphs1903.outils.definitions.immuable(cls: type) type[source]

Retourne une usine d’une version immuable d’un type.

Renvoie:

Une fonction-usine initialisant une version immuable de cls

Paramètres:

cls (type)

Type renvoyé:

type

Exceptions et erreurs du module xphs1903.

exception xphs1903.outils.exceptions.AppareilInexistantOuInvalideError(appareil: str, _type: type)[source]

Erreur de base du module xphs1903.

Paramètres:
exception xphs1903.outils.exceptions.AttributNonModifiableError(obj: ObjetImmuable, attr: str)[source]

Erreur indiquant un accès non-autorisé à un objet immuable.

Paramètres:
Type renvoyé:

None

obj

l’objet immuable

attr

l’attribut

Erreur indiquant un accès non-autorisé à un objet immuable.

exception xphs1903.outils.exceptions.AttributePHS1903Error(msg: str)[source]

Erreur de base du module xphs1903.

Paramètres:

msg (str)

Type renvoyé:

None

exception xphs1903.outils.exceptions.AucunDatumError(args: tuple[Any], kargs: dict[str, Any])[source]

Erreur de base du module xphs1903.

Paramètres:
exception xphs1903.outils.exceptions.BasePHS1903Error(msg: str)[source]

Erreur de base du module xphs1903.

Erreur de base du module xphs1903.

Paramètres:

msg (str)

Type renvoyé:

None

exception xphs1903.outils.exceptions.ChoixInvalideError(selection: int, choix_possibles: list[int])[source]

Erreur indiquant un choix invalide.

Paramètres:
Type renvoyé:

None

sel

sélection invalide

choix

liste des options valides

Erreur indiquant un choix invalide.

exception xphs1903.outils.exceptions.ItemNonModifiableError(obj: ObjetImmuable, key: str)[source]

Erreur indiquant un accès non-autorisé à un objet immuable.

Paramètres:
Type renvoyé:

None

obj

l’objet immuable

key

clé

Erreur indiquant un accès non-autorisé à un objet immuable.

exception xphs1903.outils.exceptions.KeyPHS1903Error(msg: str)[source]

Erreur de base du module xphs1903.

Paramètres:

msg (str)

Type renvoyé:

None

exception xphs1903.outils.exceptions.ObjetImmuableError(obj: ObjetImmuable)[source]

Erreur indiquant un accès non-autorisé à un objet immuable.

Paramètres:

obj (ObjetImmuable)

Type renvoyé:

None

obj

l’objet immuable lié à l’erreur

Décrit l’erreur impliquant obj.

exception xphs1903.outils.exceptions.PasUnNombreEntierError(selection: str)[source]

Erreur indiquant qu” une valeur n’est pas un nombre entier.

Paramètres:

selection (str)

Type renvoyé:

None

sel

sélection invalide

Erreur indiquant qu” une valeur n’est pas un nombre entier.

exception xphs1903.outils.exceptions.RuntimePHS1903Error(msg: str)[source]

Erreur de base du module xphs1903.

Paramètres:

msg (str)

Type renvoyé:

None

exception xphs1903.outils.exceptions.StopLigneDeCommande(commandes: Queue, resultats: Queue)[source]

Erreur de base du module xphs1903.

Paramètres:
  • commandes (Queue)

  • resultats (Queue)

exception xphs1903.outils.exceptions.TypePHS1903Error(msg: str)[source]

Erreur de base du module xphs1903.

Paramètres:

msg (str)

Type renvoyé:

None

exception xphs1903.outils.exceptions.ValuePHS1903Error(msg: str)[source]

Erreur de base du module xphs1903.

Paramètres:

msg (str)

Type renvoyé:

None

Outils de communication par ligne série.

class xphs1903.outils.serie.Commande(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, Any]=<function Commande.<lambda>>)[source]

Décrit une commande à envoyer sur la ligne série.

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (bytes | None)

  • conv (Callable[__annotationlib_name_1__, Any])

cmd: bytes | None = None

La taille attendue de la réponse

description: str = ''

Les octets à transmettre

end: bytes | None = None

La fonction à utiliser pour convertir la réponse

name: str

Une description plus longue de la commande

rep_size: int | None = None

Le caractère de fin de commande et de réponse

property size: int

Calcule la longueur de la réponse.

Renvoie:

La longueur de la réponse en octets

xphs1903.outils.serie.CommandeNulle: Final[Commande] = <<class 'xphs1903.outils.serie.Commande'> None (nulle)>

Commande pour terminer une communication ou un message.

class xphs1903.outils.serie.Commandeln(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: Final[__annotationlib_name_1__] = b'\n', conv: Callable[__annotationlib_name_1__, Any]=<function Commande.<lambda>>)[source]

Commande attendant une ligne comme réponse.

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (Final[__annotationlib_name_1__])

  • conv (Callable[__annotationlib_name_1__, Any])

end: Final[bytes] = b'\n'

La fonction à utiliser pour convertir la réponse

class xphs1903.outils.serie.DemandeDonnées(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: Final[__annotationlib_name_1__] = b'\n', conv: Callable[__annotationlib_name_1__, Datum]=<function grapheurserie_à_pandasserie>)[source]

Commande compatible avec le traceur série Arduino.

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (Final[__annotationlib_name_1__])

  • conv (Callable[__annotationlib_name_1__, Datum])

conv() Datum

Converti les envois de données Arduino en données Pandas.

Le traceur série Arduino accepte la syntaxe spéciale

x:1234 y:235 z:13513

pour afficher plusieurs courbes. Cette fonction permet au programme Python d’accepter la même syntaxe.

Returns

Datum(valeurs, noms): une série Pandas avec les valeurs reçues

Paramètres:

data (bytes)

Type renvoyé:

Datum

end: Final[bytes] = b'\n'

Fonction de conversion en données Pandas

class xphs1903.outils.serie.DemandeOctet(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, __annotationlib_name_2__]=<built-in method from_bytes of type object>)[source]

Commande convertissant les octets en entier sans autre traitement.

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (bytes | None)

  • conv (Callable[__annotationlib_name_1__, __annotationlib_name_2__])

classmethod conv(bytes, byteorder='big', *, signed=False)

Return the integer represented by the given array of bytes.

bytes

Holds the array of bytes to convert. The argument must either support the buffer protocol or be an iterable object producing bytes. Bytes and bytearray are examples of built-in objects that support the buffer protocol.

byteorder

The byte order used to represent the integer. If byteorder is “big”, the most significant byte is at the beginning of the byte array. If byteorder is “little”, the most significant byte is at the end of the byte array. To request the native byte order of the host system, use sys.byteorder as the byte order value. Default is to use “big”.

signed

Indicates whether two’s complement is used to represent the integer.

class xphs1903.outils.serie.FilAnnonce(appareil: LigneSérieImmuable | ListPortInfo | str, commandes: FileCommandes | None = None)[source]

Initialise un fil d’exécution pour la ligne série.

Raises

AppareilInexistantOuInvalideError: si l’appareil n’est pas joignable

Paramètres:
class xphs1903.outils.serie.FilAppelReponse(appareil: LigneSérieImmuable | ListPortInfo | str, commandes: FileCommandes | None = None, resultats: FileRéponses | None = None)[source]

Fil d’exécution pour la communication série.

Initialise un fil d’exécution pour la ligne série.

Raises

AppareilInexistantOuInvalideError: si l’appareil n’est pas joignable

Paramètres:
join(timeout: float | None = 2.0) None[source]

Vide les files et ferme le fil.

Paramètres:

timeout (float | None)

Type renvoyé:

None

read() str[source]

Retourne le dernier résultat reçu.

Returns

str(self): le dernier résultat reçu

Type renvoyé:

str

receive(com: Commande) Réponse[source]

Reçoit une réponse de l’appareil.

Returns

res: la réponse reçue

Paramètres:

com (Commande)

Type renvoyé:

Réponse

rep() None[source]

Read, Evaluate, Print.

Type renvoyé:

None

repl() None[source]

Read, Evaluate, Print, Loop.

Type renvoyé:

None

send() Commande[source]

Envoie une commande à l’appareil.

Raises

StopLigneDeCommande: si la file est fermée et vide

Returns

com: commande envoyée

Type renvoyé:

Commande

write(msg: bytes | str, encoding: str = 'utf-8', nom: str | None = None) None[source]

Ajoute une Commande à la file.

Paramètres:
Type renvoyé:

None

class xphs1903.outils.serie.FilEcoute(appareil: LigneSérieImmuable | ListPortInfo | str, resultats: FileRéponses | None = None)[source]

Initialise un fil d’exécution pour la ligne série.

Raises

AppareilInexistantOuInvalideError: si l’appareil n’est pas joignable

Paramètres:
class xphs1903.outils.serie.FileCommandes(item_type: type[Commande] = <class 'xphs1903.outils.serie.Commande'>)[source]

File (queue) contenant des commandes à envoyer.

File (queue) contenant des commandes à envoyer.

Raises

ValuePHS1903Error: si item_type n’est pas un héritier de Commande

Paramètres:

item_type (type[Commande])

put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, Any]=<function FileCommandes.<lambda>>) Commande[source]

Ajoute un nouvel élément à la file.

Returns

nouv: nouvelle commande ajoutée à la file

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (bytes | None)

  • conv (Callable[__annotationlib_name_1__, Any])

Type renvoyé:

Commande

class xphs1903.outils.serie.FileCommandesNulles(item_type: type[Commande] = <class 'xphs1903.outils.serie.Commande'>)[source]

File (queue) contenant des commandes à envoyer.

Raises

ValuePHS1903Error: si item_type n’est pas un héritier de Commande

Paramètres:

item_type (type[Commande])

put(*args, **kargs) None[source]

Ajoute un nouvel élément à la file.

Returns

nouv: nouvelle commande ajoutée à la file

Type renvoyé:

None

class xphs1903.outils.serie.FileCommandesln[source]

File contenant des Commandeln à envoyer.

File contenant des Commandeln à envoyer.

put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = b'\n', conv: Callable[__annotationlib_name_1__, Any]=<function FileCommandesln.<lambda>>) Commandeln[source]

Ajoute une nouvelle Commandeln à la file.

Returns

Commandeln: la nouvelle commande

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (bytes | None)

  • conv (Callable[__annotationlib_name_1__, Any])

Type renvoyé:

Commandeln

class xphs1903.outils.serie.FileDemandesDonnées[source]

File contenant des DemandeDonnées.

Initialise une file contenant des instances DemandeDonnées.

put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = b'\n', conv: Callable[__annotationlib_name_1__, Any]=<function grapheurserie_à_pandasserie>) DemandeDonnées[source]

Ajoute une nouvelle DemandeDonnées à la file.

Returns

DemandeDonnées: la nouvelle commande

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (bytes | None)

  • conv (Callable[__annotationlib_name_1__, Any])

Type renvoyé:

DemandeDonnées

class xphs1903.outils.serie.FileDemandesOctets[source]

File contenant des commandes à envoyer.

File contenant des commandes à envoyer.

put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, Any]=<built-in method from_bytes of type object>) DemandeOctet[source]

Ajoute une nouvelle DemandeOctet à la liste.

Returns

DemandeOctet: la nouvelle demande

Paramètres:
  • name (str)

  • description (str)

  • cmd (bytes | None)

  • rep_size (int | None)

  • end (bytes | None)

  • conv (Callable[__annotationlib_name_1__, Any])

Type renvoyé:

DemandeOctet

class xphs1903.outils.serie.FileRéponses(item_type: type[Réponse] = <class 'xphs1903.outils.serie.Réponse'>)[source]

File de Réponses.

Initialise une file contenant des instances de Réponse.

Raises

ValuePHS1903Error: si item_type n’hérite pas de Réponse

Paramètres:

item_type (type[Réponse])

put(cmd: Commande, rep: bytes) Réponse[source]

Ajoute une nouvelle Réponse à la file.

Returns

nouv: nouvelle réponse ajoutée à la file

Paramètres:
Type renvoyé:

Réponse

class xphs1903.outils.serie.FileRéponsesNulles(item_type: type[Réponse] = <class 'xphs1903.outils.serie.Réponse'>)[source]

Initialise une file contenant des instances de Réponse.

Raises

ValuePHS1903Error: si item_type n’hérite pas de Réponse

Paramètres:

item_type (type[Réponse])

put(*args, **kargs) None[source]

Ajoute une nouvelle Réponse à la file.

Returns

nouv: nouvelle réponse ajoutée à la file

Type renvoyé:

None

class xphs1903.outils.serie.LigneSérieImmuable(port: str | None, baudrate: int = 9600, bytesize: int = 8, timeout: float = 2.0, **kargs: GenericKArgsType)[source]

Ligne série immuable après l’initialisation.

Ligne série immuable après l’initialisation.

Paramètres:
  • port (str | None)

  • baudrate (int)

  • bytesize (int)

  • timeout (float)

  • kargs (GenericKArgsType)

close() None[source]

Ferme la connexion série.

Type renvoyé:

None

classmethod comports(*, choice: bool = False, cond: Callable[ListPortInfo, __annotationlib_name_1__]=<class 'bool'>, order: Callable[ListPortInfo, __annotationlib_name_1__]=<function LigneSérieImmuable.<lambda>>) list[str] | str[source]

Liste les ports série disponibles.

Liste les ports série disponibles, ou, dans un environnement interactif, avec la condition :var:choice == :bool:True,

demande une entrée à l’utilisateur.

Arguments

choice: False pour obtenir la liste complète des ports disponibles cond: condition que les ports doivent satisfaire

Returns

ports: liste des ports série disponibles ports[sel]: port sélectionné par l’utilisateur

Raises

PasUnNombreEntierError: si la sélection n’est pas un entier ChoixInvalideError: si la sélection de l’utilisateur est invalide3

Paramètres:
  • choice (bool)

  • cond (Callable[ListPortInfo, __annotationlib_name_1__])

  • order (Callable[ListPortInfo, __annotationlib_name_1__])

Type renvoyé:

list[str] | str

property in_waiting: bool

Indique si il y a des octets à lire.

open() None[source]

Ouvre la connexion série.

Type renvoyé:

None

property out_waiting: bool

Indique s’il y a des octets à envoyer.

read(*, n: int | None = None, d: bytes | None = None) bytes[source]

Lis une série d’octets de la ligne série.

Arguments

n: nombre d’octets à lire d: délimiteur de fin de lecture

Returns

msg: message lu en octets

Paramètres:
Type renvoyé:

bytes

write(msg: str | bytes, encoding: str = 'utf-8') int[source]

Envoie une série d’octets sur la ligne série.

Arguments
msg: message à envoyer. Si isinstance(msg, str), il sera converti

selon la valeur d’encoding

encoding: encodage à utiliser pour les conversions de str à bytes

Returns

n: nombre d’octets écrits

Paramètres:
Type renvoyé:

int

class xphs1903.outils.serie.Réponse(cmd: Commande, rep: bytes, res: Any)[source]

Décrit une réponse reçue sur la ligne série.

Paramètres:
cmd: Commande

La réponse brute en octets

rep: bytes

Le résultat de la conversion de rep

property size: int

Calcule la longueur de la réponse.

Renvoie:

La longueur de la réponse en octets.

xphs1903.outils.serie.grapheurserie_à_pandasserie(data: bytes) Datum[source]

Converti les envois de données Arduino en données Pandas.

Le traceur série Arduino accepte la syntaxe spéciale

x:1234 y:235 z:13513

pour afficher plusieurs courbes. Cette fonction permet au programme Python d’accepter la même syntaxe.

Returns

Datum(valeurs, noms): une série Pandas avec les valeurs reçues

Paramètres:

data (bytes)

Type renvoyé:

Datum