10#ifdef ATOM_QRCODE_MODULE
16#include <libb64/cdecode.h>
21void parseQueryArgs(
char *credentialsStringInput,
boolean useAnyArgs);
37 SerialDebug.printf(
"ATOM_processSemanticMarker(%s, %s)\n", semanticMarker, lastSemanticMarker);
54 char *smartIndex = strstr(semanticMarker,
"/scannedDevice/");
55 smartIndex += strlen(
"/scannedDevice/");
59 char *questionMark = strstr(smartIndex,
"?");
60 char scannedDeviceBuffer[50];
61 scannedDeviceBuffer[0] =
'\0';
62 int *scannedDeviceLen;
67 int len = questionMark - smartIndex;
68 strncpy(scannedDeviceBuffer, smartIndex, len);
69 scannedDeviceBuffer[len] =
'\0';
72 strcpy(scannedDeviceBuffer,smartIndex);
73 char *scannedDevice = scannedDeviceBuffer;
74 SerialDebug.printf(
"scannedDevice = %s\n", scannedDevice);
75 if (strcmp(scannedDevice,
"_none")==0)
92 char *smartIndex = strstr(semanticMarker,
"/scannedGroup/");
93 smartIndex += strlen(
"/scannedGroup/");
97 char *questionMark = strstr(smartIndex,
"?");
98 char scannedGroupBuffer[50];
99 scannedGroupBuffer[0] =
'\0';
100 int *scannedGroupLen;
104 int len = questionMark - smartIndex;
105 strncpy(scannedGroupBuffer, smartIndex, len);
106 scannedGroupBuffer[len] =
'\0';
109 strcpy(scannedGroupBuffer,smartIndex);
110 char *scannedGroup = scannedGroupBuffer;
114 SerialDebug.printf(
"scannedGroup = %s\n", scannedGroup);
115 if (strcmp(scannedGroup,
"_none")==0)
124 char credentialsJSON[200];
125 char credentialsString[200];
130 String decoded = String(semanticMarker);
132 SerialDebug.println(decoded);
133 strcpy(credentialsString, decoded.c_str());
135 strcpy(credentialsString, semanticMarker);
144 char *ssidIndex = strstr(credentialsString,
"S:");
146 char *semicolon = strstr(ssidIndex,
";");
148 int len = semicolon - ssidIndex;
150 strncpy(ssidStr, ssidIndex, len);
154 strcpy(credentialsString, semanticMarker);
155 char *ssidPassIndex = strstr(credentialsString,
"P:");
157 semicolon = strstr(ssidPassIndex,
";");
158 len = semicolon - ssidPassIndex;
159 char ssidPassStr[50];
160 ssidPassStr[0] =
'\0';
161 strncpy(ssidPassStr, ssidPassIndex, len);
162 ssidPassStr[len] =
'\0';
165 sprintf(credentialsJSON,
"{'ssid':'%s','ssidPassword':'%s'}", ssidStr, ssidPassStr);
166 SerialDebug.println(credentialsJSON);
193 char *smartIndex = strstr(semanticMarker,
"/credentials");
194 smartIndex += strlen(
"/credentials");
195 char *credentialsString = smartIndex;
196 SerialDebug.printf(
"credentials = %s\n", credentialsString);
205#ifdef DECODE_BASE64_HERE
206 char plaintext_out[400];
207 int len = strlen(credentialsString);
210 SerialError.println(
"Length too long to base64 decode: 400");
214 int status = base64_decode_chars(scannedDevice, len, plaintext_out);
215 String decoded = String(plaintext_out);
217 char *decodedCredentials = (
char*)decoded.c_str();
218 SerialDebug.println(decodedCredentials);
239 char *smartIndex = strstr(semanticMarker,
"/setJSON");
240 smartIndex += strlen(
"/setJSON");
241 char *credentialsString = smartIndex;
242 SerialDebug.printf(
"setJSON = %s\n", credentialsString);
252 SerialDebug.printf(
"connectedBLEDeviceName = %s\n", connectedBLEDeviceName);
256 char *device = rindex(semanticMarker,
'/');
257 if (device) device++;
259 if (device && connectedBLEDeviceName && strcmp(device,connectedBLEDeviceName)==0)
262 SerialDebug.printf(
" *** BLE FEEDING since inside SM (device=%s)\n", device);
276 SerialDebug.printf(
"1. *** WIFI FEEDING since inside SM (device=%s)\n", device);
281 sprintf(pubString,
"{'dev':'%s'",device);
282 strcat(pubString,
",'cmd':'feed'}");
297 char *device = rindex(semanticMarker,
'/');
298 if (device) device++;
299 SerialDebug.printf(
"2. *** WIFI FEEDING since inside SM (device=%s)\n", device);
307 SerialDebug.println(
"3. *** WIFI FEEDING since inside SM");
315 SerialDebug.println(
"4. *** WIFI FEEDING since inside SM");
328 SerialDebug.println(username);
329 SerialDebug.println(password);
330 SerialDebug.println(scannedDeviceName);
335 boolean scannedDeviceValid =
false;
338 if (scannedDeviceName && strlen(scannedDeviceName) > 0)
342 scannedDeviceValid =
true;
364 if (scannedDeviceValid)
368 sprintf(getCommand,
"{'dev':'%s', 'cmd':'feed'}", scannedDeviceName);
391 if (scannedDeviceValid)
395 sprintf(getCommand,
"{'dev':'%s', 'cmd':'togglesocket'}", scannedDeviceName);
415#ifdef USE_REST_MESSAGING
421 smartIndex = strstr(semanticMarker,
"/smflowinfo");
423 smartIndex += strlen(
"/smflowinfo");
427 smartIndex = strstr(semanticMarker,
"/smart");
429 smartIndex += strlen(
"/smart");
431 strcpy(getCommand,
"/bot/smrun");
432 strcat(getCommand, smartIndex);
435 strcpy(getCommand, semanticMarker);
440 strcat(getCommand,
"&username=");
441 strcat(getCommand, username);
442 strcat(getCommand,
"&password=");
443 strcat(getCommand, password);
444 if (scannedDeviceName && strlen(scannedDeviceName) > 0)
446 strcat(getCommand,
"&device=");
447 strcat(getCommand, scannedDeviceName);
452 strcat(getCommand,
"&group=");
457#ifdef USE_REST_MESSAGING
468 sendSecureRESTCall(getCommand);
474 SerialDebug.println(
"send as DOCFOLLOW");
475 SerialDebug.println(getCommand);
482 sprintf(buffer,
"https://SemanticMarker.org%s",getCommand);
483 SerialDebug.println(buffer);
499 SerialDebug.println(
" ****** SHOULDN't have a smrun ...");
512 char credentialsJSON[300];
514 strcpy(credentialsJSON,
"{");
521 char *argNames[] = {(
char*)
"ssid",(
char*)
"ssidpass",(
char*)
"username",(
char*)
"password", (
char*)
"location", (
char*)
"deviceName"};
523 char *argOutputNames[] = {(
char*)
"ssid",(
char*)
"ssidPassword",(
char*)
"mqtt_user",(
char*)
"mqtt_password", (
char*)
"location", (
char*)
"deviceName"};
524 int argNamesLen =
sizeof(argNames)/
sizeof(
char*);
527 String decoded = String(credentialsStringInput);
530 SerialDebug.println(decoded);
531 char credentialsStringStorage[
MAX_SM];
532 strcpy(credentialsStringStorage, decoded.c_str());
533 char *credentialsString = credentialsStringStorage;
536 if (credentialsString[0] ==
'?')
538 while (credentialsString)
543 char *equalIndex = strstr(credentialsString,
"=");
546 SerialDebug.println(
"** Bad syntax of URL");
550 int argLen = equalIndex - credentialsString;
551 char argString[bufferLen];
552 for (
int i=0;i<bufferLen;i++) argString[i] =
'\0';
553 strncpy(argString,credentialsString,argLen);
554 argString[argLen] =
'\0';
560 credentialsString = equalIndex;
563 char *nextAmper = strstr(credentialsString,
"&");
564 char valString[bufferLen];
565 for (
int i=0;i<bufferLen;i++) valString[i] =
'\0';
570 int valLen = nextAmper - credentialsString;
571 strncpy(valString,credentialsString,valLen);
572 valString[valLen] =
'\0';
575 credentialsString += valLen + 1;
579 strcpy(valString,credentialsString);
581 credentialsString = NULL;
589 strcat(credentialsJSON,
",");
593 sprintf(oneArgVal,
"'%s':'%s'", argString, valString);
595 strcat(credentialsJSON, oneArgVal);
602 for (
int i=0; i< argNamesLen; i++)
604 if (strcmp(argNames[i], argString)==0)
607 SerialDebug.printf(
" ** Matched %s == %s\n", argNames[i], valString);
609 sprintf(oneArgVal,
"'%s':'%s'", argOutputNames[i], valString);
613 strcat(credentialsJSON,
",");
615 strcat(credentialsJSON, oneArgVal);
626 strcat(credentialsJSON,
",'mqtt_server':'idogwatch.com'");
627 strcat(credentialsJSON,
",'mqtt_port':'1883'");
630 strcat(credentialsJSON,
"}");
631 SerialDebug.printf(
"JSON = %s\n", credentialsJSON);
char _lastScannedGroupName[40]
void parseQueryArgs(char *credentialsStringInput, boolean useAnyArgs)
9.27.23 to decode a base64 string (a Semantic Marker)
boolean ATOM_processSemanticMarker(char *semanticMarker, char *lastSemanticMarker)
char _copyLastSemanticMarker[MAX_SM]
void sendFeedCommandBLEClient()
sends the "feed" command over bluetooth to the connected device..
void publishMQTTMessageDefaultTopic(char *message)
Wrapper of the mqttclient publish.
void sendMessageMQTT(char *message)
boolean processJSONMessageMQTT(char *ascii, char *topic)
process the JSON message (looking for FEED, etc). Note: topic can be nil, or if not,...
String MQTT_urlDecode(String input)
Decode the URL (copied from WIFI_APModule. Easier than breaking modules)
void publishSMRunMessage(char *smrunMessage)
char * main_getUsername()
void main_setScannedGroupName(char *groupName)
void main_setScannedDeviceName(char *deviceName)
set the scanned device name
void sendMessageStringTopic_mainModule(char *messageString, char *topicString)
adding a synchronous call to send a message over the network (assuming MQTT but not specified),...
char * main_getScannedGroupNameTopic()
char * main_getPassword()
return password
void main_dispatchAsyncCommandWithString(int asyncCallCommand, char *parameter)
bool containsSubstring(String message, String substring)
check if the string contains the other string. This is a poor man's grammer checker
void sendMessageString_mainModule(char *messageString)
adding a synchronous call to send a message over the network (assuming MQTT but not specified),...
void main_dispatchAsyncCommand(int asyncCallCommand)
checks if any async commands are in 'dispatch' mode, and if so, invokes them, and sets their flag to ...
char * connectedBLEDeviceName_mainModule()
returns the connected BLE Device name (the :NAME of advertisment, Address: 01:39:3f:33 part of name,...
char * main_getScannedDeviceName()
return devicename
#define ASYNC_REST_CALL_MESSAGE_PARAMETER
send REST call
#define ASYNC_SEND_MQTT_FEED_MESSAGE
sends a message (like FEED) on the users topic