Skip to content

Commit

Permalink
changes to mqtt discovery
Browse files Browse the repository at this point in the history
  • Loading branch information
dewenni committed Oct 15, 2024
1 parent b720c40 commit 04e1725
Show file tree
Hide file tree
Showing 10 changed files with 199 additions and 65 deletions.
2 changes: 2 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github: dewenni
custom: https://paypal.me/toensjost
33 changes: 33 additions & 0 deletions .github/workflows/create_release_assets.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Create Release

# 1 Erstellt ein Release bei einem Push mit Tag
# 2 liest die changeNew.md und nutzt diese als Beschreibung für das Release
# 3 upload aller Files aus ./release/ als Assets im Release

on:
workflow_dispatch: # Ermöglicht das manuelle Anstoßen des Workflows
push:
tags:
- 'v*.*.*'

jobs:
create_release:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Create release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.ref_name }}
run: |
# Erstelle die Release-Dateien-Variable
files=$(ls ./release/*)
# Erstelle das Release und lade die Assets hoch
gh release create "$tag" $files \
--repo="$GITHUB_REPOSITORY" \
--title="${tag}" \
-F changeNew.md
12 changes: 0 additions & 12 deletions changeNEW

This file was deleted.

12 changes: 12 additions & 0 deletions changeNew.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# v4.1.2

## what's new

There are some changes to MQTT Discovery for Home Assistant

## changelog

- fixes the behavior that the devices are "not available" in Home Assistant, after Home Assistant has restarted. #108
- change control for "summer threshold" from Slider to DropDown
- add support to control "warm water pump circulation" at Home Assistant #110
- add restart button in Home Assistant
2 changes: 1 addition & 1 deletion include/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/*-------------------------------------------------------------------------------
General Configuration
--------------------------------------------------------------------------------*/
#define VERSION "v4.1.1" // internal program version
#define VERSION "v4.1.2" // internal program version

#define WIFI_RECONNECT 10000 // Delay between wifi reconnection tries
#define MQTT_RECONNECT 10000 // Delay between mqtt reconnection tries
Expand Down
27 changes: 0 additions & 27 deletions include/language.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,33 +37,6 @@ typedef struct {
const char *GET_DEBUG_FLT[MAX_LANG] = {"/cmd/getdebugflt", "/cmd/getdebugflt"};
const char *DATETIME[MAX_LANG] = {"/setvalue/setdatetime", "/setvalue/setdatetime"};
const char *OILCNT[MAX_LANG] = {"/setvalue/oilcounter", "/setvalue/oilcounter"};
const char *HC1_OPMODE[MAX_LANG] = {"/setvalue/hk1_betriebsart", "/setvalue/hc1_opmode"};
const char *HC2_OPMODE[MAX_LANG] = {"/setvalue/hk2_betriebsart", "/setvalue/hc2_opmode"};
const char *HC1_PRG[MAX_LANG] = {"/setvalue/hk1_programm", "/setvalue/hc1_program"};
const char *HC2_PRG[MAX_LANG] = {"/setvalue/hk2_programm", "/setvalue/hc2_program"};
const char *HC1_INTERPRET[MAX_LANG] = {"/setvalue/hk1_auslegung", "/setvalue/hc1_interpretation"};
const char *HC2_INTERPRET[MAX_LANG] = {"/setvalue/hk2_auslegung", "/setvalue/hc2_interpretation"};
const char *HC1_SWITCH_OFF_THRESHOLD[MAX_LANG] = {"/setvalue/hk1_aussenhalt_ab", "/setvalue/hc1_switch_off_threshold"};
const char *HC2_SWITCH_OFF_THRESHOLD[MAX_LANG] = {"/setvalue/hk2_aussenhalt_ab", "/setvalue/hc2_switch_off_threshold"};
const char *HC1_DAY_SETPOINT[MAX_LANG] = {"/setvalue/hk1_tag_soll", "/setvalue/hc1_day_setpoint"};
const char *HC2_DAY_SETPOINT[MAX_LANG] = {"/setvalue/hk2_tag_soll", "/setvalue/hc2_day_setpoint"};
const char *HC1_NIGHT_SETPOINT[MAX_LANG] = {"/setvalue/hk1_nacht_soll", "/setvalue/hc1_night_setpoint"};
const char *HC2_NIGHT_SETPOINT[MAX_LANG] = {"/setvalue/hk2_nacht_soll", "/setvalue/hc2_night_setpoint"};
const char *HC1_HOLIDAY_SETPOINT[MAX_LANG] = {"/setvalue/hk1_ferien_soll", "/setvalue/hc1_holiday_setpoint"};
const char *HC2_HOLIDAY_SETPOINT[MAX_LANG] = {"/setvalue/hk2_ferien_soll", "/setvalue/hc2_holiday_setpoint"};
const char *WW_OPMODE[MAX_LANG] = {"/setvalue/ww_betriebsart", "/setvalue/ww_opmode"};
const char *HC1_SUMMER[MAX_LANG] = {"/setvalue/hk1_sommer_ab", "/setvalue/hc1_summer_mode_threshold"};
const char *HC1_FROST[MAX_LANG] = {"/setvalue/hk1_frost_ab", "/setvalue/hc1_frost_mode_threshold"};
const char *HC2_SUMMER[MAX_LANG] = {"/setvalue/hk2_sommer_ab", "/setvalue/hc2_summer_mode_threshold"};
const char *HC2_FROST[MAX_LANG] = {"/setvalue/hk2_frost_ab", "/setvalue/hc2_frost_mode_threshold"};
const char *WW_SETPOINT[MAX_LANG] = {"/setvalue/ww_soll", "/setvalue/ww_setpoint"};
const char *HC1_HOLIDAYS[MAX_LANG] = {"/setvalue/hk1_ferien_tage", "/setvalue/hc1_holidays"};
const char *HC2_HOLIDAYS[MAX_LANG] = {"/setvalue/hk2_ferien_tage", "/setvalue/hc2_holidays"};
const char *WW_PUMP_CYCLES[MAX_LANG] = {"/setvalue/ww_pumpen_zyklus", "/setvalue/ww_pump_cycles"};
const char *HC1_SWITCH_ON_TEMP[MAX_LANG] = {"/setvalue/hk1_aufschalttemperatur", "/setvalue/hc1_switch_on_temperature"};
const char *HC2_SWITCH_ON_TEMP[MAX_LANG] = {"/setvalue/hk2_aufschalttemperatur", "/setvalue/hc2_switch_on_temperature"};
const char *HC1_REDUCTION_MODE[MAX_LANG] = {"/setvalue/hk1_absenkungsart", "/setvalue/hc1_reduction_mode"};
const char *HC2_REDUCTION_MODE[MAX_LANG] = {"/setvalue/hk2_absenkungsart", "/setvalue/hc2_reduction_mode"};
} s_mqtt_cmds;

// ======================================================================================
Expand Down
1 change: 1 addition & 0 deletions include/mqttDiscovery.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@

void mqttDiscoverySetup();
void mqttDiscoveryCyclic();
void mqttDiscoverySendConfig();
63 changes: 55 additions & 8 deletions src/mqtt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ void onMqttConnect(bool sessionPresent) {
// ... and resubscribe
mqtt_client.subscribe(addTopic("/cmd/#"), 0);
mqtt_client.subscribe(addTopic("/setvalue/#"), 0);
mqtt_client.subscribe("homeassistant/status", 0);
}

/**
Expand Down Expand Up @@ -176,6 +177,13 @@ void onMqttMessage(char *topic, char *payload, AsyncMqttClientMessageProperties
else if (strcasecmp(topic, addTopic(mqttCmd.OILCNT[config.mqtt.lang])) == 0) {
cmdSetOilmeter(intVal);
}
// homeassistant/status
else if (strcmp(topic, "homeassistant/status") == 0) {
if (config.mqtt.ha_enable && strcmp(payloadCopy, "online") == 0) {
km271Msg(KM_TYP_MESSAGE, "send discovery configuration", "");
mqttDiscoverySendConfig(); // send discovery configuration
}
}

// HK1 Betriebsart
else if (strcasecmp(topic, addCfgCmdTopic(cfgTopics.HC1_OPMODE[config.mqtt.lang])) == 0) {
Expand Down Expand Up @@ -294,15 +302,37 @@ void onMqttMessage(char *topic, char *payload, AsyncMqttClientMessageProperties
}
// HK1 Sommer-Ab Temperatur
else if (strcasecmp(topic, addCfgCmdTopic(cfgTopics.HC1_SUMMER_THRESHOLD[config.mqtt.lang])) == 0) {
km271sendCmd(KM271_SENDCMD_HC1_SUMMER, intVal);
if (isNumber(payloadCopy)) {
km271sendCmd(KM271_SENDCMD_HC1_SUMMER, intVal);
} else {
int targetIndex = -1;
for (int i = 0; i < 9; i++) {
if (strcasecmp(cfgArrays.SUMMER[config.mqtt.lang][i], payloadCopy) == 0) {
targetIndex = i + 9; // Values are 9..31 and array index is 0..22 - index 0 = value 9 / index 22 = value 31
break;
}
}
km271sendCmd(KM271_SENDCMD_HC1_SUMMER, targetIndex);
}
}
// HK1 Frost-Ab Temperatur
else if (strcasecmp(topic, addCfgCmdTopic(cfgTopics.HC1_FROST_THRESHOLD[config.mqtt.lang])) == 0) {
km271sendCmd(KM271_SENDCMD_HC1_FROST, intVal);
}
// HK2 Sommer-Ab Temperatur
else if (strcasecmp(topic, addCfgCmdTopic(cfgTopics.HC2_SUMMER_THRESHOLD[config.mqtt.lang])) == 0) {
km271sendCmd(KM271_SENDCMD_HC2_SUMMER, intVal);
if (isNumber(payloadCopy)) {
km271sendCmd(KM271_SENDCMD_HC2_SUMMER, intVal);
} else {
int targetIndex = -1;
for (int i = 0; i < 9; i++) {
if (strcasecmp(cfgArrays.SUMMER[config.mqtt.lang][i], payloadCopy) == 0) {
targetIndex = i + 9; // Values are 9..31 and array index is 0..22 - index 0 = value 9 / index 22 = value 31
break;
}
}
km271sendCmd(KM271_SENDCMD_HC2_SUMMER, targetIndex);
}
}
// HK2 Frost-Ab Temperatur
else if (strcasecmp(topic, addCfgCmdTopic(cfgTopics.HC2_FROST_THRESHOLD[config.mqtt.lang])) == 0) {
Expand All @@ -322,7 +352,18 @@ void onMqttMessage(char *topic, char *payload, AsyncMqttClientMessageProperties
}
// WW Pump Cycles
else if (strcasecmp(topic, addCfgCmdTopic(cfgTopics.WW_CIRCULATION[config.mqtt.lang])) == 0) {
km271sendCmd(KM271_SENDCMD_WW_PUMP_CYCLES, intVal);
if (isNumber(payloadCopy)) {
km271sendCmd(KM271_SENDCMD_WW_PUMP_CYCLES, intVal);
} else {
int targetIndex = -1;
for (int i = 0; i < 9; i++) {
if (strcasecmp(cfgArrays.CIRC_INTERVAL[config.mqtt.lang][i], payloadCopy) == 0) {
targetIndex = i;
break;
}
}
km271sendCmd(KM271_SENDCMD_WW_PUMP_CYCLES, targetIndex);
}
}
// HK1 Reglereingriff
else if (strcasecmp(topic, addCfgCmdTopic(cfgTopics.HC1_SWITCH_ON_TEMP[config.mqtt.lang])) == 0) {
Expand Down Expand Up @@ -389,10 +430,6 @@ void mqttSetup() {
* *******************************************************************/
void checkMqtt() {

if (mqtt_client.connected() && config.mqtt.ha_enable) {
mqttDiscoverySetup();
}

// automatic reconnect to mqtt broker if connection is lost - try 5 times, then reboot
if (!mqtt_client.connected() && WiFi.isConnected()) {
if (mqtt_retry == 0) {
Expand Down Expand Up @@ -420,17 +457,27 @@ void checkMqtt() {
}
}
}
// send bootup message after restart and established mqtt connection
// send bootup messages after restart and established mqtt connection
if (!bootUpMsgDone && mqtt_client.connected()) {
bootUpMsgDone = true;
char restartReason[64];
char tempMessage[128];
getRestartReason(restartReason, sizeof(restartReason));
snprintf(tempMessage, sizeof(tempMessage), "%s\n(%s)", infoMsg.RESTARTED[config.lang], restartReason);
km271Msg(KM_TYP_MESSAGE, tempMessage, "");

// send initial mqtt discovery messages after restart
if (config.mqtt.ha_enable) {
mqttDiscoverySendConfig();
}
}
// call mqtt cyclic function if activated
if (config.mqtt.ha_enable && mqtt_client.connected()) {
mqttDiscoveryCyclic();
}
}


/**
* *******************************************************************
* @brief MQTT Publish function for external use
Expand Down
Loading

0 comments on commit 04e1725

Please sign in to comment.