Créer une entité à partir d'une ligne MQTT

Salutation !

je cherche à afficher dans mon lovelace, la donnée d’une ligne que je recois dans mqtt explorer :

image

{
  "state": {
    "text": "Printing",
    "flags": {
      "operational": true,
      "printing": true,
      "cancelling": false,
      "pausing": false,
      "resuming": false,
      "finishing": false,
      "closedOrError": false,
      "error": false,
      "paused": false,
      "ready": false,
      "sdReady": false
    }
  },
  "job": {
    "file": {
      "name": "cover.gcode",
      "path": "cover.gcode",
      "display": "cover.gcode",
      "origin": "local",
      "size": 1815764,
      "date": 1617553848
    },
    "estimatedPrintTime": 12624.76710764033,
    "averagePrintTime": null,
    "lastPrintTime": null,
    "filament": {
      "tool0": {
        "length": *[u]11455.703890000725[/u]*,
        "volume": 0
      }
    },
   ........

il s’agit de l’attribue « length » , je souhaiterai le voir devenir une entité dans HA exprimé en metre (dans mqtt exprimé en millimetre)

objectif final :
Ayant pour but par la suite que chaque projet d’impression 3D, et cela en fonction de la bobine de filament utilisée, s’additionne et m’avertisse si une impression dépasserai la longueur de filament en stock sur la bobine concerné :
filament noir : 10m + 20m + nouveau projet de 50m = 80m donc OK
filament rouge : 30m + 22m + nouveau projet de 50m = 102m donc NOK
ect …

Je ne m’y connais pas trop en MQTT mais en utilisant la documentation je ferais :

sensor:
  - platform: mqtt
    name: "Longueur Tool0"
    state_topic: "octoPrint/hass/printing"
    value_template: "{{ value_json.job.filament.tool0.length }}"
    json_attributes_topic: "octoPrint/hass/printing"
    json_attributes_template: "{{ value_json.job.filament.tool0 | tojson }}"

et si ça fonctionne alors j’essaierais de multiplier par 0.001 (division par 1000) pour l’avoir en mètre :

sensor:
  - platform: mqtt
    name: "Longueur Tool0"
    state_topic: "octoPrint/hass/printing"
    value_template: "{{ ((value_json.job.filament.tool0.length)|float * 0.001)|round(2) }}"
    json_attributes_topic: "octoPrint/hass/printing"
    json_attributes_template: "{{ value_json.job.filament.tool0 | tojson }}"

Mais je ne suis vraiment pas un grand utilisateur de MQTT (mais ça m’intéresse de savoir faire :upside_down_face: :yum:)

Attendons ceux qui savent… :+1:

2 J'aime

nikel @Clemalex , effectivement savoir où chercher dans la doc et avec la bonne doc ca aide pas mal :slight_smile: le code est bon et la conversion mm en m aussi bien entendu ^^ merci encore

image

1 J'aime