Souliss su Shelly 1

279 views
Skip to first unread message

Marco Pozzuolo

unread,
Mar 20, 2019, 6:27:40 AM3/20/19
to souliss-it
Ciao,
ho appena ricevuto un paio di moduli Shelly 1, 1 relè wifi con feedback tutto funzionante a 200Volt, sta al posto di un frutto 503, è basato su ESP ed è flashabile. Appena mi rispondono come ritornare al firmware originale Shelly.cloud (il modulo non è mio) inizio i test.
Ho intenzione di usarlo con un T18 (controllo relè passo passo+feedback).

Vi tengo aggiornati.

Marco Pozzuolo

unread,
Mar 21, 2019, 3:27:04 PM3/21/19
to souliss-it
Ciao a tutti,
sono riuscito a caricare Souliss su uno Shelly 1, ecco lo sketch:

/**************************************************************************
    Souliss - Shelly1 Porting

It use static IP Addressing

    ESP Firmware operations
        
***************************************************************************/
// Ultima cifra dell'indirizzo IP
#define IP_ADDRESS 142
#define HOSTNAME "shelly01"
#define SERIAL_DEBUG
#define VNET_RESETTIME_INSKETCH
#define VNET_RESETTIME 0x00042F7 // ((20 Min*60)*1000)/70ms = 17143 => 42F7
//#define VNET_RESETTIME 0x0000359 // 857 -> x359 1 minuto
#define VNET_HARDRESET ESP.reset()

// Configure the framework
#include "bconf/MCU_ESP8266.h"              // Load the code directly on the ESP8266

// **** Define the WiFi name and password ****
#include "D:\__User\Administrator\Documents\Privati\ArduinoWiFiInclude\wifi.h"
//To avoide to share my wifi credentials on git, I included them in external file
//To setup your credentials remove my include, un-comment below 3 lines and fill with
//Yours wifi credentials
//#define WIFICONF_INSKETCH
//#define WiFi_SSID               "wifi_name"
//#define WiFi_Password           "wifi_password"    

// Include framework code and libraries
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <EEPROM.h>
#include "Souliss.h"

// Define the network configuration according to your router settings
uint8_t ip_address[4]  = {192, 168, 1, IP_ADDRESS};
uint8_t subnet_mask[4] = {255, 255, 255, 0};
uint8_t ip_gateway[4]  = {192, 168, 1, 1};


// This identify the number of the Slot
#define T_RELE_1 0      
#define T_LED 1
#define T_WIFI_STRDB 2 //It takes 2 slots
#define T_WIFI_STR 4 //It takes 2 slots

//Deadband for analog values
#define NODEADBAND 0 //Se la variazione è superio del 0,1% aggiorno

// **** Define here the right pin for your ESP module **** 
#define PIN_RELE_1 4
#define PIN_BUTT_1 5
#define PIN_BUTT_2 1
#define PIN_BUTT_LED 0
#define PIN_LED 3

//Useful Variable
byte led_status = 0;
byte joined = 0;
U8 value_hold = 0x068;

//Variable to Handle WiFio Signal
long rssi = 0;
int bars = 0;

void setup()
{  
#ifdef SERIAL_DEBUG
Serial.begin(115200);
Serial.println("Node Starting");
#endif


//Delay the startup. In case of power outage, this give time to router to start WiFi
#ifndef SERIAL_DEBUG
//Inserire qua l'ultima cifra dell'indirizzo IP per avere un delay all'avvio diverso per ogni nodo
delay((IP_ADDRESS - 128) * 5000);
//delay(15000);
#endif
Initialize();

#ifdef SERIAL_DEBUG
Serial.println("Node Inizializing");
#endif

//Pin Setup
pinMode(PIN_RELE_1, OUTPUT);
pinMode(PIN_BUTT_1, INPUT);


#ifndef SERIAL_DEBUG
//Gestisco i PIN della seriale, se il Seral Debug è attivo non uso i PIN Seriali
pinMode(PIN_BUTT_2, FUNCTION_3); // trasforma la TX in gpio1
pinMode(PIN_BUTT_2, INPUT); //Lo imposto come ingresso
digitalWrite(PIN_BUTT_2, HIGH); //PullUp
pinMode(PIN_LED, FUNCTION_3); // trasforma la RX in gpio3
pinMode(PIN_LED, OUTPUT);   //La imposto come OutPut
#endif


// Connect to the WiFi network with static IP
Souliss_SetIPAddress(ip_address, subnet_mask, ip_gateway);

Set_SimpleLight(T_RELE_1); // T11 Relè 1
Set_SimpleLight(T_LED); // T11 Gestione Led
Souliss_SetT51(memory_map, T_WIFI_STRDB); //Imposto il tipico per contenere il segnale del Wifi in decibel
Souliss_SetT51(memory_map, T_WIFI_STR); //Imposto il tipico per contenere il segnale del Wifi in barre da 1 a 5

// queste 4 righe servono per annullare l'effetto del Toggle al primo giro del loop
// in modo da non avere le uscite alte all'avvio. Solo per i DigIn2State
Souliss_DigIn2State(PIN_BUTT_1, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
mInput(T_RELE_1) = 0;

//Enable OTA
ArduinoOTA.setHostname(HOSTNAME);
ArduinoOTA.begin();

#ifdef SERIAL_DEBUG
Serial.print("MAC: ");
Serial.println(WiFi.macAddress());
Serial.print("IP:  ");
Serial.println(WiFi.localIP());
Serial.print("Subnet: ");
Serial.println(WiFi.subnetMask());
Serial.print("Gateway: ");
Serial.println("Node Initialized");
#endif



}

void loop()
    // Here we start to play
    EXECUTEFAST() {                     
        UPDATEFAST();   
FAST_70ms() {   // We process the logic and relevant input and output every 50 milliseconds

// Gestisce il pulsante di Reset e il Led
// se si preme il punsante di fa il toggle del led, se si preme a lungo si resetta la scheda
#ifndef SERIAL_DEBUG
U8 invalue = LowDigInHold(PIN_BUTT_LED, Souliss_T1n_ToggleCmd, value_hold, T_LED);
if (invalue == Souliss_T1n_ToggleCmd) {
#ifdef SERIAL_DEBUG
Serial.println("TOGGLE");
#endif
mInput(T_LED) = Souliss_T1n_ToggleCmd;
} else if (invalue == value_hold) {
// reset
#ifdef SERIAL_DEBUG
Serial.println("REBOOT");
#endif
delay(1000);
ESP.reset();
}
#endif

}
FAST_210ms() {
//Processa le logiche per il segnale WiFi
Souliss_Logic_T51(memory_map, T_WIFI_STRDB, NODEADBAND, &data_changed);
Souliss_Logic_T51(memory_map, T_WIFI_STR, NODEADBAND, &data_changed);
}
FAST_110ms() { 
//Verifico che l'interruttore non cambi posizione in caso invio il toggle
//Se si usano pulsanti utilizzare le seguenti 2 righe commentate
Souliss_LowDigIn(PIN_BUTT_1, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
//Souliss_LowDigIn(PIN_BUTT_2, Souliss_T1n_ToggleCmd, memory_map, T_RELE_2);
//Souliss_DigIn2State(PIN_BUTT_1, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);

//Apply logic if statuses changed
Logic_SimpleLight(T_RELE_1);
Logic_SimpleLight(T_LED);

//Gestisco i Relè
DigOut(PIN_RELE_1, Souliss_T1n_Coil, T_RELE_1);
#ifndef SERIAL_DEBUG
DigOut(PIN_LED, Souliss_T1n_Coil, T_LED);
#endif
}
FAST_510ms() {
//Check if joined to gateway
#ifndef SERIAL_DEBUG
check_if_joined();
#endif
}
FAST_2110ms() {
#ifdef SERIAL_DEBUG
Serial.println("Heartbeat");
#endif
}
        FAST_PeerComms();                                        
ArduinoOTA.handle();
}
EXECUTESLOW() {
UPDATESLOW();
SLOW_10s() {
}
SLOW_110s() {
//Check wifi signal
check_wifi_signal();
}
}
}

void check_wifi_signal() {
rssi = WiFi.RSSI();

if (rssi > -55) {
bars = 5;
}
else if (rssi < -55 & rssi >= -65) {
bars = 4;
}
else if (rssi < -65 & rssi >= -70) {
bars = 3;
}
else if (rssi < -70 & rssi >= -78) {
bars = 2;
}
else if (rssi < -78 & rssi > -82) {
bars = 1;
}
else {
bars = 0;
}
float f_rssi = (float)rssi;
float f_bars = (float)bars;
Souliss_ImportAnalog(memory_map, T_WIFI_STRDB, &f_rssi);
Souliss_ImportAnalog(memory_map, T_WIFI_STR, &f_bars);
#ifdef SERIAL_DEBUG
Serial.print("wifi rssi:");
Serial.println(rssi);
Serial.print("wifi bars:");
Serial.println(bars);
#endif
}

//This routine check for peer is joined to Souliss Network
//If not blink the led every 500ms, else led is a mirror of relè status
void check_if_joined() {
if (JoinInProgress() && joined == 0) {
joined = 0;
if (led_status == 0) {
digitalWrite(PIN_LED, HIGH);
led_status = 1;
}
else {
digitalWrite(PIN_LED, LOW);
led_status = 0;
}
}
else {
joined = 1;
}
}



Se volete poi tornare al firmware originale Shelly, seguite questa guida, tenendo presente che sul mio la flash è da 2 Mega: 

Marco

Dario Cdj

unread,
Mar 21, 2019, 3:50:15 PM3/21/19
to souli...@googlegroups.com
Bravo Marcolino, quindi shelly comanda dentro 503 un punto luce con pulsante fisico e led ? Compri shelly e lo affianchi ad un normale interruttore? Ci stanno entrambi in cassetta ?

Dario2

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.
Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/8f7938e3-17fb-4ae3-98f8-3960db2205e2%40googlegroups.com.
Per altre opzioni visita https://groups.google.com/d/optout.

Marco Pozzuolo

unread,
Mar 21, 2019, 3:56:42 PM3/21/19
to souliss-it
Lo shelly1 è poco più grande di una moneta da 2 euro, se la cassetta 503 è profonda sta dietro agli interruttori, tipo le mie schede, altrimenti sta esattamente al posto di un frutto. Quindi in una 503 ci stanno 2 interruttori/pulsnati e lo shelly dietro a un tappo.

Io ci controllo dei T18, avendo lo shelly1 il contatto del relè pulito e un ingresso per il feedback che accetta già il 220Volt, e in più ci metto il un led di stato, il pulsante di reset sulla GPIO0 e puoi metterci un altro pulsante aggiuntivo per controllare con dei SendData altri nodi.
per 9.90 più spedizione mi evito la rottura di farmi 5 schede per controllare i T18 che  mi costerebbero meno in soldi ma molto più in rottura, poi sono inscatolati e con marchio CE, e non ultimo non perdono la garanzia se si cambia il firmware ed è possibile ripristinarli.

M.

-----------------------------------------------------------------------------------------------------------------
Marco Pozzuolo


Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.

Dario Cdj

unread,
Mar 21, 2019, 4:09:32 PM3/21/19
to souli...@googlegroups.com
Molto interessante ma solitamente nella 503 con interruttore ci sono solo i due fili dell' interruttore appunto... Si potrebbe pensare di usarlo con t11 ? Ci vuole pure l'altro filo della 220 per alimentare shelly? Nel caso del t18 ci comandi il classico relè passo passo ? Deve uscire un secondo contatto per il feedback..... ?

Marco Pozzuolo

unread,
Mar 21, 2019, 4:12:33 PM3/21/19
to souliss-it
Ciao Dario,
con il firmware standard, si comporta come un T11 con tutte le modalità di pulsante/interruttore. Se ci metti Souliss ci fai un T11 pulito con pulsante o interruttore. Shelly nasce per essere messo in serie dopo l'interruttore ma prima della lampada, trovi molti schemi.
Io li uso con un T18 con cui comando un passo passo, e il feedback a 220Volt c'è già, sarebbe la linea dove si collega il pulsnate nell'utilizzo normale dello shelly.

-----------------------------------------------------------------------------------------------------------------
Marco Pozzuolo


Marco Pozzuolo

unread,
Mar 22, 2019, 8:06:21 PM3/22/19
to souliss-it


Finalmente sono riuscito a montare tutto, però ho un problema con la linea del feedback dello shelly, e quindi il T18 non mi funziona.
Praticamente, se la lampada è avvitata nel lampadario, il feedback mi da ON (tensione presente) anche se non c'è corrente e la lampada è spenta.
Al contrario se svito la lampada dal lampadario, funziona tutto correttamente.

La mia paura è che lo shelly può funzionare sugli stessi morsetti anche con 24/60 Volt, quindi quando c'è la lampadina avvitata potrebbe esserci un leggero ritorno dal neutro e quindi con la lampadina avvitata segnala sempre tensione presente.
Sapete se c'è un modo (un componente elettronico o un piccolo circuito) per evitare questo fastidioso comportamento?

Grazie

Giuseppe P.

unread,
Mar 23, 2019, 2:08:59 PM3/23/19
to souliss-it
Marco non ho capito sto shelly che pin espone e come stai prelevando il feedback... Cosa ha sto Shelly? Cosa espone? Quanti relè ha?

Di Maio, Dario

unread,
Mar 23, 2019, 2:15:09 PM3/23/19
to souliss-it
Ciao Marco, come l'hai collegato? Bel prodotto.

Dario.

Marco Pozzuolo

unread,
Mar 23, 2019, 3:09:09 PM3/23/19
to souliss-it
Ciao Dario,
Ho fatto il collegamento come per un T18, però il pin per il feedback che espone, è troppo "sensibile" e risente del ritorno della fase sul neutro, quindi opterò per metterci un T11 con il collegamento standard proposto sul sito shelly. Tutti i dettagli su https://shelly.cloud

Giuseppe, sul sito trovi tutti i dettagli per i pin esposti. La figata è che avendo l'ingresso a tutti 220v non bisogna ricablare i pulsanti e interruttori a bassa tensione. 


Il Sab 23 Mar 2019, 19:15 Di Maio, Dario <dario....@souliss.net> ha scritto:
Ciao Marco, come l'hai collegato? Bel prodotto.

Dario.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+...@googlegroups.com.
Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.

Giuseppe P.

unread,
Mar 23, 2019, 4:42:32 PM3/23/19
to souliss-it
Fai una cosa imposta il. Pin feedback come analogico leggi gli sbalzi e di conseguenza accetti il feedback solo in una determinata condizione

Marco Pozzuolo

unread,
Mar 23, 2019, 6:42:46 PM3/23/19
to souliss-it
In realtà è un pin digitale, prima c'è un circuito che adatta la 220volt per l'esp. Questo circuito legge come "alto" il ritorno di fase di circa 25/30 Volt.
Non se ne esce. 

Il Sab 23 Mar 2019, 21:42 Giuseppe P. <giusepp...@gmail.com> ha scritto:
Fai una cosa imposta il. Pin feedback come analogico leggi gli sbalzi e di conseguenza accetti il feedback solo in una determinata condizione

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+...@googlegroups.com.
Per postare messaggi in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/8d80bb8e-2945-4d6d-8e23-d058603cc77c%40googlegroups.com.
Per ulteriori opzioni, visita https://groups.google.com/d/optout.

Marco Pozzuolo

unread,
Mar 24, 2019, 2:30:34 PM3/24/19
to souliss-it
Ciao,
per chi fosse interessato, risolto anche il problema del feedback sul T18 inserendo in serie alla linea del feedaback una lampadina di quelle che si usano nei pulsnati luce scale. Le lampadine nei pulsanti luce scale, lavorano con il ritorno di fase, inserendola in serie al feedback del T18 blocca il ritorno di fase accendendosi quando il carico è spento, e facendo passare la fase quando il carito è acceso.
Quindi ho testato lo shelly 1, sia con T11 che con T18, ma si può usare anche con T13 e T14, tutto a 220 Volt, in modo da non dovrer stravolgere l'impianto di casa.

Marco

Il giorno sabato 23 marzo 2019 23:42:46 UTC+1, Marco Pozzuolo ha scritto:
In realtà è un pin digitale, prima c'è un circuito che adatta la 220volt per l'esp. Questo circuito legge come "alto" il ritorno di fase di circa 25/30 Volt.
Non se ne esce. 

Il Sab 23 Mar 2019, 21:42 Giuseppe P. <giusepp...@gmail.com> ha scritto:
Fai una cosa imposta il. Pin feedback come analogico leggi gli sbalzi e di conseguenza accetti il feedback solo in una determinata condizione

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+unsubscribe@googlegroups.com.

Di Maio, Dario

unread,
Apr 2, 2019, 3:59:54 PM4/2/19
to souliss-it
Foto?

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+unsubscribe@googlegroups.com.
Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/cc8c3a82-9de6-48ac-b63b-2e077dea9a79%40googlegroups.com.

Marco Pozzuolo

unread,
Apr 2, 2019, 4:01:08 PM4/2/19
to souliss-it
Di cosa? del nodo montato? a breve ne monto altri e faccio qualche foto

-----------------------------------------------------------------------------------------------------------------
Marco Pozzuolo


Il giorno mar 2 apr 2019 alle ore 21:59 Di Maio, Dario <dario....@souliss.net> ha scritto:
Foto?

On 20 Mar 2019 11:27 am, "Marco Pozzuolo" <marco.p...@gmail.com> wrote:
Ciao,
ho appena ricevuto un paio di moduli Shelly 1, 1 relè wifi con feedback tutto funzionante a 200Volt, sta al posto di un frutto 503, è basato su ESP ed è flashabile. Appena mi rispondono come ritornare al firmware originale Shelly.cloud (il modulo non è mio) inizio i test.
Ho intenzione di usarlo con un T18 (controllo relè passo passo+feedback).

Vi tengo aggiornati.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/cc8c3a82-9de6-48ac-b63b-2e077dea9a79%40googlegroups.com.
Per altre opzioni visita https://groups.google.com/d/optout.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.

Di Maio, Dario

unread,
Apr 2, 2019, 4:02:15 PM4/2/19
to souliss-it
Si, sono interessato a quello per le tapparelle

Dario.

On 2 Apr 2019 10:01 pm, "Marco Pozzuolo" <marco.p...@gmail.com> wrote:
Di cosa? del nodo montato? a breve ne monto altri e faccio qualche foto

-----------------------------------------------------------------------------------------------------------------
Marco Pozzuolo


Il giorno mar 2 apr 2019 alle ore 21:59 Di Maio, Dario <dario....@souliss.net> ha scritto:
Foto?

On 20 Mar 2019 11:27 am, "Marco Pozzuolo" <marco.p...@gmail.com> wrote:
Ciao,
ho appena ricevuto un paio di moduli Shelly 1, 1 relè wifi con feedback tutto funzionante a 200Volt, sta al posto di un frutto 503, è basato su ESP ed è flashabile. Appena mi rispondono come ritornare al firmware originale Shelly.cloud (il modulo non è mio) inizio i test.
Ho intenzione di usarlo con un T18 (controllo relè passo passo+feedback).

Vi tengo aggiornati.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+unsubscribe@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/cc8c3a82-9de6-48ac-b63b-2e077dea9a79%40googlegroups.com.
Per altre opzioni visita https://groups.google.com/d/optout.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+unsubscribe@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/CAKGhMPJi3S4%3D15eOhtxF4cZamwKnpyJGCms6GD%3DkZhMshFs%2BTA%40mail.gmail.com.
Per altre opzioni visita https://groups.google.com/d/optout.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+unsubscribe@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.

Marco Pozzuolo

unread,
Apr 2, 2019, 4:04:35 PM4/2/19
to souliss-it
Parli dello Shelly 2.5, io ho gli shelly 1.
Sono elettricmante diversi.
Lo shelly1 ha il contatto del relè pulito, mentre gli shelly 2.5 hanno l'uscita collegata alla Fase o al Neutro a seconda di come gli alimenti.
Sullo shelly 2.5 non so altro, ma mi sembra si possano riprogrammare anche quelli
Ti cerco qualcosa.

Marco

-----------------------------------------------------------------------------------------------------------------
Marco Pozzuolo


Il giorno mar 2 apr 2019 alle ore 22:02 Di Maio, Dario <dario....@souliss.net> ha scritto:
Si, sono interessato a quello per le tapparelle

Dario.
On 2 Apr 2019 10:01 pm, "Marco Pozzuolo" <marco.p...@gmail.com> wrote:
Di cosa? del nodo montato? a breve ne monto altri e faccio qualche foto

-----------------------------------------------------------------------------------------------------------------
Marco Pozzuolo


Il giorno mar 2 apr 2019 alle ore 21:59 Di Maio, Dario <dario....@souliss.net> ha scritto:
Foto?

On 20 Mar 2019 11:27 am, "Marco Pozzuolo" <marco.p...@gmail.com> wrote:
Ciao,
ho appena ricevuto un paio di moduli Shelly 1, 1 relè wifi con feedback tutto funzionante a 200Volt, sta al posto di un frutto 503, è basato su ESP ed è flashabile. Appena mi rispondono come ritornare al firmware originale Shelly.cloud (il modulo non è mio) inizio i test.
Ho intenzione di usarlo con un T18 (controllo relè passo passo+feedback).

Vi tengo aggiornati.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/cc8c3a82-9de6-48ac-b63b-2e077dea9a79%40googlegroups.com.
Per altre opzioni visita https://groups.google.com/d/optout.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/CAKGhMPJi3S4%3D15eOhtxF4cZamwKnpyJGCms6GD%3DkZhMshFs%2BTA%40mail.gmail.com.
Per altre opzioni visita https://groups.google.com/d/optout.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/CAHuJBZGhaX-umd7RLzDgs7bJmVB%2BH9uX4iw37GCQ1-ivTr%3DcSA%40mail.gmail.com.
Per altre opzioni visita https://groups.google.com/d/optout.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.

Marco Pozzuolo

unread,
Apr 3, 2019, 6:14:02 AM4/3/19
to souliss-it
Ciao Dario1,
Lo shelly 2 non ha esposti i pin di programmazione, la nuova versione Shelly 2.5 si.
Come vedi a differenza dello shelly1 non ha il contatto del relè pulito, ma passa sull'uscita del relè la Fase o il Neutro a seconda di come effettui il collegamento per l'alimentazione. Idem per gli ingressi, accettano direttamente la tensione di alimentazione a 220, fase o neutro a seconda di come lo alimenti.
Essendo una ESP con 2 MByte di Flash, Souliss ci sta comodo.

Questo dovrebbe essere il collegamento dei PIN dello Shelly 2.5, però non l'ho pututo verificare: https://forum.creationx.de/index.php?attachment/1982-shelly-1-tasmota-png/

Se hai bisogno altre info, fammi sapere
Marco


Giuseppe P.

unread,
Apr 3, 2019, 11:34:50 AM4/3/19
to souliss-it
Marco praticamente ha lo stesso identico firmware del Sonoff?

Marco Pozzuolo

unread,
Apr 3, 2019, 11:36:13 AM4/3/19
to souliss-it
No,
ha il suo firmware shelly.cloud
Se vuoi gli metti Tasmota, o Souliss, o te lo programmi come vuoi

Davide Cencini

unread,
Apr 23, 2019, 9:47:03 AM4/23/19
to souliss-it
Una cosa non ho capito,  avendo ancora le tapparelle tradizionali, quelle elettriche  hanno il classico pulsate salita/discesa, che , penso, ti permetta di posizionare la tapparella come vuoi (aperta, chiusa, aperta un terzo e cosi via)  la domotica come agisce? se ho capito bene in tre sole posizioni  aperta/chiusa/meta'....quindi se io dal pulsante la apro di pochi cm e poi invio il comando di chiusura dalla domotica, cosa e' che stabilisce l'interruzione della corrente al motore (per evitare di bruciarlo)  il fine corsa regolabile sul motore? 
scusa la domanda, forse banale, ma sono a digiuno in  materia, e visto che devo "motorizzare casa " vorrei prima capire bene cosa fare, ad esempio i kit dei motori che si trovano su internet tipo questi https://tapparelle.faidacasa.com/motori-per-tapparelle  sono validi?  

Marco Pozzuolo

unread,
Apr 23, 2019, 10:28:12 AM4/23/19
to souliss-it
Davide,
io ho le gelosie, quindi non saprei

Marco

-----------------------------------------------------------------------------------------------------------------
Marco Pozzuolo

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/souliss-it/3lEY_SxaxXk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a souliss-it+...@googlegroups.com.
Per postare in questo gruppo, invia un'email a souli...@googlegroups.com.

Giuseppe P.

unread,
Apr 24, 2019, 1:38:42 AM4/24/19
to souliss-it
I motori hanno i loro fine corsa in genere. Io li ho montati e se la tapparella si trova a metà e do una chiusura con souliss il relè resta eccitato sempre per il tempo stabilito in sketch, ma appena la tapparella arriva in chiusura o apertura il motore si stacca da solo.. Ma se non ci sono devi montarli tu e dare lo stop a souliss per staccare la corrente

Davide Cencini

unread,
Apr 24, 2019, 4:24:37 AM4/24/19
to souliss-it
ok, grazie.....  i  motori che ho visto hanno la regolazione meccanica del fine corsa, quindi dovrebbe staccare, mi informo meglio

Davide Cencini

unread,
May 5, 2019, 1:47:30 PM5/5/19
to souliss-it
Avevi ragione Giuseppe, confermo quanto hai detto.
Domanda.... un interruttore tipo quello sulla porta degli ascensori che blocca la tapparella, mai usato? se si ...consigli su dove trovarli?   ho due gatti non li vorrei ghigliottinare :-))


Il giorno mercoledì 24 aprile 2019 07:38:42 UTC+2, Giuseppe P. ha scritto:

Dario Cdj

unread,
Aug 4, 2020, 2:46:33 PM8/4/20
to souliss-it
Scusate riapro il post per un problema che sto riscontrando su Shelly 1 appena acquistato. In pratica non mi scrive sulla eprom con web config Lo sketch, Souliss e la versione del core sono le stesse che uso nei miei Shelly a casa. Riaprendo web config trovo i parametri di default come se non avesse scritto...nella mia versione di souliss vedo che in realtà ha memorizzato il nome dell'AP e NON l'ip, ma se entro nei parametri della rete mi mette MYSSD MYPASS... Tutto di default. Secondo voi da cosa può dipendere? Provato anche un altro (ne devo montare 5). Grazie per eventuali dritte, non mi dite di mettere l'ip a mano, a questo avevo già pensato ma vorrei evitare

Dario2

Dario Cdj

unread,
Aug 5, 2020, 2:24:51 AM8/5/20
to souliss-it
E per come l'ho riaperto lo richiudo. Era un problema di autocompletamento. Sappiate che se nel modulo di webconfig non scrivete a mano i parametri (ma li selezionate se salvati in cache nel browser) non se li prende...... di quelle cosette che ti fanno perdere un giorno inutilmente....
Saluti a tutti
Dario2

Di Maio, Dario

unread,
Aug 10, 2020, 2:21:59 AM8/10/20
to souliss-it
Probabilmente dipende dalla porzione di flash che dedichi a spiffs durante la compilazione.

Che core stai utilizzando?

Io ieri ho fatto degli aggiornamenti e non sono riuscito ad usare il 2.6.3 su le KMP Dino Wifi, andava in reset e loop. Stesso codice con il 2.3.0 funziona senza problemi.

Dario.

On Tue, 4 Aug 2020, 20:46 Dario Cdj <dari...@gmail.com wrote:
Scusate riapro il post per un problema che sto riscontrando su Shelly 1 appena acquistato. In pratica non mi scrive sulla eprom con web config Lo sketch, Souliss e la versione del core sono le stesse che uso nei miei Shelly a casa. Riaprendo web config trovo i parametri di default come se non avesse scritto...nella mia versione di souliss vedo che in realtà ha memorizzato il nome dell'AP e NON l'ip, ma se entro nei parametri della rete mi mette MYSSD MYPASS... Tutto di default. Secondo voi da cosa può dipendere? Provato anche un altro (ne devo montare 5). Grazie per eventuali dritte, non mi dite di mettere l'ip a mano, a questo avevo  già pensato ma vorrei evitare

Dario2

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/9c016c6f-20f6-43b6-9ec6-4e7ab4684da7o%40googlegroups.com.

Di Maio, Dario

unread,
Aug 10, 2020, 2:22:22 AM8/10/20
to souliss-it
:)

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/souliss-it/8e5712eb-7d1c-4125-8ecc-4a8824aadbcco%40googlegroups.com.

Dario Cdj

unread,
Aug 10, 2020, 3:45:03 AM8/10/20
to souli...@googlegroups.com
Dario credo di aver installato il 2.7.x e ultima ide arduino 1.8.13 (sono su un laptop che non ho mai usato per sta roba). Ho compilato come 4mb+1spiffs.
Tempo fa provai senza successo a riscrivere tutta la parte webconfig per fargli usare la spiffs al posto della eeprom...ma era un bel casino... Quando ti decidi a rimettere mano su souliss ed a provare la mia versione (che ora ha solo telegram quindi solo una dep alla lib) si potrebbero fare grandi cose, avevo già scritto una todo list di features da implementare :)
Dario2 

Dario Cdj

unread,
Aug 16, 2020, 12:53:13 PM8/16/20
to souliss-it
Cari amici, ancora una volta riapro questo post perchè mi sono accorto che lo sketch che uso su shelly1 all'avvio accende la luce, il che non va assolutamente bene per dove sono installati, in quanto se se ne va la luce d'inverno mi si accende la casa e può stare accesa senza alcun controllo.

In setup ho provato sia :
digitalWrite (PIN_RELE_1, LOW);
che anche
digitalWrite (PIN_RELE_1, HIGH);

e accende sempre la lampada.

Questa è la fast che uso : 

 FAST_50ms() {

      Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
      Logic_SimpleLight(T_RELE_1);
      DigOut(PIN_RELE_1, Souliss_T1n_Coil, T_RELE_1);
      }

Avete per favore qualche idea ?
Grazie a tutti
Dario2

Saverio Sbrana

unread,
Aug 16, 2020, 1:11:42 PM8/16/20
to souliss-it
ciao io con questa soluzione nel setup ho risolto

  pinMode(pinRelayIn1, INPUT);
  digitalWrite(pinRelayOut1, LOW);
  pinMode(pinRelayOut1, OUTPUT);

Di Maio, Dario

unread,
Aug 16, 2020, 1:44:22 PM8/16/20
to souliss-it
Se togli DigIn2State lo fa lo stesso?

Se invece della forma compatta usi quella completa, hai un'opzione di filtro (che credo sia disattiva per default).

Dario.


--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.

Dario Cdj

unread,
Aug 16, 2020, 1:48:39 PM8/16/20
to souliss-it
Sembra che ho risolto con la tua soluzione Fulvio.... 
Dario1 non ho provato, ok così....
Thanks a entrambi

Fulvio Spelta

unread,
Aug 19, 2020, 5:46:34 AM8/19/20
to souliss-it
Sembra che ho risolto con la tua soluzione Saverio....  :-)

Dario Cdj

unread,
Aug 19, 2020, 6:01:23 AM8/19/20
to souli...@googlegroups.com
Ahahah scusate, comunque è stato un falso allarme... NON sembra che ho risolto... Ma ogni prova qui è complicata perché devo staccare la luce e ci sono 18 persone

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.

Dario Cdj

unread,
Aug 25, 2020, 11:33:43 AM8/25/20
to souliss-it
Dario, se tolgo  DigIn2State non lo fa piu ma non funzia... 

uso : Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);

Please help che devo fixare prima di partire altrimenti la prima volta che va via la luce trovo la casa accesa.....
Tnx
Dario2

Dario Cdj

unread,
Aug 25, 2020, 11:46:07 AM8/25/20
to souliss-it
Per l'esattezza se tolgo digin2state non funziona da interruttore fisico e funziona da app....

Di Maio, Dario

unread,
Aug 25, 2020, 11:55:31 AM8/25/20
to souliss-it
Il tuo problema è che la prima esecuzione di DigIn2State da un comando, perchè la stai usando diversamente da come era pensata.

Puoi usare una pezza a colori realizzando un ciclo che spenga le luci nei primi secondi di avviamento.

In genere millis() parte sempre da 0 all'avvio, quindi dopo tutti i Logic_Txx puoi inserire un if(millis()<10000)... che dia il comando di spegnimento a tutti i tipici, in questo modo nei primi 10 secondi risulterà sempre tutto spento.

Dario.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.

Dario Cdj

unread,
Aug 25, 2020, 12:11:06 PM8/25/20
to souliss-it
Ok provo, ho anche provato Souliss_LowDigIn(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1); ma in questo modo devo accendere e spegnere per fare un toggle.... cioè accendo/spengo e si accende la luce, accendo/spengo e si spegne :P

Provo con millis..... tnx
Dario2

Di Maio, Dario

unread,
Aug 25, 2020, 12:17:09 PM8/25/20
to souliss-it
Dovresti cambiare pulsante

Dario Cdj

unread,
Aug 25, 2020, 12:23:43 PM8/25/20
to souliss-it
Great Dario, 
 if(millis()<10000) {  
        mInput(T_RELE_1) = (Souliss_T1n_OffCmd);
        } 
      
Sembra essere la via.... grazie sempre
Dario2

Il giorno martedì 25 agosto 2020 alle 17:55:31 UTC+2 dario....@souliss.net ha scritto:

Dario Cdj

unread,
Aug 31, 2020, 5:28:47 AM8/31/20
to souliss-it
Scusate una domanda stupida ma vitale, 
 minput in locale funziona se il gateway souliss è offline? 

Grazie
Dario2

Di Maio, Dario

unread,
Aug 31, 2020, 7:03:00 AM8/31/20
to souliss-it

Dario Cdj

unread,
Aug 30, 2022, 3:55:26 AM8/30/22
to souliss-it
Ciao a tutti! Ok gente, persevero con Souliss e Shelly. In questa installazione che ho al mare ho diversi shelly1. Di inverno spesso la casa è chiusa e mi capitava spesso che la gente mi chiamava perché c'erano le luci del patio accese.Questo abbiamo stabilito che era dovuto al fatto che spesso di inverno cadeva internet. E ho ovviato mettendo un violento digitalwrite off all'avvio in modo che per si e per no lui spegne il relè. 
Premesso che :
- Il nodo si resetta ogni 20 Min se non è collegato
- il nodo ha un delay all'avvio di circa 90 secondi così se manca la luce ha il tempo di fare riavviare e riallineare il router 

Ho capito che così non va bene lo stesso perché l'altra sera c'era internet down e ogni 20 Min a cena mi si spegneva il patio ogni 20 Min per 90 sec e dovevo riaccenderlo io. Stiamo parlando di interruttori on/off e non pulsanti che comandano relè (bistabili?)

Secondo voi: 

- Si può leggere lo stato del carico per capire se la luce è accesa anche da interruttore fisico ? Penso di sì, si controlla con moutput?
- Ha senso scrivere al cambio di stato e controllare all'avvio un file in spiffs in modo da ripristinare lo stato del nodo al riavvio?
- Ha senso togliere il delay iniziale e fare resettare il nodo sempre ogni 20min in modo che al massimo si ha un blackout di qualche secondo se manca internet? Questo significherebbe però che ad es. Il gateway se va via la luce risale dopo 20 Min......
- Potrebbe avere senso "controllare" la connessione da codice e dirgli di connettersi senza resettare il nodo? Se si, come?
- Gli altri sistemi che fanno?

Grazie se qualcuno avrà la bontà di rispondermi

Dario2

Qualche altra idea o suggerimento

Dario Cdj

unread,
Dec 6, 2022, 5:06:00 AM12/6/22
to souliss-it
Ciao a tutti

Vorrei sistemare questo codice che uso con Shelly1 una volta per tutte in modo che sia "bullet proof".... al momento ho sempre problemi nella casa vacanze per blackout, mancanza di rete, etc.

Il mio obiettivo è realizzare un nodo che :

1) Funzioni indipendentemente dal fatto che ci sia internet down o meno

2) Funzioni anche se il dhcp server è giu (ovvero il router principale, i nodi sono collegati a degli access point ed uso tutti indirizzi statici)

3) Memorizzi in LittleFS (dato che SPIFFS ormai è superata) lo stato del relè quando viene acceso o spento, in modo che quando va via la luce e poi torna il nodo (anche se il resto è ancora down, magari perchè gli ap devono ripartire o meno) abbia lo stato memorizzato.

4) All'avvio ripristini quindi lo stato del relay (se era acceso o spento)

Come sapete  come programmatore sono una mezza trota e ho molti limiti, se per caso questa cosa potrebbe servire anche a qualcuno che vorrebbe aiutarmi ve ne sarei molto grato, ho fatto dei tentativi ma il mio knowhow è limitato.


Saluti

Dario2   

Dario Di Maio

unread,
Dec 6, 2022, 1:06:35 PM12/6/22
to souli...@googlegroups.com
Ciao Dario,

il core ESP riavvia il nodo in assenza di connessione WiFi, credo che possa essere modificato, ma va fatto a livello di core. La parte di assegnazione via DHCP è utilizzata anche con indirizzi statici, l'ESP ottiene prima un indirizzo dinamico e poi lo sovrascrive, anche questo comportamento dipende dal core.

La memorizzazione delle variabili può essere fatta anche sfruttando l'RTC, come nello sketch sotto.

Saluti,
Dario.

/**************************************************************************
    home_Bonsai
***************************************************************************/

// Let the IDE point to the Souliss framework
#include "SoulissFramework.h"

#include "bconf/MCU_ESP8266.h"   // Define the board type
#include "conf/Webhook.h"                   // Enable DHCP and DNS

// Set WiFi SSID and Password
#include "myWifiConf.h"

// Use RTC to store RAM values during reboot
#include <RTCVars.h>
RTCVars state; // create the state object

/*
#define VNET_RESETTIME_INSKETCH
#define VNET_RESETTIME 0x000AFC80
#define VNET_HARDRESET ESP.restart()
*/

// Define the network configuration according to your router settings
uint8_t ip_address[4]  = {192, 168, 3, 116};
uint8_t subnet_mask[4] = {255, 255, 255, 0};
uint8_t ip_gateway[4]  = {192, 168, 3, 1};
#define myvNet_address  ip_address[3]

// Define addresses on IPBroadcast MEDIA3
#define m3_NODE_1 0xAB01 // Node that controls the antitheft
#define m3_NODE_2 0xAB02 // Node that controls solar blind  1
#define m3_NODE_3 0xAB03 // Node that controls solar blinds 2 and 3
#define m3_NODE_4 0xAB04 // Node that control bedroom LYT8266
#define m3_NODE_5 0xAB05 // Node that control livingroom LYT8266
#define m3_NODE_6 0xAB06 // Node for irrigation
#define m3_NODE_7 0xAB07
#define m3_NODE_8 0xAB08
#define m3_NODE_9 0xAB09
#define m3_SUB 0xFF00
#define m3_GTW 0xAB01
// Include framework code and libraries
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

// Define pin and slot
#define SOLENOID 4
#define CONTROLBUTTON 5

#define IRRIGATION 0 // Pulse to start an irrigation cycle
#define CYCLE_AUTOSTART 1 // Set periodic autostart of the cycle
uint8_t autostart=0;
#define SOLENOIDSTATE 2 // Solenoid state ON/OFF
#define CYCLE_DURATION 3 // Minutes an irrigation will last
#define CYCLE_TIMESTART 5 // Hour the cycle will start in AUTO mode
#define CYCLE_WEEKLY 7 // The number of times a cycle will run in a week
#define TESTMODE 9
#define NEXT_AVAILABLE_SLOT 10

#define MIN_DURATION 10 // Minimum duration in minutes
#define MAX_DURATION 60 // Maximum duration in minutes
float duration=MIN_DURATION;
#define MIN_TIME 0 // Minimum hour
#define STANDARD_TIME 19 // Standard hour
#define MAX_TIME 24 // Maximum hour
float startime=STANDARD_TIME;
#define MIN_WEEK 1 // Minimum times per week
#define MAX_WEEK 7 // Maximum times per week
float weektimes=MIN_WEEK;

// Define broadcast alarms
#define WindStorm   0xFF01,0x01
#define SunTime    0xFF01,0x02
#define AutoClose   0xFF01,0x03
#define AutoRestart 0xFF01,0x03
#define BlindOpen 0xFF01,0x04
#define WillRain 0xFF01,0x05



/* ######################################## */

// Set Telegram BOT ID
#include "myTelegramBot.h"

// Initialize Telegram BOT
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

/* ######################################## */



// Include libraries for NTP synch
#include <TimeLib.h>
#include <NtpClientLib.h>
time_t actualtime=0, runningstart=0;
float runningtime=0, actual_duration=0;
uint8_t starttimer=0;

uint8_t todayis=0;

uint8_t weekcycle[7][7] = {  
{0, 0, 0, 1, 1, 1, 1},
{0, 0, 1, 1, 1, 1, 1},
{1, 1, 0, 0, 0, 0, 1},
{0, 0, 1, 1, 1, 1, 1},
{0, 1, 0, 0, 1, 1, 1},
{0, 0, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 1, 1}
};

/*** All configuration includes should be above this line ***/
#include "Souliss.h"  

/***************************/
/* SETUP */
/***************************/
void setup()
{
    // Init the board
    Initialize();

     // Set network parameters
    SetIPAddress(ip_address, subnet_mask, ip_gateway);

// Set address on MEDIA3
SetAddress(m3_NODE_6, m3_SUB, m3_GTW);

// Define logic typicals
    Set_T11(IRRIGATION);
Set_T11(CYCLE_AUTOSTART);
Set_T13(SOLENOIDSTATE);
Set_T61(CYCLE_DURATION);
Set_T61(CYCLE_TIMESTART);
Set_T61(CYCLE_WEEKLY);
Set_T11(IRRIGATION);
Set_T11(TESTMODE);

// Register variables to store value in RTC and try to recover data from RTC
state.registerVar(&duration);
state.registerVar(&startime);
state.registerVar(&weektimes);
state.registerVar(&autostart);
state.loadFromRTC();

// Set standard values from RTC memory
ImportAnalog(CYCLE_DURATION, &duration);
ImportAnalog(CYCLE_TIMESTART, &startime);
ImportAnalog(CYCLE_WEEKLY, &weektimes);
mOutput(CYCLE_AUTOSTART) = autostart;

// Define I/O
pinMode(CONTROLBUTTON, INPUT);
pinMode(SOLENOID, OUTPUT);

// Set NTP
NTP.begin("192.168.3.1", 1, true);
NTP.setInterval(4000,4000);

    // Init the OTA
    ArduinoOTA.setHostname("home_Bonsai");    
    ArduinoOTA.begin();

//Welcome message
client.setInsecure();
bot.sendMessage(group_id, "home_Bonsai avviato/riavviato", "");  

}

/***************************/
/* LOOP */
/***************************/

void loop()
{
    // Here we start to play
    EXECUTEFAST() {                    
        UPDATEFAST();  

     
        // Process every 510ms the logic
        SHIFT_510ms(1) {
Logic_T61(CYCLE_DURATION);

// The value of CYCLE_DURATION must be odd, otherwise accessing the pointer will let the MCU crash and reboot
float32((uint16_t*)(memory_map+OUT+CYCLE_DURATION),  &duration);

// Ensure that values are within limits
if(duration<MIN_DURATION) {
duration=MIN_DURATION;
ImportAnalog(CYCLE_DURATION, &duration);
Logic_T61(CYCLE_DURATION);
}
if(duration>MAX_DURATION) {
duration=MAX_DURATION;
ImportAnalog(CYCLE_DURATION, &duration);
Logic_T61(CYCLE_DURATION);
}
        }

// Enable/disable sensors
        SHIFT_510ms(2) {

Logic_T11(TESTMODE); // Disable the output if active

if(Logic_T11(IRRIGATION)) { // On change of IRRIGATION state
runningstart=NTP.getTime();
}

// Power ON/OFF the solenoid
if(mOutput(IRRIGATION)) {
if((actual_duration)<=duration) mInput(SOLENOIDSTATE) = Souliss_T1n_OnCmd;
else {
mInput(SOLENOIDSTATE) = Souliss_T1n_OffCmd;
mInput(IRRIGATION) = Souliss_T1n_OffCmd;
}
}
else {
mInput(SOLENOIDSTATE) = Souliss_T1n_OffCmd;
actual_duration=0;
}


if(Logic_T13(SOLENOIDSTATE) && mOutput(CYCLE_AUTOSTART))
if(mOutput(SOLENOIDSTATE)) bot.sendMessage(group_id, "Valvola irrigazione aperta automaticamente", "");
else bot.sendMessage(group_id, "Valvola irrigazione chiusa automaticamente", "");


if(!(mOutput(TESTMODE))) DigOut(SOLENOID, Souliss_T1n_OnCoil, SOLENOIDSTATE);            

}

        // Process every 510ms the logic
        SHIFT_510ms(3) {
Logic_T11(CYCLE_AUTOSTART);
autostart = mOutput(CYCLE_AUTOSTART); // Save the value to load it in the RTC
        }

// rocess every 510ms the logic
        SHIFT_510ms(4) {

Logic_T61(CYCLE_TIMESTART);

// The value of CYCLE_TIMESTART must be odd, otherwise accessing the pointer will let the MCU crash and reboot
float32((uint16_t*)(memory_map+OUT+CYCLE_TIMESTART),  &startime);

// Ensure that values are within limits
if(startime<MIN_TIME) {
startime=MIN_TIME;
ImportAnalog(CYCLE_TIMESTART, &startime);
Logic_T61(CYCLE_TIMESTART);
}
if(startime>MAX_TIME) {
startime=MAX_TIME;
ImportAnalog(CYCLE_TIMESTART, &startime);
Logic_T61(CYCLE_TIMESTART);
}
}


// Process every 510ms the logic
        SHIFT_510ms(5) {

if(Logic_T61(CYCLE_WEEKLY)) {

// The value of CYCLE_WEEKLY must be odd, otherwise accessing the pointer will let the MCU crash and reboot
float32((uint16_t*)(memory_map+OUT+CYCLE_WEEKLY),  &weektimes);

// Ensure that values are within limits
if(weektimes<MIN_WEEK) {
weektimes=MIN_WEEK;
ImportAnalog(CYCLE_WEEKLY, &weektimes);
Logic_T61(CYCLE_WEEKLY);
}
if(weektimes>MAX_WEEK) {
weektimes=MAX_WEEK;
ImportAnalog(CYCLE_WEEKLY, &weektimes);
Logic_T61(CYCLE_WEEKLY);
}
}
  }

        // Here we process all communication with other nodes
        FAST_PeerComms();  
    }


   EXECUTESLOW() {
        UPDATESLOW();

        SLOW_50s() {  // Process the timer every 50 seconds

actualtime = actualtime + 50; // add 50 seconds, this to don't overload too much with NTP

// Record the timer start
if(mOutput(IRRIGATION)) {
actualtime = NTP.getTime();

actual_duration = (float)(((hour(actualtime)*3600+minute(actualtime)*60+second(actualtime)))-(hour(runningstart)*3600+minute(runningstart)*60+second(runningstart)))/(float)60;
}
}

SLOW_30m() {
actualtime = NTP.getTime();
}

        SLOW_710s() {  // Process the timer every 710 seconds  

if((mOutput(CYCLE_AUTOSTART)) && (todayis!=day(actualtime)) && (weekcycle[((int)(weekday(actualtime)))-1][(uint8_t)(weektimes-1)])){
if(hour(actualtime)==startime) {
todayis=day(actualtime); // Auto activation is once per day
mInput(IRRIGATION)=Souliss_T1n_OnCmd;
}
}

// Periodically save to RTC
state.saveToRTC();
}
   }


    // Look for a new sketch to update over the air
    ArduinoOTA.handle();
}

foxe...@gmail.com

unread,
Dec 6, 2022, 3:53:57 PM12/6/22
to souli...@googlegroups.com
Ciao il segreto è capire se c’è a casa qualcuno oppure no … ci sono diversi modi per capire e per esempio se hai OH ti può aiutare anche semplicemente le persistence andando ogni 20min prima di spegnere tutto a verificare se per esempio negli ultimi 20 min qualcuno ha premuto un pulsante della luce o aperto una porta o passato davanti a un pir per elencare le cose più semplici … poi se vuoi fare le cose più complesse puoi verificare se qualcuno si è collegato al Wi-Fi … comunque il segreto per non sbagliare è sempre verificare se nel periodo c’è stato qualcuno in casa
Ciao
Lorenzo 


Inviato da iPhone

Il giorno 6 dic 2022, alle ore 19:06, Dario Di Maio <dari....@gmail.com> ha scritto:



Dario Cdj

unread,
Dec 7, 2022, 3:05:54 AM12/7/22
to souli...@googlegroups.com
Grazie mille per la risposta, vedrò ma il problema non è RTC o LittleFS che sia... è che se leggo in setup lo stato che c'è salvato (acceso o spento) e accendo il relè appena parte il loop al primo ciclo lo spegne ..... quindi forse devo leggerlo nel loop una volta e settare una variabile in modo che non lo legga piu ?

Dario2

Dario Di Maio

unread,
Dec 7, 2022, 6:51:31 AM12/7/22
to souli...@googlegroups.com
Devi sovrascrivere lo stato, se guardi nel mio codice troverai mOutput(...)=...

Dario.

Dario Cdj

unread,
Dec 8, 2022, 6:18:36 AM12/8/22
to souli...@googlegroups.com
Quindi mi pare di capire che
state.registerVar(&autostart);
leggi la variabile stored.....

mOutput(CYCLE_AUTOSTART) = autostart;
sovrascrivi lo stato .... e così nel mio caso il relè torna allo stato in cui era prima del reset, right ?

Tnx

Dario Di Maio

unread,
Dec 8, 2022, 6:55:48 AM12/8/22
to souli...@googlegroups.com
Register ne registra il puntatore, cosi quando chiami savetortc il valore viene registrato nella memoria del rtc.

Al primo avvio leggi i valori dal rtc e sovrascrivi. La differenza con l'emulazione della eeprom è che questi registri sono comunque una RAM, quindi ti servono solo per riavvio. Se togli alimentazione torni agli stati nulli (tutto spento).

Dario

Dario Cdj

unread,
Dec 12, 2022, 5:16:37 AM12/12/22
to souli...@googlegroups.com
Ah ok quindi nel mio caso meglio LittleFS......spero di riuscire a "sovrascrivere" .... 

Dario Cdj

unread,
Jan 31, 2023, 12:46:01 PM1/31/23
to souliss-it
Dario, purtroppo non riesco.... all'avvio leggo lo stato con : 
if (LittleFS.exists("/relayON"))  {
          statoreleinfs = 1 ;
          #ifdef SERIAL_DEBUG
          Serial.println("RelayON found on FS");
          #endif
        }
        else
        {
          statoreleinfs = 0 ;
          #ifdef SERIAL_DEBUG
          Serial.println("RelayON NOT found on FS");
          #endif
        }

e poi sovrascrivo lo stato con : 
    //Sovrascrivo lo stato ????
    mOutput(T_RELE_1) = statoreleinfs;

... Sbaglio ???

Nel loop invece : 

FAST_50ms() {

     
      Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
      Logic_SimpleLight(T_RELE_1);
      DigOut(PIN_RELE_1, Souliss_T1n_Coil, T_RELE_1);
 
        statorelay=memory_map[MaCaco_OUT_s + T_RELE_1]; // questo mi da 36 se il feedback è off e 35 se è on... non so perchè ma va bene
        #ifdef SERIAL_DEBUG          
        Serial.print("statorelay letto dalla memory map = ");Serial.println(statorelay);
        #endif
        if (statorelay == 1 ) {
        File relayON_fs = LittleFS.open("/relayON", "w");
        relayON_fs.println("1");
        relayON_fs.close();
        statoreleinfs = 1 ;
        #ifdef SERIAL_DEBUG
        Serial.print("statoreleinfs = ");Serial.println(statoreleinfs);
        #endif        
        }
        else
        {
        LittleFS.remove("/relayON");
        statoreleinfs = 0 ;
        #ifdef SERIAL_DEBUG
        Serial.print("statoreleinfs = ");Serial.println(statoreleinfs);
        #endif
        }
      }

Non so fare di meglio, cosa sbaglio ? 

Dario Di Maio

unread,
Feb 4, 2023, 7:13:40 AM2/4/23
to souli...@googlegroups.com
Ciao Dario,

hai provato ad usare i registri RTC per mantenere la memoria durante i riavii?

Credo di averlo segnalato in qualche discussione qui nel gruppo.

Saluti,
Dario.

Dario Cdj

unread,
Feb 4, 2023, 7:17:51 AM2/4/23
to souli...@googlegroups.com
Ciao Dario!
Si ma mi hai anche detto che RTC è RAM.... quindi se va via la luce non ho nulla di salvato come stato....
LittleFS (o SPIFFS) l'ho usato per lo stato di un reed ed è sempre andato ok.... adesso non capisco cosa sbaglio....
Tnx

Dario Di Maio

unread,
Feb 4, 2023, 7:27:51 AM2/4/23
to souli...@googlegroups.com
Se il problema è al riavvio, probabilmente è legato al DigIn2State che ha una sua memoria.

Quindi anche scrivendo con mOutput, DigIn2State viene eseguita al primo giro scrivendo nell'Input e la logica fa il resto.

All'avvio, usa DigIn2State usando 0 come slot (in modo che non scriva nulla) e solo dopo mOutput.

Saluti,
Dario.

Dario Cdj

unread,
Feb 9, 2023, 7:16:20 AM2/9/23
to souliss-it
Ok messo in setup :
 mOutput(T_RELE_1) = statoreleinfs;
 Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, 0);   //slot 0 in modo che non scriva nulla 

La fast che gestisce il t11 è : 
FAST_50ms() {
     
      Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
      Logic_SimpleLight(T_RELE_1);
      DigOut(PIN_RELE_1, Souliss_T1n_Coil, T_RELE_1);
 
        statorelay=memory_map[MaCaco_OUT_s + T_RELE_1]; // questo mi da 36 se il feedback è off e 35 se è on... non so perchè ma va bene
        #ifdef SERIAL_DEBUG          
        Serial.print("statorelay letto dalla memory map = ");Serial.println(statorelay);
        #endif
        if (statorelay == 1 ) {
        File relayON_fs = LittleFS.open("/relayON", "w");
        relayON_fs.println("1");
        relayON_fs.close();
        statoreleinfs = 1 ;
        #ifdef SERIAL_DEBUG
        Serial.print("statoreleinfs = ");Serial.println(statoreleinfs);
        #endif        
        }
        else
        {
        LittleFS.remove("/relayON");
        statoreleinfs = 0 ;
        #ifdef SERIAL_DEBUG
        Serial.print("statoreleinfs = ");Serial.println(statoreleinfs);
        #endif
        }
      }


In questo modo però fa casini.... una volta parte accesa e una volta no. Se agisco su interruttore fisico non riconosce lo stato, da souliss funzia però non si memorizza nulla.....

Non ci sto capendo piu molto....

Dario Di Maio

unread,
Feb 9, 2023, 9:08:25 AM2/9/23
to souli...@googlegroups.com
Setup:
Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, 0);   //slot 0 in modo che non scriva nulla 
mOutput(T_RELE_1) = statoreleinfs;

Fammi sapere,
Dario.

Dario Cdj

unread,
Feb 9, 2023, 10:20:33 AM2/9/23
to souliss-it
Niente di fatto, si accende all'avvio indipendentemente dallo stato precedente.....

Dario Di Maio

unread,
Feb 9, 2023, 12:06:50 PM2/9/23
to souli...@googlegroups.com
Se stampi lo stato di quella variabile dal setup, cosa mostra?

Quei due comandi sono gli ultimi del setup()

Dario Cdj

unread,
Feb 13, 2023, 11:19:14 AM2/13/23
to souliss-it
Debug log : 
Ok Working FileSystem Found (trova fs)
RelayON found on FS (trova variabile a 1)
Ho sovrascritto lo stato con 1

Se senza toccare nulla riavvio : 
Ok Working FileSystem Found

RelayON NOT found on FS
Ho sovrascritto lo stato con 0

SI sono gli ultimi due comandi del setup quindi succede qualcosa dopo :(

La fast del loop è : 
FAST_50ms() {
     
      Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
      Logic_SimpleLight(T_RELE_1);
      DigOut(PIN_RELE_1, Souliss_T1n_Coil, T_RELE_1);
 
        statorelay=memory_map[MaCaco_OUT_s + T_RELE_1]; // questo mi da 36 se il feedback è off e 35 se è on... non so perchè ma va bene
        #ifdef SERIAL_DEBUG          
        //Serial.print("statorelay letto dalla memory map = ");Serial.println(statorelay);

        #endif
        if (statorelay == 1 ) {
        File relayON_fs = LittleFS.open("/relayON", "w");
        relayON_fs.println("1");
        relayON_fs.close();
        statoreleinfs = 1 ;
        #ifdef SERIAL_DEBUG
        //Serial.print("statoreleinfs = ");Serial.println(statoreleinfs);

        #endif        
        }
        else
        {
        LittleFS.remove("/relayON");
        statoreleinfs = 0 ;
        #ifdef SERIAL_DEBUG
        //Serial.print("statoreleinfs = ");Serial.println(statoreleinfs);
        #endif
        }
      }

Tnx for Help

Dario Di Maio

unread,
Feb 13, 2023, 12:01:54 PM2/13/23
to souli...@googlegroups.com
Il problema è nella FS, all'avvio trova il valore a zero e fa quello che deve fare.

Riscrivi da zero la parte FS, due note su tutte. La stai facendo girare a 50ms, deve girare di tanto in tanto o al limite su evento:
if(Logic(...)) {... FS ...}

Inoltre stai scrivendo su FS indipentemente se lo stato sia cambiato o meno.

Devi avere una variabile statoFS da confrontare con mOutput e solo in caso di differenza scrivere su FS ed aggiornare statoFS che deve agire come buffer.

Se usi if(Logic(...)) gestisci il cambio senza doverlo tracciare esternamente


Dario.


Dario Cdj

unread,
Feb 13, 2023, 12:07:08 PM2/13/23
to souli...@googlegroups.com
Ok credo di aver capito ..... Proverò anche a implementarlo appena posso... Tnx

Dario Cdj

unread,
Feb 15, 2023, 12:22:45 PM2/15/23
to souliss-it
Ecco i progressi : 
 in setup : 
//Sovrascrivo lo stato

    Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, 0);   //slot 0 in modo che non scriva nulla
    mOutput(T_RELE_1) = statorelayinfs;
   
    #ifdef SERIAL_DEBUG
    Serial.print("Ho sovrascritto lo stato con ");Serial.println(statorelayinfs);
    #endif

E FUNZIA.

Appena entra nel loop però cambia lo stato , se è ON lo mette OFF se è OFF lo mette ON.... lo inverte praticamente, PERCHE' ?????

Ecco la fast : 

 FAST_50ms() {
     
      Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
      Logic_SimpleLight(T_RELE_1);
      DigOut(PIN_RELE_1, Souliss_T1n_Coil, T_RELE_1);
 
        statorelay=memory_map[MaCaco_OUT_s + T_RELE_1]; // questo mi da 36 se il feedback è off e 35 se è on... non so perchè ma va bene
        #ifdef SERIAL_DEBUG          
        //Serial.print("statorelay letto dalla memory map = ");Serial.println(statorelay);
        #endif
       
        if (statorelay != statorelayinfs) {
            if (statorelay == 1)

            {
            File relayON_fs = LittleFS.open("/relayON", "w");
            relayON_fs.println("1");
            relayON_fs.close();
            #ifdef SERIAL_DEBUG
            Serial.print("statorelay = ");Serial.println(statorelay);

            #endif        
            }
            else
            {
            LittleFS.remove("/relayON");
            #ifdef SERIAL_DEBUG
            Serial.print("statorelay = ");Serial.println(statorelay);
            #endif  
            }
        statorelayinfs = statorelay ;
        #ifdef SERIAL_DEBUG
        Serial.print("statorelayinfs = ");Serial.println(statorelayinfs);
        #endif    
        }
       }
    

Dario Di Maio

unread,
Feb 16, 2023, 2:00:20 AM2/16/23
to souli...@googlegroups.com
Significa che la DigIn viene eseguita e quindi il fatto di averla fatta girare a vuoto con ultimo parametro a zero non ha funzionato.

Bisognerebbe andare a vedere nel codice se quella particolare funziona non supporta lo zero come ultimo parametro, ma sono dal cell.

Prova così, nel setup metti DigIn uguale a quella del loop. Subito dopo mInput(...)=0 per annullarne la scrittura e poi mOutput.

Dobbiamo fare in modo che DigIn si inizializzi senza avere effetto.

Saluti,
Dario.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "souliss-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a souliss-it+...@googlegroups.com.

Dario Cdj

unread,
Feb 27, 2023, 7:01:17 AM2/27/23
to souliss-it
EUREKA ! Ce l'abbiamo fatta.... soluzione vincente in setup : 

//Sovrascrivo lo stato
    Souliss_DigIn2State(PIN_FEEDBACK, Souliss_T1n_ToggleCmd, Souliss_T1n_ToggleCmd, memory_map, T_RELE_1);
    mInput(T_RELE_1)=0;
    mOutput(T_RELE_1) = statorelayinfs;

Dario, come al solito grazie mille.
Dario2

Reply all
Reply to author
Forward
0 new messages