-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
_C010.ino
102 lines (90 loc) · 3.58 KB
/
_C010.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#ifdef USES_C010
//#######################################################################################################
//########################### Controller Plugin 010: Generic UDP ########################################
//#######################################################################################################
#define CPLUGIN_010
#define CPLUGIN_ID_010 10
#define CPLUGIN_NAME_010 "Generic UDP"
boolean CPlugin_010(byte function, struct EventStruct *event, String& string)
{
boolean success = false;
switch (function)
{
case CPLUGIN_PROTOCOL_ADD:
{
Protocol[++protocolCount].Number = CPLUGIN_ID_010;
Protocol[protocolCount].usesMQTT = false;
Protocol[protocolCount].usesTemplate = true;
Protocol[protocolCount].usesAccount = false;
Protocol[protocolCount].usesPassword = false;
Protocol[protocolCount].defaultPort = 514;
Protocol[protocolCount].usesID = false;
break;
}
case CPLUGIN_GET_DEVICENAME:
{
string = F(CPLUGIN_NAME_010);
break;
}
case CPLUGIN_PROTOCOL_TEMPLATE:
{
event->String1 = "";
event->String2 = F("%sysname%_%tskname%_%valname%=%value%");
break;
}
case CPLUGIN_PROTOCOL_SEND:
{
byte valueCount = getValueCountFromSensorType(event->sensorType);
C010_queue_element element(event, valueCount);
if (ExtraTaskSettings.TaskIndex != event->TaskIndex)
PluginCall(PLUGIN_GET_DEVICEVALUENAMES, event, dummyString);
MakeControllerSettings(ControllerSettings);
LoadControllerSettings(event->ControllerIndex, ControllerSettings);
for (byte x = 0; x < valueCount; x++)
{
bool isvalid;
String formattedValue = formatUserVar(event, x, isvalid);
if (isvalid) {
element.txt[x] = "";
element.txt[x] += ControllerSettings.Publish;
parseControllerVariables(element.txt[x], event, false);
element.txt[x].replace(F("%valname%"), ExtraTaskSettings.TaskDeviceValueNames[x]);
element.txt[x].replace(F("%value%"), formattedValue);
if (loglevelActiveFor(LOG_LEVEL_DEBUG_MORE)) {
char log[80];
element.txt[x].toCharArray(log, 80);
addLog(LOG_LEVEL_DEBUG_MORE, log);
}
}
}
success = C010_DelayHandler.addToQueue(element);
scheduleNextDelayQueue(TIMER_C010_DELAY_QUEUE, C010_DelayHandler.getNextScheduleTime());
break;
}
}
return success;
}
//********************************************************************************
// Generic UDP message
//********************************************************************************
bool do_process_c010_delay_queue(int controller_number, const C010_queue_element& element, ControllerSettingsStruct& ControllerSettings) {
while (element.txt[element.valuesSent] == "") {
// A non valid value, which we are not going to send.
// Increase sent counter until a valid value is found.
if (element.checkDone(true))
return true;
}
WiFiUDP C010_portUDP;
if (!beginWiFiUDP_randomPort(C010_portUDP)) return false;
if (!try_connect_host(controller_number, C010_portUDP, ControllerSettings))
return false;
C010_portUDP.write(
(uint8_t*)element.txt[element.valuesSent].c_str(),
element.txt[element.valuesSent].length());
bool reply = C010_portUDP.endPacket();
C010_portUDP.stop();
if (ControllerSettings.MustCheckReply)
return element.checkDone(reply);
return element.checkDone(true);
}
#endif