Removed unneeded code.
This commit is contained in:
@@ -63,10 +63,8 @@
|
||||
ipc
|
||||
nodes
|
||||
mqtt
|
||||
http
|
||||
hexfile
|
||||
data
|
||||
service
|
||||
</subdirs>
|
||||
|
||||
|
||||
@@ -75,10 +73,8 @@
|
||||
aqhipc
|
||||
aqhnodes
|
||||
aqhmqtt
|
||||
aqhhttp
|
||||
aqhhexfile
|
||||
aqhdata
|
||||
aqhservice
|
||||
</useTargets>
|
||||
|
||||
<libraries>
|
||||
|
||||
@@ -28,36 +28,20 @@
|
||||
</setVar>
|
||||
|
||||
<setVar name="local/typefiles" >
|
||||
room.t2d
|
||||
device.t2d
|
||||
mqtttopic.t2d
|
||||
value.t2d
|
||||
datapoint.t2d
|
||||
</setVar>
|
||||
|
||||
<setVar name="local/built_sources" >
|
||||
room.c
|
||||
device.c
|
||||
mqtttopic.c
|
||||
value.c
|
||||
datapoint.c
|
||||
</setVar>
|
||||
|
||||
<setVar name="local/built_headers_pub">
|
||||
room.h
|
||||
device.h
|
||||
mqtttopic.h
|
||||
value.h
|
||||
datapoint.h
|
||||
</setVar>
|
||||
|
||||
|
||||
<setVar name="local/built_headers_priv" >
|
||||
room_p.h
|
||||
device_p.h
|
||||
mqtttopic_p.h
|
||||
value_p.h
|
||||
datapoint_p.h
|
||||
</setVar>
|
||||
|
||||
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<?xml?>
|
||||
|
||||
<tm2>
|
||||
<type id="AQH_MQTT_TOPIC" type="pointer">
|
||||
<descr>
|
||||
</descr>
|
||||
<lang id="c">
|
||||
<identifier>AQH_MQTT_TOPIC</identifier>
|
||||
<prefix>AQH_MqttTopic</prefix>
|
||||
<baseFileName>mqtttopic</baseFileName>
|
||||
|
||||
<flags>
|
||||
with_xml
|
||||
with_db
|
||||
with_list1
|
||||
with_list2
|
||||
</flags>
|
||||
|
||||
<headers>
|
||||
<header type="sys" loc="pre">aqhome/api.h</header>
|
||||
</headers>
|
||||
|
||||
<inlines>
|
||||
</inlines>
|
||||
|
||||
</lang>
|
||||
|
||||
|
||||
<enums>
|
||||
|
||||
<enum id="AQH_MQTT_TOPIC_TYPE" prefix="AQH_MqttTopicType_">
|
||||
<item name="num">
|
||||
<descr>numeric type</descr>
|
||||
</item>
|
||||
|
||||
<item name="json">
|
||||
<descr>json data</descr>
|
||||
</item>
|
||||
|
||||
</enum>
|
||||
|
||||
</enums>
|
||||
|
||||
|
||||
<members>
|
||||
|
||||
<member name="id" type="uint64_t" maxlen="8">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
<access>public</access>
|
||||
<flags>with_getbymember</flags>
|
||||
</member>
|
||||
|
||||
<member name="deviceId" type="uint64_t" maxlen="8">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
<access>public</access>
|
||||
<flags></flags>
|
||||
</member>
|
||||
|
||||
<member name="topic" type="char_ptr" maxlen="256">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
<access>public</access>
|
||||
<flags>own with_getbymember</flags>
|
||||
</member>
|
||||
|
||||
<member name="dataType" type="int" maxlen="8">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
<access>public</access>
|
||||
<flags></flags>
|
||||
</member>
|
||||
|
||||
</members>
|
||||
|
||||
</type>
|
||||
|
||||
</tm2>
|
||||
|
||||
@@ -31,13 +31,6 @@
|
||||
*/
|
||||
|
||||
|
||||
static void _handleJsonTopic(AQH_STORAGE *sto, const AQH_MQTT_TOPIC *topic, const char *sValue);
|
||||
static void _handleNumTopic(AQH_STORAGE *sto, const AQH_MQTT_TOPIC *topic, const char *sValue);
|
||||
static void _handleValueForJsonElement(AQH_STORAGE *sto,
|
||||
const AQH_MQTT_TOPIC *topic,
|
||||
GWEN_JSON_ELEM *json,
|
||||
time_t timestamp,
|
||||
const AQH_VALUE *value);
|
||||
static AQH_DATAFILE *_getDataFileByValueId(AQH_STORAGE *sto, uint64_t valueId);
|
||||
static AQH_DATAFILE *_findDataFileByValueId(const AQH_STORAGE *sto, uint64_t valueId);
|
||||
static AQH_DATAFILE *_openOrCreateDataFileByValueId(AQH_STORAGE *sto, uint64_t valueId);
|
||||
@@ -56,12 +49,8 @@ AQH_STORAGE *AQH_Storage_new(void)
|
||||
AQH_STORAGE *sto;
|
||||
|
||||
GWEN_NEW_OBJECT(AQH_STORAGE, sto);
|
||||
sto->roomList=AQH_Room_List_new();
|
||||
sto->deviceList=AQH_Device_List_new();
|
||||
sto->mqttTopicList=AQH_MqttTopic_List_new();
|
||||
sto->valueList=AQH_Value_List_new();
|
||||
sto->dataFileList=AQH_DataFile_List_new();
|
||||
sto->recvdTopicList=GWEN_StringList_new();
|
||||
|
||||
return sto;
|
||||
}
|
||||
@@ -73,10 +62,6 @@ void AQH_Storage_free(AQH_STORAGE *sto)
|
||||
if (sto) {
|
||||
AQH_DataFile_List_free(sto->dataFileList);
|
||||
AQH_Value_List_free(sto->valueList);
|
||||
AQH_MqttTopic_List_free(sto->mqttTopicList);
|
||||
AQH_Device_List_free(sto->deviceList);
|
||||
AQH_Room_List_free(sto->roomList);
|
||||
GWEN_StringList_free(sto->recvdTopicList);
|
||||
free(sto->dataFileFolder);
|
||||
free(sto->stateFile);
|
||||
|
||||
@@ -103,117 +88,6 @@ void AQH_Storage_SetStateFile(AQH_STORAGE *sto, const char *s)
|
||||
|
||||
|
||||
|
||||
GWEN_STRINGLIST *AQH_Storage_GetRecvdTopicList(const AQH_STORAGE *sto)
|
||||
{
|
||||
return sto?sto->recvdTopicList:NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void AQH_Storage_AddRoom(AQH_STORAGE *sto, AQH_ROOM *r)
|
||||
{
|
||||
if (sto && r) {
|
||||
uint64_t id;
|
||||
|
||||
id=++(sto->lastRoomId);
|
||||
AQH_Room_SetId(r, id);
|
||||
AQH_Room_List_Add(r, sto->roomList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_ROOM_LIST *AQH_Storage_GetRoomList(const AQH_STORAGE *sto)
|
||||
{
|
||||
return sto?sto->roomList:NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_ROOM *AQH_Storage_GetRoomById(const AQH_STORAGE *sto, uint64_t id)
|
||||
{
|
||||
return sto?AQH_Room_List_GetById(sto->roomList, id):NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_ROOM *AQH_Storage_GetRoomByName(const AQH_STORAGE *sto, const char *s)
|
||||
{
|
||||
return sto?AQH_Room_List_GetByName(sto->roomList, s):NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_Storage_AddDevice(AQH_STORAGE *sto, AQH_DEVICE *dev)
|
||||
{
|
||||
if (sto && dev) {
|
||||
uint64_t id;
|
||||
|
||||
id=++(sto->lastDeviceId);
|
||||
AQH_Device_SetId(dev, id);
|
||||
AQH_Device_List_Add(dev, sto->deviceList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
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_GetDeviceByName(const AQH_STORAGE *sto, const char *s)
|
||||
{
|
||||
return sto?AQH_Device_List_GetByName(sto->deviceList, s):NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_Storage_AddMqttTopic(AQH_STORAGE *sto, AQH_MQTT_TOPIC *t)
|
||||
{
|
||||
if (sto && t) {
|
||||
uint64_t id;
|
||||
|
||||
id=++(sto->lastTopicId);
|
||||
AQH_MqttTopic_SetId(t, id);
|
||||
AQH_MqttTopic_List_Add(t, sto->mqttTopicList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_MQTT_TOPIC_LIST *AQH_Storage_GetMqttTopicList(const AQH_STORAGE *sto)
|
||||
{
|
||||
return sto?sto->mqttTopicList:NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_MQTT_TOPIC *AQH_Storage_GetMqttTopicById(const AQH_STORAGE *sto, uint64_t id)
|
||||
{
|
||||
return sto?AQH_MqttTopic_List_GetById(sto->mqttTopicList, id):NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_MQTT_TOPIC *AQH_Storage_GetMqttTopicByTopic(const AQH_STORAGE *sto, const char *topic)
|
||||
{
|
||||
return sto?AQH_MqttTopic_List_GetByTopic(sto->mqttTopicList, topic):NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_Storage_AddValue(AQH_STORAGE *sto, AQH_VALUE *value)
|
||||
{
|
||||
if (sto && value) {
|
||||
@@ -499,143 +373,6 @@ int AQH_Storage_GetLastDataPoint(AQH_STORAGE *sto, uint64_t valueId, uint64_t *p
|
||||
|
||||
|
||||
|
||||
void AQH_Storage_HandleMqttPublish(AQH_STORAGE *sto, const char *sTopic, const char *sValue)
|
||||
{
|
||||
if (sto) {
|
||||
const AQH_MQTT_TOPIC *topic;
|
||||
|
||||
topic=AQH_Storage_GetMqttTopicByTopic(sto, sTopic);
|
||||
if (topic) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Handling MQTT topic \"%s\"", sTopic);
|
||||
if (AQH_MqttTopic_GetDataType(topic)==AQH_MqttTopicType_Json)
|
||||
_handleJsonTopic(sto, topic, sValue);
|
||||
else
|
||||
_handleNumTopic(sto, topic, sValue);
|
||||
}
|
||||
else {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Unknown MQTT topic \"%s\"", sTopic);
|
||||
GWEN_StringList_AppendString(sto->recvdTopicList, sTopic, 0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _handleJsonTopic(AQH_STORAGE *sto, const AQH_MQTT_TOPIC *topic, const char *sValue)
|
||||
{
|
||||
time_t now;
|
||||
GWEN_JSON_ELEM *json;
|
||||
|
||||
now=time(NULL);
|
||||
json=GWEN_JsonElement_fromString(sValue);
|
||||
if (json) {
|
||||
AQH_VALUE *value;
|
||||
uint64_t topicId;
|
||||
|
||||
topicId=AQH_MqttTopic_GetId(topic);
|
||||
value=AQH_Value_List_First(sto->valueList);
|
||||
while(value) {
|
||||
if (AQH_Value_GetTopicId(value)==topicId) {
|
||||
_handleValueForJsonElement(sto, topic, json, now, value);
|
||||
}
|
||||
value=AQH_Value_List_Next(value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Error parsing JSON data [%s]", sValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _handleValueForJsonElement(AQH_STORAGE *sto,
|
||||
const AQH_MQTT_TOPIC *topic,
|
||||
GWEN_JSON_ELEM *json,
|
||||
time_t timestamp,
|
||||
const AQH_VALUE *value)
|
||||
{
|
||||
const char *dataPath;
|
||||
|
||||
dataPath=AQH_Value_GetDataPath(value);
|
||||
if (dataPath) {
|
||||
GWEN_JSON_ELEM *jsonElem;
|
||||
|
||||
jsonElem=GWEN_JsonElement_GetElementByPath(json, dataPath, GWEN_PATH_FLAGS_PATHMUSTEXIST);
|
||||
if (jsonElem) {
|
||||
const char *s;
|
||||
|
||||
s=GWEN_JsonElement_GetData(jsonElem);
|
||||
if (s && *s) {
|
||||
int rv;
|
||||
double v;
|
||||
|
||||
rv=GWEN_Text_StringToDouble(s, &v);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Invalid value \"%s\" for topic %s:%s", s, AQH_MqttTopic_GetTopic(topic), dataPath);
|
||||
}
|
||||
else {
|
||||
AQH_DATAFILE *df;
|
||||
|
||||
df=_getDataFileByValueId(sto, AQH_Value_GetId(value));
|
||||
if (df) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Appending record to datafile");
|
||||
AQH_DataFile_AppendRecord(df, timestamp, v);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Empty JSON element \"%s\"", dataPath);
|
||||
}
|
||||
}
|
||||
else {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "No value for topic %s:%s", AQH_MqttTopic_GetTopic(topic), dataPath);
|
||||
}
|
||||
}
|
||||
else {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "No datapath in value \"%s\"", AQH_Value_GetNameForSystem(value));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _handleNumTopic(AQH_STORAGE *sto, const AQH_MQTT_TOPIC *topic, const char *sValue)
|
||||
{
|
||||
int rv;
|
||||
double v;
|
||||
time_t now;
|
||||
|
||||
now=time(NULL);
|
||||
|
||||
rv=GWEN_Text_StringToDouble(sValue, &v);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Invalid value \"%s\" for topic %s, ignoring", sValue, AQH_MqttTopic_GetTopic(topic));
|
||||
}
|
||||
else {
|
||||
AQH_VALUE *value;
|
||||
uint64_t topicId;
|
||||
|
||||
topicId=AQH_MqttTopic_GetId(topic);
|
||||
value=AQH_Value_List_First(sto->valueList);
|
||||
while(value) {
|
||||
if (AQH_Value_GetTopicId(value)==topicId)
|
||||
break;
|
||||
value=AQH_Value_List_Next(value);
|
||||
}
|
||||
if (value) {
|
||||
AQH_DATAFILE *df;
|
||||
|
||||
df=_getDataFileByValueId(sto, AQH_Value_GetId(value));
|
||||
if (df) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Appending record to datafile");
|
||||
AQH_DataFile_AppendRecord(df, now, v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
AQH_DATAFILE *_getDataFileByValueId(AQH_STORAGE *sto, uint64_t valueId)
|
||||
{
|
||||
AQH_DATAFILE *df;
|
||||
|
||||
@@ -49,21 +49,6 @@ extern "C" {
|
||||
AQHOME_API AQH_STORAGE *AQH_Storage_new(void);
|
||||
AQHOME_API void AQH_Storage_free(AQH_STORAGE *sto);
|
||||
|
||||
AQHOME_API void AQH_Storage_AddRoom(AQH_STORAGE *sto, AQH_ROOM *r);
|
||||
AQHOME_API AQH_ROOM_LIST *AQH_Storage_GetRoomList(const AQH_STORAGE *sto);
|
||||
AQHOME_API AQH_ROOM *AQH_Storage_GetRoomById(const AQH_STORAGE *sto, uint64_t id);
|
||||
AQHOME_API AQH_ROOM *AQH_Storage_GetRoomByName(const AQH_STORAGE *sto, const char *s);
|
||||
|
||||
AQHOME_API void AQH_Storage_AddDevice(AQH_STORAGE *sto, AQH_DEVICE *dev);
|
||||
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_GetDeviceByName(const AQH_STORAGE *sto, const char *s);
|
||||
|
||||
AQHOME_API void AQH_Storage_AddMqttTopic(AQH_STORAGE *sto, AQH_MQTT_TOPIC *t);
|
||||
AQHOME_API AQH_MQTT_TOPIC_LIST *AQH_Storage_GetMqttTopicList(const AQH_STORAGE *sto);
|
||||
AQHOME_API AQH_MQTT_TOPIC *AQH_Storage_GetMqttTopicById(const AQH_STORAGE *sto, uint64_t id);
|
||||
AQHOME_API AQH_MQTT_TOPIC *AQH_Storage_GetMqttTopicByTopic(const AQH_STORAGE *sto, const char *topic);
|
||||
|
||||
AQHOME_API void AQH_Storage_AddValue(AQH_STORAGE *sto, AQH_VALUE *value);
|
||||
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);
|
||||
@@ -93,11 +78,6 @@ AQHOME_API uint64_t *AQH_Storage_GetDataPoints(AQH_STORAGE *sto, uint64_t valueI
|
||||
AQHOME_API int AQH_Storage_GetLastDataPoint(AQH_STORAGE *sto, uint64_t valueId, uint64_t *pTimestamp, double *pValue);
|
||||
|
||||
|
||||
AQHOME_API void AQH_Storage_HandleMqttPublish(AQH_STORAGE *sto, const char *topic, const char *value);
|
||||
|
||||
AQHOME_API GWEN_STRINGLIST *AQH_Storage_GetRecvdTopicList(const AQH_STORAGE *sto);
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -16,29 +16,14 @@
|
||||
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_LASTIDS "lastIds"
|
||||
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_ROOMS "rooms"
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_ROOM "room"
|
||||
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_DEVICES "devices"
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_DEVICE "device"
|
||||
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_TOPICS "topics"
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_TOPIC "topic"
|
||||
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_VALUES "values"
|
||||
#define AQH_STORAGE_XML_ELEMENTNAME_VALUE "value"
|
||||
|
||||
|
||||
|
||||
struct AQH_STORAGE {
|
||||
AQH_ROOM_LIST *roomList;
|
||||
AQH_DEVICE_LIST *deviceList;
|
||||
AQH_MQTT_TOPIC_LIST *mqttTopicList;
|
||||
AQH_VALUE_LIST *valueList;
|
||||
|
||||
uint64_t lastRoomId;
|
||||
uint64_t lastDeviceId;
|
||||
uint64_t lastTopicId;
|
||||
uint64_t lastValueId;
|
||||
|
||||
char *stateFile;
|
||||
@@ -46,8 +31,6 @@ struct AQH_STORAGE {
|
||||
|
||||
AQH_DATAFILE_LIST *dataFileList;
|
||||
|
||||
GWEN_STRINGLIST *recvdTopicList;
|
||||
|
||||
uint32_t runtimeFlags;
|
||||
};
|
||||
|
||||
|
||||
@@ -26,9 +26,6 @@
|
||||
|
||||
|
||||
static void _readLastIdsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _readRoomsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _readDevicesFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _readTopicsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _readValuesFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
|
||||
|
||||
@@ -52,9 +49,6 @@ int AQH_Storage_ReadStateFile(AQH_STORAGE *sto, const char *sFilename)
|
||||
}
|
||||
|
||||
_readLastIdsFromXml(sto, rootNode);
|
||||
_readRoomsFromXml(sto, rootNode);
|
||||
_readDevicesFromXml(sto, rootNode);
|
||||
_readTopicsFromXml(sto, rootNode);
|
||||
_readValuesFromXml(sto, rootNode);
|
||||
|
||||
GWEN_XMLNode_free(rootNode);
|
||||
@@ -70,90 +64,15 @@ void _readLastIdsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
|
||||
nLastIds=GWEN_XMLNode_FindFirstTag(rootNode, AQH_STORAGE_XML_ELEMENTNAME_LASTIDS, NULL, NULL);
|
||||
if (nLastIds) {
|
||||
sto->lastRoomId=GWEN_XMLNode_GetIntValue(nLastIds, "lastRoomId", 0);
|
||||
sto->lastDeviceId=GWEN_XMLNode_GetIntValue(nLastIds, "lastDeviceId", 0);
|
||||
sto->lastTopicId=GWEN_XMLNode_GetIntValue(nLastIds, "lastTopicId", 0);
|
||||
sto->lastValueId=GWEN_XMLNode_GetIntValue(nLastIds, "lastValueId", 0);
|
||||
}
|
||||
else {
|
||||
sto->lastRoomId=0;
|
||||
sto->lastDeviceId=0;
|
||||
sto->lastTopicId=0;
|
||||
sto->lastValueId=0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _readRoomsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
{
|
||||
GWEN_XMLNODE *nRooms;
|
||||
|
||||
nRooms=GWEN_XMLNode_FindFirstTag(rootNode, AQH_STORAGE_XML_ELEMENTNAME_ROOMS, NULL, NULL);
|
||||
if (nRooms) {
|
||||
GWEN_XMLNODE *nRoom;
|
||||
|
||||
nRoom=GWEN_XMLNode_FindFirstTag(nRooms, AQH_STORAGE_XML_ELEMENTNAME_ROOM, NULL, NULL);
|
||||
while(nRoom) {
|
||||
AQH_ROOM *r;
|
||||
|
||||
r=AQH_Room_fromXml(nRoom);
|
||||
if (r) {
|
||||
AQH_Room_List_Add(r, sto->roomList);
|
||||
}
|
||||
nRoom=GWEN_XMLNode_FindNextTag(nRoom, AQH_STORAGE_XML_ELEMENTNAME_ROOM, NULL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _readTopicsFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
{
|
||||
GWEN_XMLNODE *nTopics;
|
||||
|
||||
nTopics=GWEN_XMLNode_FindFirstTag(rootNode, AQH_STORAGE_XML_ELEMENTNAME_TOPICS, NULL, NULL);
|
||||
if (nTopics) {
|
||||
GWEN_XMLNODE *nTopic;
|
||||
|
||||
nTopic=GWEN_XMLNode_FindFirstTag(nTopics, AQH_STORAGE_XML_ELEMENTNAME_TOPIC, NULL, NULL);
|
||||
while(nTopic) {
|
||||
AQH_MQTT_TOPIC *topic;
|
||||
|
||||
topic=AQH_MqttTopic_fromXml(nTopic);
|
||||
if (topic) {
|
||||
AQH_MqttTopic_List_Add(topic, sto->mqttTopicList);
|
||||
}
|
||||
nTopic=GWEN_XMLNode_FindNextTag(nTopic, AQH_STORAGE_XML_ELEMENTNAME_TOPIC, NULL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _readValuesFromXml(AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
{
|
||||
GWEN_XMLNODE *nValues;
|
||||
|
||||
@@ -31,9 +31,6 @@
|
||||
|
||||
|
||||
static void _writeLastIdsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _writeRoomsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _writeDevicesToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _writeTopicsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
static void _writeValuesToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode);
|
||||
|
||||
|
||||
@@ -51,9 +48,6 @@ int AQH_Storage_WriteStateFile(const AQH_STORAGE *sto, const char *sFilename)
|
||||
|
||||
rootNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root");
|
||||
_writeLastIdsToXml(sto, rootNode);
|
||||
_writeRoomsToXml(sto, rootNode);
|
||||
_writeDevicesToXml(sto, rootNode);
|
||||
_writeTopicsToXml(sto, rootNode);
|
||||
_writeValuesToXml(sto, rootNode);
|
||||
|
||||
nbuf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||
@@ -88,9 +82,6 @@ void _writeLastIdsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
GWEN_XMLNODE *nLastIds;
|
||||
|
||||
nLastIds=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_LASTIDS);
|
||||
GWEN_XMLNode_SetIntValue(nLastIds, "lastRoomId", sto->lastRoomId);
|
||||
GWEN_XMLNode_SetIntValue(nLastIds, "lastDeviceId", sto->lastDeviceId);
|
||||
GWEN_XMLNode_SetIntValue(nLastIds, "lastTopicId", sto->lastTopicId);
|
||||
GWEN_XMLNode_SetIntValue(nLastIds, "lastValueId", sto->lastValueId);
|
||||
|
||||
GWEN_XMLNode_AddChild(rootNode, nLastIds);
|
||||
@@ -98,69 +89,6 @@ void _writeLastIdsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
|
||||
|
||||
|
||||
void _writeRoomsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
{
|
||||
GWEN_XMLNODE *nElems;
|
||||
AQH_ROOM *elem;
|
||||
|
||||
nElems=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_ROOMS);
|
||||
|
||||
elem=AQH_Room_List_First(sto->roomList);
|
||||
while(elem) {
|
||||
GWEN_XMLNODE *nElem;
|
||||
|
||||
nElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_ROOM);
|
||||
AQH_Room_toXml(elem, nElem);
|
||||
GWEN_XMLNode_AddChild(nElems, nElem);
|
||||
elem=AQH_Room_List_Next(elem);
|
||||
}
|
||||
GWEN_XMLNode_AddChild(rootNode, nElems);
|
||||
}
|
||||
|
||||
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _writeTopicsToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
{
|
||||
GWEN_XMLNODE *nElems;
|
||||
AQH_MQTT_TOPIC *elem;
|
||||
|
||||
nElems=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_TOPICS);
|
||||
|
||||
elem=AQH_MqttTopic_List_First(sto->mqttTopicList);
|
||||
while(elem) {
|
||||
GWEN_XMLNODE *nElem;
|
||||
|
||||
nElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, AQH_STORAGE_XML_ELEMENTNAME_TOPIC);
|
||||
AQH_MqttTopic_toXml(elem, nElem);
|
||||
GWEN_XMLNode_AddChild(nElems, nElem);
|
||||
elem=AQH_MqttTopic_List_Next(elem);
|
||||
}
|
||||
GWEN_XMLNode_AddChild(rootNode, nElems);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _writeValuesToXml(const AQH_STORAGE *sto, GWEN_XMLNODE *rootNode)
|
||||
{
|
||||
GWEN_XMLNODE *nElems;
|
||||
|
||||
@@ -73,13 +73,6 @@
|
||||
<flags>own with_getbymember</flags>
|
||||
</member>
|
||||
|
||||
<member name="topicId" type="uint64_t" maxlen="8">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
<access>public</access>
|
||||
<flags></flags>
|
||||
</member>
|
||||
|
||||
<member name="valueType" type="int" maxlen="8">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
@@ -94,6 +87,14 @@
|
||||
<flags>own</flags>
|
||||
</member>
|
||||
|
||||
|
||||
<member name="topicId" type="uint64_t" maxlen="8">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
<access>public</access>
|
||||
<flags></flags>
|
||||
</member>
|
||||
|
||||
<member name="dataPath" type="char_ptr" maxlen="256">
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
@@ -102,6 +103,13 @@
|
||||
</member>
|
||||
|
||||
|
||||
<member name="timestampCreation" type="uint64_t" maxlen="8" >
|
||||
<access>public</access>
|
||||
<flags>none</flags>
|
||||
<default>0</default>
|
||||
<preset>0</preset>
|
||||
</member>
|
||||
|
||||
|
||||
</members>
|
||||
|
||||
|
||||
@@ -247,6 +247,7 @@ GWEN_MSG *_awaitPacket2(GWEN_MSG_ENDPOINT *epClient, uint8_t expectedPacketType)
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
GWEN_MSG_ENDPOINT *_acceptHttpConnection(GWEN_UNUSED GWEN_MSG_ENDPOINT *ep,
|
||||
GWEN_SOCKET *sk,
|
||||
GWEN_UNUSED const GWEN_INETADDRESS *addr,
|
||||
@@ -311,7 +312,7 @@ int testHttpDaemon()
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
int testHexfile(int argc, char **argv)
|
||||
@@ -421,7 +422,8 @@ int main(int argc, char **argv)
|
||||
//return testFlashRecords(argc, argv);
|
||||
//return testMqttConnection2();
|
||||
//return testMqttSubscribe2(argc, argv);
|
||||
return testHttpDaemon();
|
||||
//return testHttpDaemon();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user