Jump to content
⚠️ Deprecation Notice: Cloud Control API V1 – Switch to V2 ×

Recommended Posts

Posted

Hallo zusammen,

leider kenn ich mich nicht aus mit Java bzw. Script schreiben und der Support von Shelly hat mich abgewiesen, ich wäre echt dankbar wenn mir hier jemand 2 Scrip´s schreiben würde. Die Hardware ist Shelly Plus 1PM

Folgendes soll um gesetzt werden 

1. es kommt ein Trigger Signal rein AN=>AUS=>AN=>AUS usw. in ca. 0,5 sec tackt, es soll aber eine Benachrichtigung aufs Handy in einen 1 Minuten Tack erscheinen so lange das Trigger Signal anliegt.   

2. es kommt ein einmaliges Signal rein AN (Dauer Signal) und so lange das Signal AN ist soll eine Benachrichtigung aufs Handy in einen 1 Minuten Tack erscheinen so lange das AN Signal anliegt.

Ich hoffe jemand kann mit hier helfen, sonst weiß ich nicht weiter.

  • 1 month later...
Posted (edited)

Um die beiden Szenarien in Shelly zu realisieren, benötigen wir zwei separate Skripte oder eine Kombination von Bedingungen und Zeitsteuerungen innerhalb eines Skripts. Hier ist eine detaillierte Anleitung für beide Szenarien:

### 1. **Trigger-Signal: AN=>AUS=>AN=>AUS usw.**

**Ziel**: Eine Benachrichtigung soll alle 1 Minute gesendet werden, solange das Trigger-Signal anliegt.

#### Schritte:

1. **Skript zum Erkennen des Trigger-Signals und Benachrichtigung senden**

   Du kannst ein Skript erstellen, das bei jeder Änderung des Trigger-Signals überprüft, ob das Signal anliegt. Wenn das Signal anliegt, wird ein Timer gestartet, der alle 1 Minute eine Benachrichtigung sendet.

let timerId = null;

// Funktion zum Senden einer Benachrichtigung
function sendNotification() {
  Shelly.call('Notifier.Send', { 
    'message': 'Das Trigger-Signal liegt an!' 
  });
}

// Funktion zum Überprüfen des Trigger-Signals
function checkTriggerSignal() {
  // Lese den Status des Trigger-Signals (True für AN, False für AUS)
  Shelly.call('Switch.GetStatus', { 'id': 0 }, function(response) {
    let isTriggerOn = response.output; // Annahme: 'output' gibt den Status zurück

    if (isTriggerOn) {
      // Wenn der Trigger anliegt und der Timer nicht läuft, starte ihn
      if (timerId === null) {
        sendNotification();
        timerId = setInterval(sendNotification, 60000); // Alle 1 Minute Benachrichtigung senden
      }
    } else {
      // Wenn der Trigger nicht mehr anliegt, stoppe den Timer
      if (timerId !== null) {
        clearInterval(timerId);
        timerId = null;
      }
    }
  });
}

// Die Funktion alle 0,5 Sekunden ausführen
setInterval(checkTriggerSignal, 500);

**Anmerkungen**:
- **`Shelly.call('Notifier.Send', {...})`** ist ein Platzhalter. Du musst die tatsächliche API-Methode oder Integration verwenden, um Benachrichtigungen zu senden.
- **`Switch.GetStatus`** muss durch die richtige Methode ersetzt werden, um den Status deines Trigger-Signals abzufragen.

### 2. **Einmaliges Signal: Dauerhaft AN**

**Ziel**: Eine Benachrichtigung soll alle 1 Minute gesendet werden, solange das einmalige Signal AN ist.

#### Schritte:

1. **Skript zum Erkennen des Dauer-Signals und Benachrichtigung senden**

   Hierbei wird ein einmaliger Statusabgleich vorgenommen, und ein Timer wird gestartet, der alle 1 Minute eine Benachrichtigung sendet, solange das Signal anliegt.

let timerId = null;

// Funktion zum Senden einer Benachrichtigung
function sendNotification() {
  Shelly.call('Notifier.Send', { 
    'message': 'Das Signal ist dauerhaft AN!' 
  });
}

// Funktion zum Überprüfen des Dauer-Signals
function checkPermanentSignal() {
  // Lese den Status des Signals (True für AN, False für AUS)
  Shelly.call('Switch.GetStatus', { 'id': 0 }, function(response) {
    let isSignalOn = response.output; // Annahme: 'output' gibt den Status zurück

    if (isSignalOn) {
      // Wenn das Signal anliegt und der Timer nicht läuft, starte ihn
      if (timerId === null) {
        sendNotification();
        timerId = setInterval(sendNotification, 60000); // Alle 1 Minute Benachrichtigung senden
      }
    } else {
      // Wenn das Signal nicht mehr anliegt, stoppe den Timer
      if (timerId !== null) {
        clearInterval(timerId);
        timerId = null;
      }
    }
  });
}

// Die Funktion alle 0,5 Sekunden ausführen
setInterval(checkPermanentSignal, 500);

**Anmerkungen**:
- **`Shelly.call('Notifier.Send', {...})`** muss durch die tatsächliche Methode ersetzt werden, um Benachrichtigungen zu senden.
- **`Switch.GetStatus`** muss durch die Methode ersetzt werden, die den Status deines Signals abfragt.

### Wichtige Hinweise:
- **Ereignisgesteuerte Skripte**: Für eine effizientere Lösung könntest du Ereignisse statt regelmäßiger Abfragen verwenden, wenn Shelly das unterstützt. Dies reduziert die Last auf dem System.
- **API-Dokumentation**: Stelle sicher, dass du die korrekten Methoden für deine Shelly-Geräte und deren Firmware-Version verwendest.

Falls du weitere Fragen hast oder eine spezifische API benötigst, lass es mich wissen!

Edited by johann.pascher

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...