Shelly 1 Plus - evento long press / Push

Il più piccolo switch WIFI open source al mondo.
Rispondi
politropo
Messaggi: 3
Iscritto il: mercoledì 3 luglio 2024, 22:19

mercoledì 3 luglio 2024, 22:26

CIao a tutti,

sto cercando di implementare un'automazione su un dispositivo Shelly 1 Plus per il mio progetto di domotica domestica. L'idea è che quando qualcuno suona il campanello per 5 secondi consecutivi, il portone si apra automaticamente.
Lo stato attuale è che ricevo una notifica quando qualcuno suona il campanello e posso aprire il portone attraverso l'app.
Sto cercando di capire qual'è la strategia migliore per ottenere il mio obiettivo.
Consigli in merito?

Non trovando vie più comode ho provato anche con uno script: tentativo fallito. Non ricevo errori, ma non ottengo neanche nessun log né l'apertura del portone.
lo copio qui giusto per darvi tutte le info:

Codice: Seleziona tutto

/ Script per aprire il portone se il campanello suona per 5 secondi consecutivi

let buttonPressedTime = 0;
let isButtonPressed = false;

// Funzione per gestire l'evento di pressione del pulsante
Shelly.addEventHandler(function (event) {
  print("Evento ricevuto: ", JSON.stringify(event));
  if (event.component === "input:0") {
    if (event.value === true) {
      // Il campanello è stato premuto
      if (!isButtonPressed) {
        buttonPressedTime = Timer.now(); // Registra il tempo di inizio della pressione
        isButtonPressed = true;
        print("Pulsante premuto, inizio timer: ", buttonPressedTime);
      }
    } else if (event.value === false) {
      // Il campanello è stato rilasciato
      isButtonPressed = false;
      buttonPressedTime = 0;
      print("Pulsante rilasciato, timer resettato");
    }
  }
});

// Timer per controllare periodicamente lo stato del pulsante
Timer.set(1000, true, function () {
  if (isButtonPressed) {
    let elapsedTime = Timer.now() - buttonPressedTime;
    print("Tempo trascorso: ", elapsedTime);
    if (elapsedTime >= 5) { // Modificato a 5 secondi per test
      Shelly.call("Switch.Set", { id: 0, on: true }, function (result, error_code, error_message) {
        if (error_code === 0) {
          print("Portone aperto automaticamente dopo 5 secondi di pressione");
        } else {
          print("Errore nell'apertura del portone: ", error_message);
        }
      });
      // Resetta lo stato del pulsante
      isButtonPressed = false;
      buttonPressedTime = 0;
      print("Pulsante premuto per 5 secondi, portone aperto e timer resettato");
    }
  }
});



Qualsiasi suggerimento è apprezzato!
Grazie e a presto!
S.
Avatar utente
Mike
Site Admin
Messaggi: 754
Iscritto il: venerdì 23 novembre 2018, 16:12

venerdì 5 luglio 2024, 7:24

Prova separatamente che
Shelly . call("Switch. Set", id: 0, on: true }) funzioni da sola.
Rispondi