Aiuto Smart Home Dimmed light!

Buongiorno,
Sto provando a realizzare un piccolo progetto in cui ho 3 lampade dimmerate collegate ognuna ad un diverso dimmer a sua volta messo in serie ad un rele di "sicurezza".

il funzionamento di base l'ho capito e riesco ad accendere spengere e dimmerare a mio piacimento tutto quanto… anche grazie ad Alexa :o

Così ho provato ad aumentare la difficoltà ed aggiungere un pulsante che dovrebbe accendere queste 3 luci al massimo, se sono spente o spengere quelle eventualmente accese tramite il Cloud.

Ci sto sbattendo la testa da qualche giorno ma sono arrivato alla conclusione che per farlo deve essere possibile poter "scrivere" lo stato della lampada sull'interruttore virtuale del Cloud perché sono al punto che riesco a spengere ed accendere la lampada con il pulsante fisico ma il Cloud non riesce a capire la variazione e per lui è sempre nell'ultimo stato lasciata nonostante sia cambiata dal Pulsante.

E' possibile?

Allego il codice a cui sono arrivato per ora.
Ho lavorato solamente con luceIngresso per fare le prove.

#include "thingProperties.h"
bool stato = HIGH; // Logica inversa
bool lettura;
bool previous = LOW;
int Pulsante = 0;
bool statoIngresso = LOW;
void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);
  // Defined in thingProperties.h
  initProperties();
  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
  */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  /*
  *** INIZIO PRGRAMMA ***
  */
  pinMode(A0, OUTPUT);              //Dimmer Ingresso
  pinMode(A1, OUTPUT);              //Dimmer Divano
  pinMode(A2, OUTPUT);              //Dimmer Centrale
  //pinMode(A3, OUTPUT);            //PWM RGB R
  //pinMode(A4, OUTPUT);            //PWM RGB B
  //pinMode(A5, OUTPUT);            //PWM RGB G
  //pinMode(A6, OUTPUT);            **LIBERO
  pinMode(Pulsante, INPUT);                //Pulsante Fisico Accensione
  pinMode(1, OUTPUT);               //Relé sicurezza Dimmer Ingresso
  pinMode(2, OUTPUT);               //Relé sicurezza Dimmer Divano
  pinMode(3, OUTPUT);               //Relé sicurezza Dimmer Centrale
  pinMode(4, OUTPUT);                //Relé Accendi Sala
  pinMode(5, OUTPUT);                //Stato allarme (1 Acceso - 0 Spento)
  //pinMode(6, INPUT);                //Relé sicurezza Dimmer Sala
  //pinMode(7, INPUT);                //Relé sicurezza Dimmer Ingresso
  //pinMode(8, INPUT);                //Relé sicurezza Dimmer Divano
  pinMode(9, OUTPUT);               //Relé sicurezza Alimentatore RGB
  //pinMode(10, INPUT);             //I2c LCD
  //pinMode(11, OUTPUT);            //I2c LCD
  pinMode(12, OUTPUT);              //Relé Inserimento allarme
  pinMode(13, OUTPUT);              //Stato Allarme
  pinMode(14, OUTPUT);              //Inserimento softwere
  //pinMode(15, OUTPUT);            **LIBERO
}
void loop() {
  ArduinoCloud.update();
  lettura = digitalRead(Pulsante);
  if (lettura == HIGH && previous == LOW) {
    if (stato == HIGH)
      stato = LOW;
    else
      stato = HIGH;
  }
  previous = lettura;
  
  digitalWrite(4, stato);
  if (statoIngresso == LOW && lettura == HIGH) {
    digitalWrite(1, LOW);
    analogWrite(A0, 255);
  }
  if (statoIngresso == HIGH && lettura == HIGH) {
    digitalWrite(1, HIGH);
    analogWrite(A0, 0);
  }
}
void onLuceIngressoChange() {
  uint8_t brightnessIngresso = map(luceIngresso.getBrightness(), 0, 100, 0, 255);
  if (luceIngresso.getSwitch())  {
    statoIngresso = HIGH;
    digitalWrite(1, LOW); // Logica inversa
    delay(100);
    analogWrite(A0, brightnessIngresso);
  }
  else {
    digitalWrite(1, HIGH); // Logica inversa
    analogWrite(A0, 0);
    statoIngresso = LOW;
  }
}
void onLuceDivanoChange() {
  uint8_t brightnessDivano = map(luceDivano.getBrightness(), 0, 100, 0, 255);
  if (luceDivano.getSwitch()) {
    digitalWrite(2, LOW); // Logica inversa
    delay(100);
    analogWrite(A1, brightnessDivano);
  }
  else {
    digitalWrite(2, HIGH); // Logica inversa
    analogWrite(A1, 0);
  }
}
void onLuceCentraleChange() {
  uint8_t brightnessCentrale = map(luceCentrale.getBrightness(), 0, 100, 0, 255);
  if (luceCentrale.getSwitch()) {
    digitalWrite(3, LOW); // Logica inversa
    delay(100);
    analogWrite(A2, brightnessCentrale);
  }
  else {
    digitalWrite(3, HIGH); // Logica inversa
    analogWrite(A2, 0);
  }
}

Benvenuto,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

nid69ita

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Fatto...

Perché hai messo 18 pezzetini di sketch?
Se é uno unico mettilo completo non sbriciolato.
Ciao Uwe