Nouvelle card lovelace: Custom element doesn't exist: custom-mqtt-mode-card

Mon problème

Bonjour,
Je débute avec home assistant et j’essaye de créer une custom card, J’ai cette erreur :
une idee ?
Merci d’avance.

image

SNas:volume1$ ls -la configuration.yaml ui-lovelace.yaml www/custom_mqtt_mode_card.js
-rwxrwxrwx+ 1 root root  475 May 25 17:03 configuration.yaml
-rwxrwxrwx+ 1 root root 1789 May 28 19:55 ui-lovelace.yaml
-rwxr-xr-x+ 1 root root 1871 May 25 15:56 www/custom_mqtt_mode_card.js

voici mon fichier de config/configuration.yaml

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
mqtt: !include mqtt.yaml

lovelace:
  mode: yaml
  resources:
    - url: /config/www/custom_mqtt_mode_card.js
      type: js

config/ui-lovelace.yaml:

views:
  - title: Home
    cards:
      - type: 'custom:custom-mqtt-mode-card'
        entity: 'sensor.mqtt_entity'
        state_topic: "zwave/41/64/0/mode"
        command_topic: "zwave/41/64/0/mode/set"
        modes:
          - name: 'Off'
            value: '0'
          - name: 'Heat'
            value: '1'
          - name: 'Eco'
            value: '11'
          - name: 'Max'
            value: '15'
          - name: 'Manual'
            value: '31'

mon config/www/custom_mqtt_mode_card.js:

class CustomMqttModeCard extends HTMLElement {
  set hass(hass) {
    if (!this.content) {
      const card = document.createElement('ha-card');
      this.content = document.createElement('div');
      card.appendChild(this.content);
      this.appendChild(card);
    }

    const entity = hass.states[this.config.entity];
    const modes = this.config.modes;
    const stateTopic = this.config.state_topic;
    const commandTopic = this.config.command_topic;

    if (entity) {
      // Récupération du mode actuel via MQTT
      hass.connection.subscribeMessage((message) => {
        const currentMode = message;
        this.content.innerHTML = `
          <div>${entity.attributes.friendly_name}</div>
          <div>Current Mode: ${currentMode}</div>
          <select id="mode-select">
            ${modes.map(mode => `<option value="${mode.value}">${mode.name}</option>`)}
          </select>
          <button id="set-mode-button">Set Mode</button>
        `;
      }, stateTopic);

      this.content.querySelector('#set-mode-button').addEventListener('click', () => {
        const modeSelect = this.content.querySelector('#mode-select');
        const selectedMode = modeSelect.value;
        hass.callService('mqtt', 'publish', {
          topic: commandTopic,
          payload: selectedMode
        });
      });
    }
  }

  setConfig(config) {
    if (!config.entity) {
      throw new Error('You need to define an entity');
    }
    if (!config.modes) {
      throw new Error('You need to define modes');
    }
    if (!config.state_topic) {
      throw new Error('You need to define a state topic');
    }
    if (!config.command_topic) {
      throw new Error('You need to define a command topic');
    }

    this.config = config;
  }

  getCardSize() {
    return 1;
  }
}

customElements.define('custom-mqtt-mode-card', CustomMqttModeCard);

Ma configuration


System Information

version core-2024.5.4
installation_type Home Assistant Container
dev false
hassio false
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 4.4.302+
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Dashboards
dashboards 3
resources 1
views 4
mode yaml
Recorder
oldest_recorder_run 19 mai 2024 à 20:58
current_recorder_run 25 mai 2024 à 16:56
estimated_db_size 221.63 MiB
database_engine sqlite
database_version 3.44.2

Salut

:scream:

Tu débutes et tu t’attaques direct au mode yaml pour le frontend ???
Sais-tu ce que ça signifie ?

Pour ton problème, essaie ça :

  resources:
    - url: /local/custom_mqtt_mode_card.js
      type: js
1 « J'aime »

:smiley:

Oui oui :slight_smile: pas de probleme , disons que j’ai une card qui manque de commande et j’essaye deseperement de l’ajouter dans une card custom ! voir ici : Ajouter un contrôle sur un équipement zwave via MQTT - #2 par afawaz

mais sinon tu es sur meme s’il n y a meme pas de de /local ??

1 « J'aime »

Oui, je suis sûr, il correspond au répertoire « /www » :slight_smile:

Tu peux avoir activer le mode yaml pour un dashboard spécifique.
Sinon tu vas devoir te taper tout le frontend à la main.

Alors maintenant j’ai une page blanche :slight_smile:
mais au moins il n y a plus d’erreur :smiley:
Ok pour mode yaml pour un dashboard specifique, je vais regarder ca ! m’ai j’aimerais bien au moins activer ma card :slight_smile:

1 « J'aime »

Je t’avais prévenu!
Tu n’as pas besoin du mode yaml pour ajouter une carte custom.

Utilise ça :

lovelace:
  mode: storage
  resources:
    - url: /local/custom_mqtt_mode_card.js
      type: js

Le mode storage m’a remis tout mes equipements dans l’apercu. mais du coup je ne vois pas le miens

Tu devrais créer un nouveau dashboard. Et ensuite tu y mets ce que tu veux.

Un peu de lecture : Débuter avec Home Assistant

Merci je vais regarder,
J’ai deja essayé de creer le custom dashboard avec mon entitee dedans … mais meme resultat …
Y a t’il un tutorial pour une custom card qlq pars ? deja le tuyaux sur /local est pas mal ! il faut vraiment le savoir !
Merci encore

Je viens de regarder ton code, et aussi ton autre sujet.
Ce n’est pas une carte custom dont tu as besoin.
Tu cherches à envoyer des commandes mqtt.
Correct ?

oui correcte , l’ideal serait de modifier l’entite d’origine ( climate ) mais je n’arrive pas a la surcharger :slight_smile:
la je viens de faire ca et sa fonctionne, mais c’est juste pour bidouiller un peu et ca fonctionne :


image

pour faire simple, comment je peux creer mon propre appareil ( ou une card ? ) qui contient plusieurs entites (mqtt ou autre) avec mes propres control mqtt ou autre ?
(Je suis en train de lire la doc) :slight_smile:

Essaie avec le fichier « customize.yaml », regarde ici : Adaptation d'un matériel - #9 par Pulpy-Luke

ok Merci je vais regarder

La lecture continue, quoi qu’il en soit, en parallèle je tente des choses, la customisation a un effet mais je tombe sur les meme probleme quand j’essaye d’utiliser climate avec la creation d’un nouvel appareil :

climate.nodeid_41_nodeid_41_thermostat:
  hvac_modes:
    - name: 'off'
      value: '0'
    - name: 'heat'
      value: '1'
    - name: 'cool'
      value: '31'
  state_topic: "zwave/41/64/0/mode"
  command_topic: "zwave/41/64/0/mode/set"
  payload_off: "off"
  payload_on: "heat"
  qos: 1
  retain: true

image

Les modes sont prises en compte ( 3 boutons ) mais ne sont plus reconnus quand je change leurs valeurs (0/1 et 31):

image

avec:

  hvac_modes:
    - 'off'
    - 'heat'
    - 'cool'

ca fonctionne comme dab:
image

J’ai finalement opte pour HACS/Smart Thermostat with PID controller for Home Assistant, en connectant ce module a une entite « nombre » ( position ) pour piloter ma ou mes vannes via mqtt. fonctionne tres bien.
exemple :

- platform: smart_thermostat
  name: Thermostat Chambre Parent
  unique_id: smart_climate_thermostat_chambre_parent
  heater: input_number.position_thermostat_chambre_parent
  target_sensor: sensor.weather_station_chambre_parent_temperature
  min_temp: 7
  max_temp: 28
  ac_mode: False
  target_temp: 23
  eco_temp: 22
  sleep_temp: 19
  keep_alive:
    seconds: 60
  away_temp: 14
  kp: 50
  ki: 0.004167
  kd: 0
  pwm: 0
  output_max: 99
  output_precision: 0
  sampling_period: 00:05:00

image