Supla - Sim800l - GPRS działa, ale kilka pytań

ruza
Posts: 32
Joined: Wed May 06, 2020 7:49 am

Post

Dzień dobry,

od jakiegoś czasu korzystam z Supla z połączeniem z Internetem za pomocą Sim800Lv2. Działa pięknie i stabilnie, nawet nie trzeba dodatkowej baterii po wymianie kondensatora na module SIM. Pięknie śmiga nawet z portu USB z laptopa.

Na początku było to rozwiązanie chwilowe, ale sprawdziło się i chciałbym troszkę rozwinąć pomysł. Niestety natknąłem się na następujący problem:
Supla działa przez GPRS, zatem webserver nie może działać, żeby nie był dostępny "z zewnątrz". Czy istnieje możliwość tak ustawienia trybu config, żeby webserver działał tylko przez połączenie z AP wystawianym przez ESP32, a podczas pracy "normalnej" nie był w żaden sposób dostępny?
Czy może istnieje jakiś lepszy sposób ustawienia adresu email, serwera supla, APN czy PIN karty SIM, bez każdorazowej zmiany kodu źródłowego i jego edycji.

Mój sprzęt:
ESP32-Wroom-32D Devkit
SIM800L EVB
SuplaDevice 24.9


Z góry dziekuję za pomoc.
Piotr
User avatar
klew
Posts: 10957
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Na gołym SuplaDevice, web interface just startowany tylko w trybie cfg.
Nie wiem jak masz zrobioną obsługę gprs.
Ogólnie powinno dać się to ustawić.
Wrzuć link do źródeł
User avatar
Zibi_007
Posts: 1088
Joined: Tue Oct 31, 2023 10:06 pm

Post

ruza wrote: Wed Mar 26, 2025 7:19 pm Dzień dobry,

od jakiegoś czasu korzystam z Supla z połączeniem z Internetem za pomocą Sim800Lv2. Działa pięknie i stabilnie, nawet nie trzeba dodatkowej baterii po wymianie kondensatora na module SIM. Pięknie śmiga nawet z portu USB z laptopa.

Na początku było to rozwiązanie chwilowe, ale sprawdziło się i chciałbym troszkę rozwinąć pomysł. Niestety natknąłem się na następujący problem:
Supla działa przez GPRS, zatem webserver nie może działać, żeby nie był dostępny "z zewnątrz". Czy istnieje możliwość tak ustawienia trybu config, żeby webserver działał tylko przez połączenie z AP wystawianym przez ESP32, a podczas pracy "normalnej" nie był w żaden sposób dostępny?
Czy może istnieje jakiś lepszy sposób ustawienia adresu email, serwera supla, APN czy PIN karty SIM, bez każdorazowej zmiany kodu źródłowego i jego edycji.

Mój sprzęt:
ESP32-Wroom-32D Devkit
SIM800L EVB
SuplaDevice 24.9


Z góry dziekuję za pomoc.
Piotr
Możesz wrzucić kod źródłowy? Sam jestem ciekaw, jak to masz zrobione. W wolnej chwili mogę usiąść i zaproponować Ci jakieś rozwiązanie (mam nawet jakiś pomysł, ale to wymaga sprawdzenia).
Wiesz, że Supla współpracuje z urządzeniami Zigbee? Więcej szczegółów tutaj: https://forum.supla.org/viewforum.php?f=127

Nec Hercules contra plures!
robertklepacki94
Posts: 1372
Joined: Thu Sep 02, 2021 1:06 pm

Post

@Zibi_007 nie mam dziś za dużo czasu ale pamiętam że @elmaya wrzucał kiedyś jakiś kod i binarkę do obsługi Supli po GMS.
Poszukaj na angielskim forum Supli lub na Polskim nie pamiętam dokładnie gdzie to było.
Wziąłem udział w Supla Offline Party 2023
User avatar
Zibi_007
Posts: 1088
Joined: Tue Oct 31, 2023 10:06 pm

Post

robertklepacki94 wrote: Wed Mar 26, 2025 9:47 pm @Zibi_007 nie mam dziś za dużo czasu ale pamiętam że @elmaya wrzucał kiedyś jakiś kod i binarkę do obsługi Supli po GMS.
Poszukaj na angielskim forum Supli lub na Polskim nie pamiętam dokładnie gdzie to było.
Dzięki. @robertklepacki, jak zwykle niezawodny :) . Dobrze pamiętałeś.

Rozwiązanie, o którym wspominasz znam viewtopic.php?t=10595
Mam w ulubionych. Mam też to download/file.php?id=32888
I pamiętam dyskusję, jaka się kiedyś wywiązała na temat stabilności tych rozwiązań.
Dla mnie temat skończył się tutaj viewtopic.php?p=186658#p186658.
Teraz czytam, że @ruza ma gotowe (działające stabilnie - przynajmniej tak rozumiem) rozwiązanie, które wymaga modyfikacji w kodzie (webinterfeace itp.). To chętnie bym pomógł. Dorobię co trzeba i jak się uda, to wszyscy skorzystają :)
Wiesz, że Supla współpracuje z urządzeniami Zigbee? Więcej szczegółów tutaj: https://forum.supla.org/viewforum.php?f=127

Nec Hercules contra plures!
ruza
Posts: 32
Joined: Wed May 06, 2020 7:49 am

Post

Dzień dobry,

przepraszam za brak odpowiedzi przez kilka dni. Obowiązki domowe.

Ja również wykorzystałem rozwiązanie z postu @marcinp - viewtopic.php?p=186658#p186658.

Całość kodu to na razie tylko taki "proof of concept", zbitek różnych pomysłów, żeby uruchomić sim800l, zatem ani to ładne, ani czyste, ale działa:) Testowane przez około 2 tygodnie, działało bez kłopotu.

Mój setup:
ESP32-Wroom-32D Dev Kit
Sim800l EVB (v2) (mod z kondensatorem, żeby rozwiązać problem pików poboru prądu podczas łączenia)
SuplaDevice 24.9 (przerobiona zgodnie z postem powyżej)
TinyGSM 0.12 (oryginalna)

Code: Select all

 
 #include <SuplaDevice.h>

//#####################################3
#define TINY_GSM_MODEM_SIM800;
#define SerialMon Serial

#define TINY_GSM_DEBUG Serial
#define TINY_GSM_RX_BUFFER 1024

#define TINY_GSM_USE_GPRS true

#define rxPin 4
#define txPin 2

HardwareSerial SerialAT(1);               // przerobione na hardwareserial

#define GSM_PIN ""

// Your GPRS credentials, if any
const char apn[]  = "internet";
const char user[] = "";
const char pass[] = "";

#include <TinyGsmClient.h>
TinyGsm modem(SerialAT); 
TinyGsmClient *suplaClient = new TinyGsmClient(modem); 
#define SUPLA_GPRS

#include <SuplaDevice.h>
#include <supla/network/esp_gprs.h>
#include <supla/arduino_esp_platform.h> // przerobiony plik 

Supla::GPRS gprs(NULL);
//############################################

/*
 * This example requires Dallas Temperature Control library installed. 
 * https://github.com/milesburton/Arduino-Temperature-Control-Library
 */
// Add include to DS sensor

#include <supla/sensor/DS18B20.h>

void setup() {

  SerialMon.begin(115200);
// ########################### 

  delay(10);


  SerialMon.println("Wait...");

  // Set GSM module baud rate
  SerialAT.begin(9600, SERIAL_8N1, rxPin, txPin);
  delay(6000);

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  modem.restart();
 //  modem.init();

  String modemInfo = modem.getModemInfo();
  SerialMon.print("Modem Info: ");
  SerialMon.println(modemInfo);

#if TINY_GSM_USE_GPRS
  // Unlock your SIM card with a PIN if needed
  if (GSM_PIN && modem.getSimStatus() != 3) { modem.simUnlock(GSM_PIN); }
#endif


  SerialMon.print(F("Waiting for network..."));
  if (!modem.waitForNetwork()) {
    SerialMon.println(" fail");
    delay(10000);
    return;
  }
  SerialMon.println(" success");

  SerialMon.print(F("Connecting to "));
  SerialMon.print(apn);
  if (!modem.gprsConnect(apn, user, pass)) {
    SerialMon.println(" fail");
    delay(10000);
    return;
  }
  SerialMon.println(" success");

//########################################################


  // Replace the following GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
  char GUID[SUPLA_GUID_SIZE] = {***};

  // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {***};

  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */

  // CHANNEL0-3 - Thermometer DS18B20
  // 4 DS18B20 thermometers at pin 23. DS address can be omitted when there is only one device at a pin
  DeviceAddress ds1addr = {***};
  DeviceAddress ds2addr = {***};
  DeviceAddress ds3addr = {***};
  DeviceAddress ds4addr = {***};

  new Supla::Sensor::DS18B20(23, ds1addr);
  new Supla::Sensor::DS18B20(23, ds2addr);
  new Supla::Sensor::DS18B20(23, ds3addr);
  new Supla::Sensor::DS18B20(23, ds4addr);


  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    "svr13.supla.org",  // SUPLA server address
                    "***",   // Email address used to login to Supla Cloud
                    AUTHKEY);          // Authorization key
    
}

void loop() {
  SuplaDevice.iterate();
}
User avatar
klew
Posts: 10957
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Ogólnie można to przerobić, ale ten obecny program wygląda jak mocny "prove of concept". Wszystko jest spięte "na styk", aby tylko ruszyło.
Także nie da się tutaj raczej czegoś prosto przerobić bez posprzątania całości i zrobienia tego "po bożemu".

Ogólnie należałoby wyrzucić te "haki" i modyfikacje biblioteki. Dodać klasę od "GPRS" z dopisaną obsługą wyłączania tego interfejsu.
Dorobić "Config" dla GPRS przy pomocy Supla::Storage::Config.
No i na koniec dodać WebInterface w taki sposób, aby startował tylko w trybie konfiguracyjnym. Tryb konfiguracyjny powinien wyłączyć GPRS i będzie to działać.

Nie wiem czy takie ogólne rady wystarczą Ci, aby to samemu poprawić i zaprograwować.
SOYER
Posts: 1364
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

„Sim800l EVB (v2) (mod z kondensatorem, żeby rozwiązać problem pików poboru prądu podczas łączenia)”

Napisz proszę coś więcej o tym rozwiązaniu, ja dodawałem zewnętrzny kondensator, Ty piszesz o wymianie tego na płytce.
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
ruza
Posts: 32
Joined: Wed May 06, 2020 7:49 am

Post

Hej,

zamiast C22 na płytce, wlutowałem 2200uF na 16V(taki miałem). Dzięki temu sim800l zasilany przez ESP32 z usb z laptopa działa bez problemu.
You do not have the required permissions to view the files attached to this post.
ruza
Posts: 32
Joined: Wed May 06, 2020 7:49 am

Post

Ok, mam pierwsze pytanie. Poniżej szkielet kodu, jeszcze bez ustawień dla GRPS, ale z możliwością zapamiętania ustawień pól dodatkowych.

Code: Select all


//#define supla_lib_config_h_  // silences debug messages
#define BUTTON_CFG_GPIO 0 

#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/button.h>
#include <supla/storage/littlefs_config.h>
#include <supla/network/esp_web_server.h>
#include <supla/device/supla_ca_cert.h>

#include <supla/network/html/device_info.h>
#include <supla/network/html/protocol_parameters.h>
//#include <supla/network/html/wifi_parameters.h>
#include <supla/events.h>

#include <supla/network/html/custom_parameter.h>
#include <supla/network/html/custom_text_parameter.h>

#define STORAGE_OFFSET 512
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom(STORAGE_OFFSET);


// This class provides Wi-Fi network connectivity for your device
Supla::ESPWifi wifi;

// This class provides web server to handle config mode
Supla::EspWebServer suplaServer;

// This class provides configuration storage (like SSID, password, all
// user defined parameters, etc. We use LittleFS.
Supla::LittleFsConfig configSupla;


const char APN_APN[] = "apn_apn";
const char APN_USER[] = "apn_user";
const char APN_PASS[] = "apn_pass";
const char SIM_PIN[] = "sim_pin";

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

  // Buttons configuration
  auto buttonCfg =
    new Supla::Control::Button(BUTTON_CFG_GPIO, true, true);

  buttonCfg->configureAsConfigButton(&SuplaDevice);


  // HTML www component (they appear in sections according to creation
  // sequence).
  new Supla::Html::DeviceInfo(&SuplaDevice);
  new Supla::Html::ProtocolParameters;
//  new Supla::Html::WifiParameters;

  new Supla::Html::CustomTextParameter(APN_APN, "Podaj APN", 32);
  new Supla::Html::CustomTextParameter(APN_USER, "Podaj APN User", 32);
  new Supla::Html::CustomTextParameter(APN_PASS, "Podaj APN Pass", 32);
  new Supla::Html::CustomTextParameter(SIM_PIN, "Podaj PIN karty SIM",4);

  SuplaDevice.setSuplaCACert(suplaCACert);
  SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);

  // Set custom device name
  SuplaDevice.setName("SUPLA-GSM");
  // Start!
  SuplaDevice.begin();

}

void loop() {
  SuplaDevice.iterate();

}

Jak uniknąć wymogu ustawień WiFi, żeby urządzenie wyszło z trybu config? Z tego co widzę w SerialMonitorze, aby z niego wyjść musi być ustawiona sieć WiFi. Ma to oczywiście sens w zastosowaniu standardowym, ale w tym wypadku mniejszy. Czy możemy pominąć ten warunek?

Return to “supla-dev”