ASC Posted July 17 Share Posted July 17 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. Quote Link to comment Share on other sites More sharing options...
johann.pascher Posted August 26 Share Posted August 26 (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 August 26 by johann.pascher 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.