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

petione
Posty: 90
Rejestracja: sob lip 21, 2018 4:26 pm

Klew, a może za jednym zamachem udalo by sie dodać logowanie do strony konfiguracyjnej? 😏
zzrr
Posty: 344
Rejestracja: śr paź 26, 2022 7:35 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?
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

zzrr pisze: pn sty 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.
Widzimy się na Supla Offline Party vol. 2 :!:
zzrr
Posty: 344
Rejestracja: śr paź 26, 2022 7:35 pm

klew pisze: pn sty 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 ;)
Awatar użytkownika
shimano73
Posty: 1968
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

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 :)
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

shimano73 pisze: ndz 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

Kod: Zaznacz cały

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/
Awatar użytkownika
shimano73
Posty: 1968
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

lukfud pisze: ndz mar 24, 2024 10:08 pm
shimano73 pisze: ndz 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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

/*
  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 :)
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

shimano73 pisze: wt 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/
Awatar użytkownika
shimano73
Posty: 1968
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

lukfud pisze: wt mar 26, 2024 5:39 pm
shimano73 pisze: wt 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 :

Kod: Zaznacz cały

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 :

Kod: Zaznacz cały

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

a nie

Kod: Zaznacz cały

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 :)
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

shimano73 pisze: wt mar 26, 2024 7:00 pm

Kod: Zaznacz cały

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".

Kod: Zaznacz cały

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/
ODPOWIEDZ

Wróć do „Arduino IDE”