aqhome-cgi: fixed a bug with RGBW values on pages.

This commit is contained in:
Martin Preuss
2025-10-29 23:47:15 +01:00
parent 06d287b53d
commit b4fee78ad8
4 changed files with 45 additions and 11 deletions

View File

@@ -260,36 +260,36 @@ uint32_t AQH_ModDevices_RgbwFromComponents(int r, int g, int b, int w)
{ {
uint32_t colorOut; uint32_t colorOut;
colorOut=((r & 0xff)<<16) | ((g & 0xff)<<24) | (b &0xff) | ((w & 0xff)<<8); colorOut=((r & 0xff)<<16) | ((g & 0xff)<<24) | (b & 0xff) | ((w & 0xff)<<8);
return colorOut; return colorOut;
} }
int AQH_ModDevices_RgbwGetR(uint32_t color) int AQH_ModDevices_RgbwGetR(uint32_t color)
{ { /* GGRRWWBB */
return (color & 0xff0000)>>16; return (color & 0x00ff0000)>>16;
} }
int AQH_ModDevices_RgbwGetG(uint32_t color) int AQH_ModDevices_RgbwGetG(uint32_t color)
{ { /* GGRRWWBB */
return (color & 0xff000000)>>24; return (color & 0xff000000)>>24;
} }
int AQH_ModDevices_RgbwGetB(uint32_t color) int AQH_ModDevices_RgbwGetB(uint32_t color)
{ { /* GGRRWWBB */
return (color & 0xff); return (color & 0x000000ff);
} }
int AQH_ModDevices_RgbwGetW(uint32_t color) int AQH_ModDevices_RgbwGetW(uint32_t color)
{ { /* GGRRWWBB */
return (color & 0xff00)>>8; return (color & 0x0000ff00)>>8;
} }
@@ -485,6 +485,33 @@ int AQH_ModDevices_ValueGetLastDataAsInt(AQH_DATACLIENT *dc, const AQH_VALUE *va
uint32_t AQH_ModDevices_ValueGetLastDataAsUint32(AQH_DATACLIENT *dc, const AQH_VALUE *value, uint32_t defaultValue)
{
const char *sValueSystemName;
uint64_t dataPoints[2];
uint64_t recvdNum;
// uint64_t timestamp;
union {double f; uint64_t i;} u;
uint32_t uintVal;
sValueSystemName=AQH_Value_GetNameForSystem(value);
recvdNum=AQH_DataClient_GetLastData(dc, sValueSystemName, &dataPoints[0], 1);
if (recvdNum>0) {
// timestamp=dataPoints[0];
u.i=dataPoints[1];
uintVal=(uint32_t) u.f;
DBG_ERROR(NULL, "Transformed value %.2f -> %08x", u.f, uintVal);
}
else {
DBG_INFO(NULL, "No last value for \"%s\"", sValueSystemName);
uintVal=defaultValue;
}
return uintVal;
}
AQDG_GRAPH_DATAPAIR_LIST *AQH_ModDevices_RequestDataPairList(AQH_DATACLIENT *dc, const char *systemValueName, AQDG_GRAPH_DATAPAIR_LIST *AQH_ModDevices_RequestDataPairList(AQH_DATACLIENT *dc, const char *systemValueName,
uint64_t tsBegin, uint64_t tsEnd, uint64_t num) uint64_t tsBegin, uint64_t tsEnd, uint64_t num)

View File

@@ -59,6 +59,7 @@ int AQH_ModDevices_RgbwGetW(uint32_t color);
AQH_VALUE *AQH_ModDevices_GetValueForDevice(AQH_DATACLIENT *dc, const char *sDeviceName, const char *sValueName); AQH_VALUE *AQH_ModDevices_GetValueForDevice(AQH_DATACLIENT *dc, const char *sDeviceName, const char *sValueName);
AQH_DEVICE *AQH_ModDevices_GetDevice(AQH_DATACLIENT *dc, const char *sDeviceName); AQH_DEVICE *AQH_ModDevices_GetDevice(AQH_DATACLIENT *dc, const char *sDeviceName);
int AQH_ModDevices_ValueGetLastDataAsInt(AQH_DATACLIENT *dc, const AQH_VALUE *value, int defaultValue); int AQH_ModDevices_ValueGetLastDataAsInt(AQH_DATACLIENT *dc, const AQH_VALUE *value, int defaultValue);
uint32_t AQH_ModDevices_ValueGetLastDataAsUint32(AQH_DATACLIENT *dc, const AQH_VALUE *value, uint32_t defaultValue);
AQDG_GRAPH_DATAPAIR_LIST *AQH_ModDevices_RequestDataPairList(AQH_DATACLIENT *dc, const char *systemValueName, AQDG_GRAPH_DATAPAIR_LIST *AQH_ModDevices_RequestDataPairList(AQH_DATACLIENT *dc, const char *systemValueName,
uint64_t tsBegin, uint64_t tsEnd, uint64_t num); uint64_t tsBegin, uint64_t tsEnd, uint64_t num);

View File

@@ -570,11 +570,11 @@ void _writeActor(AQH_DATACLIENT *dc, const char *sPageId, GWEN_XMLNODE *n, int l
value=AQH_ModDevices_GetValueForDevice(dc, sDeviceName, sValueName); value=AQH_ModDevices_GetValueForDevice(dc, sDeviceName, sValueName);
if (value) { if (value) {
int lastData; uint32_t lastData;
if (layout!=MY_LAYOUT_NONE) if (layout!=MY_LAYOUT_NONE)
GBAS(dbuf, "<td>\n"); GBAS(dbuf, "<td>\n");
lastData=AQH_ModDevices_ValueGetLastDataAsInt(dc, value, 0); lastData=AQH_ModDevices_ValueGetLastDataAsUint32(dc, value, 0);
GBAS(dbuf,"<form action=\"page.html\" method=\"post\">\n"); GBAS(dbuf,"<form action=\"page.html\" method=\"post\">\n");
GBAA(dbuf, "<input type=\"hidden\" name=\"page\" value=\"%s\">\n", sPageId); GBAA(dbuf, "<input type=\"hidden\" name=\"page\" value=\"%s\">\n", sPageId);
GBAA(dbuf, "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n", sActorId); GBAA(dbuf, "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n", sActorId);
@@ -645,6 +645,12 @@ void _addGraphLink(const char *sPageId, const char *sGraphId, int w, int h, GWEN
void _writeRgbwToForm(const char *sValueName, uint32_t color, GWEN_BUFFER *dbuf) void _writeRgbwToForm(const char *sValueName, uint32_t color, GWEN_BUFFER *dbuf)
{ {
#if 1 #if 1
DBG_ERROR(NULL, "Color=%08x (%d, %d, %d, %d)",
color,
AQH_ModDevices_RgbwGetR(color),
AQH_ModDevices_RgbwGetG(color),
AQH_ModDevices_RgbwGetB(color),
AQH_ModDevices_RgbwGetW(color));
GBAA(dbuf, "<label for=\"%s_r\">R:</label>", sValueName); GBAA(dbuf, "<label for=\"%s_r\">R:</label>", sValueName);
GBAA(dbuf, "<input type=\"number\" min=\"0\" max=\"255\" name=\"%s_r\" id=name=\"%s_r\" value=\"%d\">", GBAA(dbuf, "<input type=\"number\" min=\"0\" max=\"255\" name=\"%s_r\" id=name=\"%s_r\" value=\"%d\">",
sValueName, sValueName, AQH_ModDevices_RgbwGetR(color)); sValueName, sValueName, AQH_ModDevices_RgbwGetR(color));

View File

@@ -80,7 +80,7 @@ void AQH_ModDevices_RunSetDevice(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *
GWEN_BUFFER *pbuf; GWEN_BUFFER *pbuf;
pbuf=GWEN_Buffer_new(0, 256, 0, 1); pbuf=GWEN_Buffer_new(0, 256, 0, 1);
GBAS(pbuf, "Location: /aqbt/devices/device.html?device="); GBAS(pbuf, "Location: device.html?device=");
GWEN_Text_EscapeToBuffer(sDeviceName, pbuf); GWEN_Text_EscapeToBuffer(sDeviceName, pbuf);
AQCGI_Request_AddResponseHeaderData(rq, GWEN_Buffer_GetStart(pbuf)); AQCGI_Request_AddResponseHeaderData(rq, GWEN_Buffer_GetStart(pbuf));
GWEN_Buffer_free(pbuf); GWEN_Buffer_free(pbuf);