added devices, added command getdevices.

This commit is contained in:
Martin Preuss
2023-10-01 23:44:26 +02:00
parent c57472d86e
commit 45da38b64a
26 changed files with 1076 additions and 50 deletions

View File

@@ -29,19 +29,23 @@
<setVar name="local/typefiles" >
value.t2d
device.t2d
</setVar>
<setVar name="local/built_sources" >
value.c
device.c
</setVar>
<setVar name="local/built_headers_pub">
value.h
device.h
</setVar>
<setVar name="local/built_headers_priv" >
value_p.h
device_p.h
</setVar>

View File

@@ -37,6 +37,13 @@
<flags>with_getbymember</flags>
</member>
<member name="driver" type="char_ptr" maxlen="32">
<default>0</default>
<preset>0</preset>
<access>public</access>
<flags>own</flags>
</member>
<member name="roomName" type="char_ptr" maxlen="128">
<default>0</default>
<preset>0</preset>
@@ -94,6 +101,13 @@
<flags>own</flags>
</member>
<member name="timestampCreation" type="uint64_t" maxlen="8" >
<access>public</access>
<flags>none</flags>
<default>0</default>
<preset>0</preset>
</member>
</members>
</type>

View File

@@ -49,6 +49,7 @@ AQH_STORAGE *AQH_Storage_new(void)
AQH_STORAGE *sto;
GWEN_NEW_OBJECT(AQH_STORAGE, sto);
sto->deviceList=AQH_Device_List_new();
sto->valueList=AQH_Value_List_new();
sto->dataFileList=AQH_DataFile_List_new();
@@ -62,6 +63,7 @@ void AQH_Storage_free(AQH_STORAGE *sto)
if (sto) {
AQH_DataFile_List_free(sto->dataFileList);
AQH_Value_List_free(sto->valueList);
AQH_Device_List_free(sto->deviceList);
free(sto->dataFileFolder);
free(sto->stateFile);
@@ -123,6 +125,44 @@ AQH_VALUE *AQH_Storage_GetValueByNameForSystem(const AQH_STORAGE *sto, const cha
void AQH_Storage_AddDevice(AQH_STORAGE *sto, AQH_DEVICE *device)
{
if (sto && device) {
uint64_t id;
id=++(sto->lastDeviceId);
AQH_Device_SetId(device, id);
AQH_Device_List_Add(device, sto->deviceList);
AQH_Storage_AddRuntimeFlags(sto, AQH_STORAGE_RTFLAGS_MODIFIED);
}
}
AQH_DEVICE_LIST *AQH_Storage_GetDeviceList(const AQH_STORAGE *sto)
{
return sto?sto->deviceList:NULL;
}
AQH_DEVICE *AQH_Storage_GetDeviceById(const AQH_STORAGE *sto, uint64_t id)
{
return sto?AQH_Device_List_GetById(sto->deviceList, id):NULL;
}
AQH_DEVICE *AQH_Storage_GetDeviceByNameForSystem(const AQH_STORAGE *sto, const char *s)
{
return sto?AQH_Device_List_GetByNameForSystem(sto->deviceList, s):NULL;
}
uint32_t AQH_Storage_GetRuntimeFlags(const AQH_STORAGE *sto)
{
return sto?sto->runtimeFlags:0;

View File

@@ -31,7 +31,7 @@ typedef struct AQH_STORAGE AQH_STORAGE;
#include "aqhome/data/device.h"
#include "aqhome/data/mqtttopic.h"
#include "aqhome/data/value.h"
#include "aqhome/data/datapoint.h"
#include "aqhome/data/device.h"
#define AQH_STORAGE_RTFLAGS_MODIFIED 0x0001
@@ -54,6 +54,11 @@ AQHOME_API AQH_VALUE_LIST *AQH_Storage_GetValueList(const AQH_STORAGE *sto);
AQHOME_API AQH_VALUE *AQH_Storage_GetValueById(const AQH_STORAGE *sto, uint64_t id);
AQHOME_API AQH_VALUE *AQH_Storage_GetValueByNameForSystem(const AQH_STORAGE *sto, const char *s);
AQHOME_API void AQH_Storage_AddDevice(AQH_STORAGE *sto, AQH_DEVICE *device);
AQHOME_API AQH_DEVICE_LIST *AQH_Storage_GetDeviceList(const AQH_STORAGE *sto);
AQHOME_API AQH_DEVICE *AQH_Storage_GetDeviceById(const AQH_STORAGE *sto, uint64_t id);
AQHOME_API AQH_DEVICE *AQH_Storage_GetDeviceByNameForSystem(const AQH_STORAGE *sto, const char *s);
AQHOME_API const char *AQH_Storage_GetStateFile(const AQH_STORAGE *sto);
AQHOME_API void AQH_Storage_SetStateFile(AQH_STORAGE *sto, const char *s);

View File

@@ -14,17 +14,22 @@
#include "aqhome/data/datafile.h"
#define AQH_STORAGE_XML_ELEMENTNAME_LASTIDS "lastIds"
#define AQH_STORAGE_XML_ELEMENTNAME_LASTIDS "lastIds"
#define AQH_STORAGE_XML_ELEMENTNAME_VALUES "values"
#define AQH_STORAGE_XML_ELEMENTNAME_VALUE "value"
#define AQH_STORAGE_XML_ELEMENTNAME_VALUES "values"
#define AQH_STORAGE_XML_ELEMENTNAME_VALUE "value"
#define AQH_STORAGE_XML_ELEMENTNAME_DEVICES "devices"
#define AQH_STORAGE_XML_ELEMENTNAME_DEVICE "device"
struct AQH_STORAGE {
AQH_VALUE_LIST *valueList;
AQH_DEVICE_LIST *deviceList;
uint64_t lastValueId;
uint64_t lastDeviceId;
char *stateFile;
char *dataFileFolder;

View File

@@ -27,6 +27,7 @@
static void _readLastIdsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
static void _readValuesFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
static void _readDevicesFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
@@ -50,6 +51,7 @@ int AQH_Storage_ReadStateFile(AQH_STORAGE *sto, const char *sFilename)
_readLastIdsFromXml(sto, rootNode);
_readValuesFromXml(sto, rootNode);
_readDevicesFromXml(sto, rootNode);
GWEN_XMLNode_free(rootNode);
@@ -65,6 +67,7 @@ void _readLastIdsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
nLastIds=GWEN_XMLNode_FindFirstTag(rootNode, AQH_STORAGE_XML_ELEMENTNAME_LASTIDS, NULL, NULL);
if (nLastIds) {
sto->lastValueId=GWEN_XMLNode_GetIntValue(nLastIds, "lastValueId", 0);
sto->lastDeviceId=GWEN_XMLNode_GetIntValue(nLastIds, "lastDeviceId", 0);
}
else {
sto->lastValueId=0;
@@ -96,6 +99,29 @@ void _readValuesFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
void _readDevicesFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
{
GWEN_XMLNODE *nDevices;
nDevices=GWEN_XMLNode_FindFirstTag(rootNode, AQH_STORAGE_XML_ELEMENTNAME_DEVICES, NULL, NULL);
if (nDevices) {
GWEN_XMLNODE *nDevice;
nDevice=GWEN_XMLNode_FindFirstTag(nDevices, AQH_STORAGE_XML_ELEMENTNAME_DEVICE, NULL, NULL);
while(nDevice) {
AQH_DEVICE *device;
device=AQH_Device_fromXml(nDevice);
if (device) {
AQH_Device_List_Add(device, sto->deviceList);
}
nDevice=GWEN_XMLNode_FindNextTag(nDevice, AQH_STORAGE_XML_ELEMENTNAME_DEVICE, NULL, NULL);
}
}
}

View File

@@ -32,6 +32,7 @@
static void _writeLastIdsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
static void _writeValuesToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
static void _writeDevicesToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
@@ -49,6 +50,7 @@ int AQH_Storage_WriteStateFile(const AQH_STORAGE *sto, const char *sFilename)
rootNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root");
_writeLastIdsToXml(sto, rootNode);
_writeValuesToXml(sto, rootNode);
_writeDevicesToXml(sto, rootNode);
nbuf=GWEN_Buffer_new(0, 256, 0, 1);
GWEN_Buffer_AppendString(nbuf, sFilename);
@@ -56,7 +58,7 @@ int AQH_Storage_WriteStateFile(const AQH_STORAGE *sto, const char *sFilename)
unlink(GWEN_Buffer_GetStart(nbuf));
rv=GWEN_XMLNode_WriteFile(rootNode,
GWEN_Buffer_GetStart(nbuf),
GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_INDENT);
GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_INDENT);
if (rv<0) {
DBG_ERROR(AQH_LOGDOMAIN, "Error writing XML file \"%s\": %d", GWEN_Buffer_GetStart(nbuf), rv);
GWEN_Buffer_free(nbuf);
@@ -83,6 +85,7 @@ void _writeLastIdsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
nLastIds=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_LASTIDS);
GWEN_XMLNode_SetIntValue(nLastIds, "lastValueId", sto->lastValueId);
GWEN_XMLNode_SetIntValue(nLastIds, "lastDeviceId", sto->lastDeviceId);
GWEN_XMLNode_AddChild(rootNode, nLastIds);
}
@@ -110,6 +113,27 @@ void _writeValuesToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
void _writeDevicesToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
{
GWEN_XMLNODE *nElems;
AQH_DEVICE *elem;
nElems=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_DEVICES);
elem=AQH_Device_List_First(sto->deviceList);
while(elem) {
GWEN_XMLNODE *nElem;
nElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_DEVICE);
AQH_Device_toXml(elem, nElem);
GWEN_XMLNode_AddChild(nElems, nElem);
elem=AQH_Device_List_Next(elem);
}
GWEN_XMLNode_AddChild(rootNode, nElems);
}