fix mqtt send knob change

This commit is contained in:
interfisch 2020-05-03 13:20:45 +02:00
parent edff630fb9
commit 8387291255
1 changed files with 23 additions and 13 deletions

View File

@ -28,7 +28,8 @@ void setSelectionChannel(uint8_t i, boolean state);
void setMuteChannel(uint8_t i, boolean state); void setMuteChannel(uint8_t i, boolean state);
void publishCurrentSetVolume(); void publishCurrentSetVolume();
void publishAllStates(int pn, String pTopicname, boolean (*pgetBit) (uint8_t)); void publishAllStates(int pn, String pTopicname, boolean (*pgetBit) (uint8_t));
void changeRelaisByNumber(uint8_t pn, String pTopicPrefix, String pTopic, String pspayload, void (*psetXChannel) (uint8_t, boolean)); void changeRelaisByNumberTopic(uint8_t pn, String pTopicPrefix, String pTopic, String pspayload, void (*psetXChannel) (uint8_t, boolean));
void setRelaisByNumber(uint8_t pn, String pTopicPrefix, uint8_t pnumber, bool pstate, void (*psetXChannel) (uint8_t, boolean));
float getSetVolume(); float getSetVolume();
#define LEDPIN 9 //PB1 = D9 = Pin15 #define LEDPIN 9 //PB1 = D9 = Pin15
@ -304,7 +305,7 @@ void loop() {
case 1: //mute case 1: //mute
if (menu_selectedChannel<=MENU_MAXCHANNEL) { //inside valid range if (menu_selectedChannel<=MENU_MAXCHANNEL) { //inside valid range
//setMuteChannel(menu_selectedChannel,!getMute(menu_selectedChannel)); // mute/unmute menu_selectedChannel //setMuteChannel(menu_selectedChannel,!getMute(menu_selectedChannel)); // mute/unmute menu_selectedChannel
changeRelaisByNumber(NUMMUTECHANNELS,"audiomixer/mute_", ""+menu_selectedChannel, ""+!getMute(menu_selectedChannel), &setMuteChannel); //toggle setRelaisByNumber(NUMMUTECHANNELS,"audiomixer/mute_", menu_selectedChannel, !getMute(menu_selectedChannel), &setMuteChannel); //toggle
}else{ //nothing selected }else{ //nothing selected
menu_mode = 0; //return to volume mode menu_mode = 0; //return to volume mode
} }
@ -313,7 +314,7 @@ void loop() {
case 2: //group selection case 2: //group selection
if (menu_selectedChannel<=MENU_MAXCHANNEL) { //inside valid range if (menu_selectedChannel<=MENU_MAXCHANNEL) { //inside valid range
//setSelectionChannel(menu_selectedChannel,!getSelection(menu_selectedChannel)); // toggle selection menu_selectedChannel //setSelectionChannel(menu_selectedChannel,!getSelection(menu_selectedChannel)); // toggle selection menu_selectedChannel
changeRelaisByNumber(NUMSELECTCHANNELS,"audiomixer/select_", ""+menu_selectedChannel, ""+!getSelection(menu_selectedChannel), &setSelectionChannel); //toggle setRelaisByNumber(NUMSELECTCHANNELS,"audiomixer/select_", menu_selectedChannel, !getSelection(menu_selectedChannel), &setSelectionChannel); //toggle
}else{ //nothing selected }else{ //nothing selected
menu_mode = 0; //return to volume mode menu_mode = 0; //return to volume mode
} }
@ -615,10 +616,10 @@ void callback(char* topic, byte* payload, unsigned int length) {
publishAllStates(NUMSELECTCHANNELS,"select_", &getSelection); publishAllStates(NUMSELECTCHANNELS,"select_", &getSelection);
}else if (String(topic).startsWith("audiomixer/mute_")) { //with range }else if (String(topic).startsWith("audiomixer/mute_")) { //with range
changeRelaisByNumber(NUMMUTECHANNELS,"audiomixer/mute_", topic, spayload, &setMuteChannel); changeRelaisByNumberTopic(NUMMUTECHANNELS,"audiomixer/mute_", topic, spayload, &setMuteChannel);
}else if (String(topic).startsWith("audiomixer/select_")) { }else if (String(topic).startsWith("audiomixer/select_")) {
changeRelaisByNumber(NUMSELECTCHANNELS,"audiomixer/select_", topic, spayload, &setSelectionChannel); changeRelaisByNumberTopic(NUMSELECTCHANNELS,"audiomixer/select_", topic, spayload, &setSelectionChannel);
} }
@ -709,7 +710,7 @@ void publishAllStates(int pn, String pTopicname, boolean (*pgetBit) (uint8_t)){
} }
} }
void changeRelaisByNumber(uint8_t pn, String pTopicPrefix, String pTopic, String pspayload, void (*psetXChannel) (uint8_t, boolean)) void changeRelaisByNumberTopic(uint8_t pn, String pTopicPrefix, String pTopic, String pspayload, void (*psetXChannel) (uint8_t, boolean))
{ {
uint8_t _index=255; uint8_t _index=255;
for (uint8_t i=0; i<pn && _index==255; i++) { for (uint8_t i=0; i<pn && _index==255; i++) {
@ -720,16 +721,25 @@ void changeRelaisByNumber(uint8_t pn, String pTopicPrefix, String pTopic, String
if (_index==255) { if (_index==255) {
Serial.println("Index OOR"); Serial.println("Index OOR");
}else{ //index ok }else{ //index ok
String pub_topic = pTopicPrefix+String(_index); bool _state=false;
if (pspayload.equalsIgnoreCase("false")) { if (pspayload.equalsIgnoreCase("true")) {
psetXChannel(_index,false); _state=true;
mqttClient.publish((char*) pub_topic.c_str(), "false"); }
}else if (pspayload.equalsIgnoreCase("true")) { setRelaisByNumber(pn, pTopicPrefix, _index, _state, psetXChannel);
psetXChannel(_index,true);
mqttClient.publish((char*) pub_topic.c_str(), "true");
} }
} }
void setRelaisByNumber(uint8_t pn, String pTopicPrefix, uint8_t pnumber, bool pstate, void (*psetXChannel) (uint8_t, boolean))
{
String pub_topic = pTopicPrefix+String(pnumber);
psetXChannel(pnumber,pstate);
String _mqttpayload="false";
if (pstate) { //True
_mqttpayload="true";
} }
mqttClient.publish((char*) pub_topic.c_str(), (char*) _mqttpayload.c_str()); //Publish
}
float getSetVolume() { float getSetVolume() {
return map(poti_set,POT_MIN,POT_MAX, 0.0,100.0); //get percentage from set poti value return map(poti_set,POT_MIN,POT_MAX, 0.0,100.0); //get percentage from set poti value