From 239d3ca00c549ac8cd0bcc04d09b2d0a4d9668b0 Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Wed, 14 Dec 2022 16:42:11 +0100 Subject: [PATCH] Add QoS option for MQTT subscribe (#14565) Co-authored-by: Bram Kragten --- src/data/mqtt.ts | 4 +- .../mqtt/mqtt-subscribe-card.ts | 48 ++++++++++++++----- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/data/mqtt.ts b/src/data/mqtt.ts index 2cc710fd51..151097bdd6 100644 --- a/src/data/mqtt.ts +++ b/src/data/mqtt.ts @@ -37,11 +37,13 @@ export interface MQTTDeviceDebugInfo { export const subscribeMQTTTopic = ( hass: HomeAssistant, topic: string, - callback: (message: MQTTMessage) => void + callback: (message: MQTTMessage) => void, + qos?: number ) => hass.connection.subscribeMessage(callback, { type: "mqtt/subscribe", topic, + qos, }); export const fetchMQTTDebugInfo = ( diff --git a/src/panels/config/integrations/integration-panels/mqtt/mqtt-subscribe-card.ts b/src/panels/config/integrations/integration-panels/mqtt/mqtt-subscribe-card.ts index 0602b4b698..037cbfef23 100644 --- a/src/panels/config/integrations/integration-panels/mqtt/mqtt-subscribe-card.ts +++ b/src/panels/config/integrations/integration-panels/mqtt/mqtt-subscribe-card.ts @@ -1,17 +1,26 @@ import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { formatTime } from "../../../../../common/datetime/format_time"; import "../../../../../components/ha-card"; +import "../../../../../components/ha-select"; +import "../../../../../components/ha-textfield"; +import { formatTime } from "../../../../../common/datetime/format_time"; import { MQTTMessage, subscribeMQTTTopic } from "../../../../../data/mqtt"; import { HomeAssistant } from "../../../../../types"; +import "@material/mwc-list/mwc-list-item"; +import { LocalStorage } from "../../../../../common/decorators/local-storage"; + +const qosLevel = ["0", "1", "2"]; @customElement("mqtt-subscribe-card") class MqttSubscribeCard extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @state() private _topic = ""; + @LocalStorage("panel-dev-mqtt-topic-subscribe", true, false) + private _topic = ""; + + @LocalStorage("panel-dev-mqtt-qos-subscribe", true, false) + private _qos = "0"; @state() private _subscribed?: () => void; @@ -38,14 +47,23 @@ class MqttSubscribeCard extends LitElement { header=${this.hass.localize("ui.panel.config.mqtt.description_listen")} >
- + @change=${this._handleTopic} + > + ${qosLevel.map( + (qos) => html`${qos}` + )} + = 0 && newValue !== this._qos) { + this._qos = newValue; + } } private async _handleSubmit(): Promise { @@ -94,7 +119,8 @@ class MqttSubscribeCard extends LitElement { this._subscribed = await subscribeMQTTTopic( this.hass!, this._topic, - (message) => this._handleMessage(message) + (message) => this._handleMessage(message), + parseInt(this._qos) ); } } @@ -125,10 +151,6 @@ class MqttSubscribeCard extends LitElement { display: block; padding: 16px; } - paper-input { - display: inline-block; - width: 200px; - } .events { margin: -16px 0; padding: 0 16px;