OpenHab bugfix, optimization, SCALE_VOLUME_100 opt.

This commit is contained in:
2021-04-09 02:30:41 +03:00
parent 7c642ec286
commit bfb28512cc
19 changed files with 29997 additions and 30011 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -892,7 +892,7 @@ void Input::analogPoll(short cause) {
if ((store->bounce<ANALOG_STATE_ATTEMPTS-1 || mappedInputVal == min || mappedInputVal ==max )&& (inputVal != store->currentValue))//confirmed change
{
onAnalogChanged(mappedInputVal/10.);
onAnalogChanged(itemCmd().Tens(mappedInputVal));
// store->currentValue = mappedInputVal;
store->currentValue = inputVal;
}
@@ -954,12 +954,12 @@ if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,emit->valuestri
}
}
void Input::onAnalogChanged(float newValue) {
debugSerial << F("IN:") << (pin) << F("=") << newValue << endl;
void Input::onAnalogChanged(itemCmd newValue) {
debugSerial << F("IN:") << (pin) << F("="); newValue.debugOut();
// New tyle unified activities
aJsonObject *act = aJson.getObjectItem(inputObj, "act");
executeCommand(act,-1,itemCmd(newValue));
executeCommand(act,-1,newValue);
// Legacy
aJsonObject *item = aJson.getObjectItem(inputObj, "item");
@@ -978,19 +978,15 @@ void Input::onAnalogChanged(float newValue) {
strncpy(addrstr,emit->valuestring,sizeof(addrstr));
if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,emit->valuestring);
char strVal[16];
//itoa(newValue,strVal,10);
printFloatValueToStr(newValue, strVal);
newValue.toString(strVal,sizeof(strVal),SEND_PARAMETERS);
if (mqttClient.connected() && !ethernetIdleCount)
mqttClient.publish(addrstr, strVal, true);
}
if (item && item->type == aJson_String) {
//int intNewValue = round(newValue);
Item it(item->valuestring);
if (it.isValid()) {
//it.Ctrl(0, 1, &intNewValue, true);
it.Ctrl(itemCmd(newValue));
}
if (it.isValid()) it.Ctrl(newValue);
}
}

View File

@@ -20,6 +20,7 @@ e-mail anklimov@gmail.com
#pragma once
#include <aJSON.h>
#include "modules/in_ccs811_hdc1080.h"
#include "itemCmd.h"
#define IN_ACTIVE_HIGH 2 // High level = PUSHED/ CLOSED/ ON othervise :Low Level. Use INPUT mode instead of INPUT_PULLUP for digital pin
#define IN_ANALOG 64 // Analog input
@@ -141,7 +142,7 @@ public:
boolean isValid();
void onContactChanged(int newValue);
void onAnalogChanged(float newValue);
void onAnalogChanged(itemCmd newValue);
int Poll(short cause);
void setup();

View File

@@ -476,12 +476,8 @@ int cmd = txt2cmd(payload);
debugSerial<<F("Txt2Cmd:")<<cmd<<endl;
itemCmd st(ST_VOID,cmd);
bool set255flag=true;
switch (suffixCode) {
case S_NOTFOUND:
set255flag=false;
break;
case S_HSV:
cmd=CMD_HSV;
break;
@@ -526,20 +522,15 @@ st.setSuffix(suffixCode);
switch (i) //Number of params
{
case 1:
if (set255flag) st=Par0;
else st.Percents(Par0.getInt());
st=Par0;
break;
case 2: st.HS(Par0.getInt(),Par[0]);
break;
case 3:
if (set255flag)
st.HSV255(Par0.getInt(),Par[0],Par[1]);
else st.HSV(Par0.getInt(),Par[0],Par[1]);
break;
case 4:
if (set255flag)
st.HSV255(Par0.getInt(),Par[0],Par[1]);
else st.HSV(Par0.getInt(),Par[0],Par[1]);
st.setColorTemp(Par[2]);
break;
default:;
@@ -613,6 +604,7 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
bool chActive = (isActive()>0);
bool toExecute = (chActive>0); // execute if channel is active now
bool scale100 = false;
debugSerial<<endl;
if (itemType != CH_GROUP )
@@ -739,6 +731,7 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
{
case S_NOTFOUND: //For empty (universal) OPENHAB suffix - turn ON/OFF automatically
toExecute=true;
scale100=true; //openHab topic format
if (chActive>0 && !cmd.getInt()) st.Cmd(CMD_OFF);
if (chActive==0 && cmd.getInt()) st.Cmd(CMD_ON);
setCmd(st.getCmd());
@@ -746,16 +739,16 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
// continue processing as SET
case S_SET:
// case S_ESET:
// if previous color was in RGB notation but new value is HSV - discard previous val and change type;
if ((st.getArgType() == ST_RGB || st.getArgType() == ST_RGBW) &&
/*(cmd.getArgType() == ST_HSV ) || */(cmd.getArgType() == ST_HSV255))
(cmd.getArgType() == ST_HSV255))
st.setArgType(cmd.getArgType());
if (itemType == CH_GROUP && cmd.isColor()) st.setArgType(ST_HSV255);//Extend storage for group channel
//Convert value to most approptiate type for channel
st.assignFrom(cmd,getChanType());
if (scale100 || SCALE_VOLUME_100) st.scale100();
st.saveItem(this);
SendStatus(SEND_PARAMETERS | SEND_DEFFERED);
@@ -1178,10 +1171,11 @@ int Item::VacomSetFan(itemCmd st) {
node.begin(addr, modbusSerial);
if (val) {
node.writeSingleRegister(2001 - 1, 4 + 1);//delay(500);
result=node.writeSingleRegister(2001 - 1, 4 + 1);//delay(500);
//node.writeSingleRegister(2001-1,1);
} else node.writeSingleRegister(2001 - 1, 0);
delay(50);
} else result=node.writeSingleRegister(2001 - 1, 0);
delay(100);
if (result == node.ku8MBSuccess) debugSerial << F("MB ok")<<endl;
result = node.writeSingleRegister(2003 - 1, val * 100);
modbusBusy = 0;
@@ -1196,7 +1190,7 @@ int Item::VacomSetFan(itemCmd st) {
///move to float todo
int Item::VacomSetHeat(itemCmd st)
{
int val=st.getPercents();
float val=st.getFloat();
int cmd=st.getCmd();
uint8_t result;
@@ -1229,7 +1223,7 @@ int addr;
break;
default:
regval = round(((float) val - b) * 10 / a);
regval = round(( val - b) * 10 / a);
}
//debugSerial<<regval);
@@ -1659,7 +1653,7 @@ int Item::SendStatus(int sendFlags) {
setTopic(addrstr,sizeof(addrstr),T_OUT);
strncat(addrstr, itemArr->name, sizeof(addrstr)-1);
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS,100);
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS,true);
if (sendFlags & SEND_PARAMETERS && st.getCmd() != CMD_OFF && st.getCmd() != CMD_HALT)
{
@@ -1700,7 +1694,7 @@ int Item::SendStatus(int sendFlags) {
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS|SEND_COMMAND);
break;
default:
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS);
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS,(SCALE_VOLUME_100));
}
switch (st.getArgType()) {
@@ -1708,10 +1702,6 @@ int Item::SendStatus(int sendFlags) {
case ST_RGBW:
strncat_P(addrstr, SET_P, sizeof(addrstr));
break;
// case ST_PERCENTS255:
// case ST_HSV255:
// strncat_P(addrstr, ESET_P, sizeof(addrstr));
// break;
default:
strncat_P(addrstr, SET_P, sizeof(addrstr));
}

View File

@@ -101,6 +101,7 @@ uint8_t itemCmd::getStoragetypeByChanType(short chanType)
case CH_MOTOR:
case CH_PWM:
case CH_RELAY:
case CH_VC:
return ST_PERCENTS255;
break;
default:
@@ -339,7 +340,8 @@ itemCmd itemCmd::assignFrom(itemCmd from, short chanType)
param.v=constrain(from.param.asInt32,0,255);
break;
case ST_TENS:
param.v=map(from.param.asInt32,0,2550,0,255);
param.v=constrain(from.param.asInt32/10,0,255);
break;
case ST_HSV255:
param.h=from.param.h;
param.s=from.param.s;
@@ -458,7 +460,7 @@ itemCmd itemCmd::assignFrom(itemCmd from, short chanType)
switch (from.cmd.itemArgType)
{
case ST_PERCENTS255:
vol=map(from.param.v,0,255,0,100);
vol=from.param.v;
break;
case ST_INT32:
case ST_UINT32:
@@ -965,7 +967,7 @@ int itemCmd::doMappingCmd(aJsonObject *mappingData)
}
char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags, int base )
char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags, bool scale100 )
{
if (!Buffer || !bufLen) return NULL;
@@ -986,7 +988,7 @@ char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags, int base )
{ short colorTemp;
case ST_PERCENTS255:
snprintf(argPtr, bufLen, "%u", map (param.v,0,255,0,base));
snprintf(argPtr, bufLen, "%u", (scale100)?map (param.v,0,255,0,100):param.v);
break;
case ST_UINT32:
snprintf(argPtr, bufLen, "%lu", param.asUint32);
@@ -1000,10 +1002,10 @@ char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags, int base )
case ST_HSV255:
colorTemp=getColorTemp();
if (colorTemp<0)
snprintf(argPtr, bufLen, "%d,%d,%d", param.h, param.s, map (param.v,0,255,0,base));
if (colorTemp<0 || scale100)
snprintf(argPtr, bufLen, "%d,%d,%d", param.h, param.s, (scale100)?map (param.v,0,255,0,100):param.v);
else
snprintf(argPtr, bufLen, "%d,%d,%d,%d", param.h, param.s, map (param.v,0,255,0,base), colorTemp);
snprintf(argPtr, bufLen, "%d,%d,%d,%d", param.h, param.s, (scale100)?map (param.v,0,255,0,100):param.v, colorTemp);
break;
case ST_HS:
@@ -1050,3 +1052,15 @@ char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags, int base )
toString(buf,sizeof(buf));
debugSerial<<buf<<F(" AT:")<<getArgType()<<F(" Suff:")<<getSuffix()<<endl;
}
bool itemCmd::scale100()
{
switch (cmd.itemArgType)
{
case ST_PERCENTS255:
case ST_HSV255:
param.v=constrain(map(param.v,0,100,0,255),0,255);
return true;
}
return false;
}

View File

@@ -210,7 +210,7 @@ public:
uint8_t getCmd();
uint8_t getArgType();
uint8_t getCmdParam();
char * toString(char * Buffer, int bufLen, int sendFlags = SEND_COMMAND | SEND_PARAMETERS, int base = 255);
char * toString(char * Buffer, int bufLen, int sendFlags = SEND_COMMAND | SEND_PARAMETERS, bool scale100 = false);
bool isCommand();
bool isValue();
@@ -224,7 +224,7 @@ public:
int doReverseMapping (aJsonObject *mappingData);
int doMappingCmd(aJsonObject *mappingData);
int doReverseMappingCmd (aJsonObject *mappingData);
bool scale100();
};

View File

@@ -12,6 +12,10 @@
#define CONTROLLER TM1809
#endif
#ifndef SCALE_VOLUME_100
#define SCALE_VOLUME_100 false
#endif
#ifndef DATA_PIN
#define DATA_PIN 4
#endif