9 type = Esp32Command_wifi_command_tag;
12 timeClient =
new NTPClient(ntpUDP);
21 Log.traceln(
"ModuleWiFi::OnReceive");
24 if (cmd.which_command != Esp32Command_wifi_command_tag) {
28 Log.traceln(
"WiFiCommand type: %d", cmd.command.wifi_command.type);
31 switch (cmd.command.wifi_command.type) {
32 case WiFiCommand_Type_CONNECT:
33 Log.traceln(
"Calling CONNECT");
37 case WiFiCommand_Type_POST:
38 Log.traceln(
"Calling POST");
42 case WiFiCommand_Type_CHECK:
43 Log.traceln(
"Calling CHECK_REQUEST");
47 case WiFiCommand_Type_TIME:
48 Log.traceln(
"Calling TIME");
52 case WiFiCommand_Type_DISCONNECT:
53 Log.traceln(
"Calling DISCONNECT");
57 case WiFiCommand_Type_CHECK_WIFI:
58 Log.traceln(
"Calling CHECK_WIFI");
62 case WiFiCommand_Type_CHECK_API:
63 Log.traceln(
"Calling CHECK_API");
67 case WiFiCommand_Type_NTP_SYNC:
68 Log.traceln(
"Calling NTP_SYNC");
72 case WiFiCommand_Type_HOST:
73 Log.traceln(
"Calling HOST");
77 case WiFiCommand_Type_STOP_HOST:
78 Log.traceln(
"Calling STOP_HOST");
82 case WiFiCommand_Type_HOST_INFO:
83 Log.traceln(
"Calling HOST_INFO");
88 Log.warningln(
"wifi command type %d not found!",
89 cmd.command.wifi_command.type);
95 Log.traceln(
"ModuleWiFi::OnRequest");
96 memcpy(
buffer, request_buffer, request_buffer_len);
97 return request_buffer_len;
100void ModuleWiFi::Connect(
const Esp32Command& cmd) {
102 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
103 wifi_cmd.type = WiFiCommand_Type_CONNECT;
105 Log.traceln(
"ModuleWiFi::Connect");
109 WiFi.macAddress(mac);
110 Log.noticeln(
"MAC: %x:%x:%x:%x:%x:%x", mac[0], mac[1], mac[2], mac[3], mac[4],
113 Log.noticeln(
"Connecting to WiFI...");
114 Log.noticeln(
"ssid: %s", cmd.command.wifi_command.ssid);
115 Log.noticeln(
"passwd: %s", cmd.command.wifi_command.passwd);
122 int status = WiFi.begin(cmd.command.wifi_command.ssid,
123 cmd.command.wifi_command.passwd);
125 Log.noticeln(
"WiFi connection status: %d", status);
128 wifi_cmd.rc = status;
134void ModuleWiFi::Post(
const Esp32Command& cmd) {
136 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
137 wifi_cmd.type = WiFiCommand_Type_POST;
139 Log.traceln(
"ModuleWiFI::Post");
142 const uint8_t* meas = cmd.command.wifi_command.resp.bytes;
143 const size_t meas_len = cmd.command.wifi_command.resp.size;
147 this->request_buffer_len =
151void ModuleWiFi::CheckRequest(
const Esp32Command& cmd) {
152 Log.traceln(
"ModuleWiFi::CheckRequest");
154 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
155 wifi_cmd.type = WiFiCommand_Type_CHECK;
160 const uint8_t* resp =
161 reinterpret_cast<const uint8_t*
>(resp_msg.
Data().c_str());
162 size_t resp_len = resp_msg.
Data().length();
165 Log.noticeln(
"Resp length: %d", resp_len);
168 wifi_cmd.rc = status_code;
170 wifi_cmd.resp.size = resp_len;
171 memcpy(wifi_cmd.resp.bytes, resp, resp_len);
178void ModuleWiFi::NtpSync(
const Esp32Command& cmd) {
179 Log.traceln(
"ModuleWiFi::NtpSync");
181 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
182 wifi_cmd.type = WiFiCommand_Type_NTP_SYNC;
185 timeClient->forceUpdate();
191void ModuleWiFi::Time(
const Esp32Command& cmd) {
192 Log.traceln(
"ModuleWiFi::Time");
194 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
195 wifi_cmd.type = WiFiCommand_Type_TIME;
197 if (timeClient->isTimeSet()) {
198 wifi_cmd.ts = timeClient->getEpochTime();
199 Log.noticeln(
"Current timestamp: %d", wifi_cmd.ts);
201 Log.errorln(
"Failed to get time from NTP server!");
208void ModuleWiFi::Disconnect(
const Esp32Command& cmd) {
210 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
211 wifi_cmd.type = WiFiCommand_Type_CONNECT;
213 Log.traceln(
"ModuleWiFi::Disconnect");
222void ModuleWiFi::CheckWiFi(
const Esp32Command& cmd) {
223 Log.traceln(
"ModuleWiFi::CheckWiFi");
225 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
226 wifi_cmd.type = WiFiCommand_Type_CHECK_WIFI;
229 int wifi_status = WiFi.status();
230 wifi_cmd.rc = wifi_status;
231 Log.noticeln(
"WiFi status: %d", wifi_status);
232 if (wifi_status == WL_CONNECTED) {
233 Log.noticeln(
"IP Address: %p", WiFi.localIP());
234 Log.noticeln(
"Gateway IP: %p", WiFi.gatewayIP());
235 Log.noticeln(
"Subnet Mask: %p", WiFi.subnetMask());
236 Log.noticeln(
"DNS: %p", WiFi.dnsIP());
246void ModuleWiFi::CheckApi(
const Esp32Command& cmd) {
247 Log.traceln(
"ModuleWiFi::CheckApi");
249 WiFiCommand wifi_cmd = WiFiCommand_init_zero;
250 wifi_cmd.type = WiFiCommand_Type_CHECK_API;
253 dirtviz.
SetUrl(cmd.command.wifi_command.url);
260void ModuleWiFi::Host(
const Esp32Command& cmd) {
261 Log.traceln(
"ModuleWiFi::Host");
263 WiFiCommand resp = WiFiCommand_init_zero;
264 resp.type = WiFiCommand_Type_HOST;
267 std::string
ssid = cmd.command.wifi_command.ssid;
268 std::string
pass = cmd.command.wifi_command.passwd;
270 WiFi.softAP(
ssid.c_str(),
pass.c_str());
272 std::string ip = WiFi.softAPIP().toString().c_str();
273 Log.noticeln(
"Access Point started");
279void ModuleWiFi::StopHost() {
280 Log.traceln(
"ModuleWiFi::StopHost");
282 WiFiCommand resp = WiFiCommand_init_zero;
283 resp.type = WiFiCommand_Type_STOP_HOST;
286 WiFi.softAPdisconnect();
292void ModuleWiFi::HostInfo() {
293 Log.traceln(
"ModuleWiFi::HostInfo");
295 WiFiCommand resp = WiFiCommand_init_zero;
296 resp.type = WiFiCommand_Type_HOST_INFO;
299 strncpy(resp.ssid, WiFi.softAPSSID().c_str(),
sizeof(resp.ssid));
300 strncpy(resp.url, WiFi.softAPIP().toString().c_str(),
sizeof(resp.url));
301 strncpy(resp.mac, WiFi.softAPmacAddress().c_str(),
sizeof(resp.mac));
304 resp.clients = WiFi.softAPgetStationNum();
306 Log.noticeln(
"SSID: %s", resp.ssid);
307 Log.noticeln(
"IP: %s", resp.url);
308 Log.noticeln(
"MAC: %s", resp.mac);
unsigned int Check()
Health check for API endpoint.
void SetUrl(const char *url)
Set new URL string.
unsigned int SendMeasurement(const uint8_t *meas, size_t meas_len)
Send serialized measurement to the API.
HttpClient GetResponse()
Get the response from the server.
HTTP request parser library.
unsigned int ResponseCode()
Get the http response code.
std::string Data()
Get data from Http request.
size_t OnRequest(uint8_t *buffer)
void OnReceive(const Esp32Command &cmd)
size_t EncodeWiFiCommand(const WiFiCommand *wifi_cmd, uint8_t *buffer, size_t size)
Encodes a WiFiCommand.
bool Disconnect(void)
Disconnect from WiFi.
bool Connect(void)
Connect to WiFi.
Module for WiFi communication.