NEWS
Klingel auf mehreren Alexas
-
Hi!
Ich habe einen Aqara Kontaktsensor umgebaut und ihn an unsere Klingel gehängt.
Ich habe ihn über einen Conbee II Stick angelernt. Der Conbee gibt leider nur Lichter an Alexa weiter, sonst hätte ich das ganze Problem nicht.
Nun bastel ich gerade am Skript rum.
Bei zu vielen Befehlen gleichzeitig kapituliert Alexa und es kommt nur sporadisch zum Klingeln.
Folgendes Szenario. Wir haben 3 Etagen und ich möchte auf jeder min. eine Alexa zum Klingeln bringen. Hier brauche ich euch!
Ich habe es auf zwei Wegen versucht, aber es klappt einfach nicht zuverlässig.
Weg 1, alles über Iobroker- Lautstärke aller Alexas (oder einer Gruppe) erhöhen,
- Ton von Amazon Music auf den Alexas wiedergeben
- Lautstärke verringern
-->absolute Katastrophe
Weg 2, Routine nutzen
- Routine erstellen (Lautstärke hoch, Ton wählen, Lautstärke runter und als Endgeräte, dass zu dem Gesprochen wird)
- Im Iobroker nun pro Gerät einmal die Routine starten (mit 500ms delay je Geräte)
--> das klappt so halbwegs, da Alexa eine Menge befehle intern abarbeitet, aber ist eben unflexibel (nicht jedes Gerät hat die selbe Lautstärke ...) und es klingelt (wenn es denn bei allen klappt) mit 2 Sekunden Unterschied.
Gibt es einen anderen Weg, den ich übersehe? Einen der halt nicht an dem overflow von Befehlen an Alexa scheitert und dennoch etwas flexibler ist.
Martin
-
@mbm1982
Hallo,Sieh dir das Video an: https://youtu.be/r7rFjTq3ReE
Und passe die Alexa Befehle deinen Ansprüchen an.Ich hb mir so eine Ansage gebastelt wenn in einem Zimmer die Temperatur unter 17 Grad gefallenist (quasi Fenster offen im Winter und vergessen)
-
@mbm1982 Bei mir klingeln drei Echos über Routinen.
Ich habe zwischen den Befehlen keinen Delay und ich habe zwischen den Ausführungen keine Verzögerungen festgestellt.Meine Routinen laufen auch so ab.
Lautstärke 9
Klingel 3 abspielen
Lautstärke 5Eventuell ist da der Unterschied, weil ich keine Sprachansage sondern einen Klingelton nutze.
-
Hi,
Versuch es mal mit dem Befehl Announcement. So funktioniert es bei mir ohne Verzögerung und sogar mit Gong auf mehreren Echo Geräten.
Michi
-
@chaot kommt der Befehl für die Routinen vom Iobroker?
Ich hatte einen alten WLAN Kontaktsensor, der als SmartHome-Gerät in Alexa war. Da ging das auch genauso, aber es dauert 7-15 Sekunden bis das Signal aus der China-Cloud kam... -
@michael-fischer Danke dir, das hört sich sehr vielversprechend an!
Aber jetzt pennen die Kiddies schon -
@blue231181 Danke dir, schau ich mir gleich mal an
-
@mbm1982 Der Befehl kommt aus dem ioBroker. Der Gong wird über einen Taster am Wemos ausgelöst und an den ioBroker gesendet. Dort werden dann per Script ein paar Aufgaben abgearbeitet. Unter anderem eben auch den Gong auslösen.
Eine Verzögerung ist zwar manchmal da, aber höchstens 2 Sekunden. Deshalb habe ich das auch nicht weiter verfeinert. -
@chaot
Na 2 Sekunden hatten manche Funk-Klingeln bei mir auch schon... Aber bei über 10 Sekunden ist der Postbote ja schon wieder am Auto, bevor ich überhaupt den Gong gehört habe -
@chaot Wie bekommst du denn den "Gong" in das Announcement? Ich kann nur einen Text ausgeben lassen.
-
@mbm1982 Unter "Töne - Glocken....-"
musst du in der App etwas runterscrollen damit das zu sehen ist. -
@michael-fischer
Hi!Kannst du mir noch sagen wie du einen Gong über die Announcements auslöst?
Oder meinst du den "Standard-Gong", der bei den Announcements kommt bevor sie den Text vorliest? -
@mbm1982
Ich erstelle eine Routine- Namen erstellen (beliebig)
- wenn folgendes passiert: Auslösewort (beispielsweise "Klingel") erstellen
- Als Aktion hinzufügen:
Lautstärke auf 9
Türklingel 3 abspielen (Töne -Glocken und Summer - Türklingel3)
Lautstärke auf 4
Das erstelle ich für verschiedene Echos die ich benötige. Der Name der Routine muss allerdings unterschiedlich sein.
Ich verwende dafür dann "Echo Bad, Echo Theke, usw."
Dann erscheinen die Routinen bei mir im ioBroker.
Ab hier kommt ein Script zum Einsatz das durch den Wemos ausgelöst wird:// Klingelscript // Entworfen durch LoxDUS // mit Alexa Routinenaufruf, Bilder erfassen, Versand an 2 Empfänger // Stand 01-2021 const debug = false; const cam_img = "http://192.168.8.95:8765/picture/1/current/?_username=****&_signature=**********"; const img_path = '/opt/iobroker/iobroker-data/files/0_userdata.0'; const fs = require('fs'); var BildSequenz = 0; // Sequenznummer 0:Bereit, 1: (0s) Bild1+Mail, 2: (+5s) Bild2+Mail, 3: (+10s) Bild3, 4: (+10s) Bild4 var TBildsequenz = null; // Timer-Objekt für die Bildsequenz var TVis = null; // Timer um VIS umzuschalten on({id: 'sonoff.0.Eingang.POWER2', val: true}, function (obj) { // Benachrichtigung über Alexa das es geklingelt hat setState("alexa2.0.Echo-Devices.G091EU**********K6W.Routines.519a9af4-c186-4715-9e5d-cb4ac65c0c67", true); //Klingelt auf Echo Theke setState("alexa2.0.Echo-Devices.G2A0P**********LLE.Routines.11242dac-bf4b-4ab1-9521-37fdf5dae51d", true); //Klingelt auf Dot Anrichte // Soll jedesmal eine Bildsequenz neu gestartet werden, egal ob die vorherige Sequenz abgeschlossen ist, dann diesen Code: //BildSequenz = 0; //ErstelleBildsequenz(); // // ...ODER soll das Speichern der Bildersequenz komplett abgeschlossen werden und auch ein erneuter Klingeldruck vorher keine neue // Sequenz auslösen dann diesen Code: if(debug) log("Bildsequenz: " + BildSequenz); if(BildSequenz == 0) ErstelleBildsequenz(); // Die Bildsequenz wird nur erstellt wenn vorherige Bildsequenz abgeschlossen ist }); function ErstelleBildsequenz() { if(BildSequenz == 0) BildSequenz=1; // Bildsequenz if(debug) log("Bildsequenz: " + BildSequenz); // Bild von Cam holen request.get({url: cam_img, encoding: 'binary'}, function (err, response, body) { if(err) { // Beim holen des Bildes von der Kamera ist ein Fehler aufgetreten log('Beim holen des Bildes von der Kamera ist ein Fehler aufgetreten: ' + err); BildSequenz = 0; // Die Bildsequenz zurück setzen } else { // Bild wurde von der Kamera geladen. Jetzt speichern wir das Bild fs.writeFile(img_path+'/alarm' + BildSequenz + '.jpg', body, 'binary', function(err) { if (err) { // Beim Speichern des Bildes ist ein Fehler aufgetreten log('Fehler beim Speichern von Bild ' + img_path + '/alarm' + BildSequenz + '.jpg Fehler:' + err, 'warn'); BildSequenz = 0; // Die Bildsequenz zurück setzen } else { // Bild wurde jetzt gespeichert wir können das Bild jetzt weiterverarbeiten switch(BildSequenz) { case 1: // Bild 1 direkt nach dem drücken des Klingelknopfes aufnehmen und per Mail verschicken // Vis umschalten: Setze View auf Kamerabild if(debug) log(" 1 Bildsequenz: " + BildSequenz); setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "Neu/Tuer"}'); if(TVis) clearTimeout(TVis); // Falls noch ein Timer läuft, diesen beenden. TVis = setTimeout(function () { setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "Neu/Info"}'); }, 60000); // Nach 60 Sekunden, zeige wieder Start View // Nächstes Bild soll nach 5s aufgenommen werden BildSequenz = 2; if(TBildsequenz) clearTimeout(TBildsequenz); // Falls es einen Timer gibt, diesen erst mal löschen TBildsequenz = setTimeout(function(){ErstelleBildsequenz();}, 5000); break; case 2: // Bild 2, 5s nach dem drücken des Klingelknopfes aufnehmen und per Mail verschicken // Bild per Mail verschicken if(debug) log(" 2 Bildsequenz: " + BildSequenz); // Nächstes Bild soll nach 10s aufgenommen werden BildSequenz = 3; if(TBildsequenz) clearTimeout(TBildsequenz); // Falls es einen Timer gibt, diesen erst mal löschen TBildsequenz = setTimeout(function(){ErstelleBildsequenz();}, 10000); break; case 3: // Bild 3 soll nach weiteren 10s gespeichert werden // Nächstes Bild soll nach 10s aufgenommen werden if(debug) log(" 3 Bildsequenz: " + BildSequenz); BildSequenz = 4; if(TBildsequenz) clearTimeout(TBildsequenz); // Falls es einen Timer gibt, diesen erst mal löschen TBildsequenz = setTimeout(function(){ErstelleBildsequenz();}, 10000); break; case 4: // Bild 4 soll nach weiteren 10s gespeichert werden // Damit ist die Sequenz beendet und die Klingel ist wieder bereit if(debug) log(" 4 Bildsequenz: " + BildSequenz); sendTo("email", "send", { text: '', to: '**********@gmail.com', subject: 'Klingel', attachments:[{path: img_path + '/alarm1.jpg', cid: "file1"},{path: img_path + '/alarm2.jpg', cid: "file2"},{path: img_path + '/alarm3.jpg', cid: "file3"},{path: img_path + '/alarm4.jpg', cid: "file4"},] }); sendTo("email", "send", { text: '', to: '**********@gmail.com', subject: 'Klingel', attachments:[{path: img_path + '/alarm1.jpg', cid: "file1"},{path: img_path + '/alarm2.jpg', cid: "file2"},{path: img_path + '/alarm3.jpg', cid: "file3"},{path: img_path + '/alarm4.jpg', cid: "file4"},] }); BildSequenz = 0; if(TBildsequenz) clearTimeout(TBildsequenz); // Falls es einen Timer gibt, diesen erst mal löschen break; default: // Nicht bekannter Sequenzschritt bzw. es gab einen Fehler beim holen oder speichern break; }; }; }); }; }); }
Dank Loxdus habe ich das Script sehr weit abgespeckt als Sequenz am Laufen.
Hier wird im Grunde folgendes gemacht:
Wenn die Klingel gedrückt wird:- werden 4 Bilder mit ein paar Sekunden Abstand aufgenommen
- Die Routinen bei den Echos werden ausgelöst (Zeile 20 und 21 derzeit, weil ein Echo derzeit weg ist)
- Die Bilder werden per mail an zwei verschieden Empfänger versendet
- Die VIS wird für ein paar Sekunden auf das live Kamerabild umgeschaltet und danach auf die Startseite zurück
- Es wird verhindert dass durch ein erneutes Klingeln die Sequenz unterbrochen wird. Wenn die Nachbarkids 30 mal den Taster drücken hat das System so seine Problemchen bekommen)
Dir reichen vermutlich de Zeilen 20 und 21 um deine Klingel umzusetzen.
-
@chaot Danke!
Reicht denn nicht eine Routine? Unten dann auswählen "Das Gerät zu dem Sie sprechen"?
Oder macht es mehr Sinn, für jedes Gerät eine Routine zu erstellen? -
@mbm1982 Das habe ich ehrlich gesagt noch nicht probiert. Ich habe mehrere Routinen, weil ich das Script im Sommer anders nutze und daher einen Echo mehr aktiviere. Da war das für mich einfacher zu handhaben den betreffenden Echo zu- und abzuschalten.