Skip to content

Composeur : la configuration d'un ticket en YAML ou JSON - #21

Merged
XNinety9 merged 3 commits into
XNinety9:masterfrom
Matteo-Penaud:copie-home-assistant
Oct 21, 2026
Merged

XNinety9 merged 3 commits into
XNinety9:masterfrom
Matteo-Penaud:copie-home-assistant

Conversation

@Matteo-Penaud

@Matteo-Penaud Matteo-Penaud commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

What and why

Dans le composeur, l'administrateur a un bouton « Afficher la configuration du ticket » (sous les réglages du ticket). Il ouvre le ticket composé en YAML ou en JSON, prêt à copier. On compose et on prévisualise le ticket dans l'appli, puis on le reprend tel quel dans la domotique ou dans un script, sans réécrire le JSON à la main.

  • YAML (par défaut) : l'action Home Assistant, à coller dans une automatisation ou un script.
    • Intégration Printr : l'action printr.print_ticket de l'intégration Printr pour Home Assistant, avec le nom du ticket comme label.
      action: printr.print_ticket
      data:
        label: Brief du matin
        ticket:
          cut: true
          spacing: 1
          blocks:
            - type: title
              text: Bonjour !
              size: 2
            - type: weather
              location: Lyon
              days: 1
    • MQTT, proposé seulement quand le serveur est relié à MQTT : l'action standard mqtt.publish sur <préfixe>/print. Il n'y a rien à installer en dehors de l'intégration MQTT de Home Assistant.
      action: mqtt.publish
      data:
        topic: printr/print
        payload: '{"cut":true,"spacing":1,"blocks":[{"type":"title","text":"Bonjour !","size":2}]}'
  • JSON : le ticket formaté, tel que le prennent l'API HTTP (/print), MQTT (printr/print) et printr print ticket.json.

Le navigateur retient le dernier format choisi.

Réservé à l'administrateur : c'est lui qui branche la domotique. Le reste de la famille compose et imprime sans voir de YAML ni de JSON. La restriction est seulement dans l'interface, et la feuille ne montre que le ticket en cours.

Détails

  • Le YAML est écrit à la main, puisque l'appli n'a pas de dépendances. Une chaîne reste sans guillemets seulement si rien ne peut la faire lire autrement. Sont mis entre apostrophes : yes, on, null, les nombres, les dates (2026-12-25 deviendrait une date), :, #, les tabulations et les espaces en bout de ligne. Les textes sur plusieurs lignes deviennent des blocs littéraux (|, |-, |+).
  • Copie : par l'API presse-papiers quand le navigateur la permet, sinon par le texte sélectionné. L'appli est souvent servie en http:// sur le réseau local, où cette API n'existe pas.
  • /api/status renvoie mqtt_prefix (null sans MQTT), pour que le sujet suive PRINTR_MQTT_PREFIX. Le calcul est sorti dans mqtt::prefix(), qu'utilise aussi le client MQTT, avec un test.
  • Nouvelle icône file-edit (feuille et crayon), dans le style des autres.
  • Le guide (français et anglais, section Home Assistant) et le CHANGELOG présentent la fonction.

À trancher : le guide renvoie vers l'intégration printr-ha-integration, qui est un dépôt tiers (le mien), et l'onglet YAML par défaut repose sur elle. Si tu préfères ne pas la mettre en avant, il suffit de mettre MQTT par défaut et de retirer le lien.

Essais

  • Aller-retour YAML : des tickets piégés passent dans la vraie fonction, et le YAML produit est relu avec PyYAML (YAML 1.1, comme Home Assistant). Les deux formes redonnent exactement le ticket, et le payload MQTT redonne le JSON. Les cas testés : yes, On, nombres, date, URL avec #, apostrophes et guillemets, textes sur plusieurs lignes, indentés, avec espaces finaux, tabulations, \r\n, listes vides, objets imbriqués.
  • Dans Chromium :
    • YAML par défaut, et le choix intégration / MQTT seulement en YAML ;
    • le JSON affiché est valide et redonne le ticket ;
    • le choix du format est gardé quand on rouvre la feuille ;
    • le bouton est visible pour un administrateur et caché pour un autre compte ;
    • la copie met le texte exact dans le presse-papiers, sur localhost avec et sans permission, et en http:// sur une adresse du réseau.
  • Rendu vérifié sur téléphone (390 px) et sur ordinateur.

Checklist

  • cargo fmt, cargo clippy and cargo test pass (the CI checks them too)
  • Tested on a printer or in the emulator (scripts/demo.sh), with a screenshot of the ticket if it changes — aucun rendu de ticket modifié ; appli testée dans Chromium
  • Texts in both languages (French and English, see src/i18n.rs and T() in web/app.js)
  • README / CONTRIBUTING updated if needed — guide et CHANGELOG

🤖 Generated with Claude Code

Un bouton « Afficher le YAML » (feuille et crayon), sous les réglages du ticket, ouvre
le ticket en YAML, prêt à coller dans une automatisation ou un script :

- l'action printr.print_ticket de l'intégration Printr, avec le nom du
  ticket comme label ;
- ou, quand le serveur est relié à MQTT, l'action mqtt.publish qui publie le
  ticket sur <préfixe>/print. /api/status donne ce préfixe (mqtt_prefix),
  calculé par mqtt::prefix(), que le client MQTT utilise aussi.

Le YAML est écrit à la main (l'appli n'a pas de dépendances) : une chaîne
reste nue seulement si rien ne peut la faire lire autrement ; « yes », « on »,
les nombres, les dates, « : », « # », les tabulations passent entre
apostrophes, les textes sur plusieurs lignes en blocs littéraux. Vérifié par
aller-retour avec PyYAML (YAML 1.1, comme Home Assistant).

La copie passe par l'API presse-papiers quand le navigateur la permet, sinon
par le texte sélectionné : l'appli est souvent servie en HTTP sur le réseau
local, où cette API n'existe pas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Matteo-Penaud and others added 2 commits October 21, 2026 19:07
Le bouton devient « Afficher la configuration du ticket », et sa feuille
propose YAML ou JSON :

- YAML : l'action Home Assistant, comme avant (intégration Printr, ou MQTT
  quand le serveur y est relié) ;
- JSON : le ticket formaté, tel que le prennent l'API HTTP (/print), MQTT
  (printr/print) et `printr print`.

Le dernier format choisi est gardé dans le navigateur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le reste de la famille compose et imprime sans voir de YAML ni de JSON :
le bouton n'apparaît que pour l'administrateur, qui branche la domotique.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Matteo-Penaud Matteo-Penaud reopened this Oct 21, 2026
@Matteo-Penaud Matteo-Penaud changed the title Composeur : le YAML d'un ticket pour Home Assistant Composeur : la configuration d'un ticket en YAML ou JSON Oct 21, 2026
@XNinety9
XNinety9 merged commit d7a0c48 into XNinety9:master Oct 21, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants