I finally upgrade from Pi4 x32 OH 4.3.8 → Pi5 and OH x64 to OH 4.3.8 → Pi5 and OH x64 to OH 5.0.3 because of the Amazon Echo binding stating its working fully on the OH 5.x version.
openhab> list -s | grep amazon
300 x Active x 80 x 5.0.3 x org.openhab.binding.amazonechocontrol
openhab>
Unfortunately, this is NOT true. The only thing that got fixed making this huge upgrade was the Echo Air Quality device with the Humidity item that was failing on Amazon Echo binding 4.3.9
These are still NOT working.
lastvoicecommand channel is still not working (FIXED BY LOGGING IN/OUT of BINDING)
binding referencing a URL that doesn’t exist at startup
2025-12-06 18:04:10.190 [WARN ] [g.amazonechocontrol.internal.connection.Connection] - Failed to get notifications: https://na-api-alexa.amazon.com/api/notifications failed with code 400: Bad Request
2025-12-06 18:04:40.713 [WARN ] [g.amazonechocontrol.internal.connection.Connection] - Failed to get notifications: https://na-api-alexa.amazon.com/api/notifications failed with code 400: Bad Request
2025-12-06 18:04:58.058 [WARN ] [g.amazonechocontrol.internal.connection.Connection] - Failed to get notifications: https://na-api-alexa.amazon.com/api/notifications failed with code 400: Bad Request
2025-12-06 18:11:56.642 [WARN ] [g.amazonechocontrol.internal.connection.Connection] - Failed to get notifications: https://na-api-alexa.amazon.com/api/notifications failed with code 400: Bad Request
2025-12-06 18:12:13.895 [WARN ] [g.amazonechocontrol.internal.connection.Connection] - Failed to get notifications: https://na-api-alexa.amazon.com/api/notifications failed with code 400: Bad Request
2025-12-06 18:24:23.188 [WARN ] [g.amazonechocontrol.internal.connection.Connection] - Failed to get notifications: https://na-api-alexa.amazon.com/api/notifications failed with code 400: Bad Request
2025-12-06 18:24:40.054 [WARN ] [g.amazonechocontrol.internal.connection.Connection] - Failed to get notifications: https://na-api-alexa.amazon.com/api/notifications failed with code 400: Bad Request
Here’s the 4.3.9 posting with the GitHub bug tickets created.
I can’t get playAlarmSound to work - tried it on my Echo Dot, Echo Dot v4 and Echo Show v5.
Is this a know issue or am I doing something wrong?
Here’s my log:
the channels nextAlarm and nextTimer work as expected in my setup.
jwiseman
(Mr. Wiseman (OH 5.1.4 Stable on Pi5))
10
The API/JSON call to get those variables don’t work anymore, sorry for the confusion.
Here’s the code that use to work from OH 2.x to 4.3.x.
rule "Guest Bedroom Echo Alarm controlling HUE bed side table light"
when
Time cron "45 0/3 4-7 * * ?" // 45 secs every 3 minutes between 4 - 7 am
then
if (systemStarted.state != ON && Home_Away.state == ON && UnifiPhones.state != OFF && gInternet.state == ON && OH_Uptime_HumanReadable.state != NULL && OH_Uptime_HumanReadable.state != UNDEF) {
if (Good_Morning_Loft_Switch.state != ON && Good_Morning_Kitchen_Switch.state != ON) {
var EchoThing = getThingStatusInfo(zEchoAccount)
if ((EchoThing !== null) && (EchoThing.getStatus().toString() == 'ONLINE' )) {
// read Alexa notifications - alarm, reminders, timers
var String json = AlexaHTTP.sendHttpGetRequest(10000)
Thread::sleep(3000)
json = AlexaHTTP.sendHttpGetRequest(10000) // 2nd attempt since the 1st attempt seems to fail often
Thread::sleep(3000)
var int count = 0
if (json !== null && json != NULL && json.toString() != '') {
length = transform("JSONPATH", "$.notifications.length()", json)
count = Integer::parseInt(length)
} else { return;}
// logInfo("ECHO","Notifications found for Guest Room is " + count)
if (json == NULL || json == '' || length == NULL || length == '' || count == UNDEF || count == NULL) { return; }
var Number i = 0
var String status = 'NULL'
var String deviceSerialNumber = 'NULL'
var String type = 'NULL'
var String alarmtime = 'NULL'
var String alarmdate = 'NULL'
var CurrentDT = now
// logInfo("ECHO","CurrentDT is " + CurrentDT)
// for all notifications, identify ...
while (i <= (count - 1)) {
status = transform("JSONPATH", "$.notifications[" + i +"].status", json)
// logInfo("ECHO","Notification status is " + status)
deviceSerialNumber = transform("JSONPATH", "$.notifications[" + i + "].deviceSerialNumber", json)
// logInfo("ECHO","Device serial number is " + deviceSerialNumber)
type = transform("JSONPATH", "$.notifications[" + i + "].type", json)
// logInfo("ECHO","Type is " + type)
// logInfo("ECHO","Count is " + i)
// An ALARM that is ACTIVE and belongs to the GUEST BEDROOM echo device
if (type == 'Alarm' && status == 'ON' && deviceSerialNumber == 'G8M0XG1114270RX5') {
alarmtime = transform("JSONPATH", "$.notifications[" + i + "].originalTime", json)
alarmdate = transform("JSONPATH", "$.notifications[" + i + "].originalDate", json)
// logInfo("ECHO","Guest Bedroom Alarm found is " + alarmtime + " " + alarmdate)
i = count // only the first one is considered - exit while loop
}
i = i + 1
}
if (alarmtime.toString() == 'NULL' || alarmdate.toString() == 'NULL') { return; }
// An active alarm has been found
var setAlarmTime = ZonedDateTime.parse(alarmdate + "T" + alarmtime + "000-06:00[America/Chicago]") // DST Day Light Savings Time have to change to 06:00 in fall and 05:00 in spring
logInfo("ECHO","Guest Bedroom alarm time for HUE control is " + setAlarmTime) // uncomment this one to determine what alarm time was used
if (CurrentDT.isBefore(setAlarmTime) && CurrentDT.plusMinutes(20).isAfter(setAlarmTime)) {
// logInfo("ECHO","Guest Bedroom Alarm is within 20 minute range.")
if (CurrentDT.isBefore(setAlarmTime) && CurrentDT.plusMinutes(15).isAfter(setAlarmTime)) {
// logInfo("ECHO","Guest Bedroom Alarm is within 15 minutes range.")
if (CurrentDT.isBefore(setAlarmTime) && CurrentDT.plusMinutes(10).isAfter(setAlarmTime)) {
GuestBedLamp_Dimmer.sendCommand(new PercentType(80)) // 80%
Thread::sleep(1000)
GuestBedLamp_ColorTemp.sendCommand(new PercentType(100)) // Full White
Thread::sleep(1000)
if (GuestBedLamp_Switch.state != ON) { GuestBedLamp_Switch.sendCommand(ON) }
} else {
GuestBedLamp_Dimmer.sendCommand(new PercentType(50)) // 50%
Thread::sleep(1000)
GuestBedLamp_ColorTemp.sendCommand(new PercentType(100)) // Full White
Thread::sleep(1000)
if (GuestBedLamp_Switch.state != ON) { GuestBedLamp_Switch.sendCommand(ON) }
}
} else {
GuestBedLamp_Dimmer.sendCommand(new PercentType(30)) // 30%
Thread::sleep(1000)
GuestBedLamp_ColorTemp.sendCommand(new PercentType(100)) // Full White
Thread::sleep(1000)
if (GuestBedLamp_Switch.state != ON) { GuestBedLamp_Switch.sendCommand(ON) }
}
}
}
}
}
end