some improvements

This commit is contained in:
Wolfgang Hottgenroth 2018-05-24 01:02:39 +02:00
parent 691f46dd91
commit 35e30abd69
Signed by: wn
GPG Key ID: B586EAFCDF2F65F4
6 changed files with 21 additions and 266 deletions

5
dist/main.js vendored
View File

@ -25,7 +25,7 @@ function getToc() {
logger.info("building toc");
let toc = "";
let posts = fs.readdirSync('./docroot/posts');
posts.forEach((v) => {
posts.sort().reverse().forEach((v) => {
let content = fs.readFileSync(`./docroot/posts/${v}/article.pag`);
let contentStr = content.toString();
let pageOptions = getPageOptions(contentStr);
@ -89,7 +89,8 @@ app.get('/reload', (req, res) => {
cache = {};
toc = getToc();
masterTmpl = fs.readFileSync('./docroot/master.tmpl').toString();
res.send('reload triggered');
let base = req.headers['x-proxy-original-url'] || "/";
res.redirect(`${base}index`);
});
app.use('/files', express.static('files'));
masterTmpl = fs.readFileSync('./docroot/master.tmpl').toString();

2
dist/main.js.map vendored
View File

@ -1 +1 @@
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}

View File

@ -2,19 +2,25 @@
<h1>So ugly ... why not Wordpress?</h1>
<p>
I shut down my homepage at wordpress.com since it wasn't absolutely unclear to me which data was collected there. I decided to run the homepage on my own server again, since I know exactly which data is collected here: There is the Apache log with the requesters IP stripped away:
I shut down my homepage at wordpress.com since it was absolutely unclear to me which data was collected there. I decided to run the homepage on my own server again, since I know exactly which data is collected here: There is the Apache log with the requesters IP stripped away:
</p>
<p>
<pre>
<code language="Apache">
CustomLog "logs/access_log" common
#LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%l %u %t \"%r\" %>s %b" common
</pre>
</code>
</p>
<p>
Nothing else. And since I'm quite bad in CSS, it currently looks so ugly.
Nothing else. The homepage engine just logs which post or page is accessed and served, nothing more. If you like to have a look: <a href="https://gitlab.com/wolutator/homepage" target="_blank">https://gitlab.com/wolutator/homepage</a>.
</p>
<p>
And since I'm quite bad in CSS, it currently looks so ugly.
</p>

View File

@ -26,6 +26,7 @@
<div class="footer">
<a href="pages/impressum">Impressum</a>
<a href="reload">Reload</a>
</div>
</body>
</html>

View File

@ -1,4 +1,6 @@
<!-- { "title": "Configuration-Webserver for ESP8266 Projects" } -->
<h1>#title#</h1>
<p>
In my previous ESP8266 based weekend projects I always hardcoded configuration data. For the ESP8266 these are at least the WiFi credentials SSID and WPA key. Moving it into a different WiFi network requires re-flashing it. There must be a better way I thought and found that's a single line of code to run the ESP8266 as an accesspoint, which opens its own WiFi network.
</p>
@ -41,270 +43,14 @@ open('configuration.cpp','w').write(str(c_file))
</p>
<p>
The two templates are:
Using the both templates for a <a href="https://gitlab.com/wolutator/EspThermometer2/blob/master/ConfigGenerator/configuration_c.tmpl" target="_blank">C-</a> and a <a href="https://gitlab.com/wolutator/EspThermometer2/blob/master/ConfigGenerator/configuration_h.tmpl" target="_blank">H-</a>file all the code for the configuration web page, the EEPROM handling code and the code to access the configuration variables is generated.
</p>
<p>
<pre>
<code "language"="C">
typedef struct {
#for $configItem in $configItems
#if $configItem.type == 'C'
char ${configItem.key}[$configItem.length];
#else if $configItem.type == 'I'
uint32_t $configItem.key;
#end if
#end for
} tConfigBlock;
extern const uint32_t MAGIC;
extern tConfigBlock configBlock;
void configServeIndex();
void configServeGetConfiguration();
void showConfiguration();
</code>
</pre>
The functions provided using these templates in turn a call from a rather simple <a href="https://gitlab.com/wolutator/EspThermometer2/blob/master/configurationMode.cpp" target="_blank">configuration mode</a>. In pure configuration mode (when the device is unconfigured or the configuration mode is requested using a pulled-down pin) a new WLAN will be opened using the accesspoint functionality of the ESP8266. In production mode, the configuration accesspoint is not started, however, the configuration mode webserver is started nevertheless.
</p>
<p>
And:
</p>
<p>
<pre>
<code language="C">
#raw
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include "defines.h"
#include "configuration.h"
#end raw
tConfigBlock configBlock;
const uint32_t MAGIC = 0xC0DE0001;
extern ESP8266WebServer webServer;
bool configSaved = false;
void configServeIndex() {
bool configValid = (configBlock.magic == MAGIC);
if (! configValid) {
#for $configItem in $configItems
#if $configItem.label != "_"
#if $configItem.type == "C"
strcpy(configBlock.$configItem.key, "$configItem.default");
#else if $configItem.type == "I"
configBlock.$configItem.key = $configItem.default;
#end if
#end if
#end for
}
String buffer =
"<!doctype html"
"<html lang=\"en\">"
" <head>"
" <title>ESP8266 Thermometer Configuration Page</title>"
" </head>"
" <body>"
" <h1>ESP8266 Configuration Page</h1>";
if (configSaved) {
configSaved = false;
buffer += "<h2>Configuration saved</h2>";
}
buffer +=
" <form action=\"/config\" method=\"GET\">"
" <table>"
#for $configItem in $configItems
#if $configItem.label != "_"
" <tr>"
" <td>"
" <label for\"$configItem.key\">$configItem.label</label>"
" </td><td>"
" <input type=\"text\" name=\"$configItem.key\" id=\"$configItem.key\" ";
#if $configItem.type == "C"
buffer += " size=\"$configItem.length\" ";
buffer += " value=\"";
buffer += configBlock.$configItem.key;
buffer += "\"";
#else if $configItem.type == "I"
buffer += " value=\"";
buffer += configBlock.$configItem.key;
buffer += "\"";
#end if
buffer +=
" />"
" </td>"
" </tr>"
#end if
#end for
" <tr>"
" <td colspan=\"2\">"
" <button type=\"submit\">Save</button>"
" </td>"
" </tr>"
" </table>"
" </form>"
" </body>"
"</html>";
webServer.send(200, "text/html", buffer);
#ifdef DEBUG
Serial.println("indexHtml request served");
#endif
}
void configServeGetConfiguration() {
String arg;
#for $configItem in $configItems
#if $configItem.label != "_"
arg = webServer.arg("$configItem.key");
#if $configItem.type == "C"
strcpy(configBlock.$configItem.key, arg.c_str());
#else if $configItem.type == "I"
configBlock.$configItem.key = atoi(arg.c_str());
#end if
#end if
#end for
configBlock.magic = MAGIC;
showConfiguration();
EEPROM.begin(512);
EEPROM.put(EEPROM_ADDR, configBlock);
EEPROM.commit();
Serial.println("EEPROM saved");
configSaved = true;
webServer.sendHeader("Location", String("/"), true);
webServer.send(302, "text/plain", "");
//webServer.send(200, "text/html", "configuration saved");
}
void showConfiguration() {
Serial.println("Configuration is");
#for $configItem in $configItems
Serial.print("$configItem.key = ");
Serial.println(configBlock.$configItem.key);
#end for
Serial.println("---");
}
</code>
</pre>
</p>
<p>
Besides these generated files I also needed a framework to distinguish between "configuration mode" and "production mode" and in configuration mode to start the WiFi accesspoint.
</p>
<p>
Since I'm programming the ESP8266 in an Eclipse-based Arduino-environment, this is all done in the <code>setup()</code> and <code>loop()</code> function:
</p>
<p>
<pre>
<code language="C">
// Do not remove the include below
#include "EspThermometer2.h"
#include "defines.h"
// #define ESP8266
#include <EEPROM.h>
#include "configuration.h"
#include "productionMode.h"
#include "configurationMode.h"
ADC_MODE(ADC_VCC);
bool configMode = false;
uint32_t startTime = 0;
void setup() {
startTime = millis();
#ifdef DEBUG
Serial.begin(115200);
Serial.println("Starting ...");
#endif
pinMode(CONFIG_SWITCH, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
EEPROM.begin(512);
EEPROM.get(EEPROM_ADDR, configBlock);
Serial.print("Magic: ");
Serial.println(configBlock.magic);
configMode = ((LOW == digitalRead(CONFIG_SWITCH)) || (configBlock.magic != MAGIC));
if (configMode) {
#ifdef DEBUG
Serial.println("Configuration mode");
#endif
digitalWrite(LED_PIN, LOW);
setupConfigurationNetwork();
setupConfigurationServer();
} else {
#ifdef DEBUG
Serial.println("Production mode");
Serial.println();
Serial.println();
showConfiguration();
#endif
digitalWrite(LED_PIN, HIGH);
setupProduction();
setupConfigurationServer();
}
#ifdef DEBUG
Serial.println("Started.");
#endif
}
void loop() {
if (configMode) {
loopConfiguration();
} else {
loopProduction();
}
}
</code>
</pre>
</p>
<p>
This code can be also found embedded into two of my projects. Find them at <a href="https://gitlab.com/wolutator/EspThermometer2" target="_blank">https://gitlab.com/wolutator/EspThermometer2</a> and <a href="https://gitlab.com/wolutator/TouchSwitch" target="_blank">https://gitlab.com/wolutator/TouchSwitch</a>.
This code can be also found embedded in several of my projects. Find them at <a href="https://gitlab.com/wolutator/EspThermometer2" target="_blank">https://gitlab.com/wolutator/EspThermometer2</a>, <a href="https://gitlab.com/wolutator/TouchSwitch" target="_blank">https://gitlab.com/wolutator/TouchSwitch</a>, <a href="https://gitlab.com/wolutator/MySwitch" target="_blank">https://gitlab.com/wolutator/MySwitch</a>, <a href="https://gitlab.com/wolutator/RainSensor" target="_blank">https://gitlab.com/wolutator/RainSensor</a> and <a href="https://gitlab.com/wolutator/TwoLedSignal" target="_blank">https://gitlab.com/wolutator/TwoLedSignal</a>.
</p>

View File

@ -111,7 +111,8 @@ app.get('/reload', (req, res) => {
cache = {}
toc = getToc()
masterTmpl = fs.readFileSync('./docroot/master.tmpl').toString()
res.send('reload triggered')
let base = req.headers['x-proxy-original-url'] || "/"
res.redirect(`${base}index`)
})
app.use('/files', express.static('files'))