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) {
return axios
.put('/api/wifi/connect', {
.post('/api/wifi/connect', {
ssid: ssid,
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
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>
</template>

@ -35,6 +35,18 @@
placeholder="i8n:https://"
></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-card-text>
</v-card>

@ -17,6 +17,118 @@
i8n:saved
</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-card>
<v-card-title class="headline">
@ -25,7 +137,7 @@
<v-card-text>
<v-text-field
v-model="password"
v-model="wifiConnectPassword"
:append-icon="show1 ? 'mdi-eye' : 'mdi-eye-off'"
:type="show1 ? 'text' : 'password'"
label="i8n:Password"
@ -36,14 +148,21 @@
<v-card-actions>
<v-spacer></v-spacer>
<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>
</v-dialog>
<v-card
class="mx-auto"
max-width="300"
max-width="344"
tile
>
<v-list >
@ -86,10 +205,21 @@
data: () => ({
isLoading: true,
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: [],
wifiConnectSSID: null,
wifiConnectModal: false,
wifiConnectSSID: null,
wifiConnectPassword: null,
show1: false,
}),
created () {
@ -141,11 +271,9 @@
},
onWifiConnect() {
// TODO
//this.isLoading = true
//alert("onWifiConnect")
this.isConnecting = true
//apiDevice.wifiConnect()
apiDevice.wifiConnect(this.wifiConnectSSID, this.wifiConnectPassword)
}
}
}

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

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

@ -31,7 +31,8 @@ void setupApp()
server
.serveStatic("/", SPIFFS, "/dist/")
.setDefaultFile("index.html")
.setCacheControl("max-age=600");
//.setCacheControl("max-age=600")
;
setupSettingsGet();
setupSettingsPost();
@ -42,13 +43,28 @@ void setupApp()
// TODO response
server.on("/stats", HTTP_GET, [](AsyncWebServerRequest *request) {
AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument root(1024);
DynamicJsonDocument doc(1024); // TODO
root["heap"] = ESP.getFreeHeap();
root["wifi"] = WiFi.SSID();
root["sleep"] = 97;
doc["wifi"]["ssid"] = WiFi.SSID();
doc["wifi"]["connected"] = WiFi.isConnected();
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);
});
@ -65,10 +81,11 @@ void setupSettingsGet()
AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument root(1024);
//root["wifi_ssid"] = NVS.getString("wifi_ssid");
root["device_mode"] = NVS.getString("device_mode");
root["device_rotation"] = 0;
root["cloud_server"] = NVS.getString("cloud_server");
root["cloud_uuid"] = NVS.getString("cloud_uuid");
root["cloud_user"] = NVS.getString("cloud_user");
serializeJson(root, *response);
request->send(response);
@ -96,6 +113,12 @@ void setupSettingsPost()
NVS.setString("cloud_server", doc["cloud_server"]);
//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", "{}");
} });
@ -104,15 +127,15 @@ void setupSettingsPost()
/**
* @todo
*/
void setupCurrentImage()
{
server.on("/current-image", HTTP_GET, [](AsyncWebServerRequest *request) {
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) {
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/currentImage.bin", "image/x-bmp"); // image/x-bmp | image/vnd.wap.wbmp
//response->addHeader("Content-Encoding", "gzip");
@ -173,9 +196,8 @@ void setupWifiScan()
*/
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);
Serial.println("/api/wifi/connect");
DeserializationError error = deserializeJson(doc, data);
if (error) {
@ -186,14 +208,17 @@ void setupWifiConnect()
}
else
{
if (doc.containsKey("user")) {
//NVS.setString("device_mode", doc["device_mode"]);
if (doc.containsKey("ssid")) {
NVS.setString("wifi_ssid", doc["ssid"]);
Serial.println(doc["ssid"].as<char*>());
}
if (doc.containsKey("password")) {
//NVS.setString("cloud_server", doc["cloud_server"]);
//Serial.println(doc["cloud_server"].as<char*>());
NVS.setString("wifi_password", doc["password"]);
Serial.println(doc["password"].as<char*>());
}
request->send(200, "application/ld+json; charset=utf-8", "{}");
ESP.restart();
} });
}

@ -2,7 +2,7 @@
#include "settings.h"
#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
unsigned long bootTime = 0;
@ -53,6 +53,12 @@ long deviceGetSleepInterval()
return config_DeepSleepInterval;
}
unsigned int deviceGetBootCount()
{
return bootCount;
}
bool isBootTimeOver()
{
return millis() - bootTime >= 60000;

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

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

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

Loading…
Cancel
Save