This adapter uses Sentry libraries to automatically report exceptions and code errors to the developers. For more details and for information how to disable the error reporting see Sentry-Plugin Documentation! Sentry reporting is used starting with js-controller 3.0.
This adapter allows you to remote control your Alexa (Amazon Echo) devices.
Big thanks go to soef for the version 1 of the adapter and to Hauke and ruhr70 for ideas in their scripts from ioBroker-Forum (especially the media progress updates)! Also big thanks to to meicker for support in documenting all of this and numerous users from ioBroker Forum for their testing support!
All product and company names or logos are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them or any associated subsidiaries! This personal project is maintained in spare time and has no business goal. ALEXA is a trademark of AMAZON TECHNOLOGIES, INC.
In the adapter namespace (e.g. alexa2.0) some channels are created
State name | meaning |
---|---|
Echo-Devices.* | States per Echo device, see below |
History.* | Infos for command history, see below |
Smart-Home-Devices.* | States per smart home device and in general, see below |
info.* | General information about the adapter status |
requestResult | Error info for TuneIn and smart-home device requests |
All Alexa-Contacts that can be used to send Text Messages to, including himself. The own contact gets a special "(Self)" after his name.
State name | meaning |
---|---|
#clearOwnMessages | Only exists in own contact and a trigger deletes all messages that are send to himself (also includes messages to himself via App or devices!) |
textMessage | Sends this text as message to the user. It is shown on all devices of this user with a "yellow ring" |
Commands to be sent to all devices in the account.
State name | meaning |
---|---|
deviceStop | Stop all actions on device |
deviceDoNotDisturb | Switch on/off "Do not Disturb" for all devices. |
Under "echo-devices" every amazon echo device is listed with it's serial number. Not every device shows all the states. Every device has it's own states as described below:
Alarm (Wecker) settings for each device, if available.
State name | meaning | value |
---|---|---|
.customVolume | Set a custom Volume for this Reminder. The volume is set 2s before the reminder triggers and re-set to the value before as soon as the timer is (or adapter thinks!) stopped - latest after 120s! When custom volumes and trigger times overlap it will be restored at the end once! | Number 0..100 |
.date | Overwrite the date for existing alarm to set a new date for this alarm. In case you have an existing alarm you can change the date here by simply overwrite the time in format YYYY-MM-DD. Might have no effect when multiple-times-per-day recurring settings were used! | Date Output |
.delete | Button to delete the Alarm | delete with true |
.enabled | Shows status of alarm and allows to change it: Activate alarm with true - Deactivate alarm with false | true / false |
.musicEntity | Shows the track info if this alarm is a music alarm | String or null |
.musicProvider | Shows the provider of the music if this alarm is a music alarm | String or null |
.nextTriggerDate | Contains the timepoint of the next expected triggering as unix epoch in ms | Number |
.recurringDays | Shows the list of days configured if the Alarm has recurring settings | US notation of weekdays (e.g. MO,TU,WE,TH,FR,SA,SU) |
.recurringPattern | Shows the recurring pattern of alarm | 0 = one time, no recurring P1D = daily XXXX-WD = on weekdays XXXX-WE = on weekends XXXX-WXX-1 = every monday XXXX-WXX-2 = every tuesday XXXX-WXX-3 = every wednesday XXXX-WXX-4 = every thursday XXXX-WXX-5 = every friday XXXX-WXX-6 = every saturday XXXX-WXX-7 = every sunday |
.snoozed | true if the Alarm is snoozed at the moment | true/false |
.sound | Contains the set sound for this alarm. Can be changed. Also changing between music sound entry and "build in sounds" is possible. | ID from list |
.time | Time for alarm. Overwrite the time for existing alarm to set a new time for this alarm. In case you have an existing alarm you can change the time here by simply overwrite the time in format hh:mm:ss, seconds are not needed to set. Might have no effect when multiple-times-per-day recurring settings were used! | Time Input |
.triggered | true if alarm is reached and triggered. Clock must be in sync with Amazon and iobroker, Use this to trigger other action as soon as the alarm time is reached | true / false |
New | Data to create a new Reminder as String in following format separated by ; as "timestamp;[label];[sound];[recurring]. timestamp as unix timestamp in ms, label as Text, sound as sound ID, recurring either empty for once, "DAILY" for daily or "WEEKLY=MO,TU,WE,TH,FR,SA,SU" with comma separated weekly day list. Fields in example above in brackets mean that they are optional! | String |
triggered | ID of the Alarm that triggered last on this device | ID |
When changing an Alarm does not work please make sure tha the Alarm timepoint is in the future - so changing e.g. "sound" on an Alarm in the past will not work!
Here you find all connected or known bluetooth device(s) with MAC address(es). The states of each device:
State name | meaning |
---|---|
connected | Shows current connection status and allow connection (set to true) or disconnection (set to false) |
unpair | Button to unpair this device from the echo device |
With Commands you can trigger some actions on your Alexa-Device. If you use these on a multiroom device then they are executed independently and will not run in sync on the single devices!
State name | meaning | value |
---|---|---|
doNotDisturb | Switch on/off "Do not Disturb" for this device or group. Value is updated with Device Configuration updates from Cloud too | true/false, or number in seconds to enable (max 12h) or string in form "HH:MM" until this time it is enabled |
flashbriefing | Briefing in 100 seconds - news etc.pp | Button |
goodmorning | Good morning from Alexa ... | Button |
funfact | Fun fact from Alexa ... (Only USA at the moment) | Button |
joke | Joke from Alexa ... | Button |
cleanup | Plays a "gong" tone like for start/end of listening mode ... | Button |
curatedtts | Random sentence from the choosen area from Alexa ... | Text (allowed: "goodbye", "confirmations", "goodmorning", "compliments", "birthday", "goodnight", "iamhome") |
singasong | Alexa sings a song ... | Button |
speak | Alexa says what you type in here ... | Text Input |
speakvolume | Adjust the speak volume of Alexa, this volume is set before the speak and reset afterwards | 0-100 |
skill | Launch a defined Skill | Skill-ID as String |
skillYours | launch a defined Skill - is prefilled with "Your Skills" as displayed in Alexa App too | Skill-ID as String |
tellstory | Alexa tells a story | Button |
traffic | Traffic news | Button |
weather | Weather news | Button |
deviceStop | Stop all actions on device | Button |
notification | Send text notification to customer of the device | Text, optionally specify title "title;text" |
announcement | Play announcement (like speak but with Bing before text) | Text |
ssml | Speak SSML XML string | Text |
textcommand | Send a Text command to Alexa,. Make sure to only use text (e.g. also 3 -> three and such, else Alexa might not correctly react to it!) | Text |
sound | Play a sound on the device. | Text |
Detailed information Speak and Announcement: Type in here what you want Alexa to say. You can also adjust the volume of Alexa by giving a percentage before your text. Example: 10;Alexa is saying Alexa with 10% volume, while 100;Alexa is 100% volume. Normally you only can send 250 characters per speak command. By using the semicolon it is possible to write as much as you want, as long as you separate 250 characters with a semicolon. Alexa will then speak the text after each other with a small break. You also can use the volume together with more 255 blocks by writing #Volume;#Block1;#Block2, a.s.o A volume set here will be used over a defined speak-volume.
Partially also sounds from https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html work. Specify in speak or ssml as <audio src="soundbank://soundlibrary/animals/amzn_sfx_bear_groan_roar_01"/>
. Details and discussion please at https://forum.iobroker.net/topic/27509/ssml-audio
If a device is a Amazon FireTV then you can use the following commands:
State name | meaning | value |
---|---|---|
turnOn | Turn FireTV and TV on | Button |
turnOff | Turn FireTV and TV off | Button |
videoPause | Pause the running video | Button |
videoResume | Resume the current video | Button |
navigateHome | Navigate to Home | Button |
Information about the Alexa device
State name | meaning | value |
---|---|---|
capabilities | capabilities if the alexa device | Information |
deviceType | device type from Amazon | Information |
deviceTypeString | Device Type as string | Information |
isMultiroomDevice | Is multiroom device - Multiroom is a virtual device group | Information, true / false |
isMultiroomMember | Is Multiroom member - If true the device is part of a multiroom device group | Information, true / false |
MultiroomParents | If this device is part of a multiroom device group this state shows the parent group device | Information |
name | Name of Alexa Device | Information |
SerialNumber | Serial number of Alexa device |
Directly tell Alexa to play Music or a playlist from supported music providers. Actually supported are: My Library, Amazon Music, Tune In. You can also include a multiroom device group name in the phrase to play it on this group (e.g. "SWR3 auf Erdgeschoss")
State name | meaning | value |
---|---|---|
Amazon-Music | Phrase to play with Amazon Music | Text input |
Amazon-Music-Playlist | Playlist to play with Amazon Music | Text input |
My-Library | Phrase to play with My Library | Text input |
My-Library-Playlist | Playlist to play with My Library | Text input |
Tune-In | Phrase to play with Tune In | Text input |
Tune-In-Playlist | Playlist to play with Tune In | Text input |
States to control the Playback of the device and to see the current status and media information
State name | meaning | value |
---|---|---|
allowNext | Is the Next/Forward action allowed? | Information |
allowPlayPause | Is the Play/Pause action allowed? | Information |
allowPrevious | Is the Previous action allowed? | Information |
allowRepeat | Can Repeat function be used? | Information |
allowShuffle | Can Shuffle function be used? | Information |
ContentType | text field to put in desired content to play on this device | Information |
controlForward | Button to trigger player "forward" command (30s) | Button |
controlNext | Button to trigger player "next" command | Button |
controlPause | Button to trigger player "pause" command | Button |
controlPlay | Button to trigger player "play" command | Button |
controlPrevious | Button to trigger player "previous" command | Button |
controlRepeat | Button to trigger player "repeat" command | true / false |
controlRewind | Button to trigger player "rewind" command (30s) | Button |
controlShuffle | Switch to enable or disable Shuffle mode for player | true / false |
currentAlbum | Current album actually playing | Information |
currentArtist | Current artist actually playing | Information |
currentState | If playing -> true , else false | true / false |
currentTitle | Current title actually playing | Information |
imageURL | URL to the image of the album | Information |
mainArtURL | URL to current main art | Information |
mediaId | media ID of the current played media (usually queueID: | String, can be set to jump to the provided media ID |
mediaLength | Length of the current title | Information |
mediaLengthStr | active media length as (HH:)MM:SS | Information |
mainProgress | active media elapsed time | Information |
mainProgressPercent | active media elapsed time in percent | Information |
mediaProgressStr | active media progress as (HH:)MM:SS | Information |
miniArtUrl | URL to the art (mini) | Information |
muted | state of 'MUTE' | Information, true / false, volume = 0 is considered as muted |
playingInGroup | Is the medium played in a group? | Information |
playingInGroupId | ID of the playing group | Information |
providerID | ID of the current music provider | Information |
providerName | Name of the current music provider | Information |
quality | quality name of the current medium (might be empty) | Information |
qualityCodec | Codec of the current medium (might be empty) | Information |
qualityDataRate | data rate (kbps) of the current medium (might be empty) | Information |
qualitySampleRate | sample rate (Hz) of the current medium (might be empty) | Information |
queueId | queue ID of the current playlist | Information |
radioStationId | ID of the TuneIn radio station | Information |
service | name of the current music service | Information |
TuneIn-Station | text field to put in a Station name to play this station on this device. Also it is possible to type in the station number (s123456...), a show/podcast id (p1234567...) or a topic id (t123456789...) | Text input |
volume | Volume of playback. You can enter a value between 0-100% | INPUT Volume |
Here you find some device preferences.
| State name | meaning | value | | - | - | | ringNotificationsEnabled | Shows if the ring notifications are enabled or not and allows to edit it (true/false). Status is updated from cloud with device configuration interval | | notificationVolume | The notification volume set for the device. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | number 0..100 | | ascendingAlarmState | The ascending alarm state set for the device. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | Boolean | | auxPort-*-Direction | The direction of the AuxPort (when supported). The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | "INPUT" or "OUTPUT" | | connectedSpeaker | The speaker with is used for the Device output. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | "InternalSpeaker", "Bluetooth" or "Aux" (if supported by Device! check the App) | | defaultAlarmNotificationSound | The default alarm sound set for the device. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | ID from list | | defaultTimerNotificationSound | The default timer sound set for the device. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | ID from list | | displayAdaptiveBrightnessEnabled | Is the adaptive brightness for the display of the device enabled or not. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | true/false | | displayEnabled | Is the display of the device enabled or not. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | true/false | | displayBrightness | Brightness of the display. The value is loaded once on adapterstart and then not synced with Cloud services, but changeable | 0..100% | | equalizerBass | Equalizer Bass setting. Value is updated when changed if push connection is enabled | Number | | equalizerMidRange | Equalizer Midrange setting. Value is updated when changed if push connection is enabled | Number | | equalizerTreble | Equalizer Treble setting. Value is updated when changed if push connection is enabled | Number |
Reminder (Erinnerungen) settings for each device, if available.
State name | meaning | value |
---|---|---|
.customVolume | Set a custom Volume for this Reminder. The volume is set 2s before the reminder triggers and re-set to the value before as soon as the timer is (or adapter thinks!) stopped - latest after 120s! When custom volumes and trigger times overlap it will be restored at the end once! | Number 0..100 |
.date | Overwrite the date for existing alarm to set a new date for this alarm. In case you have an existing alarm you can change the date here by simply overwrite the time in format YYYY-MM-DD. Might have no effect when multiple-times-per-day recurring settings were used! | Date Output |
.delete | Button to delete the Alarm | delete with true |
.enabled | Shows status of alarm and allows to change it: Activate alarm with true - Deactivate alarm with false | true / false |
.nextTriggerDate | Contains the timepoint of the next expected triggering as unix epoch in ms | Number |
.recurringDays | Shows the list of days configured if the Alarm has recurring settings | US notation of weekdays (e.g. MO,TU,WE,TH,FR,SA,SU) |
.recurringPattern | Shows the recurring pattern of alarm | 0 = one time, no recurring P1D = daily XXXX-WD = on weekdays XXXX-WE = on weekends XXXX-WXX-1 = every monday XXXX-WXX-2 = every tuesday XXXX-WXX-3 = every wednesday XXXX-WXX-4 = every thursday XXXX-WXX-5 = every friday XXXX-WXX-6 = every saturday XXXX-WXX-7 = every sunday |
.snoozed | true if the Alarm is snoozed at the moment | true/false |
.sound | Contains the set sound for this alarm. Can be adjusted | ID from list |
.time | Time for alarm. Overwrite the time for existing alarm to set a new time for this alarm. In case you have an existing alarm you can change the time here by simply overwrite the time in format hh:mm:ss, seconds are not needed to set. Might have no effect when multiple-times-per-day recurring settings were used! | Time Input |
.triggered | true if alarm is reached and triggered. Clock must be in sync with Amazon and iobroker, Use this to trigger other action as soon as the alarm time is reached | true / false |
New | Data to create a new Reminder as String in following format separated by ; as "timestamp;label;[sound];[recurring]. timestamp as unix timestamp in ms or text like "HH:MM", label as Text (required), sound as sound ID, recurring either empty for once, "DAILY" for daily or "WEEKLY=MO,TU,WE,TH,FR,SA,SU" with comma separated weekly day list. For full flexibility recurring can also be a JSONified object with all data which is passed through. Fields in example above in brackets mean that they are optional! | String |
triggered | ID of the Alarm that triggered last on this device | ID |
When changing a Reminder does not work please make sure tha the Reminder timepoint is in the future - so changing e.g. "sound" on an Reminder in the past will not work!
Overview of routines set up in Alexa App. Self created routines have a serial number, Amazon shows as 'preconfigured:...' Each routine can be triggered with a button to run once.
State name | meaning | value |
---|---|---|
Serial or internal name of routine | name of routine | Button |
You can have one or more timer running on each Alexa device. Because of the very dynamic nature of timers there will be no further objects created like with Alarm or Reminders, but a way to get a triggered info exists.
State name | meaning | value |
---|---|---|
activeTimerList | JSON array with the list of active timers containing ID, label and trigger timepoint as unix timestamp in ms | JSON array |
nextTimeDate | Contains the timepoint of the next expected triggering as unix epoch in ms | Number |
nextTimerId | ID of the next timer to trigger | String |
stopTimerId | Control with a timer ID to stop the timer (also stops if the timer is currently ringing!) | String |
triggered | A timer got triggered - in fact it is the "nextTimerId" one | true/false |
Please note that it is important that the timezone of the iobroker host is set to match your local timezone, else the triggered time detection might be wrong!
Is this Alexa device online and connected to the Amazon cloud ?
State name | meaning | value |
---|---|---|
online | Is the device online ? | True / False |
State name | meaning | value |
---|---|---|
#trigger | Button to get new History (more current then timestamp in creationTime), only needed when not using the push connection | Button |
cardContent | Additional information as shown in Alexa-App/Echo Show | Information |
cardJson | Additional information as shown in Alexa-App/Echo Show in JSON format | Information |
creationTime | date of this history entry, new history entries are only considered when later as this timestamp | Information |
domainApplicationId | Additional information like Skill-ID or such, optional | Information |
domainApplicationName | Additional information like Skill name or such, optional | Information |
json | Json of last command data to be able to process all infos e.g. in own JavaScripts | JSON |
name | Name of the device that got the last request | Information |
serialNumber | serialnumber of the device that got the last request | Information |
status | Status of last command to Alexa | SUCCESS / FAULT / DISCARDED_NON_DEVICE_DIRECTED_INTENT; last one is generated when activating the device by saying the wake word, or when the device discarded input as "not for me" |
summary | text/summary/action received by the device | Information |
Includes all smart home devices Alexa knows from your skills. States as follows, for all known devices:
State name | meaning | value |
---|---|---|
deleteAll | deletes all smart home devices from Alexa, same as the button in the Alexa App | Button |
discoverDevices | finds new smart home devices, same as the button in the Alexa App | Button |
queryAll | queries all devices, only visible when at least one device is able to retrieve information | Button |
State name | meaning | value |
---|---|---|
#delete | delete smart home device from Alexa | Button |
#enabled | Is the smart home device active? Status and control to enable/disable. State will be synced with the cloud in the same interval as the smarthome deice data. | true / false |
#includeInAllQuery | Should this device be included when querying all device states ? | true / false |
#query | query data for this device, only visible when the smart home device/skill supports to retrieve information | Button |
active | shown for scenes when they can be activated/deactivated | true / false |
powerState | Switch power on / off | changeable, true / false |
... | Many more possible states depending on the type of the smart home device | Information or changeable :-) |
-> Special states for color/light devices
State name | meaning | value |
---|---|---|
brightness | brightness of the HUE light | changeable 0-100% |
color-Brightness | brightness for color definition (together with hue and saturation, HSV) | Information, 0-1% |
color-hue | hue value of the color (together with brightness and saturation, HSV) | Information, 0-360° |
color-saturation | saturation of the color (together with brightness and hue, HSV) | Information, 0-1 |
colorRGB | RGB code of actual color build out of color-* values | Information, #rrggbb |
colorName | Name of the color as defined by Alexa - fixed values | changeable to set color, 0-144 |
colorTemperarureInKelvin | Color temperature in Kelvin | Information, 1000-10000K |
colorTemperatureName | Color temperature name as defined by Alexa - fixed values | changeable to set, 0-18 |
With #brightness you can adjust the brightness of your light, #colorName is to pick one predefined color (0-144). For HUE Ambient light you can choose between 19 Values fom 0-18 in #colorTemperatureName. All light can switched on and off with #powerState.
State name | meaning | value |
---|---|---|
connection | If connection to Alexa is OK | Information -> true / false |
cookie | Alexa cookie, use with several external scripts that also want to access Alexa APIs | Information |
csrf | Alexa CSRF, use with several external scripts that also want to access Alexa APIs | Information |
As usual using stable repository, latest repository or use the ioBroker "Install" options from GitHub
All commands to the alexa devices can be send via the adapter to single devices or to groups. The adapter supports sending of these commands and - if needed - also combines them to set a specific volume before a voince output and restore the original volume afterwards.
When you want to send custom sequences to alexa devices you can create a Routine and trigger the routine also via the states.
If this is not flexible enough the adapter offers since version 3.14.0 a way to send commands via messages.
You provide an array structure which will be converted to commands. There are two types of options for one array element:
A command
{
"command": "speak", // command like the state name in Commands states
"value": "This is a test speak.", // value like value you set on state
"device": "..." // optional: serialNumber of the device to send this command to
}
A sequence definition
{
"sequenceType": "...", // "SerialNode" or "ParallelNode"
"nodes": [...] // array of commands or sequences
}
Sending the message e.g. using JavaScript adapter looks like this:
adapter.sendTo(
"alexa.0", // target
"sendSequenceCommand", // command
{ // value
"deviceSerialNumber": "...", // Serial number of one device to get Meta data which will be used if no device is pecified on the commands
"sequenceNodes": [...], // list of sequences or commands
"sequenceType": "SerialNode" // "SerialNode" or "ParallelNode" for the provided sequenceNodes on main level. Default is "SerialNode"
}, (err, res) => {
console.log(err);
console.log(JSON.stringify(res));
}
);
When commands are executed as "ParallelNode" in parallel which mainly makes sense tosend commands to different devices. Commands as "SerialNode" are executed one after the other - Amazon takes care about this and handles this, not the adapter!
A structure like the following is possible:
... // use ParallelNode on main level
"sequenceNodes": [
{
"sequenceType": "SerialNode",
"nodes": [
{
"command": "speak",
"value": "This is a test speak.",
"device": "DeviceA"
},
{
"command": "speak",
"value": "This is a second test speak.",
"device": "DeviceA"
}
]
},
{
"sequenceType": "SerialNode",
"nodes": [
{
"command": "speak",
"value": "This is a test speak.",
"device": "DeviceB"
},
{
"command": "speak",
"value": "This is a second test speak.",
"device": "DeviceB"
},
{
"sequenceType": "ParallelNode",
"nodes": [
{
"command": "flashbriefing",
"device": "DeviceC"
},
{
"command": "flashbriefing",
"device": "Device B"
}
]
}
]
}
]
If you still use the SMS based 2FA flow then this might now work. Please update the 2fa method in the amazon settings to the current process.
Sometimes Amazon has weired checks in place when they detect unexpected traffic on Login. This can result in the problem that a captcha needs to be answered in order to login. Mostly this captcha needs to be answered once and after this the login works without Captcha.
When you need to answer such a captcha then try to do the following:
- Use a common Browser (e.g. Chrome)
- disable Javascript!
- clear all cookies that may exist for Amazon or use Private/Incognito mode of the browser
- call https://alexa.amazon.de
- you should get a login form (normally displayed for older mobile browsers)
- login there with your Amazon credentials where the Echo/Alexa is registered in
- you may need to login twice or solve a Captcha
- At the end you should see "https://alexa.amazon.de/spa/index.html" as URL but without any real content (because JS is still disabled), BUT THIS IS COMPLETELY OK!!!!
- now try to get cookie again
- if it still not works do it again and check the User-Agent and accept-Language from your browser and use those in adapter on next try
Additionally the Accept-Language-Header (defaults to "de-DE") needs to match with your language/the browser language/the language of the amazon page you login.
You can also try to play around with the User-Agent and use one which more matches to the system type you use. As example using "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" as User-Agent was reported as working better when ioBroker runs on a linux system.
You can override all those parameters in the adapter configuration.
If the automatic Cookie determination don't work or you do not trust the Adapter to give the Email/Password then you can determine the cookie by your own. There are several infos on the web how to do it. Here some links:
- https://www.gehrig.info/alexa/Alexa.html
- or use the shellscript from https://blog.loetzimmer.de/2017/10/amazon-alexa-hort-auf-die-shell-echo.html to get it on shell ...
But be aware: The Cookie will time out after several time and then the adapter will stop working and disable itself. You then need to manually get a new cookie!
Sometimes it could happen that because of too many connection tries aAmazon blocks the push connection endpoint for a specific IP and "device".
If the Push connection is never established then you can try to use the following:
- delete the instance of the adapter
- check if there are files like /opt/iobroker/node_modules/iobroker.alexa2/formerDataStore*.json - if existing please delete them
- add new instance and get new cookie
Then it should work again
The adapter reads whatever Amazon reports. Sometimes unused and old Apps or other connections stay in that list. If you want to clean this up you need to do that by visiting the Amazon website and remove the devices there.
Link: https://www.amazon.de/hz/mycd/digital-console/devicedetails?deviceFamily=ALEXA_APP
After deleting unused device please restart the adapter to remove them there too.
- (Apollon77) Optimize activity detection to process all relevant entries and not just the last one
- (Apollon77) Adjust History update to work with recent Amazon changes
- (Apollon77) Optimize reconnection handling for push connections
- IMPORTANT: Minimum required Node-js version is 16 now!
- (Apollon77) Updated the Push connection after Amazon technology changes
- (Apollon77) Added some more device types
- (Apollon77) Work around Amazon changes that affected all functions over the Push connection
- (Apollon77) Some smaller fixes and adjustments
- (Apollon77) Prioritize real devices higher than app devices when serialnumbers overlap
- (Apollon77) Enhance checks when changing smart device values
- (Apollon77) Try to prevent Amazon rate limiting (again)
- IMPORTANT: Because of rate limits by Amazon I decided to remove the update of smart home device values in intervals because it seems to produce too much load in Skills and Amazon systems.
- (Apollon77) Optimizes loading of smart home device states
- (Apollon77) Fixed issue with enabling/disabling of Alarms in combination with non-default music for the alarm
- (Apollon77) Prevented that Timers or Alarms that are long in the future to trigger their trigger state too early
- (Apollon77) Fixed deleting own user Messages state
- (Apollon77) Already request Notification updates when history registered a Notification action and do not wait for Push info to come in
- (Apollon77) make sure caching works correctly with multiple instances of the adapter
- (Apollon77) Increase minimum interval for requesting smart home device data to 15 minutes (900s) because of Amazon rate limits. Please do not try to work around it!
- (Apollon77) Cache Smart home device list and data to prevent too many requests when restarting adapter in short intervals and to prevent deleted smart home devices also on further rate limit issues
- (Apollon77) Fix issue in retry handling when rate limit exceeded is returned by Amazon
- (Apollon77) Do not clean up Smart Home Device objects for now - delete manually if you remove a device
- (Apollon77) Receive the correct player status again when musik is stopped
- (Apollon77) Add safeguard for too high intervals
- (Apollon77) Fix doNotDisturb when using a time string
- (Apollon77) Fix doNotDisturb when using a time string
- (Apollon77) Fix doNotDisturb for groups
- (Apollon77) Prevent unwanted device Name updates
- (Apollon77) Fix crash check with multiple adapter instances
- (Apollon77) Fix Alarm creation when just providing time and it is for next day
- (Apollon77) Fix retry handling
- (Apollon77) Preserve Names as soon as it is an App type in general
- (Apollon77) Enhance checks and safeguards for polling intervals
- (Apollon77) Check for restart intervals that do not make sense and stop adapter if detected
- (Apollon77) Add additional crash-loop detection
- (Apollon77) Fix deviceStop sequence command
- (Apollon77) Fix crash case reported by Sentry
- (arteck) Add image for Fire Cube
- (Apollon77) Fix doNotDisturb and doNotDisturb for All devices
- (Apollon77) Update do not disturb status after set for all devices
- (Apollon77) preserve a changed name for a "This device" device object
- (Apollon77) Enable commands again for Apps with type A2TF17PFR55MTB - will only work sometimes as it seems
- (Apollon77) Optimize Handling when push connection could not be established
- IMPORTANT: Smart home device values are from now on only synchronized when enabled via #includeInIntervalQuery state. Enable only what's really needed!
- (Apollon77) Allow to query several more smart home device states (incl. the Echo own Temperature-Sensor if available) and more optimizations
- (Apollon77) Optimize querying smart home device states to only request relevant properties
- (Apollon77) Exclude some value types again from requesting from Amazon because they make no sense and will never contain meaningful data
- (Apollon77) Add FireTV commands for FireTV devices
- (Apollon77) Add CommandsAll.deviceStop and CommandsAll.deviceDoNotDisturb commands to be sent to all devices
- (Apollon77) Add Equalizer preferences (if supported by devices)
- (Apollon77) Add Speaker and AUX preferences (if supported by devices)
- (Apollon77) Add Display (enabled, brightness, adaptive brightness) preferences (if supported by devices)
- (Apollon77) Enhance doNotDisturb state to also allow specifying a enable duration or end timepoint
- (Apollon77) Add a fallback to update music player when a new history record mentions music as target for the spoken words. Could help as fallback when push infos are not coming in sometimes with Sonos
- (Apollon77) Delay initialization of push connection to when basic structures are initialized
- (Apollon77) Add some more devices
- (Apollon77) Minimum smart home device query interval is now 5 minutes and not 1 minute anymore to remove some requests for now
- (Apollon77) Make sure disabling query intervals really work (disabling smart home device and state and configuration was not possible)
- (Apollon77) Prevent datatype warnings in log
- (Apollon77) Another adjustment for smart home device data readings
- (Apollon77) Fix crash cases reported by Sentry
- (Apollon77) Work around timing issues with speak-volume when using announcement
- (Apollon77) Correctly initialize volume/mute on startup also when player data are not available
- (Apollon77) Do not overwrite speak-volume (and some other fields) with null on adapter start
- (Apollon77) Fix crash cases reported by Sentry
- (Apollon77) Add support to play Audible books in Music-Providers
- (Apollon77) Optimize deletion of alarms and reminders
- (Apollon77) Optimize requesting smart home device data
- (Apollon77) Fix deletion and cancellation of Alarms and Reminders
- (Apollon77) Add (official) support for Music-Alarms - they are now listed under "Alarms" together with the other Alarms! The "sound" list will contain the device specific music targets - so you can basically zse the ones that you created at least once via voice commands.
- (Apollon77) For a Music Alarm the "customVolume" on the alarm is used to set the normal device volume 2s before the alarm but do not (!) reset it afterwards
- (Apollon77) Prevent crashes on one time Alarms that just triggered
- (Apollon77) Fix case where initialization of the adapter was never finished and so nothing was controllable when App devices where not synced
- (Apollon77) Convert Smarthome device values if wrong datatype is delivered by device
- (Apollon77) Add handling for two more battery health states for smart home devices
- (Apollon77) Fix crash case when initializing notifications
- (Apollon77) IMPORTANT: Format to specify multiple Details on "New" for Alarms and Reminders changed, see documentation!
- (Apollon77) Add Alarm/Reminder triggered state per device which will contain the ID of the alarm that got triggered when it is triggered
- (Apollon77) Add several more fields for Alarms and Reminders to show better the details of the alarm
- (Apollon77) Allow to cancel Reminders and Alarms as in the Alexa App
- (Apollon77) Allow to also edit Alarm/Reminder Dates additionally to the times
- (Apollon77) Allow to set a custom Volume for Reminders and Alarms - it will be set 2s before the expected trigger and restored afterwards
- (Apollon77) Calculate the "nextTriggerDate" as Timestamp of next expected triggering
- (Apollon77) Add a JSON-Array with all running timers and the "next id" as state
- (Apollon77) Allow to stop a timer by ID
- (Apollon77) Add the days-list of Alarms when configured for recurrency
- (Apollon77) Add new Commands skill and skillYours to start Skills
- (Apollon77) Add Notification volume, Ascending Alarm setting and default notification sounds as preferences
- (Apollon77) Slow down the initialization of all data a bit, so startup could take longer
- (Apollon77) Allow to define if Lists and Smart home devices are synced by the adapter with the Amazon Cloud at all
- (Apollon77) Enhance Smart Home Device support by adding various controllers and states. If in your Alexa App something is configurable which is not in ioBroker please send a debug log!
- (Apollon77) Re-Introduce the ability to poll smart home device states in intervals, but only devices are queried that report their status proactively to Amazon-Cloud to prevent Skill developer costs! ioBroker (and OpenHab) devices are NOT queried! The interval can be configured but must not be lower than 60s! Querying is disabled by default.
- (Apollon77) Add message to send out sequences of commands to alexa devices
- (Apollon77) Add Info states for macAddress and WifiSSID of the Alexa devices
- (Apollon77) Add several new states for Player for allowed actions, medium quality
- (Apollon77) Add mediaId and also allow to set it to jump to a defined entry in the playlist
- (Apollon77) Add Commands.sound to play a sound
- (Apollon77) Do not set the speak-volume when executing textCommand and deviceStop
- (Apollon77) Do not set speak-volume if the volume is already as wanted when executing commands
- (Apollon77) update Do-Not-Disturb status once on start and with device configuration updates
- (Apollon77) Allow to specify the title in notification commands
- (Apollon77) When a device plays music in a group then new states in "Player"will indicate this together with the group ID
- (Apollon77) Allow to enable and disable smart home devices - this will be synced together with the smart home state updates from the cloud if changed in the app!
- (Apollon77) Detect Rate limit exceeded response and do one automatic request retry 10s later (plus a random part)
- (Apollon77) Slow down the update of player status to prevent rate limit exceeded errors. initial update of the player states is delayed on startup of the adapter
- (Apollon77) Restore character replacement for Music providers (space is now again a "-")
- (Apollon77) Add more devices
- (Apollon77) Optimize startup and unload handling
- IMPORTANT List Names are now checked for invalid characters and replaced. Might change the name of objects in ioBroker. Old ones need to be deleted manually!
- (Apollon77) Fix command sending in multi owner environments (e.g. Family shared devices)
- (Apollon77) Add some new devices
- (ammawel) Add the date of an alarm as state, not only time
- (Apollon77) Add option to also query the App Devices to allow to send commands to them
- (Apollon77) Rework Multiroom for commands to prevent rate limiting issues!
- (Apollon77) Fix Routine Naming if triggers were used
- (Apollon77) Support devices with "Ziggy" as wake word
- (Apollon77) All commands with voice output respect the defined speak-volume now
- (Apollon77) Allow again to directly enter TuneIn station Ids (s*) and topicIds (t*)
- (Apollon77) Add media states to show remaining time of media playback
- (simatec) Adjust link color im Admin configuration
- (Apollon77) Some requests are automatically retried with a slight delay if Amazon responds with error 503
- (Apollon77) SequenceNodes created for a device are now bound to the "deviceOwnCustomer" - should help in mixed owner groups
- (ammawel) Add recurringPattern for Notifications (see Readme)
- (Apollon77) Fix crash case
- (Apollon77) Make sure states are not set too early before objects are created
- (Apollon77) Fix crash case (Sentry IOBROKER-ALEXA2-AT)
- (Apollon77) Prevent warnings with js-controller 3.3
- (Apollon77) Add support for Multi Utterance Routines
- (Apollon77) Fix object deletion for lists
- (Apollon77) Fix Creation of new Lists and add deletion support
- (Apollon77) Allow Commands for Stereo Pairs
- (Apollon77) Optimize Push Connection and History retrieval
- IMPORTANT: Node.js 10 support is dropped, supports LTS versions of Node.js starting with 12.x
- (Apollon77) Update Push Connection
- (Apollon77) Try to fix setting targetTemperature for ThermostatController
- (Apollon77) Only ignore empty history entries if both, summary and alexaResponse is empty
- (Apollon77) Fix cookie exchange and cookie validation checks
- (Apollon77) Add some new devices
- (Apollon77) Always recognize "alexa" as wakeword to handle commands via the apps correctly
- (Apollon77) Optimize Cookie refresh handling
- (Apollon77) Fix warnings from js-controller 3.3 and optimize
- (Apollon77) Adjust automatic Cookie Refresh interval from 7 to 4 days
- (Apollon77) Initialize volume for all devices on start
- (Apollon77) Add configuration option to not write history entries where no command text was recognized
- (Apollon77) add some more detected text into summary and answerText states (textCommand commands should be in history back again)
- (Apollon77) IMPORTANT: History entries are now requested via a different data source because Amazon seems to tun off the old option. History.status is for this no longer filled, but new states were added. Only voice commands are reported ( textCommand entries not longer)
- (Apollon77) other optimizations in communications and prevent hammering amazon with requests in error cases
- (fbeister) Add and adjust some known devices
- (Apollon77) Optimize object deletion
- (Apollon77) Update Routines API because of amazon changes
- (Apollon77) Catch error when deleting objects
- (Apollon77) restart adapter when no initial cookie could be requested
- (Apollon77) Prevent to write non-existing state values
- (Apollon77) Add and adjust some known devices
- (Apollon77) Remove bespoken because textCommand is more flexible
- (Apollon77) Add and adjust some known devices, add Echo 4 image
- (Apollon77) add support for textCommand - tell an Alexa device a text as you would speak it
- (Apollon77) make sure discovery of devices is still possible also after deleting all devices before
- (Apollon77) make sure music providers with empty names do not produce errors
- (Apollon77) prevent crash cases and optimize reconnection handling
- (Apollon77) Further optimize Cookie handling
- (Apollon77) Hopefully allow easier upgrades if old deviceId is invalid now
- (Apollon77) Allow to have separate deviceIds per instance
- (Apollon77) Work around Amazon Security changes and make proxy working again
- (Apollon77) Work around Amazon Security changes and make proxy working again
- (arteck) add echo studio
- (Apollon77) Work around Amazon Security changes and make proxy working again
- (Apollon77) Work around Amazon Security changes and make proxy working again
- (Apollon77) fix Sentry crash case when Amazon do not respond correctly (IOBROKER-ALEXA2-1C)
- (Apollon77) Update Alexa-Remote Library to optimize communication error/timeout cases
- (Apollon77) Fix currentState handling
- (Apollon77) remove goodnight because was not working
- (Apollon77) Fix Play/Pause states and some media optimizations
- (Apollon77) update amazon-cookie library: another optimization for Node.js 14
- (Apollon77/hive) add new commands, jokes/facts/goodnight/cleanup
- (Apollon77/hive) add new command curatedtts with allowed values ["goodbye", "confirmations", "goodmorning", "compliments", "birthday", "goodnight", "iamhome"] to play random curated sentences
- (Apollon77) Prevent some crashes
- (Apollon77) Make sure Timer are not triggering the state when deleted
- (Apollon77) make sure that Lists objects are deleted correctly when deleting
- (Apollon77) Make compatible with nodejs 14
- (Apollon77) Adjust to changes from Amazon so that initial Proxy process works again
- (OberstVonGatow) Make sure that for Spotify Media data requests do not have negative effects and stop the playback
- (Gieskanne/Apollon77) Add Next Timer Date as state
- (Apollon77) Fix missing history entries
- (Apollon77) Prevent List deletions from logging errors
- (Apollon77) optimiztions, dependency updates and fixes
- (Apollon77) Switch to ioBroker own sentry instance
- (Apollon77) add Info.softwareVersion
- (Apollon77) fix some crash cases
- (Apollon77) Update Sentry DSN and add filtering
- (Apollon77) Update deps
- (Apollon77) Prevent some errors
- (Apollon77) Prevent some errors
- (Apollon77) Prevent some errors
- (Apollon77) Prevent some errors
- Adapter needs nodejs 8+ and js-controller 2.0 now!
- (Zefau) add functionality for handling of lists
- (Apollon77) Add answerText when available from history
- (Apollon77) handle error for empty valueMaps for ColorTemperatures
- (Apollon77) also support names for new special routines (Alarm Notifications, Sensor Detections, ..)
- (Apollon77) GitHub Actions for Test& Build
- (Apollon77) Add Sentry for error reporting
- (Apollon77) prevent some crashed after changes by Amazon
- (Apollon77) fix Routine names after changes by Amazon
- (Apollon77) add some devices and new images
- (Apollon77) Add more situations to update player status because amazon send no info anymore on title changes
- (Apollon77) add some error handling for contacts
- (Apollon77) add new device
- (Apollon77) fix volume logic for ssml
- (Apollon77) Allow reminders to bet set >+ 1day
- (Apollon77) added possibility to send text messages to users including himself, allows deletion of all messages to himself
- (Apollon77) added option to reset Cookies. After sahev the adapter will restart and needs to get a new Login (see adapter config)
- (Apollon77) change announcement and ssml to send commands more synchronous
- (INgoRah) Support compact mode
- (Apollon77) enhance error handling for broken authentications
- (Apollon77) enhance error handling for broken authentications
- (Apollon77) enhance error handling for broken authentications
- (Apollon77) new devices added
- (Apollon77) enhance error handling for Amazon Push Infos
- (Apollon77) Allow to specify an external docker container IP to override Proxy-IP
- (Apollon77) Add more Devices from GitHub
- (Apollon77) try to work around an Image URL bug from Amazon
- (Apollon77) optimize Admin display of Status/Link
- (Apollon77) add Link to https://alexa.amazon.com to Admin instance overview
- (Apollon77) Remove Admin2 support
- (Apollon77) Optimize Handling from DNS errors (hopefully) to prevent stopped Adapters on Internet/DNS problems
- (Apollon77) adjust to current Amazon changes
- (Apollon77) fix volume handling
- (Apollon77) Add some more devices
- (Apollon77) Logging reduced
- (Apollon77) unknown devices get commands activated automatically
- (Apollon77) remove Email/Password fields and add info about login to Admin screen (still needs to be polished, only Admin v3)
- (Apollon77) detect App-Devices and remove them from the list because they are not usable in any way
- (Apollon77) add new sequenceCommands "calendarNext", "calendarToday", "calendarTomorrow"
- (Apollon77) fix wake word handling and history sanitizing
- (Apollon77) cookie handling completely rewritten, no email/password anymore, only Proxy (still only from log)
- (Apollon77) fixes routine triggering that triggered on wrong device sometimes
- (Apollon77) added new commands "deviceStop", "announcement", "notification", and "ssml" (see documentation above)
- (Apollon77) optimize cookie handling again
- (Apollon77) new devices
- (Apollon77) make proxy for cookies work again
- (Apollon77) new devices
- (Apollon77) make proxy for cookies work again
- (Apollon77) Further optimizations to lower number of requests
- (Apollon77) Experimental support for Playlist IDs (p1234567) in TuneIn-Station
- (Apollon77) fixes and important changes to make sure not too many requests are sent
- (Apollon77) polishng and finalization, make it 1.0.0
- (Apollon77) speak can now contain separated text by semicolons. These Texts will then be spoken sequencially. So the old limit if 250 characters is only existing for one such text part. So, now longer texts are possible too. Separate it with a semicolon.
- (Apollon77) more color handling fixes
- (Apollon77) Add Bespoken Virtual device support to be able to interact with Alexa infrastructure
- (Apollon77) add new Device Types for Smarthome-integration (Contact and Motion sensors)
- (Apollon77) fixes to colorhandling
- (Apollon77) allow to deliver a volume together with aspeak command by using "80;text" and then volume is set before speak and reset afterwards. Experimental!
- (Apollon77) sometimes new alarms were not triggered in adapter
- (Apollon77) add support to control smart devices and groups (and also add groups). Because I was only able to test a few types i added logging. please check log, try out and report back!
- (Apollon77) When routines are executed via voice command and push connection is enabled the routine state is also triggered by "true" with ack=true when routine trigger text is matching exactly to spoken text
- (Apollon77) corrected volume and mute handling in states, a volume of 0 is also seen as "muted" if muting flag is not supported by device
- (Apollon77) when speak text is coming from cloud adapter and contains SSML tags they will be filtered out, so you can use a speak endpoint directly to output response from Smart Home skill actions
- (Apollon77) fix an error when getting new cookie
- (Apollon77) add new "Playlist" states for the Music providers to directly prepend "playlist" :-)
- (Apollon77) Volumes are not updated for multiroom devices when === 0
- (Apollon77) Add Reminder and Alarms support. Write time and pot. text separated by comma into the "New" stat to create a new one (e.g. "10:00:00, Test-Reminder")
- (Apollon77) Also with Push-Connection some times states are generally updated to make sure data are correct (e.g. player media info will disappear 2h after stopping the music)
- (Apollon77) Added some more deviceTypes
- (Apollon77) internal Refactoring
- (Apollon77) states that are not needed anymore will be removed. This will be logged for now, so please check this and give feedback!
- (Apollon77) sanitized music provider state names (spaces are now dashes ... should be removed automatically)
- (Apollon77) Renamed TuneIn-Direct to TuneIn-Station (even if you still can enter text to search, this works with stations too) ... should be removed automatically)
- (Apollon77) Device and Bluetooth status is now also checked at states update
- (Apollon77) After enabling Push-Connection the configured polling is turned off and anything is done based on real time informations from Alexa. Test it
- (Apollon77) Enhanced History states to include the status of the action (SUCCESS, FAIL ...), infos from returned cards (if available) and info on accessed skill for this action.
- (Apollon77) When using Push-Connection History update is also updated automatically. An empty summary with status DISCARDED_NON_DEVICE_DIRECTED_INTENT means the activation of the echo by saying the wake word
- (Bluefox) Add icons for some of the devices for Admin
- (Apollon77) Several Multiroom-fixes
- (Apollon77) fixed shuffle/repeat
- (Apollon77) fixed status for play, pause, shuffle and repeat
- (Apollon77) Only 20 Routines were queried, now up to 2000
- (Apollon77) Also allow commands including speak for multiroom, BUT it is triggered per device, so NO synchronous audio output!!
- (Apollon77) Thanks to Matten-Matten also Music-provers can be started on multiroom devices
- (Apollon77) Fix volume settings for multiroom devices (please report other devices where it is not working)
- (Apollon77) Add serial number and name to Info
- (Bluefox) Admin3 fixes and slight changes to roles and code
- (Apollon77) Reworked state names (hopefully last time!)
- (Apollon77) Combine Player-Control and Player-Info into channel Player to support better detection and material support
- (Apollon77) Added further information in Infos states per echo device
- (Apollon77) Try to detect the type of the device different and decide if commands are available or not (till capabilities are known better)
- (Apollon77) New "Music-Provider" states depending on available music providers with possibility to enter a text to play something (same as you would speak it)
- (Apollon77) Volume is send different now, so that it also works when Device player get's inactive
- (pix) materialize settings window
- (Apollon77) WOn IP is set automatically with IP from first network interface
- (Apollon77) fix comma replacements in speaks, do not speak empty text
- (Apollon77) if Device is Multiroom, the do not create Routines and Commands and not bluetooth
- (Apollon77) add information about multiroom device and master (later we can use this to sort out commands that are impossible with multiroom)
- (Apollon77) History is also stored as JSON, so it can be used to monitor one datapoint and have all infos on updateState
- (Apollon77) Several other fixes
- (Apollon77) in Numbers with . are replaced by commas
- (Apollon77) Finally fix device renaming
- (Apollon77) Small fix of history channel type and setting states initially
- (Apollon77) 0.2.0: added many Player-Info datapoints including "progress updates " when media is playing
- (Apollon77) 0.2.0: removed "Notifications" because the only benefit for now is to show them, no interaction or change possible
- (Apollon77) 0.2.0: adapter now allows to configure intervals for history updates and other data updates like player info
- (Apollon77) 0.2.0: if cookie could not be determined correctly a proxy is started to allow manual login and cookie is catched in the background on success
- (Apollon77) 0.2.0: add info datapoints for connection (connected to Alexa), cookie and csrf
- (Apollon77) 0.2.0: rework complete logic to not use soef library anymore
- (Apollon77) 0.2.0: Speaking free text at any timepoint is available under Commands.speak
- (Apollon77) 0.2.0: Sequence-Commands (weather, traffic, flashbriefing, goodmorning, singasong, tellstory) are available to be triggered under "Commands"
- (Apollon77) 0.2.0: Automation-Routines are now available to be triggered per device under "Routines"
- (Apollon77) 0.2.0: Automatically use different user-agents for Win32, MacOS and Linux based systems
- (Apollon77) 0.2.0: Automatically use different user-agents for Win32, MacOS and Linux based systems
- (Apollon77) 0.2.0: Also support entering TuneIn-Station IDs ("s" plus 4-6 digits) to play that station
- (Apollon77) get Adapter working again, especially getting cookie and optimize refresh
- soef versions
The MIT License (MIT)
Copyright (c) 2018-2023 Ingo Fischer iobroker@fischer-ka.de, 2017-2018 soef soef@gmx.net
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.