lots of stuff

pull/1/head
Thomas Ballmann 4 years ago
parent 5f59da46f3
commit 31acb54167

File diff suppressed because one or more lines are too long

@ -67,7 +67,7 @@ export default {
wifiConnect(ssid, password, cb) { wifiConnect(ssid, password, cb) {
return axios return axios
.put('/api/wifi/connect', { .post('/api/wifi/connect', {
ssid: ssid, ssid: ssid,
password: password password: password
}, { }, {

@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.5 100"><defs><style>.cls-1{fill:#1697f6;}.cls-2{fill:#7bc6ff;}.cls-3{fill:#1867c0;}.cls-4{fill:#aeddff;}</style></defs><title>Artboard 46</title><polyline class="cls-1" points="43.75 0 23.31 0 43.75 48.32"/><polygon class="cls-2" points="43.75 62.5 43.75 100 0 14.58 22.92 14.58 43.75 62.5"/><polyline class="cls-3" points="43.75 0 64.19 0 43.75 48.32"/><polygon class="cls-4" points="64.58 14.58 87.5 14.58 43.75 100 43.75 62.5 64.58 14.58"/></svg>

Before

Width:  |  Height:  |  Size: 539 B

@ -4,7 +4,14 @@
grid-list-md grid-list-md
pa-2 pa-2
> >
dashboard... <v-card
class="mx-auto my-12"
max-width="400"
elevation="24"
>
<v-img :aspect-ratio="16/9" src="/current-image"></v-img>
</v-card>
</v-container> </v-container>
</template> </template>

@ -35,6 +35,18 @@
placeholder="i8n:https://" placeholder="i8n:https://"
></v-text-field> ></v-text-field>
<v-text-field
label="i8n:Cloud Token"
v-model="settings.cloud_uuid"
placeholder="########-####-####-####-############"
></v-text-field>
<v-text-field
label="i8n:Cloud User"
v-model="settings.cloud_user"
placeholder="user@domain.io"
></v-text-field>
<v-btn class="mr-4 primary" @click="onSave">i8n:save</v-btn> <v-btn class="mr-4 primary" @click="onSave">i8n:save</v-btn>
</v-card-text> </v-card-text>
</v-card> </v-card>

@ -17,6 +17,118 @@
i8n:saved i8n:saved
</v-snackbar> </v-snackbar>
<!-- status current wifi -->
<v-card
max-width="344"
class="mx-auto"
_color="grey lighten-4"
_flat _height="200px"
>
<v-template v-if="!wifiStats.connected">
<v-card-text>
<v-icon>$signalWifi0</v-icon>
not connected
<v-btn color="primary" depressed small>
i8n:scan
</v-btn>
</v-card-text>
</v-template>
<v-template v-else>
<v-toolbar flat>
<v-toolbar-title class="title font-weight-light">
<v-icon left>$signalWifi3Lock</v-icon>
xd-design.info
</v-toolbar-title>
<v-spacer></v-spacer>
<v-menu offset-y>
<template v-slot:activator="{ on }">
<v-btn icon small v-on="on">
<v-icon>mdi-dots-vertical</v-icon>
</v-btn>
</template>
<v-list>
<v-list-item @click="scan()">
<v-list-item-title>i8n:scan</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-toolbar>
<v-divider class="mx-4"></v-divider>
<v-list dense>
<v-list-item
v-for="(value, key) in wifiStats"
:key="key"
>
<v-list-item-title>{{ key }}</v-list-item-title>
<v-list-item-subtitle class="text-right">
{{ value }}
</v-list-item-subtitle>
</v-list-item>
</v-list>
</v-template>
</v-card>
<v-card
style="display:none"
max-width="344"
class="mx-auto"
>
<v-card-title>
<v-icon
large
left
>
$signalWifi3Lock
</v-icon>
<span class="title font-weight-light">xd-design.info</span>
</v-card-title>
<v-divider></v-divider>
<v-card-text>
<div>connected to</div>
<p class="display-1 text--primary">
xd-design.info
</p>
</v-card-text>
<v-divider></v-divider>
<v-list-item>
<v-list-item-avatar color="grey_">
<v-icon size="25">$signalWifi3Lock</v-icon>
</v-list-item-avatar>
<v-list-item-content>
<v-list-item-title class="headline">xd-design.info</v-list-item-title>
<v-list-item-subtitle>connected to</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-divider class="mx-4"></v-divider>
<v-list dense>
<v-list-item
v-for="(value, key) in wifiStats"
:key="key"
>
<v-list-item-title>{{ key }}</v-list-item-title>
<v-list-item-subtitle class="text-right">
{{ value }}
</v-list-item-subtitle>
</v-list-item>
</v-list>
</v-card>
<br/><br/>
<!-- connect to wifi -->
<v-dialog v-model="wifiConnectModal" max-width="400"> <v-dialog v-model="wifiConnectModal" max-width="400">
<v-card> <v-card>
<v-card-title class="headline"> <v-card-title class="headline">
@ -25,7 +137,7 @@
<v-card-text> <v-card-text>
<v-text-field <v-text-field
v-model="password" v-model="wifiConnectPassword"
:append-icon="show1 ? 'mdi-eye' : 'mdi-eye-off'" :append-icon="show1 ? 'mdi-eye' : 'mdi-eye-off'"
:type="show1 ? 'text' : 'password'" :type="show1 ? 'text' : 'password'"
label="i8n:Password" label="i8n:Password"
@ -36,14 +148,21 @@
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn text @click="wifiConnectModal = false">i8n:Cancel</v-btn> <v-btn text @click="wifiConnectModal = false">i8n:Cancel</v-btn>
<v-btn color="primary darken-1" text @click="onWifiConnect()">i8n:Connect</v-btn> <v-btn
depressed
:loading="isConnecting"
color="primary darken-1"
@click="onWifiConnect()"
>
i8n:Connect
</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
<v-card <v-card
class="mx-auto" class="mx-auto"
max-width="300" max-width="344"
tile tile
> >
<v-list > <v-list >
@ -86,10 +205,21 @@
data: () => ({ data: () => ({
isLoading: true, isLoading: true,
isSnackbar: false, isSnackbar: false,
isConnecting: false,
wifiStats: {
connected: true,
ip: 'xxx.xxx.xxx.xxx',
mac: 'xxxx-xxxx-xxxx-xxxx',
channel: 11,
dns: 'xxx.xxx.xxx.xxx',
gateway: 'xxx.xxx.xxx.xxx',
},
wifiAvailable: [], wifiAvailable: [],
wifiConnectSSID: null,
wifiConnectModal: false, wifiConnectModal: false,
wifiConnectSSID: null,
wifiConnectPassword: null,
show1: false, show1: false,
}), }),
created () { created () {
@ -141,11 +271,9 @@
}, },
onWifiConnect() { onWifiConnect() {
// TODO this.isConnecting = true
//this.isLoading = true
//alert("onWifiConnect")
//apiDevice.wifiConnect() apiDevice.wifiConnect(this.wifiConnectSSID, this.wifiConnectPassword)
} }
} }
} }

@ -7,8 +7,8 @@ module.exports = {
], ],
devServer: { devServer: {
proxy: { proxy: {
'^/api': { '^/': {
target: 'http://192.168.178.65:80', target: 'http://192.168.178.62:80',
ws: true, ws: true,
changeOrigin: true changeOrigin: true
}, },

@ -10,6 +10,7 @@ void loopDevice();
void deviceSetSleepInterval(long interval); void deviceSetSleepInterval(long interval);
long deviceGetSleepInterval(); long deviceGetSleepInterval();
unsigned int deviceGetBootCount();
#endif #endif

@ -31,7 +31,8 @@ void setupApp()
server server
.serveStatic("/", SPIFFS, "/dist/") .serveStatic("/", SPIFFS, "/dist/")
.setDefaultFile("index.html") .setDefaultFile("index.html")
.setCacheControl("max-age=600"); //.setCacheControl("max-age=600")
;
setupSettingsGet(); setupSettingsGet();
setupSettingsPost(); setupSettingsPost();
@ -42,13 +43,28 @@ void setupApp()
// TODO response // TODO response
server.on("/stats", HTTP_GET, [](AsyncWebServerRequest *request) { server.on("/stats", HTTP_GET, [](AsyncWebServerRequest *request) {
AsyncResponseStream *response = request->beginResponseStream("application/json"); AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument root(1024); DynamicJsonDocument doc(1024); // TODO
root["heap"] = ESP.getFreeHeap(); doc["wifi"]["ssid"] = WiFi.SSID();
root["wifi"] = WiFi.SSID(); doc["wifi"]["connected"] = WiFi.isConnected();
root["sleep"] = 97; doc["wifi"]["ip"] = WiFi.localIP();
doc["wifi"]["mac"] = WiFi.macAddress();
doc["wifi"]["channel"] = WiFi.channel();
doc["wifi"]["dns"] = WiFi.dnsIP();
doc["wifi"]["gateway"] = WiFi.gatewayIP();
serializeJson(root, *response); doc["device"]["heap"] = ESP.getFreeHeap();
doc["device"]["bootCycle"] = deviceGetBootCount();
doc["device"]["screen"]["width"] = 640;
doc["device"]["height"]["screen"] = 384;
JsonArray capability = doc.createNestedArray("capability");
capability.add("png");
capability.add("wbmp");
doc["cloud"]["sleep"] = deviceGetSleepInterval();
serializeJson(doc, *response);
request->send(response); request->send(response);
}); });
@ -65,10 +81,11 @@ void setupSettingsGet()
AsyncResponseStream *response = request->beginResponseStream("application/json"); AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument root(1024); DynamicJsonDocument root(1024);
//root["wifi_ssid"] = NVS.getString("wifi_ssid");
root["device_mode"] = NVS.getString("device_mode"); root["device_mode"] = NVS.getString("device_mode");
root["device_rotation"] = 0; root["device_rotation"] = 0;
root["cloud_server"] = NVS.getString("cloud_server"); root["cloud_server"] = NVS.getString("cloud_server");
root["cloud_uuid"] = NVS.getString("cloud_uuid");
root["cloud_user"] = NVS.getString("cloud_user");
serializeJson(root, *response); serializeJson(root, *response);
request->send(response); request->send(response);
@ -96,6 +113,12 @@ void setupSettingsPost()
NVS.setString("cloud_server", doc["cloud_server"]); NVS.setString("cloud_server", doc["cloud_server"]);
//Serial.println(doc["cloud_server"].as<char*>()); //Serial.println(doc["cloud_server"].as<char*>());
} }
if (doc.containsKey("cloud_uuid")) {
NVS.setString("cloud_uuid", doc["cloud_uuid"]);
}
if (doc.containsKey("cloud_user")) {
NVS.setString("cloud_user", doc["cloud_user"]);
}
request->send(200, "application/ld+json; charset=utf-8", "{}"); request->send(200, "application/ld+json; charset=utf-8", "{}");
} }); } });
@ -104,15 +127,15 @@ void setupSettingsPost()
/** /**
* @todo * @todo
*/ */
void setupCurrentImage() void setupCurrentImage()
{ {
server.on("/current-image", HTTP_GET, [](AsyncWebServerRequest *request) { server.on("/current-image", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.println("/current-image"); Serial.println("/current-image");
request->send(SPIFFS, "/currentImage.bin", "image/x-bmp"); //request->send(SPIFFS, "/currentImage.bin", "image/x-bmp");
request->send(SPIFFS, "/blackPNG.png");
}); });
/* /*
server.on("/current-image2", HTTP_GET, [](AsyncWebServerRequest *request) { server.on("/current-image2", HTTP_GET, [](AsyncWebServerRequest *request) {
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/currentImage.bin", "image/x-bmp"); // image/x-bmp | image/vnd.wap.wbmp AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/currentImage.bin", "image/x-bmp"); // image/x-bmp | image/vnd.wap.wbmp
//response->addHeader("Content-Encoding", "gzip"); //response->addHeader("Content-Encoding", "gzip");
@ -173,9 +196,8 @@ void setupWifiScan()
*/ */
void setupWifiConnect() void setupWifiConnect()
{ {
server.on("/api/wifi/connect", HTTP_PUT, [](AsyncWebServerRequest *request) { /* nothing and dont remove it */ }, NULL, [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) { server.on("/api/wifi/connect", HTTP_POST, [](AsyncWebServerRequest *request) { /* nothing and dont remove it */ }, NULL, [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {
DynamicJsonDocument doc(1024); DynamicJsonDocument doc(1024);
Serial.println("/api/wifi/connect");
DeserializationError error = deserializeJson(doc, data); DeserializationError error = deserializeJson(doc, data);
if (error) { if (error) {
@ -186,14 +208,17 @@ void setupWifiConnect()
} }
else else
{ {
if (doc.containsKey("user")) { if (doc.containsKey("ssid")) {
//NVS.setString("device_mode", doc["device_mode"]); NVS.setString("wifi_ssid", doc["ssid"]);
Serial.println(doc["ssid"].as<char*>());
} }
if (doc.containsKey("password")) { if (doc.containsKey("password")) {
//NVS.setString("cloud_server", doc["cloud_server"]); NVS.setString("wifi_password", doc["password"]);
//Serial.println(doc["cloud_server"].as<char*>()); Serial.println(doc["password"].as<char*>());
} }
request->send(200, "application/ld+json; charset=utf-8", "{}"); request->send(200, "application/ld+json; charset=utf-8", "{}");
ESP.restart();
} }); } });
} }

@ -2,7 +2,7 @@
#include "settings.h" #include "settings.h"
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */ #define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */
RTC_DATA_ATTR int bootCount = 0; RTC_DATA_ATTR unsigned int bootCount = 0;
RTC_DATA_ATTR long config_DeepSleepInterval = 10; // sec RTC_DATA_ATTR long config_DeepSleepInterval = 10; // sec
unsigned long bootTime = 0; unsigned long bootTime = 0;
@ -53,6 +53,12 @@ long deviceGetSleepInterval()
return config_DeepSleepInterval; return config_DeepSleepInterval;
} }
unsigned int deviceGetBootCount()
{
return bootCount;
}
bool isBootTimeOver() bool isBootTimeOver()
{ {
return millis() - bootTime >= 60000; return millis() - bootTime >= 60000;

@ -23,7 +23,6 @@ void wbmpOpenFramebuffer()
// TODO do it better :-) // TODO do it better :-)
void wbmpWriteFramebuffer(int offset, uint8_t bitmap[], int c) void wbmpWriteFramebuffer(int offset, uint8_t bitmap[], int c)
{ {
Serial.println("wbmpWriteFramebuffer");
for (int i = 0; i < c; i++) for (int i = 0; i < c; i++)
{ {
_buffer[offset + i] = bitmap[i]; _buffer[offset + i] = bitmap[i];

@ -7,6 +7,9 @@
#include "cloud.h" #include "cloud.h"
#include "app.h" #include "app.h"
#include "imagePNG.h"
#include "imageWBMP.h"
void gotoDeepSleep(); void gotoDeepSleep();
String getWakeupReason(); String getWakeupReason();
@ -23,8 +26,13 @@ void setup()
Serial.println(); Serial.println();
setupDisplay(); setupDisplay();
//setupImagePNG();
//setupImageWBMP();
setupSettings(); setupSettings();
setupDevice(); setupDevice();
setupWlan(); setupWlan();
if (wlan_isConnected()) if (wlan_isConnected())

@ -7,19 +7,14 @@ RTC_DATA_ATTR int wifiFailedCount = 0;
void initClientMode(const char *ssid, const char *password); void initClientMode(const char *ssid, const char *password);
void initAPMode(); void initAPMode();
void setupWlan() void setupWlan()
{ {
Serial.println("setup Wlan"); Serial.println("setup Wlan");
WiFi.setHostname(deviceName); WiFi.setHostname(deviceName);
//NVS.setString("wifi_ssid", "xd-design.info");
//NVS.setString("wifi_password", "SonicHome");
// load wifi settings // load wifi settings
String ssid = NVS.getString("wifi_ssid"); String ssid = NVS.getString("wifi_ssid");
String password = NVS.getString("wifi_password"); String password = NVS.getString("wifi_password");
// TODO count failed connecting wifiFailedCount <=3 // TODO count failed connecting wifiFailedCount <=3
if (!ssid.isEmpty() && !password.isEmpty()) // && wifiFailedCount <=3 if (!ssid.isEmpty() && !password.isEmpty()) // && wifiFailedCount <=3
@ -36,13 +31,35 @@ void setupWlan()
Serial.println("setup Wlan - done"); Serial.println("setup Wlan - done");
} }
void ___connectToNetwork()
{
uint8_t veces = 10;
WiFi.begin("ssid", "password");
Serial.println("Establishing connection to WiFi..");
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println(veces);
if (!veces--)
{
veces = 10;
WiFi.disconnect();
Serial.println("Wifi reset...");
delay(1000);
WiFi.begin("ssid", "password");
Serial.println("Establishing connection to WiFi..");
}
}
Serial.println("Connected to network");
}
void initClientMode(const char *ssid, const char *password) void initClientMode(const char *ssid, const char *password)
{ {
uint8_t veces = 10;
long startMills = millis(); long startMills = millis();
Serial.print(" Connecting to: "); Serial.print(" Connecting to: ");
Serial.print(ssid); Serial.print(ssid);
// print try count // print try count
Serial.print(" ("); Serial.print(" (");
@ -51,7 +68,25 @@ void initClientMode(const char *ssid, const char *password)
// connecting // connecting
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.println(veces);
if (!veces--)
{
veces = 10;
WiFi.disconnect();
Serial.println("Wifi reset...");
delay(500);
WiFi.begin(ssid, password);
Serial.println("Establishing connection to WiFi..");
}
}
/*
while (WiFi.waitForConnectResult() != WL_CONNECTED) while (WiFi.waitForConnectResult() != WL_CONNECTED)
{ {
wifiFailedCount++; wifiFailedCount++;
@ -59,28 +94,27 @@ void initClientMode(const char *ssid, const char *password)
delay(100); delay(100);
ESP.restart(); ESP.restart();
} }
*/
Serial.println(" ...connected"); Serial.println(" ...connected");
Serial.print(" IP address: "); Serial.print(" IP address: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
Serial.print(" connected in: "); Serial.print(" connected in: ");
Serial.println(millis() - startMills); Serial.println(millis() - startMills);
} }
void initAPMode() void initAPMode()
{ {
Serial.println(" init AP (Access Point)"); Serial.println(" init AP (Access Point)");
WiFi.softAP(deviceName); WiFi.softAP("paperdash.io");
IPAddress IP = WiFi.softAPIP(); IPAddress IP = WiFi.softAPIP();
Serial.print(" AP IP address: "); Serial.print(" AP IP address: ");
Serial.println(IP); Serial.println(IP);
} }
bool wlan_isConnected() bool wlan_isConnected()
{ {
return WiFi.isConnected(); return WiFi.isConnected();

Loading…
Cancel
Save