1 | /**
|
2 | * WEB client interface Temperature-Control for DS18B20 (Dallas)
|
3 | * Version 1.00
|
4 | * 11.02.2023 P. Rebesky
|
5 | * author Creator P.Rebesky
|
6 | * Copyright (©): 2023 by Peter Rebesky
|
7 | * This code can use in private cases only. Every business or companies using of this codes or codes parts is required an approval of us (me)
|
8 | * Every private using can exchange some parts of code or modify some code-lines. This code is allowed change for private use only.
|
9 | * This software is basicly owned by Peter Rebesky and any comercial using is forbidden without approval of us (me).
|
10 | **/
|
11 | #ifndef WEB_CLIENT_H_
|
12 | #define WEB_CLIENT_H_
|
13 |
|
14 | #include "global.h"
|
15 | #include "configFS.h"
|
16 |
|
17 | extern configFS Config;
|
18 |
|
19 | extern String getFilesFromServer(IPAddress ip,String actVersion, String updateServer);
|
20 | extern String getTime2String(int hour,int minute,int second);
|
21 | extern String getDate2String(int year,int month,int day);
|
22 | extern bool syncron_NTP_Time(bool correctOn);
|
23 | extern void getTime2Value();
|
24 |
|
25 | //*** declarations ***
|
26 | String prepareRefreshJSON();
|
27 | String showSetup();
|
28 | //*** declaration end ***//
|
29 |
|
30 | String webSave(String PostValues){
|
31 | Config.savePostValues(PostValues);
|
32 | String ret = HTTP_ANSWER;
|
33 | ret += HTTP_HEAD_IoT;
|
34 | ret += "<title>"; ret += Config.getName(); ret += "</title>";
|
35 | ret += HTTP_BODYSTYLE; ret += "<body>";
|
36 | ret += HTTP_DIV_FIELD;
|
37 | // ret += PostValues;
|
38 | ret += "<p><b>Ihre Eingaben wurden gespeichert.</b></p>";
|
39 | ret += "<hr><p><form action=\"back\" method=\"get\"><button type=\"submit\">OK</button></form></p>";
|
40 | ret += HTTP_TEXT_END;
|
41 | return ret;
|
42 | }
|
43 | //*** end ***
|
44 |
|
45 | String webSetup(){
|
46 | String ret = HTTP_ANSWER; String checkedJSON; String checkedURL; String checkedPush; String checkedPull;
|
47 | ret += HTTP_HEAD_IoT;
|
48 | ret += "<title>"; ret += Config.getName(); ret += "</title>";
|
49 | ret += HTTP_BODYSTYLE; ret += "<body>";
|
50 | ret += HTTP_DIV_FIELD;
|
51 | ret += "<h3>IoT Einstellungen</h3>";
|
52 | ret += "<form action=\"save\" method=\"post\">";
|
53 | ret += "<input type=\"number\" name=\"d_data\" value=\"1\" hidden>";
|
54 | ret += "<p><label>IoT Name:</label><br><input type=\"text\" name=\"n_iot\" maxlength=\"32\" value=\""; ret += Config.getName(); ret += "\" required></p><hr>";
|
55 | ret += "<p><label>Name Temperatursensor 1:</label><br><input type=\"text\" name=\"n_sens1\" maxlength=\"32\" value=\""; ret += Config.getSensorName(1); ret += "\"></p>";
|
56 | ret += "<p><label>Name Temperatursensor 2:</label><br><input type=\"text\" name=\"n_sens2\" maxlength=\"32\" value=\""; ret += Config.getSensorName(2); ret += "\"></p>";
|
57 | ret += "<p><label>Name Temperatursensor 3:</label><br><input type=\"text\" name=\"n_sens3\" maxlength=\"32\" value=\""; ret += Config.getSensorName(3); ret += "\"></p>";
|
58 | ret += "<p><label>Name Temperatursensor 4:</label><br><input type=\"text\" name=\"n_sens4\" maxlength=\"32\" value=\""; ret += Config.getSensorName(4); ret += "\"></p><hr>";
|
59 | ret += "<p>Send Data to Server as:<br>";
|
60 | if(Config.sendJSON) checkedJSON="checked"; else checkedURL="checked"; // set checked input radio button according config
|
61 | ret += "<input style=\"width:10%\" type=\"radio\" name=\"c_type\" value=\"1\""; ret+=checkedJSON; ret+="><label>JSON</label>";
|
62 | ret += "<input style=\"width:10%\" type=\"radio\" name=\"c_type\" value=\"0\""; ret+=checkedURL; ret+="><label>URL-encoded</label></p>";
|
63 | ret += "<p>Send data as push or get data by server:<br>";
|
64 | if(Config.sendPUSH) checkedPush="checked"; else checkedPull="checked"; // set checked input radio button according config
|
65 | ret += "<input style=\"width:10%\" type=\"radio\" name=\"c_push\" value=\"1\""; ret+=checkedPush; ret+="><label>push</label>";
|
66 | ret += "<input style=\"width:10%\" type=\"radio\" name=\"c_push\" value=\"0\""; ret+=checkedPull; ret+="><label>get</label></p>";
|
67 | ret += "<p><label>Daten-Server:</label><br><input type=\"text\" name=\"t_url\" maxlength=\"64\" value=\""; ret += Config.getTargetURL(); ret += "\" required></p>";
|
68 | ret += "<hr>";
|
69 | ret += "<p><button type=\"submit\">Speichern</button>";
|
70 | ret += "<button type=\"submit\" formaction=\"back\">Zurück</button></p></form>";
|
71 | ret += "<br><a href=\"firmware\">Check for update firmware</a>";
|
72 | ret += "<br><hr><p><a href=\"http://";
|
73 | ret += Config.getTargetServer();
|
74 | ret += "/help.html\"/help.html\">Beschreibung</a></p>";
|
75 | ret += HTTP_TEXT_END;
|
76 | return ret;
|
77 | }
|
78 | //*** end ***
|
79 |
|
80 | String webShowSetup(){
|
81 | String ret = HTTP_ANSWER;
|
82 | ret += HTTP_BODYSTYLE; ret += "<body>";
|
83 | ret += HTTP_DIV_FIELD;
|
84 | ret += showSetup(); //debug
|
85 | ret += HTTP_TEXT_END;
|
86 | return ret;
|
87 | }
|
88 | //*** end ***
|
89 |
|
90 | String webFavicon(){
|
91 | String ret = HTTP_ANSWER;
|
92 | ret += "none";
|
93 | return ret;
|
94 | }
|
95 | //*** end ***
|
96 |
|
97 | String webMain(String payload){ // Prepare the response main screen
|
98 | String ret = HTTP_ANSWER;
|
99 | ret += HTTP_HEAD_REFRESH;
|
100 | ret += "<title>"; ret+=Config.getName(); ret+="</title>";
|
101 | ret += HTTP_BODYSTYLE; ret += "</body>";
|
102 | ret += HTTP_DIV_FIELD;
|
103 | ret += "<p><b>"; ret+=Config.getName(); ret+="</b></p>";
|
104 | ret += "<p>Zeit: <a style=\"text-decoration:none\" href=\"setTime\">🔄</a><br>";
|
105 | ret += "<input id=\"time\" value=\""; ret += getTime2String(_act_date_time[_HOUR],_act_date_time[_MINUTE],_act_date_time[_SECOND]); ret += "\" readonly><br>";
|
106 | ret += "Datum:<br><input value=\""; ret += getDate2String(_act_date_time[_YEAR],_act_date_time[_MONTH],_act_date_time[_DAY]); ret += "\" readonly><br>";
|
107 | ret += "IoT-IP:<br><input value=\""; ret += WiFi.localIP().toString(); ret += "\" readonly></p>";
|
108 | ret += "<hr><p>Server Sendestatus:<br>";
|
109 | if(_transmitResult != "") ret += _transmitResult;
|
110 | else { ret += Config.getName(); if(Config.sendPUSH)ret+=" Push-Mode"; else ret+=" Pull-Mode";}
|
111 | ret += "</p><hr>";
|
112 | ret += "Temperatur "; ret+=Config.getSensorName(1); ret+=":<br><input id=\"temp1\" value=\""; ret += _temperature1; ret += " °C\" readonly><br>";
|
113 | if(_temperature2 > -100){ret += "Temperatur "; ret+=Config.getSensorName(2); ret+=":<br><input id=\"temp2\" value=\""; ret += _temperature2; ret += " °C\" readonly><br>";}
|
114 | if(_temperature3 > -100){ret += "Temperatur "; ret+=Config.getSensorName(3); ret+=":<br><input id=\"temp3\" value=\""; ret += _temperature3; ret += " °C\" readonly><br>";}
|
115 | if(_temperature4 > -100){ret += "Temperatur "; ret+=Config.getSensorName(4); ret+=":<br><input id=\"temp4\" value=\""; ret += _temperature4; ret += " °C\" readonly><br>";}
|
116 | ret += "<hr>";
|
117 | ret += "<p>Softwareversion: ";
|
118 | ret += Version;
|
119 | ret += "</p>";
|
120 | ret += HTTP_SETUP_BUTTON;
|
121 | ret += HTTP_JS_SCRIPT;
|
122 | return ret;
|
123 | }
|
124 | //*** end ***
|
125 | //*** refresh clock and date ***/
|
126 | String webSetTime(){
|
127 | String ret = HTTP_ANSWER;
|
128 | ret += HTTP_BODYSTYLE; ret += "<body>";
|
129 | ret += HTTP_DIV_FIELD;
|
130 | ret += "<h4>Die Uhr wird jetzt neu synchronisiert.</h4>";
|
131 | ret += "<p>Zeit:<br><input value=\""; ret += getTime2String(_act_date_time[_HOUR],_act_date_time[_MINUTE],_act_date_time[_SECOND]); ret += "\" readonly><br>";
|
132 | ret += "Unix-Time: "; ret += _timestamp; ret +="<br>";
|
133 | if (syncron_NTP_Time(true) == true){
|
134 | getTime2Value();
|
135 | ret += "Neue Zeit:<br><input value=\""; ret += getTime2String(_act_date_time[_HOUR],_act_date_time[_MINUTE],_act_date_time[_SECOND]); ret += "\" readonly><br>";
|
136 | ret += "Unix-Time: "; ret += _timestamp; ret +="<br>";
|
137 | } else {
|
138 | ret += "NTP Serverfehler! Aktuallisierung nicht erfolgt.<br>Bitte eine Wartezeit von 2 Minuten,<br>bis zur wiederholten, manuellen Aktuallisierung einhalten.<br>";
|
139 | }
|
140 | ret += "</p><hr><p><form action=\"back\" method=\"get\"><button type=\"submit\">OK</button></form></p>";
|
141 | ret += HTTP_TEXT_END;
|
142 | return ret;
|
143 | }
|
144 | //**** refresh for browser screen of values *********//
|
145 | String getRefreshJSON(){
|
146 | String ret = HTTP_ANSWERJSON;
|
147 | ret += prepareRefreshJSON();
|
148 | return ret;
|
149 | }
|
150 |
|
151 | //***** get return internal values and display on browser *****//
|
152 | String showSetup(){
|
153 | DeviceAddress tAddress;
|
154 | String ret = "<h4>System Variablen</h4><hr>";
|
155 | ret += "<p>";
|
156 | ret += "URL: -"; ret += Config.getTargetURL(); ret +="-<br>";
|
157 | ret += "Update-Server: -"; ret += Config.getTargetServer(); ret+="-<br>";
|
158 | ret += "Timestamp: -"; ret +=_timestamp; ret +="-<br>";
|
159 | ret += "AdjustSec: -"; ret +=_secAdjust; ret +="-<br>";
|
160 | ret += "Connect-Sensors: -"; ret +=_numberOfSensors; ret +="-<br>";
|
161 | ret += "Filesystem: ";
|
162 | if(Config.getMounted()) {ret+="Filesystem mounted.<br>Free-Space: "; ret+=Config.getFreeSpace(); ret+="kByte";}
|
163 | else ret += "Filesystem not mounted!";
|
164 | ret +="<br>";
|
165 | ret +="</p>";
|
166 | ret += "</p><hr><p><form action=\"back\" method=\"get\"><button type=\"submit\">OK</button></form></p>";
|
167 | return ret;
|
168 | }
|
169 | //***** get return json for refresh display on browser or *****//
|
170 | String prepareRefreshJSON(){
|
171 | String json = "{\"ti\":\""; json+=getTime2String(_act_date_time[_HOUR],_act_date_time[_MINUTE],_act_date_time[_SECOND]); json+="\",";
|
172 | json += "\"t1\":"; json+=_temperature1; json+=",";
|
173 | json += "\"t2\":"; json+=_temperature2; json+=",";
|
174 | json += "\"t3\":"; json+=_temperature3; json+=",";
|
175 | json += "\"t4\":"; json+=_temperature4; json+="}";
|
176 | return json;
|
177 | }
|
178 |
|
179 | //*** end ***
|
180 | #endif //*** WEB_CLIENT_H_
|