Android Studio - Jak na date přes web

Programování pro mobilní telefony, hodinky, Android, iOS, Windows Phone

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Le_Ze 25. 4. 2021 08:37

Zdravím.
Jsem zkoušel toto a není to co potřebují. Stahne to a vypiše obsah web stranky.
https://developer.android.com/training/volley/simple

Když mám na web strance jen echo("test");
Jak přes AS zavolam tu web stranku a stahnu ten vypsany text?


A druhý dotaz ;-)

Mám ESP8266 a odesilam data na web.
Kód: Vybrat vše
  WiFiClient client;
      HTTPClient http;
      http.begin(client, "http://192.168.1.5/nacti.php");
      http.addHeader("Content-Type", "text/plain");
      String payload = http.getString();
      http.end();


A da se to odchytít na te web strnce.
$data = file_get_contents('php://input');

Jak na to přes AS?

Děkují.
Le_Ze
Junior

Odeslat příspěvekod Just_jo 25. 4. 2021 09:04

1. Zkus něco z tohoto https://www.tutorialspoint.com/how-to-r ... ng-in-java

2. Nějak nechápu co chceš dělat přes AS
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Le_Ze 25. 4. 2021 09:41

Odeslat nějaký řetězec.
Třeba mam po zahradě teplotní čidla na ESP-01

Kód: Vybrat vše
data = teplota + "|" + vlhkost + "|" + WiFi.RSSI()+ "|";     
   }

   if (WiFi.status() == WL_CONNECTED)
      {
      Serial.println(WiFi.RSSI()); // sila signalu
      WiFiClient client;
      HTTPClient http;
      http.begin(client, "http://192.168.1.5/nacti.php");
      http.addHeader("Content-Type", "text/plain");
      String payload = http.getString();
      http.end();
    }

https://php.baraja.cz/metody-odesilani-dat

A přes PHP to odchytim a uložim do souboru.

Kód: Vybrat vše
<?php
$data = file_get_contents('php://input');
$array = explode("|", $data);
file_put_contents('./shm/text.txt', $data);
file_put_contents('./shm/teplota_venku', $array[0]);
file_put_contents('./shm/vlhkost_venku', $array[1]);
file_put_contents('./shm/signal_venku', $array[2]);
?>


Odesilat data s prametrem už umím.
http://192.168.1.5/script.php?promenna= ... nna2=obsah
https://www.instructables.com/Control-A ... d-Android/
Le_Ze
Junior

Odeslat příspěvekod Just_jo 25. 4. 2021 17:00

Z úryvků kódu to vypadá na to, že ti někde na lokální síti běží webový server ( Win/Lin ), na který se připojí arduino a pošle data.

Tak co chceš posílat z androidu za text? Nestačí jen url, která vrátí data?
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Le_Ze 25. 4. 2021 19:17

Web servr je na raspi a ESP-01 posila data.
Stejným zpusobem bych potřeboval. aby ty data odesilal mobil.
Promin, asi jsem se špatně vyjadřil.
Le_Ze
Junior

Odeslat příspěvekod soban 25. 4. 2021 19:57

Nějak nechápu kde je problém?

Prostě na ESP-01 mám program který čte teplotu a tomu ESP-01 přidělím statickou IP a pak hodnotu můžu číst z jakéhokoliv zařízení.

Takže si ji zobrazím i na mobilu a řídící server si ji taky může přečíst a podle toho spínat další relé....

Při zadání "http://IP_cidla/" to vypíše html stránku s teplotou
Při zadání "http:/IP_cidla/teplota" to pošle pouze txt znaky - string teploty.

Kód: Vybrat vše
// ESP Web Server
// kompatibilní s ESP8266

// připojení potřebných knihoven
  #include <ESP8266WiFi.h>
  #include <WiFiClient.h>
  #include <ESP8266WebServer.h>
  #include <ESP8266mDNS.h>
  #include <OneWire.h>
  #include <DallasTemperature.h>
 

#define VERZE "v1.0c"

// vytvoření proměnných s názvem WiFi sítě a heslem
#define NAZEVWIFI "mojewifi"
#define HESLOWIFI "heslo"
#define NAZEV "cidlo1"

// GPIO where the DS18B20 is connected to
const int oneWireBus = 2; 
DeviceAddress Sump;

// části www stránek
#define WWW_UVOD "<!doctype html><div style=\"text-align: center\"><h1>Teplotní čidlo: 1</h1>"

#define WWW_ODDELOVAC "<hr align=\"center\" width=\"95%\" />"
#define WWW_PATICKA   "<p>&copy; " __DATE__ " Petr Šobáň " VERZE " (" __TIME__ ")</p></div>"

#define SERVERFIRMWARE WWW_UVOD" "WWW_ODDELOVAC"<p>Upgrade firmware!</p><p style=\"color: red\">Update špatného souboru může znefunkčnit zařízení!!!!</p>"WWW_ODDELOVAC"<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>"WWW_ODDELOVAC" "WWW_PATICKA
#define RESTART         "......Restart......"

//------------------------------------------------------------

// incializace webserveru na portu 80

  ESP8266WebServer server(80);

// Setup a oneWire instance to communicate with any OneWire devices
  OneWire oneWire(oneWireBus);

// Pass our oneWire reference to Dallas Temperature sensor
  DallasTemperature sensors(&oneWire);

// ---------------------------------------------
// Podprogramy pro teplotni cidlo

String readDSTemperatureC(){
  // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  if(tempC == -127.00) return "--";
 
  return String(tempC);
}

// podprogram s hlavní zprávou, která je vytištěna
// při zadání IP adresy do prohlížeče
void zpravaHlavni() {
  String teplota = readDSTemperatureC();
  // vytvoření zprávy, která bude vytištěna
  String zprava = WWW_UVOD;
  zprava += WWW_ODDELOVAC;
  zprava += "<p>Teplota: ";
  zprava += teplota;
  zprava += "°C</p>";
  zprava += WWW_ODDELOVAC;
  zprava += WWW_PATICKA;
 
  server.sendHeader("Cache-Control","no-store, max-age=0");
  // vytištění zprávy se statusem 200 - OK
  server.send(200, "text/html;charset=utf-8", zprava);
}

// podprogram s chybovou zprávou, která je vytištěna
// při zadání IP adresy s neexistující podstránkou
void zpravaNeznamy() {
  // vytvoření zprávy s informací o neexistujícím odkazu
  // včetně metody a zadaného argumentu
  String zprava = "Neexistujici odkaz\n\n";
  zprava += "URI: ";
  zprava += server.uri();
  zprava += "\nMetoda: ";
  zprava += (server.method() == HTTP_GET) ? "GET" : "POST";
  zprava += "\nArgumenty: ";
  zprava += server.args();
  zprava += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    zprava += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }

  server.sendHeader("Cache-Control","no-store, max-age=0");
  // vytištění zprávy se statusem 404 - Nenalezeno
  server.send(404, "text/plain", zprava);
}

//--------------------------------------------------------
// Konec podprogramů

void setup() {
  Serial.begin(9600);

// Start the DS18B20 sensor
  sensors.begin();
  sensors.getAddress(Sump, 0);
  // set the resolution to 11 bit - Valid values are 9, 10, or 11 bit.
  sensors.setResolution(Sump, 9);

  /*
   * Resolution   Increment     Time
   *  9 bit       0.5    °C      93.75 mSec
   * 10 bit       0.25   °C     187.5  mSec
   * 11 bit       0.125  °C     375    mSec
   * 12 bit       0.0625 °C     750    mSec
   */

  // zahájení komunikace po WiFi s připojením
  // na router skrze zadané přihl. údaje
  WiFi.mode(WIFI_STA);
  WiFi.begin(NAZEVWIFI, HESLOWIFI);
  // čekání na úspěšné připojení k routeru,
  while (WiFi.status() != WL_CONNECTED) delay(500);
  MDNS.begin(NAZEV);
 
  // nastavení vytištění hlavní zprávy po přístupu
  // na samotnou IP adresu
  server.on("/", zpravaHlavni);

  server.on("/teplota", []() {
    String zprava = readDSTemperatureC();
    server.send(200,"text/plain", zprava);
  });
 
  // nastavení vytištění informací o neznámém
  // odkazu pomocí podprogramu zpravaNeznamy
  server.onNotFound(zpravaNeznamy);

  server.on("/restart", []() {
    server.send(200,"text/plain", RESTART);
    delay(500);
    ESP.restart();
  });

// upgrade http -----------------------------------------------------

    server.on("/firmware", HTTP_GET, []() {
      server.sendHeader("Connection", "close");
      server.send(200, "text/html;charset=utf-8", SERVERFIRMWARE);
    });
    server.on("/update", HTTP_POST, []() {
      server.sendHeader("Connection", "close");
      server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
      delay(500);
      ESP.restart();
    }, []() {
      HTTPUpload& upload = server.upload();
      if (upload.status == UPLOAD_FILE_START) {
        Serial.setDebugOutput(true);
        WiFiUDP::stopAll();
        Serial.printf("Update: %s\n", upload.filename.c_str());
        uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
        if (!Update.begin(maxSketchSpace)) { //start with max available size
          Update.printError(Serial);
        }
      } else if (upload.status == UPLOAD_FILE_WRITE) {
        if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
          Update.printError(Serial);
        }
      } else if (upload.status == UPLOAD_FILE_END) {
        if (Update.end(true)) { //true to set the size to the current progress
          Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
        } else {
          Update.printError(Serial);
        }
        Serial.setDebugOutput(false);
      }
      yield();
    });

//--------------------------------------------------------------
// Konec upgrade


  // zahájení aktivity HTTP serveru
  server.begin();
}

void loop() {
  // pravidelné volání detekce klienta
  server.handleClient();
 
}


Pak mám další ESP-01 které má i relátko a čte si hodnoty z toho prvního a sleduje i přímo teplotu výstupní vody v kotli a podle nastavení spíná relátkem kotel.

A taky má výstup přes html přes který se dá nastvovat teplota a přímo spínat relé atd.....

Kód: Vybrat vše
// ESP Web Server
// kompatibilní s ESP8266

// připojení potřebných knihoven

  #include <ESP8266WiFi.h>
  #include <ESP8266WiFiMulti.h>
  #include <ESP8266HTTPClient.h>
  #include <WiFiClient.h>
  #include <ESP8266WebServer.h>
  #include <ESP8266mDNS.h>
  #include <OneWire.h>
  #include <DallasTemperature.h>
  #include <NTPClient.h>
  #include <WiFiUdp.h>

#define VERZE "v1.2e"
#define HTTP_CIDLA1 "http://192.168.10.11/teplota"
#define NTP_SERVER "0.cz.pool.ntp.org"

// vytvoření proměnných s názvem WiFi sítě a heslem
#define NAZEVWIFI "mojewifi"
#define HESLOWIFI "heslo"
#define NAZEV "rele1"
#define DEFAULT_TEPLOTA_TERMOSTATU  20
#define DEFAULT_TEPLOTA_TERMOSTATU_NOCNI 15
#define ZAP_NOCNI 23
#define VYP_NOCNI 6
#define MAX_TEPLOTA_KOTLE 85
#define MIN_TEPLOTA_KOTLE 7
#define NORMALNI_MIN_TEPLOTA_KOTLE 20
#define NORMALNI_MAX_TEPLOTA_KOTLE 70

//#define LETNI_CAS 1

// GPIO where the DS18B20 is connected to
const int oneWireBus = 2;     
DeviceAddress Sump;

// části www stránek
#define WWW_UVOD "<!doctype html><div style=\"text-align: center\"><h1>Ovladaní relé topení.</h1>"

#define WWW_ODDELOVAC "<hr align=\"center\" width=\"95%\">"
#define WWW_PATICKA   "<p> &copy; " __DATE__ " Petr Šobáň " VERZE " (" __TIME__ ")</p></div>"

#define SERVERFIRMWARE WWW_UVOD WWW_ODDELOVAC"<p>Upgrade firmware!</p><p style=\"color: red\">Update špatného souboru může znefunkčnit zařízení!!!!</p>"WWW_ODDELOVAC"<form method='POST' action='/update' enctype='multipart/form-data'><input style='color: green; font-size: large' type='file' name='update'> <input style='color: red; font-size: large' type='submit' value='Update'></form>"WWW_ODDELOVAC WWW_PATICKA
#define RESTART         "<p style=\"color: red\">......Restart......</p>"
#define WWW_ZNOVU_NACIST "<form action=\"/\"><input style=\"color: green; font-size: large\" type=\"submit\" value=\"Znovu načíst.\"/></form>"


//------------------------------------------------------------

// Turn ON Command
byte RlyON[]={0xA0,0x01,0x01,0xA2};

// Turn Off Command
byte RlyOFF[]={0xA0,0x01,0x00,0xA1};

bool rele=false; // stav rele
bool termostat=true; // stav termostatu
int teplota_termostat = DEFAULT_TEPLOTA_TERMOSTATU; //teplota nastavena v termostatu
int teplota_termostat_noc = DEFAULT_TEPLOTA_TERMOSTATU_NOCNI;
int teplota_termostat_den = DEFAULT_TEPLOTA_TERMOSTATU;

// promenne casovace
unsigned long previousMillis = 0;
const unsigned long interval = 600000; //interval 10 minut
unsigned long casovac_termostat=0;
const unsigned long casovac_termostat_interval = 86400000; //interval 1 den

//příznak komunikace s externím čidlem 0 = OK
int komunikace= -127;


// ---------------------------------------------
// Podprogramy pro NTP

#ifdef LETNI_CAS

  const long utcOffsetInSeconds = 7200; //posunuti casove zony 2h
#else
  const long utcOffsetInSeconds = 3600; //posunuti casove zony 1h
#endif


  const char daysOfTheWeek[7][16] = {"Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"};

// Define NTP Client to get time
  WiFiUDP ntpUDP;
  NTPClient timeClient(ntpUDP, NTP_SERVER, utcOffsetInSeconds);


// incializace webserveru na portu 80

  ESP8266WebServer server(80);

// Setup a oneWire instance to communicate with any OneWire devices
  OneWire oneWire(oneWireBus);

// Pass our oneWire reference to Dallas Temperature sensor
  DallasTemperature sensors(&oneWire);

// ---------------------------------------------
// Podprogramy pro teplotni cidlo

String readDSTemperatureC(){
  // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  if(tempC == -127.00)return "--";
  return String (tempC);
}

int read_teplota(){
  // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
  sensors.requestTemperatures();
  int tempC = sensors.getTempCByIndex(0);
  return tempC;
}

void nouzove_ovladani(){
  // nouzove nastaveni
    int teplota = read_teplota();
    if ((teplota < MIN_TEPLOTA_KOTLE) && (teplota > -127)) {
//      nouzove_zapnuti
        Serial.write(RlyON, sizeof(RlyON));
    }
    if (teplota > MAX_TEPLOTA_KOTLE) {
//      nouzove_vypnuti
        Serial.write(RlyOFF, sizeof(RlyOFF));
    }
// Navrat do normalu
    if ((teplota > NORMALNI_MIN_TEPLOTA_KOTLE) && (teplota < NORMALNI_MAX_TEPLOTA_KOTLE)) {
      if (rele==true) Serial.write(RlyON, sizeof(RlyON));
      else Serial.write(RlyOFF, sizeof(RlyOFF));
    }
}

// cteni teploty z externiho cidla pres www
String teplota_cidla1() {
    WiFiClient client;
    HTTPClient http;
    String payload = "-----------------------------------------------------------------------------------------------------------";
    if (http.begin(client, HTTP_CIDLA1)) {  // HTTP
      // start connection and send HTTP header
      int httpCode = http.GET();
      // httpCode will be negative on error
      if (httpCode > 0) {
        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) payload = http.getString();
      } else payload = " ERROR Server "HTTP_CIDLA1" odpověděl chybou: "+ String (http.errorToString(httpCode).c_str())+" ";
     http.end();
    } else payload = "Nepodařilo se najít server "HTTP_CIDLA1" ";
return payload;
}

int teplota_cidla1_int() {
    WiFiClient client;
    HTTPClient http;
    int payload = -127;
    if (http.begin(client, HTTP_CIDLA1)) {  // HTTP
      // start connection and send HTTP header
      int httpCode = http.GET();
      // httpCode will be negative on error
      if (httpCode > 0) {
        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) payload = http.getString().toInt();
      } else payload = -127;
      http.end();
    } else payload = -127;
return payload;
}


//funkce pro sepnutí relé
void rele_on(){
  Serial.write(RlyON, sizeof(RlyON));
  rele=true;
}

//funkce pro rozepnutí relé
void rele_off(){
  Serial.write(RlyOFF, sizeof(RlyOFF));
  rele=false;
}

//funkce pro zjištění stavu
String rele_status(){
  if (rele==true) return "<span style=\"color: green;\">zapnuto</span>";
  else return "<span style=\"color: red;\">vypnuto</span>";
}

// podprogram s hlavní zprávou, která je vytištěna
// při zadání IP adresy do prohlížeče
void zpravaHlavni() {
  // načtení hodnoty času
  timeClient.update();
  String den = daysOfTheWeek[timeClient.getDay()];
  String cas = String (timeClient.getFormattedTime());
  // nacteni stavu rele v jakem ma byt stavu
  String stavrele = rele_status();
  // nacteni teplot
  String teplota = readDSTemperatureC();
  String teplotacidla1 = teplota_cidla1();
  // vytvoření zprávy, která bude vytištěna
  // v prohlížeči
  String zprava = WWW_UVOD;
  zprava += WWW_ODDELOVAC;
  zprava += "<p>Dnes je ";
  zprava += den;
  zprava += " ";
  zprava += cas;
  zprava += "</p>";
  zprava += WWW_ODDELOVAC;
  zprava += "<p>Teplota čidla: ";
  zprava += teplotacidla1;
  zprava += "°C</p>";
    if (termostat==true) {
  zprava += "<p";
  if (teplota_termostat==teplota_termostat_den) {
    zprava += " style=\"color: green;\">Aktuální n";
  }
  else {
    zprava += ">N";
  }
  zprava += "astavená teplota den: ";
  zprava += String (teplota_termostat_den);
  zprava += " °C ";
  zprava += String(VYP_NOCNI);
  zprava += ":00-";
  zprava += String(ZAP_NOCNI-1);
  zprava += ":59 </p>";

  zprava += "<p";
  if (teplota_termostat==teplota_termostat_noc) {
    zprava += " style=\"color: green;\">Aktuální n";
  }
  else {
    zprava += ">N";
  }
  zprava += "astavená teplota noc: ";
  zprava += String (teplota_termostat_noc);
  zprava += " °C ";
  zprava += String(ZAP_NOCNI);
  zprava += ":00-";
  zprava += String(VYP_NOCNI-1);
  zprava += ":59 </p>";
  zprava += "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" align=\"center\" valign=\"middle\" frame=\"void\"  height=\"50px\"><tr><td><form action=\"nastaveniteploty\"><input style=\"color: green; font-size: large\" type=\"submit\" value=\"Nastavení teploty\" /></form></td><td width=\"30px\"> </td><td><form action=\"autoOFF\"><input style=\"color: red; font-size: large\" type=\"submit\" value=\"Vypnout termostat\"/></form></td></tr></table>";
  }
  zprava += WWW_ODDELOVAC;
  zprava += "<p>Teplota potrubí u kotle: ";
  zprava += teplota;
  zprava += "°C</p>";
  zprava += WWW_ODDELOVAC;
  zprava += "<p>Stav relé kotle: ";
  zprava += stavrele;
  zprava += "</p>";
  if (termostat==false) {
    zprava += WWW_ODDELOVAC;
    zprava += "<br><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" align=\"center\" valign=\"middle\" frame=\"void\"  height=\"50px\"><tr><td><form action=\"releON\"><input style=\"color: green; font-size: large\" type=\"submit\" value=\"Zapnout relé\"/></form></td><td width=\"30px\"> </td><td><form action=\"releOFF\"><input style=\"color: red; font-size: large\" type=\"submit\" value=\"Vypni relé\" /></form></td><td width=\"30px\"> </td><td><form action=\"autoON\"><input style=\"color: green; font-size: large\" type=\"submit\" value=\"Zapnout termostat\"/></form></td></tr></table>";
    }
  else {
    zprava += "<p> Komunikace s externím čidlem: ";
    if (komunikace == 0) zprava += "<span style=\"color: green\"> OK </span>";
    else zprava += "<span style=\"color: red\"> ERROR </span>";
    zprava += "</p>";
  }
  zprava += WWW_ODDELOVAC;
  zprava += WWW_ZNOVU_NACIST;
  zprava += WWW_ODDELOVAC;
  zprava += WWW_PATICKA;

  server.sendHeader("Cache-Control","no-store, max-age=0");
  // vytištění zprávy se statusem 200 - OK
  server.send(200, "text/html;charset=utf-8", zprava);
}

// podprogram s chybovou zprávou, která je vytištěna
// při zadání IP adresy s neexistující podstránkou
void zpravaNeznamy() {
  // vytvoření zprávy s informací o neexistujícím odkazu
  // včetně metody a zadaného argumentu
  String zprava = "Neexistujici odkaz\n\n";
  zprava += "URI: ";
  zprava += server.uri();
  zprava += "\nMetoda: ";
  zprava += (server.method() == HTTP_GET) ? "GET" : "POST";
  zprava += "\nArgumenty: ";
  zprava += server.args();
  zprava += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    zprava += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
 
  server.sendHeader("Cache-Control","no-store, max-age=0");
  // vytištění zprávy se statusem 404 - Nenalezeno
  server.send(404, "text/plain", zprava);
}


//--------------------------------------------------------
// Konec podprogramů

void setup() {
  Serial.begin(9600);
  delay(1000);

// Vypnuti rele at je v jakemkoliv stavu
  rele_off();

// Start the DS18B20 sensor
  sensors.begin();
  sensors.getAddress(Sump, 0);
  // set the resolution to 11 bit - Valid values are 9, 10, or 11 bit.
  sensors.setResolution(Sump, 9);

  /*
   * Resolution   Increment     Time
   *  9 bit       0.5    °C      93.75 mSec
   * 10 bit       0.25   °C     187.5  mSec
   * 11 bit       0.125  °C     375    mSec
   * 12 bit       0.0625 °C     750    mSec
   */

  // zahájení komunikace po WiFi s připojením
  // na router skrze zadané přihl. údaje
  WiFi.mode(WIFI_STA);
  WiFi.begin(NAZEVWIFI, HESLOWIFI);

  while (WiFi.status() != WL_CONNECTED) {
    nouzove_ovladani();
    delay(1000);
  }
  MDNS.begin(NAZEV);
 
//----------------------------------------------------------
// upgrade http -----------------------------------------------------

    server.on("/firmware", HTTP_GET, []() {
      server.sendHeader("Connection", "close");
      server.send(200, "text/html;charset=utf-8", SERVERFIRMWARE);
    });
    server.on("/update", HTTP_POST, []() {
      server.sendHeader("Connection", "close");
      server.send(200, "text/html;charset=utf-8", (Update.hasError()) ? WWW_UVOD WWW_ODDELOVAC "<p>Upgrade FAIL</p>"WWW_ODDELOVAC WWW_ZNOVU_NACIST WWW_ODDELOVAC WWW_PATICKA : WWW_UVOD WWW_ODDELOVAC "<p>Upgrade OK</p>"WWW_ODDELOVAC WWW_ZNOVU_NACIST WWW_ODDELOVAC WWW_PATICKA);
      delay(500);
      ESP.restart();
    }, []() {
      HTTPUpload& upload = server.upload();
      if (upload.status == UPLOAD_FILE_START) {
        Serial.setDebugOutput(true);
        WiFiUDP::stopAll();
        Serial.printf("Update: %s\n", upload.filename.c_str());
        uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
        if (!Update.begin(maxSketchSpace)) { //start with max available size
          Update.printError(Serial);
        }
      } else if (upload.status == UPLOAD_FILE_WRITE) {
        if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
          Update.printError(Serial);
        }
      } else if (upload.status == UPLOAD_FILE_END) {
        if (Update.end(true)) { //true to set the size to the current progress
          Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
        } else {
          Update.printError(Serial);
        }
        Serial.setDebugOutput(false);
      }
      yield();
    });

//--------------------------------------------------------------
// Konec upgrade


// Zapnutí NTP
  timeClient.begin();

  // nastavení vytištění hlavní zprávy po přístupu
  // na samotnou IP adresu
  server.on("/", zpravaHlavni );
 
  // nastavení stavu rele na zapnuto
  server.on("/releON", []() {
    // zapnutí
    rele_on();
    zpravaHlavni();
  });
 
  // nastavení rele na vypnuto
  server.on("/releOFF", []() {
    // vypnutí
    rele_off();
    // vytištění hlavní stránky
    zpravaHlavni();
  });
// nastavení termostatu
  server.on("/autoON", []() {
    termostat=true;
    // vytištění hlavní stránky
    zpravaHlavni();
  });

  server.on("/autoOFF", []() {
    termostat=false;
    casovac_termostat=millis();
    // vytištění hlavní stránky
    zpravaHlavni();
  });

  server.on("/nastaveniteploty", [] () {
    bool nastaveno=false;
    for (uint8_t i = 0; i < server.args(); i++) {
    if (server.argName(i)=="teplotaden") {
       nastaveno=true;
       teplota_termostat_den = server.arg(i).toInt();
       }
    if (server.argName(i)=="teplotanoc") {
       nastaveno=true;
       teplota_termostat_noc = server.arg(i).toInt();
       }
       if (teplota_termostat_den <= 10) nastaveno=false;
       if (teplota_termostat_den >= 30) nastaveno=false;
       if (teplota_termostat_noc <= 10) nastaveno=false;
       if (teplota_termostat_noc >= 30) nastaveno=false;
       if (teplota_termostat_noc > teplota_termostat_den) nastaveno=false;
    }
    if(nastaveno==true) zpravaHlavni();
    else {
      String zprava = WWW_UVOD;
      zprava += WWW_ODDELOVAC;
      zprava += "<p>Teplota musí být v rozmezí větším jak 10°C a menší jak 30°C !</p>";
      zprava += "<p>Denní teplota musí být větší nebo rovna noční teplotě!</p>";
      zprava += "<form style=\"font-size: large\" action=\"/nastaveniteploty\">Nastavená teplota den: <input type=\"text\" name=\"teplotaden\" value=\"";
      zprava += String (teplota_termostat_den);
      zprava += "\"><br>Nastavená teplota noc: <input type=\"text\" name=\"teplotanoc\" value=\"";
      zprava += String (teplota_termostat_noc);
      zprava += "\"><br><input style=\"color: green; font-size: large\" type=\"submit\" value=\"Nastav\"></form>";
      zprava += WWW_ODDELOVAC;
      zprava += WWW_PATICKA;
     
      server.sendHeader("Cache-Control","no-store, max-age=0");
      server.send(200, "text/html;charset=utf-8", zprava);
    }
  });

server.on("/status", [] () {
      String zprava = WWW_UVOD;
      zprava += WWW_ODDELOVAC;
      zprava += "<p>Dnes je ";
      zprava += daysOfTheWeek[timeClient.getDay()];
      zprava += " ";
      zprava += String (timeClient.getFormattedTime());
      zprava += "</p>";
      zprava += "<p>millis() ";
      zprava += String(millis());
      zprava += "</p>";
      zprava += WWW_ODDELOVAC;
      zprava += "<p>Default hodnoty:</p>";
      zprava += "<p>VERZE ";
      zprava += VERZE;
      zprava += "</p>";
      zprava += "<p>HTTP_CIDLA1 ";
      zprava += HTTP_CIDLA1;
      zprava += "</p>";
      zprava += "<p>NTP_SERVER ";
      zprava += NTP_SERVER;
      zprava += "</p>";
      zprava += "<p>NAZEVWIFI ";
      zprava += NAZEVWIFI;
      zprava += "</p>";
      zprava += "<p>NAZEV ";
      zprava += NAZEV;
      zprava += "</p>";
      zprava += "<p>DEFAULT_TEPLOTA_TERMOSTATU ";
      zprava += String(DEFAULT_TEPLOTA_TERMOSTATU);
      zprava += "</p>";
      zprava += "<p>DEFAULT_TEPLOTA_TERMOSTATU_NOCNI ";
      zprava += String(DEFAULT_TEPLOTA_TERMOSTATU_NOCNI);
      zprava += "</p>";
      zprava += "<p>ZAP_NOCNI ";
      zprava += String(ZAP_NOCNI);
      zprava += "</p>";
      zprava += "<p>VYP_NOCNI ";
      zprava += String(VYP_NOCNI);
      zprava += "</p>";
      zprava += "<p>MAX_TEPLOTA_KOTLE ";
      zprava += String(MAX_TEPLOTA_KOTLE);
      zprava += "</p>";
      zprava += "<p>MIN_TEPLOTA_KOTLE ";
      zprava += String(MIN_TEPLOTA_KOTLE);
      zprava += "</p>";
      zprava += "<p>NORMALNI_MIN_TEPLOTA_KOTLE ";
      zprava += String(NORMALNI_MIN_TEPLOTA_KOTLE);
      zprava += "</p>";
      zprava += "<p>NORMALNI_MAX_TEPLOTA_KOTLE ";
      zprava += String(NORMALNI_MAX_TEPLOTA_KOTLE);
      zprava += "</p>";
   
      zprava += WWW_ODDELOVAC;
      zprava += "<p>Proměnné programu:</p>";
     
      zprava += "<p>teplota_termostat_den ";
      zprava += String(teplota_termostat_den);
      zprava += "</p>";
      zprava += "<p>teplota_termostat_noc ";
      zprava += String(teplota_termostat_noc);
      zprava += "</p>";
      zprava += "<p>teplota_termostat ";
      zprava += String(teplota_termostat);
      zprava += "</p>";
      zprava += "<p>termostat ";
      zprava += String(termostat);
      zprava += "</p>";
      zprava += "<p>rele ";
      zprava += String(rele);
      zprava += "</p>";
      zprava += "<p>komunikace ";
      zprava += String(komunikace);
      zprava += "</p>";
      zprava += "<p>previousMillis ";
      zprava += String(previousMillis);
      zprava += "</p>";
      zprava += "<p>casovac_termostat ";
      zprava += String(casovac_termostat);
      zprava += "</p>";       
      zprava += WWW_ODDELOVAC;
      zprava += WWW_ZNOVU_NACIST;
      zprava += WWW_ODDELOVAC;
      zprava += WWW_PATICKA;

      server.sendHeader("Cache-Control","no-store, max-age=0");
      server.send(200, "text/html;charset=utf-8", zprava);
  });



// restart

  server.on("/restart", []() {
    String zprava = WWW_UVOD;
    zprava += WWW_ODDELOVAC;
    zprava += RESTART;
    zprava += WWW_ODDELOVAC;
    zprava += WWW_ZNOVU_NACIST;
    zprava += WWW_ODDELOVAC;
    zprava += WWW_PATICKA;
   
    server.sendHeader("Cache-Control","no-store, max-age=0");
    server.send(200,"text/html;charset=utf-8", zprava);
    delay(1000);
    ESP.restart();
  });
 
  // nastavení vytištění informací o neznámém
  // odkazu pomocí podprogramu zpravaNeznamy
  server.onNotFound(zpravaNeznamy);
  // zahájení aktivity HTTP serveru
  server.begin();
//  Serial.println("HTTP server je zapnuty.");
}

void loop() {

  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    // zapnuty termostat zapnutí - vypnutí
    if (termostat==true) {
      int t_c = teplota_cidla1_int();
      if (t_c == -127) {
        delay(500);
        // A zkusíme to znovu
        t_c = teplota_cidla1_int();
      }
      timeClient.update();
      int hodina = timeClient.getHours();
      if ((hodina < ZAP_NOCNI) && (hodina >= VYP_NOCNI)) teplota_termostat = teplota_termostat_den;
      else teplota_termostat = teplota_termostat_noc;
      if (t_c == -127) {
        komunikace = -127;
        previousMillis -= interval;
      }
      else komunikace = 0;
      if ((t_c < teplota_termostat) && (t_c != -127)) rele_on();
      if ((t_c >= teplota_termostat) && (t_c != -127)) rele_off();
    }
    else {
      if (currentMillis - casovac_termostat >= casovac_termostat_interval) termostat = true;
      }
    }
  nouzove_ovladani();

  // pravidelné volání detekce klienta,
  // v případě otevření stránky se provedou
  // funkce nastavené výše
  server.handleClient();
 
}
Naposledy upravil soban dne 25. 4. 2021 20:05, celkově upraveno 1
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Odeslat příspěvekod Just_jo 25. 4. 2021 19:58

Tak zkus novější verzi z tohoto linku https://stackoverflow.com/questions/293 ... in-android
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Le_Ze 26. 4. 2021 13:12

Kód: Vybrat vše
Tak zkus novější verzi z tohoto linku https://stackoverflow.com/questions/293 ... in-android

Jsem to zkusil za pomoci org.apache.http třídy a nepodařilo se.

Pak se tam zminuje o HttpURLConnection

Kód: Vybrat vše
public void zmacklTlacitko(View view) throws IOException {

        try {
            URL url = new URL("http://192.168.1.5:5393/test.php");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();         
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

Oboji je bez chyby, ale v logu meho servru nevidim, že by se něco snažilo na něj připojit.
V AndroidManifest.xml mam povolen internet.
Le_Ze
Junior

Odeslat příspěvekod Just_jo 26. 4. 2021 16:52

No nevím co ti hlásí logcat, ale tvoji část kódu pro zmaklTlacitko jsem musel doplnit o pár věcí, díky kterým jsem dokázal získat obsah stránky.
Nicméně aby mi fungoval HttpURLConnection tak jsem musel doplnit toto do onCreate části

Kód: Vybrat vše
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);


Chce to ale číst logcat a analyzovat výpis chyby. Osobně mám radši záchyt veškerých Exceptions ( tj. catch (Exception e) )
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Le_Ze 27. 4. 2021 05:56

Děkují moc za ochotu a snahu pomoct, ale usoudil jsem že toto nezvládám a vzdavám to.
Le_Ze
Junior

Odeslat příspěvekod soban 27. 4. 2021 06:18

Jak říkám udělej to jak já, pak prostě na každém zařízení je většinou nějaký prohlížeč, tak potom to chce akorát doladit ty html stránky aby se rozumě zobrazovaly na mobilu, tabletu.

A pokud si ve své síti uděláš VPN tak se na to dostaneš i z internetu po přihlášení na svoji VPN.

A pokud je hlavní server na RPI tak tam můžeš optimalizovat i stránky pro prohlížeče na mobilu a poslat stránku s velkými tlačítky aby se rozumě zobrazily na mobilu a dalo se pěkně prstem kliknout atd.....
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Odeslat příspěvekod Le_Ze 27. 4. 2021 06:47

@ soban.
Jsem koukal na ten kod co jsi tu dal a to je pro ESP-01.
Ja řešim javu - android studio.
Nechci v androidu načitat nějakou web stranku.

Jedine o co mi jde tak je.
Abych v androidu do řetězce moh načist ze stranky text, vypsany přes echo "1234"
Ale i toto bych oželel.
Hlavně bych přes android moh odeslat nějaky řetězec, aby se dal odchytít na te web strnce přes
$data = file_get_contents('php://input');

Nedavno mi Just_jo pomahal zprovoznit komunikaci přes ssh s jsch a důvod proč mi to nejelo bylo že to muselo byt ve vlaknu.
Tentyž problem mam asi i u tohoto.
https://www3.ntu.edu.sg/home/ehchua/pro ... rking.html
Toto mi vraci OK (200) a v logu na mem servru to vidim.
Takže jsem na dobre cestě :-P
Le_Ze
Junior

Odeslat příspěvekod soban 27. 4. 2021 09:38

Právě trochu to nechápu proč to chceš pro android?

Pokud to chápu máš čidla na ESP-01 a na RPI který je kontroluje a ovládá.

Takže z mobilní aplikace se připojím na ten RPI a můžu to ovládat přes html z jakéhokoliv prohlížeče a nepotřebuji dělat speciální aplikaci pro android.

Jinak taky jsem kdysi uvažoval o tom že bych to napsal pro android, ale na to jsem se posléze vykašlal.

Takže s androidem neporadím, s ESP-01 můžu poradit pokud budu vědět tak stejně s RPI.
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Odeslat příspěvekod Le_Ze 27. 4. 2021 13:39

Nema to nic společneho s ESP.
Ten kousek kodu jsem tu daval jen jako přiklad jakym zpusobem to chci na androidu

Určitě to bude chtit ještě doladit, ale funguje to :oboze
Kód: Vybrat vše
private class AsyncTaskRunner extends AsyncTask<String, String, String> {

        private String resp;
       
        @Override
        protected String doInBackground(String... params) {
            URL url = null;
            HttpURLConnection conn = null;

            try {
                String data = "Test odesilani";
                url = new URL("http://192.168.1.5:5393/test.php");
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("POST");
                con.setDoOutput(true);
                con.getOutputStream().write(data.getBytes("UTF-8"));
                con.getInputStream();
                con.disconnect();
            }
            catch(Exception e) {
                //  Block of code to handle errors
            }

        }
       
        @Override
        protected void onPostExecute(String result) {
            //finalResult.setText(result);
        }


Tak ještě to čtení přes to echo ^^
Le_Ze
Junior

Odeslat příspěvekod Just_jo 27. 4. 2021 15:20

Tak pokud ti postačí toto
Kód: Vybrat vše
TextView tv = (TextView)findViewById(R.id.textView);

InputStream in = new BufferedInputStream(connection.getInputStream());
BufferedReader r = new BufferedReader(new InputStreamReader(in));
StringBuilder total = new StringBuilder();
for (String line; (line = r.readLine()) != null; ) {
  total.append(line).append('\n');
}

tv.setText(total);
Just_jo
Junior
Uživatelský avatar

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků