Tryb konfiguracyjny i różne inputy do wprowadzania parametrów

petione
Posts: 91
Joined: Sat Jul 21, 2018 4:26 pm

Post

Klew, a może za jednym zamachem udalo by sie dodać logowanie do strony konfiguracyjnej? 😏
zzrr
Posts: 525
Joined: Wed Oct 26, 2022 7:35 pm

Post

Klew jeśli możesz to powiedz jeszcze bo część mojego pytania zabłądziła gdzieś... zapytam jeszcze raz żeby już nie mieszać między wiadomościami.
... utwierdziłeś mnie że SelectCmdInputParameter nie służy do przechowywania wartości tylko do odpalania komend. Tylko czy jest możliwość wpisać własne komendy które wykonają jakąś akcję na dowolnej jakiejś np klasie w kodzie nie związanej bezpośrednio z żadnym urządzeniem SUPLI czy tylko to można komendy dawać do urządzeń zawartych w SUPLA-DEVICES?
Bo tak sobie myślę że jak zrobię jakąś klasę np MyClass zawierającą dwie publiczne metody turnOn() i turnOff().i publiczną zmienną np.number. i powiedzmy te metody przypisują wartośc 1 lub 2 w zależności od wyboru. To czy da się tak wpisać polecenia w SelectCmdInputParameter żeby odwoływać się do tych metod czy to tylko można do tych klas się odwoływać które są w SUPLA-DEVICES?
Dodam jeszcze że gdyby sie dalo to bym sobie w metodzie zrobił zapis do EEPROMA i by chyba hulało. Tylko czy się da a jeśli tak to jak?
User avatar
klew
Posts: 9749
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

zzrr wrote: Mon Jan 30, 2023 4:41 pm Klew jeśli możesz to powiedz jeszcze bo część mojego pytania zabłądziła gdzieś... zapytam jeszcze raz żeby już nie mieszać między wiadomościami.
... utwierdziłeś mnie że SelectCmdInputParameter nie służy do przechowywania wartości tylko do odpalania komend. Tylko czy jest możliwość wpisać własne komendy które wykonają jakąś akcję na dowolnej jakiejś np klasie w kodzie nie związanej bezpośrednio z żadnym urządzeniem SUPLI czy tylko to można komendy dawać do urządzeń zawartych w SUPLA-DEVICES?
Bo tak sobie myślę że jak zrobię jakąś klasę np MyClass zawierającą dwie publiczne metody turnOn() i turnOff().i publiczną zmienną np.number. i powiedzmy te metody przypisują wartośc 1 lub 2 w zależności od wyboru. To czy da się tak wpisać polecenia w SelectCmdInputParameter żeby odwoływać się do tych metod czy to tylko można do tych klas się odwoływać które są w SUPLA-DEVICES?
Dodam jeszcze że gdyby sie dalo to bym sobie w metodzie zrobił zapis do EEPROMA i by chyba hulało. Tylko czy się da a jeśli tak to jak?
Aby akcje działały to klasa musi dziedziczyć po ActionHandler.
Poza tym kombinujesz strasznie naokoło.
Kiedy będzie Supla Offline Party / SOP#2025 ?
zzrr
Posts: 525
Joined: Wed Oct 26, 2022 7:35 pm

Post

klew wrote: Mon Jan 30, 2023 5:11 pm Aby akcje działały to klasa musi dziedziczyć po ActionHandler.
Poza tym kombinujesz strasznie naokoło.
I po moich wielkich planach. A miały być miliony, Londyn, Ameryka. :? Trza lądować chyba ;)
User avatar
shimano73
Posts: 2025
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

A ja cały dzień dłubię z SelectCmdInputParameter aby zrobić wybór adresu dla bme280 i w końcu znalazłem ten wątek i że się nie da ?
A może jednak jakoś na około ?
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
lukfud
Posts: 2271
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

shimano73 wrote: Sun Mar 24, 2024 8:53 pm A ja cały dzień dłubię z SelectCmdInputParameter aby zrobić wybór adresu dla bme280 i w końcu znalazłem ten wątek i że się nie da ?
A może jednak jakoś na około ?
https://github.com/SUPLA/supla-device/b ... arameter.h

Code: Select all

auto mySelect = new Supla::Html::SelectInputParameter("myselect_tag, "BME address");
mySelect->registerValue("Address 1", 0);
mySelect->registerValue("Address 2", 1);
https://www.facebook.com/groups/supladiy/
User avatar
shimano73
Posts: 2025
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

lukfud wrote: Sun Mar 24, 2024 10:08 pm
shimano73 wrote: Sun Mar 24, 2024 8:53 pm A ja cały dzień dłubię z SelectCmdInputParameter aby zrobić wybór adresu dla bme280 i w końcu znalazłem ten wątek i że się nie da ?
A może jednak jakoś na około ?
https://github.com/SUPLA/supla-device/b ... arameter.h

Code: Select all

auto mySelect = new Supla::Html::SelectInputParameter("myselect_tag, "BME address");
mySelect->registerValue("Address 1", 0);
mySelect->registerValue("Address 2", 1);
No niestety nie umiem sobie z tym poradzić z tym "SelectInputParametr" niby działa ale wybór po kliknięciu "save & reset" nie jest zapamiętywany . Chociaż w logach jest

Code: Select all

8:18:46.728 -> SERVER: key led, value 0
18:18:46.728 -> SERVER: key altitude, value 12
18:18:46.728 -> SERVER: key sensor_type, value SHT 3X
18:18:46.728 -> SERVER: key cmd1, value 
18:18:46.728 -> SERVER: key rbt, value 0
to po restarcie juz go nie ma
tu cały program

Code: Select all

/*
  Copyright (C) AC SOFTWARE SP. Z O.O.

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

/* This example shows ESP82xx/ESP32 based device with simple web interface
 * used to configure Wi-Fi parameters and Supla server connection.
 * Additionally it shows how to use some of HTML elements provided by
 * supla-device library.
 *
 * After fresh installation, device will be in config mode. It will have its
 * own Wi-Fi AP configured. You should connect to it with your mobile phone
 * and open http://192.168.4.1 where you can configure the device.
 * Status LED is also configured. Please adjust GPIOs to your HW.
 */

#define STATUS_LED_GPIO 2
#define RELAY_GPIO 12
#define BUTTON_CFG_RELAY_GPIO 0
#define MAX_CHAR_VALUE 10

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

// Includes for HTML elements
#include <supla/network/html/device_info.h>
#include <supla/network/html/protocol_parameters.h>
#include <supla/network/html/status_led_parameters.h>
#include <supla/network/html/wifi_parameters.h>
#include <supla/network/html/custom_parameter.h>
#include <supla/network/html/custom_text_parameter.h>
#include <supla/network/html/text_cmd_input_parameter.h>
#include <supla/network/html/select_input_parameter.h>
#include <supla/network/html/select_cmd_input_parameter.h>
// Choose where Supla should store roller shutter data in persistent memory
// We recommend to use external FRAM memory
#include <supla/storage/eeprom.h>


const char ALTITUDE[] = "altitude";
const char SENSOR_TYPE[] = "sensor_type";
char charValue[] = "None  ";
int32_t intValue = 0;
unsigned long pm_lastmillis;
char buf[200] = {};

Supla::Eeprom eeprom;
// #include <supla/storage/fram_spi.h>
// Supla::FramSpi fram(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;

Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, true); // inverted state

void setup() {
  Supla::Storage::Init();
  Serial.begin(115200);
  // Channels configuration

  // configure defualt Supla CA certificate
  SuplaDevice.setSuplaCACert(suplaCACert);
  SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);

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

  // Here user defined inputs are defined.
  
  new Supla::Html::CustomParameter(ALTITUDE, "Altitude");

  auto SelectSensorType = new Supla::Html::SelectInputParameter(SENSOR_TYPE, "Sensor type");
//  Supla::Storage::ConfigInstance()->setString(SENSOR_TYPE,"None  ");
  SelectSensorType->registerValue("BME280", 0);
  SelectSensorType->registerValue("SHT 3X", 1);
  SelectSensorType->registerValue("DHT 22", 2);

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

  
}

void loop() {
  SuplaDevice.iterate();
  Supla::Storage::ConfigInstance()->setString(SENSOR_TYPE,"None  ");
     if (millis() - pm_lastmillis >= 1000) {
        pm_lastmillis = millis();  
   
        Serial.println();
        Serial.println("working...");
        if (Supla::Storage::ConfigInstance()->getString(SENSOR_TYPE, charValue, MAX_CHAR_VALUE)) {           
            SUPLA_LOG_DEBUG(" **** Param[%s]: %s", SENSOR_TYPE, charValue);
        } else
        {
            SUPLA_LOG_DEBUG(" **** Param[%s]: is not set", SENSOR_TYPE);
        }


        if (Supla::Storage::ConfigInstance()->getInt32(ALTITUDE, &intValue)) {
          SUPLA_LOG_DEBUG(" **** Param[%s]: %d", ALTITUDE, intValue);
        } else {
          SUPLA_LOG_DEBUG(" **** Param[%s] is not set", ALTITUDE);
        }
        
        
     }
}


Z CustomParameter nie ma żadnych problemów działa prawidłowo.
Gdzie jest problem ?
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
lukfud
Posts: 2271
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

shimano73 wrote: Tue Mar 26, 2024 5:24 pm Gdzie jest problem ?
Ta klasa zapisuje do cfg "int32_t" a nie "String".
https://www.facebook.com/groups/supladiy/
User avatar
shimano73
Posts: 2025
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

lukfud wrote: Tue Mar 26, 2024 5:39 pm
shimano73 wrote: Tue Mar 26, 2024 5:24 pm Gdzie jest problem ?
Ta klasa zapisuje do cfg "int32_t" a nie "String".
Przepraszam , ale ja to chyba jestem w innej klasie i to w oślej ławce.

Jeśli zrobię tak :

Code: Select all

if (Supla::Storage::ConfigInstance()->getInt32(SENSOR_TYPE, &intValue)) {           
            SUPLA_LOG_DEBUG(" **** Param[%s]: %s", SENSOR_TYPE, intValue);
        } else
        {
            SUPLA_LOG_DEBUG(" **** Param[%s]: is not set", SENSOR_TYPE);
        }
to wywala mi "wyjatek" w momęcie kliknięcia przycisku "save"

Zastanawiam się jeśli zapisuje "liczbę" to dlaczego tu jest :

Code: Select all

19:44:11.662 -> SERVER: key sensor_type, value SHT 3X

a nie

Code: Select all

19:44:11.662 -> SERVER: key sensor_type, value 2
Juz mi sie mózg lasuje , przepraszam nie kumam :cry:
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
lukfud
Posts: 2271
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

shimano73 wrote: Tue Mar 26, 2024 7:00 pm

Code: Select all

19:44:11.662 -> SERVER: key sensor_type, value SHT 3X
jest logiem webserwera i pokazuje co odczytał z html'a. Dla argumentu o nazwie "SHT 3X" zapisaną do cfg wartością jest "1".

Code: Select all

const char SENSOR_TYPE[] = "sensor_type";
int32_t intValue = 0;

auto cfg = Supla::Storage::ConfigInstance();

if (cfg->getInt32(SENSOR_TYPE, &intValue)) {           
  SUPLA_LOG_DEBUG(" **** Param[%s]: %d", SENSOR_TYPE, intValue); // %d, nie %s dla int
} else {
  SUPLA_LOG_DEBUG(" **** Param[%s]: is not set", SENSOR_TYPE);
}

if (intValue == 1) {
  // do something
}
https://www.facebook.com/groups/supladiy/

Return to “Arduino IDE”