<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
	<id>https://www.htxarduino.dk/index.php?action=history&amp;feed=atom&amp;title=WeMOS_POST_metode</id>
	<title>WeMOS POST metode - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://www.htxarduino.dk/index.php?action=history&amp;feed=atom&amp;title=WeMOS_POST_metode"/>
	<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=WeMOS_POST_metode&amp;action=history"/>
	<updated>2026-06-10T22:15:10Z</updated>
	<subtitle>Versionshistorie for denne side i HTX Arduino</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.htxarduino.dk/index.php?title=WeMOS_POST_metode&amp;diff=1752&amp;oldid=prev</id>
		<title>Bar: 1 version importeret</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=WeMOS_POST_metode&amp;diff=1752&amp;oldid=prev"/>
		<updated>2022-10-21T12:36:38Z</updated>

		<summary type="html">&lt;p&gt;1 version importeret&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 21. okt. 2022, 14:36&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;da&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Ingen forskel)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
	<entry>
		<id>https://www.htxarduino.dk/index.php?title=WeMOS_POST_metode&amp;diff=1751&amp;oldid=prev</id>
		<title>htx_&gt;Bar med 16. nov. 2020, 12:51</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=WeMOS_POST_metode&amp;diff=1751&amp;oldid=prev"/>
		<updated>2020-11-16T12:51:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{template:WeMOS-software}}&lt;br /&gt;
Den simple måde at sende data til WeMOS er at skrive dem med i URL&amp;#039;en, men det giver sikkerhedsproblemer, og det begrænser også noget hvad man kan sende.&lt;br /&gt;
&lt;br /&gt;
At skrive data i URL&amp;#039;en lægger op til GET-metoden. Hvis man vil undgå det, så skal man bruge &amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039;-metoden.&lt;br /&gt;
&lt;br /&gt;
Dette eksempel tager udgangspunkt i et eksempel fundet ved techtutorialsx.com&amp;lt;ref&amp;gt;[https://techtutorialsx.com/2017/03/26/esp8266-webserver-accessing-the-body-of-a-http-request/ Eksempel på anvendelse af POST-metoden]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Formålet er at opbygge en kode, så man kan sende forskellige ting ind til siden ved hjælp af siden selv.&lt;br /&gt;
&lt;br /&gt;
Hele den gennemgåede kode kan findes i [[media:Wifi-post.zip|Denne ZIP-fil]]&lt;br /&gt;
&lt;br /&gt;
==Variabler og biblioteker==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;ESP8266WiFi.h&amp;gt;&lt;br /&gt;
#include &amp;lt;ESP8266WebServer.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ESP8266WebServer server(80);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
const char* ssid = &amp;quot;ssid-name&amp;quot;;&lt;br /&gt;
const char* password = &amp;quot;ssid-password&amp;quot;;&lt;br /&gt;
*/&lt;br /&gt;
#include &amp;quot;WifiHome.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
boolean LED = LOW;&lt;br /&gt;
int ledPin = 2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Server Connection==&lt;br /&gt;
Til at begynde med sættes LED&amp;#039;en lige op og der klargøres til at skrive ud i [[Serial Monitor]].&lt;br /&gt;
&lt;br /&gt;
Som beskrevet i [[WeMOS Server Connection]] forbindes til Wifi og der sættes en server op. Det er primært i [[setup()]] det sker.&lt;br /&gt;
&lt;br /&gt;
Derefter skrives en hjælpetekst til brugeren:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
  pinMode(ledPin, OUTPUT);&lt;br /&gt;
  digitalWrite(ledPin, HIGH);&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  WiFi.begin(ssid, password);  //Connect to the WiFi network&lt;br /&gt;
&lt;br /&gt;
  while (WiFi.status() != WL_CONNECTED) {  //Wait for connection&lt;br /&gt;
&lt;br /&gt;
    delay(500);&lt;br /&gt;
    Serial.println(&amp;quot;Waiting to connect...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;IP address: &amp;quot;);&lt;br /&gt;
  Serial.println(WiFi.localIP());  //Print the local IP&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Page Address: http://&amp;quot;);&lt;br /&gt;
  Serial.print(WiFi.localIP());&lt;br /&gt;
  Serial.println(&amp;quot;/home&amp;quot;);  //Print the local IP&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det næste er lidt specielt for denne måde at håndtere server på, hvor der etableres forbindelse mellem en del af URL&amp;#039;en (home) og en funktion der servicerer den henvendelse. Det gøres med server.on metoden. :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  server.on(&amp;quot;/home&amp;quot;, handleHome); //Associate the handler function to the path&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Til slut i setup() aktiveres serveren, så man kan henvende sig til den:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  server.begin(); //Start the server&lt;br /&gt;
  Serial.println(&amp;quot;Server listening&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connection response==&lt;br /&gt;
Det eneste der sker i [[loop()]] er at der spørges til om en client har henvendt sig med noget. Det er det der sikrer at handleHome bliver kaldt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void loop() {&lt;br /&gt;
  server.handleClient(); //Handling of incoming requests&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Servicering af home henvendelsen==&lt;br /&gt;
Først sættes det første af svaret til clienten op, som en start på HTML-koden der skal vises:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void handleHome() { //Handler for the body path&lt;br /&gt;
&lt;br /&gt;
  String message = &amp;quot;&amp;lt;!DOCTYPE HTML&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;html&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Som det øverste på siden angives om der er sket en henvendelse til siden, og hvis der er, så angives indholdet af henvendelsen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  if (server.hasArg(&amp;quot;tekst&amp;quot;)== false){ //Check if body received&lt;br /&gt;
    message += &amp;quot;Ingen data fra afsender&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    message += &amp;quot;Der er sendt teksten:&amp;quot;;&lt;br /&gt;
    message += server.arg(&amp;quot;tekst&amp;quot;);&lt;br /&gt;
    message += &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
    message += &amp;quot;LED saettes til: &amp;quot;;&lt;br /&gt;
    message += server.arg(&amp;quot;led&amp;quot;);&lt;br /&gt;
    message += &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hvis der er sendt et argument med i led-feltet, så sættes LED efter det der sendes, og LED&amp;#039;en sættes til det den nu er blevet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  if (server.arg(&amp;quot;led&amp;quot;) == &amp;quot;ON&amp;quot;) {&lt;br /&gt;
    LED = HIGH;&lt;br /&gt;
  } else if (server.arg(&amp;quot;led&amp;quot;) == &amp;quot;OFF&amp;quot;) {&lt;br /&gt;
    LED = LOW;&lt;br /&gt;
  }&lt;br /&gt;
  digitalWrite(ledPin, ! LED); // LED tændes ved at trække lavt, derfor inverteringen&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LED&amp;#039;ens status skrives så i indholdet hvad status er på LED&amp;#039;en:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;LED er &amp;quot;;&lt;br /&gt;
  if(LED == HIGH) {&lt;br /&gt;
    message += &amp;quot;On&amp;lt;br /&amp;gt;&amp;quot;;  &lt;br /&gt;
  } else {&lt;br /&gt;
    message += &amp;quot;Off&amp;lt;br /&amp;gt;&amp;quot;;  &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Som det sidste indhold sættes en HTML-FORM op, så man faktisk kan sende noget til serveren - der er to input-texter, en til en tekst, der bares skrives i henvendelsen, og så en til led, der kan tænde og slukke LED&amp;#039;en med ON og OFF - det skal skrives med stort, ellers ignoreres det. Til slut sendes indholdet tilbage til clienten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;form action=&amp;#039;/home&amp;#039; method=&amp;#039;POST&amp;#039;&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;Input tekst:&amp;lt;input type=&amp;#039;text&amp;#039; name=&amp;#039;tekst&amp;#039; value=&amp;#039;Test af POST&amp;#039;&amp;gt;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;LED ON/OFF:&amp;lt;input type=&amp;#039;text&amp;#039; name=&amp;#039;led&amp;#039; value=&amp;#039;ON&amp;#039;&amp;gt;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;input type=&amp;#039;submit&amp;#039; value=&amp;#039;Submit&amp;#039;&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;/html&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  server.send(200, &amp;quot;text/html&amp;quot;, message);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test af POST-metoden==&lt;br /&gt;
Ved en simpel henvendelse til serveren med URL: &amp;quot;http://192.168.0.14/home&amp;quot; får man følgende visning:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[fil:responsePost1.png|300px|Response på en simpel henvendelse]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Response på en simpel henvendelse&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hvis man blot klikker Submit får man følgende visning og LED&amp;#039;en tændes:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[fil:responsePost2.png|300px|Response på en henvendelse med ON til LED&amp;#039;en]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Response på en henvendelse med ON til LED&amp;#039;en&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
får man følgende visning:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[fil:responsePost3.png|300px|Response på en henvendelse med OFF til LED&amp;#039;en]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Response på en henvendelse med OFF til LED&amp;#039;en&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Videre udvikling med flere undersider==&lt;br /&gt;
Hvis man ønsker at WeMOS&amp;#039;en skal kunne håndtere mere komplekse ting, så kan man lave forskellig respons ved at lave forskellige undersider. Det gøres ved at der etableres ekstra forbindelse til URL&amp;#039;en (fx activate) og en funktion handleActivate() der servicerer den henvendelse. Det gøres ved at lave to kald til server.on metoden. :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  server.on(&amp;quot;/home&amp;quot;, handleHome); //Associate the handler function to the path&lt;br /&gt;
&lt;br /&gt;
  server.on(&amp;quot;/activate&amp;quot;, handleActivate); //Associate the handler function to the path&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For at man kan komme til at bruge siden activate, og måske sende noget til den, så etableres en ekstra HTML-form inde i handleHome funktionen. Den skal have en ny action der henviser til activate som viste her:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;&amp;lt;form action=&amp;#039;/activate&amp;#039; method=&amp;#039;POST&amp;#039;&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;Akteverings-tekst:&amp;lt;input type=&amp;#039;text&amp;#039; name=&amp;#039;ac&amp;#039; value=&amp;#039;Start&amp;#039;&amp;gt;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;input type=&amp;#039;submit&amp;#039; value=&amp;#039;Aktiver&amp;#039;&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der skal så også oprettes den handleActivate, der giver responsen på activate siden - her er den bare lavet uden at den laver noget, men det viser princippet med at man kan komme tilbage til home-siden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void handleActivate() { //Handler for the acticate path&lt;br /&gt;
&lt;br /&gt;
  String message = &amp;quot;&amp;lt;!DOCTYPE HTML&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;html&amp;gt;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  if (server.hasArg(&amp;quot;ac&amp;quot;)== false){ //Check if activate received&lt;br /&gt;
    message += &amp;quot;Ingen data fra afsender&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    message += &amp;quot;Der er sendt Aktiveringsteksten:&amp;quot;;&lt;br /&gt;
    message += server.arg(&amp;quot;ca&amp;quot;);&lt;br /&gt;
    message += &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  message += &amp;quot;Det laver ikke noget i programmet.&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;form action=&amp;#039;/home&amp;#039; method=&amp;#039;POST&amp;#039;&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;input type=&amp;#039;submit&amp;#039; value=&amp;#039;Retur&amp;#039;&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;/html&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  server.send(200, &amp;quot;text/html&amp;quot;, message);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Udvidelse med løbende opdatering af siden==&lt;br /&gt;
Denne udvidelse tager udgangspunkt i [[WeMOS AD-eksempel]], men bliver modificeret så det passer ind i strukturen med ESP8266WebServer biblioteket.&lt;br /&gt;
&lt;br /&gt;
I [[setup()]] tilføjes en handler til den henvendelse der skal kunne opdatere en værdi på siden - her en AD-værdi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  server.on(&amp;quot;/ad&amp;quot;, handleAD); //Associate the handler function to the path&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Til handleren skal der være en handleAD() funktion der blot skal svare med AD tallet i plain text:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void handleAD() { //Handler for the ad path&lt;br /&gt;
&lt;br /&gt;
  String message = String(analogRead(A0));  // Svaret er bare AD-tallet som tekst&lt;br /&gt;
&lt;br /&gt;
  server.send(200, &amp;quot;text/plain&amp;quot;, message);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inde i visningen af siden skal man have tilføjet et felt, hvor værdien skal vises - her vises AD-værdien, så den får en visning fra starten, og span-tagget får et ID=&amp;#039;demo&amp;#039;, så AJAX funktionaliteten kan udskifte indholdet i dette felt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;&amp;lt;p&amp;gt;AD-tallet: &amp;lt;span id=&amp;#039;demo&amp;#039;&amp;gt;&amp;quot;;&lt;br /&gt;
  message += String(analogRead(A0));&lt;br /&gt;
  message += &amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I starten af siden tilføjes et head-tag, der indeholder en javascript-funktion, der kan foretage en HTTP Request, som beder om AD-siden. Når den returnerer AD-værdien, så sætter funktionen den AD-værdi ind i span-tagget med ID&amp;#039;et demo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;&amp;lt;head&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;script&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;function loadDoc() {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  var xhttp = new XMLHttpRequest();&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  xhttp.onreadystatechange = function() {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;    if (this.readyState == 4 &amp;amp;&amp;amp; this.status == 200) {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;      document.getElementById(&amp;#039;demo&amp;#039;).innerHTML =&amp;quot;;&lt;br /&gt;
  message += &amp;quot;      this.responseText;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;    }&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  };&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  xhttp.open(&amp;#039;GET&amp;#039;, &amp;#039;ad&amp;#039;, true);&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  xhttp.send();&amp;quot;;&lt;br /&gt;
  message += &amp;quot;}&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;/script&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;/head&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Endelig skal den sidste del af AJAX-teknikken etableres ved at der indføres et javascript på siden, som opdaterer siden ved at loadDoc() funktionen kaldes hvert sekund:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;&amp;lt;script&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;setInterval(loadDoc, 1000)&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;/script&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Opdatering af Funktionalitet med forms==&lt;br /&gt;
Hvis man gerne vil lave en form-visning afhængig af en værdi i WeMOS&amp;#039;en, så er det lidt mere tricky, for så kan man ikke bare smide HTML-koden ind på siden, når tilstanden er der - det vil gribe forstyrrende ind i indtastningen af værdien. Dette skal løses med en lidt anden teknik.&lt;br /&gt;
&lt;br /&gt;
Her laves således at man kan indtaste et setpunkt på hvornår formen skal vises, så man kan indtaste hvis AD-værdien er over setpunktet, og formen er ikke vist hvis AD-værdien er under setpunktet.&lt;br /&gt;
&lt;br /&gt;
Her skal laves en henvendelse der angiver om formen skal vises. Der skal etableres en handler i [[setup()]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  server.on(&amp;quot;/visning&amp;quot;, handleVisning); //Associate the handler function to the path&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hertil skal der så være en handler-funktion handleVisning(), der svarer om formen skal vises:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void handleVisning() { //Handler for the visning path&lt;br /&gt;
&lt;br /&gt;
  String message = &amp;quot; &amp;quot;;&lt;br /&gt;
  if (analogRead(A0) &amp;gt;= setpunkt) {&lt;br /&gt;
    message += &amp;quot;Vis&amp;quot;;  // Svaret er bare Vis&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  server.send(200, &amp;quot;text/plain&amp;quot;, message);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der skal tilføjes en variabel der indeholder setpunktet, og den initialiseres til 512, som er midt i AD-området:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int setpunkt = 512;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sammen med javascript-funktionen loadDoc() etableres en ny loadDoc2():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;function loadDoc2() {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  var xhttp2 = new XMLHttpRequest();&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  xhttp2.onreadystatechange = function() {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;    if (this.readyState == 4 &amp;amp;&amp;amp; this.status == 200) {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;      if (this.responseText.indexOf(&amp;#039;Vis&amp;#039;) &amp;gt; -1) {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;        document.getElementById(&amp;#039;setForm&amp;#039;).style.display = &amp;#039;block&amp;#039;;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;      } else {&amp;quot;;&lt;br /&gt;
  message += &amp;quot;        document.getElementById(&amp;#039;setForm&amp;#039;).style.display = &amp;#039;none&amp;#039;;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;      }&amp;quot;;&lt;br /&gt;
  message += &amp;quot;    }&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  };&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  xhttp2.open(&amp;#039;GET&amp;#039;, &amp;#039;visning&amp;#039;, true);&amp;quot;;&lt;br /&gt;
  message += &amp;quot;  xhttp2.send();&amp;quot;;&lt;br /&gt;
  message += &amp;quot;}&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sammen med håndteringen af de andre argumenter på siden laves en håndtering af setp-argumentet fra formen med Setpunkt. Der skal også beskyttes mod at man sætter for højt et setpunkt, så man kan komme til at vise formen igen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  if (server.hasArg(&amp;quot;setp&amp;quot;) == true) {&lt;br /&gt;
    setpunkt = server.arg(&amp;quot;setp&amp;quot;).toInt();&lt;br /&gt;
    if (setpunkt &amp;gt;= 1024) {&lt;br /&gt;
      setpunkt = 512;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under visningen af LED&amp;#039;en status laves en visning af hvad setpunkt variablen indeholder:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;Setpunkt er : &amp;quot;;&lt;br /&gt;
  message += String(setpunkt, DEC);&lt;br /&gt;
  message += &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mellem de andre forms placeres en ny form, der har et id=&amp;#039;setForm&amp;#039;, for at man kan henvende sig til den fra loadDoc2(), og den startes med visningen slået fra ved at sætte style til display=none, så man ikke lige får visningen ved første henvendelse, men først når det er konstateret om AD-værdien er over setpunktet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  message += &amp;quot;&amp;lt;form action=&amp;#039;/home&amp;#039; method=&amp;#039;POST&amp;#039; id=&amp;#039;setForm&amp;#039; style=&amp;#039;display=none&amp;#039;&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;Visnings-setpunkt (1 - 1024):&amp;lt;input type=&amp;#039;text&amp;#039; name=&amp;#039;setp&amp;#039; value=&amp;#039;512&amp;#039;&amp;gt;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  message += &amp;quot;&amp;lt;input type=&amp;#039;submit&amp;#039; value=&amp;#039;Nyt Setpunkt&amp;#039;&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visningen i browseren når AD-tallet er over setpunktet er som vist her:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[fil:wemosServerMedSetpunkt.png|350px|Visningen i browseren af webserveren bygget med WeMOS]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Visningen i browseren af webserveren bygget med WeMOS&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Udvidelse med sending af mail ved ændring af setpunkt==&lt;br /&gt;
For at kunne sende information skal der tilføjes en HTTP Client som et bibliotek:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;ESP8266HTTPClient.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det skal oprettes en instans af HTTP Cienten, angives en URL hvor der skal sendes og en variabel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
const String serverAddress = &amp;quot;http://htx-elev.ucholstebro.dk/HX-17-el/bar/&amp;quot;;      // web address for the webserver&lt;br /&gt;
&lt;br /&gt;
int httpCode;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der hvor man læser setpunktet ind fra formen og ændrer setpunkt-variablen skal man sende den henvendelse til siden, der kan sende mail som det er beskrevet i [[WeMOS Mail]].&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
    String stringToSend = serverAddress;  // Serveradressen der skal henvendes til&lt;br /&gt;
    stringToSend += &amp;quot;sendMailSetpunkt.php?setpunkt=&amp;quot;; // Filnavnet og parameter-navn&lt;br /&gt;
    stringToSend += String(setpunkt);                // Indholdet der skal sendes&lt;br /&gt;
    http.setTimeout(2000);                                 // Use 2 seconds timeout for HTTP connection&lt;br /&gt;
    http.begin(stringToSend);                              // Start HTTP connection and send HTTP header&lt;br /&gt;
    httpCode = http.GET();                                 // Get response from HTTP request&lt;br /&gt;
    digitalWrite(ledPin, !digitalRead(ledPin));&lt;br /&gt;
    if(httpCode &amp;gt; 0)                                       // httpCode will be negative on error&lt;br /&gt;
    {      &lt;br /&gt;
      Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode); // Response from server is not an error&lt;br /&gt;
      if(httpCode == HTTP_CODE_OK) {                       // Response from server is HTTP CODE 200&lt;br /&gt;
        String payload = http.getString();&lt;br /&gt;
        Serial.println(payload);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
    }&lt;br /&gt;
    http.end();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For at det skal fungere, så skal der selvfølgelig ligge den PHP-fil der henvises til, og den skal kunne sende en mail. Her er det lavet så det er en fast mailadresse den bruger, så vær lige venlig ikke at bruge samme adresse (jeg videresender ikke). Indholdet af PHP-filen ser ud som følger:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/* &lt;br /&gt;
 * Mail example&lt;br /&gt;
 * Bent Arnoldsen, Holstebro HTX 2018&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
if (isset($_GET[&amp;#039;setpunkt&amp;#039;])) {&lt;br /&gt;
	$setpunkt = $_GET[&amp;#039;setpunkt&amp;#039;];&lt;br /&gt;
	mail(&amp;quot;bar@ucholstebro.dk&amp;quot;, &amp;quot;Mail fra Alarmsystem&amp;quot;, &amp;quot;Der er sat nyt setpunkt : &amp;quot; . $setpunkt);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Mail-System til Setpunkt&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den samlede kode med alle udvidelserne sammen kan hentes i [[media:wifi-post-test2.zip|denne ZIP-fil]].&lt;br /&gt;
&lt;br /&gt;
==Referencer==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Kategori:WeMOS]]&lt;/div&gt;</summary>
		<author><name>htx_&gt;Bar</name></author>
	</entry>
</feed>