Jump to content
Visit us at IFA2024 / Besuche uns auf der IFA2024 06.-10.09.2024 Stand H1.2-420 ×
Shelly wiring diagram Now LIVE ×

Script erstellen


ASC

Recommended Posts

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.

Link to comment
Share on other sites

  • 1 month later...

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
  • Like 1
Link to comment
Share on other sites

Join the conversation

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

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

×
×
  • Erstelle neue...