NEWS
Vorlage/Code snippet Alexa Lautstärke limitieren
-
Hi ihr,
heute möchte ich euch mal wieder einen von mir verwendeten Code-Schnipsel teilen.
Meine lieben Kids, haben immer wieder meine Nerven traktiert mit dem ständigen Erhöhen der Lautstärke ihrer Alexa-Geräte auf ein Maas in dem Homeoffice fast nicht mehr möglich war. Deshalb dachte ich mir, dass es doch möglich sein muss diese zu limitieren
Funktion:
- Erstellung von Datenpunkten für jedes eingetragene Gerät
- Lautstärke limitieren des gewünschten Geräts
- Wunschlimit einstellbar
- Sprachausgabe bei Überschreiten
So schauen die drei Buttons in meiner Vis dazu aus:
Hier der Code Schnipsel dafür:
// ----------------------------------------------------------------------------- // allgemeine Variablen // ----------------------------------------------------------------------------- var loglevel = 2; // Logging on/off var instanz = '0_userdata.0'; instanz = instanz +'.'; var pfad0 = 'Multimedia'; pfad0 = pfad0 +'.'; var pfad1 = 'EcoDots'; pfad1 = pfad1 +'.'; var pfadEchoDevice = 'alexa2.0.Echo-Devices.'; // Text der ausgegeben wird wenn das Maximum überschritten wurde var textVolumeLimitExceeded = 'Die Lautstärke kann nicht erhöht werden da sie begrenzt wurde'; // Hier die ID's der Devices eintragen var Devices = [ /*Device ID */ /*Echo Bad*/ {'deviceID':'G090XXXXXXX'}, /*Echo Küche*/ {'deviceID':'G090XXXXXXX'}, /*Echo Kinderzimmer 1*/ {'deviceID':'G09XXXXXXXX'}, /*Echo Kinderzimmer 2*/ {'deviceID':'G09XXXXXXXX'} ]; // ############################################################################# // # # // # Funktion Amazon Echodot Lautstärkebegrenzung # // # # // ############################################################################# function volumeLimit(deviceID){ deviceID = deviceID.split('.')[3]; if(getState(instanz + pfad0 + pfad1 + deviceID + '.volumeLimitActive').val === true && parseInt(getState(pfadEchoDevice + deviceID + '.Player.volume'/*volume*/).val) > getState(instanz + pfad0 + pfad1 + deviceID + '.volumeLimitValue').val){ setState(pfadEchoDevice + deviceID + '.Player.volume'/*volume*/, getState(instanz + pfad0 + pfad1 + deviceID + '.volumeLimitValue').val) setState(pfadEchoDevice + deviceID + '.Commands.speak'/*speak*/, textVolumeLimitExceeded); if(loglevel > 1) log('----------- Lautstärke ist:'+getState(pfadEchoDevice + deviceID + '.Player.volume'/*volume*/).val+' und wird eingestellt auf:'+ getState(instanz + pfad0 + pfad1 + deviceID + '.volumeLimitValue').val + ' -----------'); } } // ############################################################################# // # # // # Funktion: Objekte anlegen und State Subscription # // # # // ############################################################################# function deviceSubsctiption(dp){ for(var i = 0; i < Object.keys(Devices).length; i++){ if(loglevel < 3){ // Datenpunkte anlegen createState(instanz + pfad0 + pfad1 + Devices[i].deviceID + '.volumeLimitActive', false, { name: getState(pfadEchoDevice + Devices[i].deviceID + '.Info.name').val + ': Volume Limit active', type: 'boolean' }); createState(instanz + pfad0 + pfad1 + Devices[i].deviceID + '.volumeLimitValue', 30, { name: getState(pfadEchoDevice + Devices[i].deviceID + '.Info.name').val + ': Volume Limit value', type: 'number' }); createState(instanz + pfad0 + pfad1 + Devices[i].deviceID + '.doorBellForwarding', false, { name: getState(pfadEchoDevice + Devices[i].deviceID + '.Info.name').val + ': Doorbell forwarding', type: 'boolean' }); // Subscription anlegen Echo Device on({id: pfadEchoDevice + Devices[i].deviceID + '.Player.volume'/*volume*/, change: 'ne'}, function (dp) { volumeLimit(dp.id); }); // Subscription anlegen Switch on({id: instanz + pfad0 + pfad1 + Devices[i].deviceID + '.volumeLimitActive', change: 'ne', val:true}, function (dp) { var deviceID = dp.id.split('.')[4]; setState(instanz + pfad0 + pfad1 + deviceID + '.volumeLimitValue',30); volumeLimit(pfadEchoDevice + deviceID + '.Player.volume'); }); } } } setTimeout(function () { deviceSubsctiption()}, 2000);
Vielleicht kann ihn ja einer brauchen