This alarm is fantastic. I have a tablet that I am mounting at the entrance to my garage. While I am not using MQTT to interact for state, I am using it in a different way. When the automations are triggered specifically for both exit delay and entrance delay, I am pushing MQTT messages that have the tablet speak ‘You have 45 seconds as the alarm is armed’ and ‘Please disarm the alarm’. When the alarm is triggered the alarm goes off, and the TTS sounds out ‘The dogs have been released, the police have been notified… You should probably run.’ I was thinking of also having an .mp3 fire on an echo in the other room that sounds like a large dog.
Great work I will be donating. Thank you for everything you do for the community, I know what it takes to support these things.
Thanks mate it’s really appreciated. I’ll be interested how you manage to get the echo to play the mp3 are you using a silent voice command service or is it as simple as pairing with bluetooth?
I had a quick go with bluetooth but found the echo dot drops the connection after a couple of days.
Hopefully it should be soon, the code has turned into a beast to manage on the front end as the settings page will allow you to completely manage the alarm from there. It also saves any changes made to the alarm.yaml which should provide a much easier setup as I know a lot of folk struggle with yaml and its quirks.
It also allows changes on the fly without the need to restart HA so changing sensor groups or passcodes is a breeze.
The only problem that I might have to figure a workaround for is that I am on Hassio and since it is in docker I don’t know if it can run a shell command. I had tried for something else and was having some difficulties, but I may be able to call it in python as well.
Hello, thanks again for all the hard work. I’m having an issue trying to get the custom panel to display. I have a fresh install of hass with the same problem, but had the issue appear shortly before my fresh install too.
I get nothing but a blank screen, and have changed the javascript version to latest, tried several different browsers, and cleared all the caches.
The error that shows up in the log and web console is: ERROR (MainThread) [frontend.js.latest.201805264] https://*hass*/frontend/panels/alarm-89a9dcd19218929b09433a87851823b2.html:248:47 Uncaught TypeError: Cannot read property 'LocalizeMixin' of undefined
Thanks in advance for any help that anyone is able to provide!
Ok so just upgraded to 0.70 (release) and alarm isn’t showing up in the front end. Getting the following error in logs:
data:text/javascript;charset=utf-8,%0A%09class%20HaPanelAlarm%20extends%20window.hassMixins.LocalizeMixin(Polymer.Element)%20%7B%0A%09%09static%20get%20is()%7B%20return%20'ha-panel-alarm'%3B%20%7D%0A%09%09%0A%09%09%2F%2F%20Element%20class%20can%20define%20custom%20element%20reactions%0A%09%09connectedCallback()%20%7B%0A%09%09%09super.connectedCallback()%3B%0A%0A%09%09%09if%20(this.alarm.attributes.weather)%7B%0A%09%09%09%09this.getWeather()%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09ready()%7B%0A%09%09%09super.ready()%3B%0A%20%20%20%20%09%09this.loadResources()%3B%0A%09%09%09this.hideSensors%20%3D%20this.alarm.attributes.hide_sensor_groups%0A%09%09%09this.hideCustom%20%20%3D%20this.alarm.attributes.hide_custom_panel%0A%0A%09%09%09this.errors%20%3D%20%5B%5D%3B%0A%09%09%09if%20(this.alarm.attributes.hide_sidebar%20%3D%3D%20true)%09this.toggleSidebar()%3B%0A%20%20%09%09%7D%0A%0A%09%20%20%09static%20get%20properties()%7B%0A%20%20%20%20%09%09return%20%7B%0A%09%09%09%09hass%3A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Object%20%7D%2C%0A%09%09%09%09panel%3A%20%20%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Object%20%7D%2C%0A%09%09%09%09narrow%3A%20%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20false%20%7D%2C%0A%09%09%09%09showMenu%3A%20%20%20%20%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20false%20%7D%2C%0A%0A%09%09%09%09alarm%3A%20%20%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Object%2C%20observer%3A%20'monitorAlarm'%20%7D%2C%0A%0A%09%09%09%09%2F%2F%20Sensor%20Groups%0A%09%09%09%09immediate%3A%20%20%20%20%20%20%20%7B%20type%3A%20Array%2C%20computed%3A%20'computeSensors(hass%2C%20alarm.attributes.immediate)'%20%7D%2C%0A%09%09%09%09delayed%3A%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Array%2C%20computed%3A%20'computeSensors(hass%2C%20alarm.attributes.delayed)'%20%7D%2C%0A%09%09%09%09allsensors%3A%20%20%20%20%20%20%7B%20type%3A%20Array%2C%20computed%3A%20'computeSensors(hass%2C%20alarm.attributes.allsensors)'%7D%2C%0A%09%09%09%09overrideSensors%3A%20%7B%20type%3A%20Array%2C%20computed%3A%20'computeSensors(hass%2C%20alarm.attributes.override)'%20%7D%2C%0A%09%09%09%09ignored%3A%20%09%09%20%7B%20type%3A%20Array%2C%20computed%3A%20'computeSensors(hass%2C%20alarm.attributes.ignored)'%20%7D%2C%0A%0A%09%09%09%09opencount%3A%20%20%20%20%20%20%20%7B%20type%3A%20Number%2C%20value%3A%200%20%7D%2C%0A%0A%09%09%09%09time%3A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Object%20%7D%2C%0A%09%09%09%09weather%3A%09%20%20%20%20%20%7B%20type%3A%20Object%20%7D%2C%0A%09%09%09%09temp%3A%09%20%20%20%20%20%20%20%20%20%7B%20type%3A%20String%20%7D%2C%0A%0A%09%09%09%09code%3A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20type%3A%20String%2C%20value%3A%20''%20%7D%2C%0A%09%09%09%09display_code%3A%20%20%20%20%7B%20type%3A%20String%2C%20value%3A%20''%20%7D%2C%0A%0A%09%09%09%09timeoutID%3A%20%20%20%20%20%20%20%7B%20type%3A%20Number%20%7D%2C%0A%0A%09%09%09%09cleanup%3A%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Array%2C%20value%3A%20%5B%5D%20%7D%2C%0A%09%09%09%09attemptedArm%3A%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20false%20%7D%2C%20%0A%09%09%09%09screensaver%3A%20%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20false%20%7D%2C%0A%09%09%09%09settings%3A%09%20%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20false%20%7D%2C%0A%0A%09%09%09%09%2F%2FENUMS%20USED%20FOR%20CSS%20CLASS%20SELECTION%0A%09%09%09%09panel_locked%3A%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20false%20%7D%2C%0A%0A%09%09%09%09hideSensors%3A%20%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20true%20%7D%2C%0A%09%09%09%09hideCustom%3A%20%20%20%20%20%20%7B%20type%3A%20Boolean%2C%20value%3A%20true%20%7D%2C%0A%09%09%09%09notificationAnim%3A%20%7B%20type%3A%20String%2C%20value%3A%20'remove'%20%7D%2C%0A%0A%09%09%09%09errors%3A%20%20%20%20%20%20%20%20%20%20%7B%20type%3A%20Array%2C%20value%3A%20%5B%5D%20%7D%2C%20%0A%09%09%09%09version%3A%20%20%20%20%20%20%20%20%20%7B%20type%3A%20String%2C%20value%3A%20'1.1.0'%7D%2C%20%0A%09%20%20%09%09%7D%3B%0A%09%20%20%09%7D%0A%0A%09%09%2F%2F%20Polymer%20observers%20definition%0A%09%09static%20get%20observers()%20%7B%0A%20%20%09%09%09return%20%5B%0A%20%20%20%20%09%09%09'onPanelUpdate(hass%2C%20panel)'%2C%0A%20%20%20%20%09%09%09'updateTime(hass)'%0A%20%20%09%09%09%5D%0A%09%09%7D%0A%0A%09%09error(message)%7B%0A%09%09%09this.errors.push(message)%3B%0A%09%09%09console.log(message)%3B%0A%09%09%7D%0A%0A%09%09computeValue(entity)%7B%0A%09%09%20%20%20%09if%20(entity%20%3D%3D%20undefined)%7B%0A%09%09%09%20%20%20%20return%20false%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%20%20%20%20return%20entity%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09toggleCSS(ev)%7B%0A%09%09%09ev.stopPropagation()%3B%0A%09%09%09var%20css%20%3D%20ev.target.getAttribute('data-css')%3B%0A%09%09%09%09switch%20(css)%7B%0A%09%09%09%09case%20'sensors'%3A%20this.hideSensors%20%3D%20!this.hideSensors%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20'custom'%3A%20this.hideCustom%20%3D%20!this.hideCustom%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20'notification'%3A%20%0A%09%09%09%09%09if%20(this.notificationAnim%20%3D%3D%20%22zoomIn%22)%7B%0A%09%09%09%09%09%09this.notificationAnim%20%3D%20%22zoomOut%20remove%22%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09else%20this.notificationAnim%20%3D%20%22zoomIn%22%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09toggleSidebar()%7B%0A%09%09%09if%20(this.alarm)%20if(this.alarm.state%20!%3D%20'disarmed')%20this.fire('hass-close-menu')%3B%0A%09%09%09this.async(this.toggleSidebar%2C%20100)%3B%0A%09%09%7D%0A%0A%09%09monitorAlarm()%7B%0A%09%09%09var%20countdownTimerDiv%20%3D%20Polymer.dom(this.root).querySelector('%23countdown360_countdown')%3B%0A%09%09%09if%20(countdownTimerDiv)%20countdownTimerDiv.remove()%3B%0A%0A%09%09%09this.updateStyles(%7B'--countdown-timer-display'%3A%20'none'%7D)%3B%0A%09%09%09this.updateStyles(%7B'--time-display'%3A%20'initial'%7D)%3B%0A%09%09%09if%20(this.alarm.state%20%3D%3D%20'disarmed')%7B%0A%09%09%09%09if%20(this.attemptedArm%20%3D%3D%20true)%7B%20this.resetButtons()%3B%20%7D%0A%09%09%09%09this.updateStyles(%7B'--primary-color'%3A%20this.alarm.attributes.colours%5B%22disarmed%22%5D%7D)%3B%0A%09%09%09%7D%20else%20if%20(this.alarm.state%20%3D%3D%20'armed_away')%7B%0A%09%09%09%09this.updateStyles(%7B'--primary-color'%3A%20this.alarm.attributes.colours%5B%22armed_away%22%5D%7D)%3B%0A%09%09%09%7D%20else%20if%20(%20this.alarm.state%20%3D%3D%20'armed_home')%7B%0A%09%09%09%09this.updateStyles(%7B'--primary-color'%3A%20this.alarm.attributes.colours%5B%22armed_home%22%5D%7D)%3B%0A%09%09%09%7D%20else%20if%20(%20this.alarm.state%20%3D%3D%20'armed_perimeter')%7B%0A%09%09%20%20%20%20%09this.updateStyles(%7B'--primary-color'%3A%20this.alarm.attributes.colours%5B%22perimeter%22%5D%7D)%3B%20%2F%2FSORT%20THIS%20OUT%0A%09%09%09%7D%20else%20if%20(this.alarm.state%20%3D%3D%20'pending')%7B%0A%09%09%09%09this.updateStyles(%7B'--primary-color'%3A%20this.alarm.attributes.colours%5B%22pending%22%5D%7D)%3B%0A%09%09%09%09this.updateStyles(%7B'--countdown-timer-display'%3A%20'initial'%7D)%3B%0A%09%09%09%09this.updateStyles(%7B'--time-display'%3A%20'none'%7D)%3B%0A%09%09%09%09this.loadTimer(false%2C%20this.alarm.attributes.pending_time_by_state%5Bthis.alarm.attributes.arm_state%5D)%3B%0A%09%09%09%7D%20else%20if%20(this.alarm.state%20%3D%3D%20'warning')%7B%0A%09%09%09%09this.updateStyles(%7B'--primary-color'%3A%20this.alarm.attributes.colours%5B%22warning%22%5D%7D)%3B%0A%09%09%09%09this.updateStyles(%7B'--countdown-timer-display'%3A%20'initial'%7D)%3B%0A%09%09%09%09this.updateStyles(%7B'--time-display'%3A%20'none'%7D)%3B%0A%09%09%09%09this.loadTimer(false%2C%20this.alarm.attributes.pending_time_by_state%5Bthis.alarm.attributes.arm_state%5D)%3B%0A%09%09%09%7D%20else%20if%20(this.alarm.state%20%3D%3D%20'triggered')%7B%0A%09%09%09%09this.updateStyles(%7B'--primary-color'%3A%20this.alarm.attributes.colours%5B%22triggered%22%5D%7D)%3B%0A%09%09%09%7D%0A%09%09%09if%20(this.alarm.attributes.panel_locked%20%3D%3D%20true)%7B%0A%09%09%09%09console.log(%22Panel%20locked%22)%3B%0A%09%09%09%09this.updateStyles(%7B'--primary-color'%3A%20'grey'%7D)%3B%20%2F%2F%5BTODO%5D%20Implement%20panel%20locked%20colour%20-%20this.alarm.attributes.colours%5B%22panel_locked%7D)%3B%0A%09%09%09%09this.updateStyles(%7B'--countdown-timer-display'%3A%20'initial'%7D)%3B%0A%09%09%09%09this.updateStyles(%7B'--time-display'%3A%20'none'%7D)%3B%0A%09%09%09%09this.loadTimer(true%2C%20this.alarm.attributes.passcode_attempt_timeout)%3B%0A%09%09%09%09this.panel_locked%20%3D%20true%3B%0A%09%09%09%7D%0A%09%09%09else%20this.panel_locked%20%3D%20false%3B%0A%09%09%7D%0A%0A%09%09getClass(cssClass)%7B%0A%09%09%09return%20cssClass%20%3F%20%22slideup%22%20%3A%20%22slidedown%22%3B%0A%09%09%7D%0A%0A%09%09loadTimer(locked%2C%20time)%7B%0A%09%09%09var%20startColour%20%3D%20'%238ac575'%3B%0A%09%09%09var%20middleColour%20%3D%20'orange'%3B%0A%09%09%09var%20endColour%20%3D%20'red'%0A%0A%09%09%09if%20(locked%20%3D%3D%20true)%20startColour%20%3D%20middleColour%20%3D%20endColour%20%3D%20'red'%3B%0A%0A%09%09%09var%20countdownDiv%20%3D%20Polymer.dom(this.root).querySelector('%23countdown')%3B%0A%09%09%09%24(countdownDiv).unbind().removeData()%3B%0A%09%09%09var%20countdown%20%3D%20%24(countdownDiv).countdown360(%0A%09%09%09%7B%0A%09%09%09%09radius%20%20%20%20%20%20%3A%2050%2C%0A%09%09%09%09fontColor%20%20%20%3A%20'%23FFFFFF'%2C%0A%09%09%09%09autostart%20%20%20%3A%20false%2C%0A%09%09%09%09label%20%20%20%20%20%20%20%3A%20false%2C%0A%09%09%09%09smooth%20%20%20%20%20%20%3A%20true%2C%0A%09%09%09%09seconds%20%20%20%20%20%3A%20time%2C%0A%09%09%09%09fillStyle_0to50%3A%20startColour%2C%0A%09%09%09%09fillStyle_50to75%3A%20middleColour%2C%0A%09%09%09%09fillStyle_75to100%3A%20endColour%0A%09%09%09%7D)%3B%0A%09%09%09countdown.start()%3B%0A%09%09%7D%0A%0A%09%20%20%20%20getWeather()%7B%0A%09%09%09this.weather%20%3D%20this.hass.states%5B'sensor.weather_summary'%5D%3B%0A%09%09%09%2F%2Fif%20the%20above%20sensor%20can't%20be%20found%20then%20try%20dark_sky%0A%09%09%09if%20(this.weather%20%3D%3D%20null)%7B%0A%09%09%09%09this.weather%20%3D%20this.hass.states%5B'sensor.dark_sky_summary'%5D%3B%0A%09%09%09%7D%20%0A%09%09%09%2F%2FNo%20weather%20entity%20found%20display%20error%0A%09%09%09if%20(this.weather%20%3D%3D%20null)%7B%20%0A%09%09%09%09this.error(%22Weather%20entity%20not%20found%20in%20HA%22)%3B%0A%09%09%09%7D%20%0A%0A%09%09%09%2F%2Fset%20weather%20temperature%0A%09%09%09if%20(this.hass.states%5B'sensor.weather_temperature'%5D)%7B%0A%09%09%09%09this.temp%20%3D%20Math.ceil((this.hass.states%5B'sensor.weather_temperature'%5D).state)%3B%0A%09%09%09%7D%0A%09%09%09%2F%2Fif%20the%20above%20sensor%20is%20not%20found%20look%20for%20the%20dark%20sky%20one%0A%09%09%09else%20if%20(this.hass.states%5B'sensor.dark_sky_temperature'%5D)%7B%0A%09%09%09%09this.temp%20%3D%20Math.ceil((this.hass.states%5B'sensor.dark_sky_temperature'%5D).state)%3B%0A%09%09%09%7D%0A%09%09%09%2F%2Fif%20either%20isn't%20found%20show%20an%20error%0A%09%09%09else%20%7B%0A%09%09%09%09this.error(%22Weather%20temperature%20entity%20not%20found%20in%20HA%22)%3B%0A%09%09%09%7D%0A%09%20%20%20%20%7D%0A%0A%09%09updateTime(hass)%7B%0A%09%09%09if%20(this.alarm.attributes.clock)%7B%0A%09%09%09%09this.time%20%3D%20this.hass.states%5B'sensor.time'%5D%3B%0A%0A%09%09%09%09if%20(this.time%20%3D%3D%20null)%7B%0A%09%09%09%09%09this.error(%22Time%20Sensor%20(sensor.time)%20not%20found%20in%20HA%22)%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09isdisarmed(alarm)%7B%20%0A%09%09%09return%20alarm.state%20%3D%3D%20%22disarmed%22%3B%20%0A%09%09%7D%0A%09%09%20%20%20%20%0A%09%20%20%20%20isperimeter(alarm)%7B%20%0A%09%20%20%20%20%09return%20alarm.state%20%3D%3D%20%22armed_perimeter%22%3B%20%0A%09%20%20%20%20%7D%0A%09%09%20%20%20%0A%09%20%20%20%20issecureall()%7B%20%0A%09%20%20%20%20%09return%20this.opensensors(alarm%2C%20all).length%20%3D%3D%200%3B%20%0A%09%20%20%20%20%7D%0A%0A%09%09opensensors(alarm%2C%20all)%20%20%20%7B%20%0A%09%09%09var%20ret%20%3D%20%5B%5D%3B%0A%09%09%09if%20(all%20%3D%3D%20false)%7B%0A%09%09%09%09return%20false%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09ret%20%3D%20all.filter(function%20(e)%7B%20return%20alarm.attributes.supported_statuses_on.indexOf(e.state.toLowerCase())%20%3E%20-1%3B%20%7D)%3B%20%0A%09%09%09%09this.opencount%20%3D%20ret.length%3B%0A%09%09%09%09return%20ret%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09closedsensors(alarm%2C%20all)%20%20%20%7B%0A%09%09%09var%20ret%20%3D%20%5B%5D%3B%0A%09%09%09if%20(all%20%3D%3D%20false)%7B%0A%09%09%09%09return%20false%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09ret%20%3D%20all.filter(function%20(e)%7B%20return%20alarm.attributes.supported_statuses_off.indexOf(e.state.toLowerCase())%20%3E%20-1%3B%20%7D)%3B%0A%09%09%09%09return%20ret%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09computeSensors(hass%2C%20ids)%7B%0A%09%09%09if%20(ids%20%3D%3D%20undefined)%7B%0A%09%09%09%2F%2F%20Control%20the%20exception%20when%20this.alarm%20is%20not%20ready%0A%09%09%09%09return%20false%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09return%20ids.map(function%20(key)%7B%20return%20hass.states%5Bkey%5D%3B%20%7D).filter(function%20(e)%7B%20return%20e%20!%3D%20undefined%3B%20%7D)%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09computeArray(array)%7B%0A%09%09%09if%20(array.length%20%3E%200)%7B%0A%09%09%09%09return%20true%3B%0A%09%09%09%7D%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%0A%09%09computeIcon(state)%7B%0A%09%09%09switch%20(state)%7B%0A%09%09%09%09case%20'disarmed'%3A%20%20%20%20%20%20%20%20return%20'mdi%3Ashield-outline'%3B%0A%09%09%09%09case%20'armed_away'%3A%20%20%20%20%20%20return%20'mdi%3Asecurity-home'%3B%0A%09%09%09%09case%20'armed_home'%3A%20%20%20%20%20%20return%20'mdi%3Asecurity-home'%3B%0A%09%09%09%09case%20'pending'%3A%20%20%20%20%20%20%20%20%20return%20'mdi%3Awalk'%3B%0A%09%09%09%09case%20'warning'%3A%20%20%20%20%20%20%20%20%20return%20'mdi%3Arun'%3B%0A%09%09%09%09case%20'triggered'%3A%20%20%20%20%20%20%20return%20'mdi%3Aalert-circle'%3B%0A%09%09%09%09case%20'armed_perimeter'%3A%20return%20'mdi%3Asecurity-home'%3B%0A%09%09%09%7D%0A%09%09%09return%20'mdi%3Ahelp'%3B%0A%09%09%7D%0A%0A%09%09computeLabel(state)%7B%0A%09%09%09switch%20(state)%7B%0A%09%09%09%09case%20'disarmed'%3A%20%20%20%09%20return%20'disarmed'%3B%0A%09%09%09%09case%20'armed_away'%3A%20%09%20return%20'away'%3B%0A%09%09%09%09case%20'armed_home'%3A%20%09%20return%20'home'%3B%0A%09%09%09%09case%20'pending'%3A%20%20%20%20%09%20return%20'leave'%3B%0A%09%09%09%09case%20'warning'%3A%20%20%20%20%09%20return%20'warning'%3B%0A%09%09%09%09case%20'triggered'%3A%20%20%09%20return%20'triggered'%3B%0A%09%09%09%09case%20'armed_perimeter'%3A%20return%20'perimeter'%3B%0A%09%09%09%7D%0A%09%09%09return%20state%3B%0A%09%09%7D%0A%0A%09%09callcode(ev)%7B%0A%09%09%09ev.stopPropagation()%3B%0A%09%09%09var%20digit%20%3D%20ev.target.getAttribute('data-digit')%3B%0A%09%09%09this.code%20%3D%20this.code%20%2B%20digit%3B%0A%09%09%09var%20display_digit%20%3D%20digit%3B%0A%09%09%09if%20(this.alarm.attributes.hide_passcode)%7B%0A%09%09%09%20%20display_digit%20%3D%20'*'%3B%0A%09%09%09%7D%0A%09%09%09this.display_code%20%3D%20this.display_code%20%2B%20display_digit%3B%0A%09%09%7D%0A%0A%09%09callclearcode(ev)%7B%0A%09%09%09ev.stopPropagation()%3B%0A%09%09%09this.code%20%3D%20''%3B%0A%09%09%09this.display_code%20%3D%20''%3B%0A%09%09%7D%0A%0A%09%09callService(ev)%7B%0A%09%09%09ev.stopPropagation()%3B%0A%09%09%09var%20call%20%3D%20ev.target.getAttribute('data-call')%3B%0A%09%09%09if%20(call%20%3D%3D%20'cancel')%7B%20%2F%2Fcancel%20alarm%20set%20and%20return%20page%20to%20default%20settings%0A%09%09%09%09this.resetButtons()%3B%0A%09%09%09%7D%20else%20if%20(ev.target.getAttribute('data-override'))%7B%20%2F%2FOverride%20of%20open%20sensors%20has%20been%20pressed%20so%20activate%20alarm%0A%09%09%09%09this.hass.callService('alarm_control_panel'%2C%20call%2C%20%7B'entity_id'%3A%20this.alarm.entityId%2C%20'code'%3A%20this.code%7D)%3B%0A%09%09%09%7D%20else%20if%20((call%20%3D%3D%20'alarm_arm_home'%20%7C%7C%20call%20%3D%3D%20'alarm_arm_away'%20%7C%7C%20call%20%3D%3D%20'alarm_arm_night')%20%26%26%20this.checkOpenSensors(call))%7B%20%2F%2FCheck%20if%20trying%20to%20activate%20home%20with%20open%20sensors.%20If%20so%20ping%20the%20warning%20message%0A%09%09%09%09console.log('WARNING%20open%20sensors')%3B%0A%09%09%09%7D%20else%20%7B%20%2F%2FNo%20open%20sensors%20or%20another%20service%20call%0A%09%09%09%09this.hass.callService('alarm_control_panel'%2C%20call%2C%20%7B'entity_id'%3A%20this.alarm.entityId%2C%20'code'%3A%20this.code%20%7D)%3B%0A%09%09%09%09this.code%20%3D%20''%3B%0A%09%09%09%09this.display_code%20%3D%20''%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09checkOpenSensors(call)%7B%0A%09%09%09if%20(this.opencount%20%3D%3D%200)%20return%20false%3B%20%2F%2Fcheck%20to%20see%20how%20many%20open%20sensors%20there%20are%2C%20if%20none%20arm%20alarm%0A%0A%09%09%09for%20(var%20sensor%20in%20this.allsensors)%7B%20%2F%2Fcheck%20to%20see%20if%20the%20open%20sensor%20is%20one%20to%20ignore%2C%20if%20so%20arm%20alarm%0A%09%09%09%09%2F%2Fis%20it%20open%3F%0A%09%09%09%09if%20(%5B'on'%2C%20'open'%2C%20'true'%2C%20'detected'%2C%20'unlocked'%5D.indexOf(this.allsensors%5Bsensor%5D.state.toLowerCase())%20%3E%20-1)%7B%20%2F%2Fyes%0A%09%09%09%09%2F%2Fis%20it%20in%20the%20override%20list%3F%0A%09%09%09%09%09if%20(this.ovverideSensors%20%3D%3D%20null%20%7C%7C%20this.overrideSensors.indexOf(this.allsensors%5Bsensor%5D)%20%3D%3D%20-1)%7B%20%2F%2FNo%3A%20return%20so%20display%20message%0A%09%09%09%09%09%09this.attemptedArm%20%3D%20true%3B%20%2F%2Fdisplay%20the%20warning%20message%20and%20shake%0A%0A%09%09%09%09%09%09var%20btnArmHome%20%20%20%20%20%20%3D%20Polymer.dom(this.root).querySelector('%23arm-home')%3B%0A%09%09%09%09%09%09var%20btnArmAway%20%20%20%20%20%20%3D%20Polymer.dom(this.root).querySelector('%23arm-away')%3B%0A%0A%09%09%09%09%09%09if%20(this.alarm.attributes.perimeter_mode)%7B%0A%09%09%09%09%09%09%09var%20btnArmPerimeter%20%3D%20Polymer.dom(this.root).querySelector('%23arm-perimeter')%3B%0A%09%09%09%09%09%09%09btnArmPerimeter.classList.add('remove')%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09btnArmHome.classList.add('big')%3B%0A%09%09%09%09%09%09btnArmAway.classList.add('little')%3B%0A%0A%09%09%09%09%09%09this.override%20%3D%20document.createAttribute(%22data-override%22)%3B%0A%09%09%09%09%09%09this.override.value%20%3D%20%22true%22%3B%0A%09%09%09%09%09%09btnArmHome.setAttributeNode(this.override)%3B%0A%0A%09%09%09%09%09%09var%20arm_mode%20%3D%20document.createAttribute(%22data-call%22)%3B%0A%09%09%09%09%09%09arm_mode.value%20%3D%20call%3B%0A%09%09%09%09%09%09btnArmHome.setAttributeNode(arm_mode)%3B%0A%0A%09%09%09%09%09%09var%20arm_mode2%20%3D%20document.createAttribute(%22data-call%22)%3B%0A%09%09%09%09%09%09arm_mode2.value%20%3D%20'cancel'%3B%0A%09%09%09%09%09%09btnArmAway.setAttributeNode(arm_mode2)%3B%0A%09%09%09%09%09%09btnArmHome.innerHTML%20%3D%20'Override%20Sensors%20and%20Arm%20Alarm'%3B%0A%09%09%09%09%09%09btnArmAway.innerHTML%20%3D%20'Cancel%20Arm'%3B%0A%0A%09%09%09%09%09%09var%20pageContent%20%3D%20Polymer.dom(this.root).querySelector('.content')%3B%0A%09%09%09%09%09%09pageContent.classList.add('shake')%3B%0A%0A%09%09%09%09%09%09return%20true%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%20%20%20%20%20%20%20%20%20%20%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09resetButtons()%7B%0A%09%09%09this.attemptedArm%20%3D%20false%3B%0A%0A%09%09%09var%20pageContent%20%3D%20Polymer.dom(this.root).querySelector('.content')%3B%0A%09%09%09pageContent.classList.remove('shake')%3B%0A%0A%09%09%09var%20btnArmHome%20%20%20%20%20%20%3D%20Polymer.dom(this.root).querySelector('%23arm-home')%3B%0A%09%09%09var%20btnArmAway%20%20%20%20%20%20%3D%20Polymer.dom(this.root).querySelector('%23arm-away')%3B%0A%09%09%09if%20(this.alarm.attributes.perimeter_mode)%7B%0A%09%09%09%09var%20btnArmPerimeter%20%3D%20Polymer.dom(this.root).querySelector('%23arm-perimeter')%3B%0A%09%09%09%09btnArmPerimeter.classList.remove('remove')%3B%0A%09%09%09%7D%0A%09%09%09btnArmHome.classList.remove('big')%3B%0A%09%09%09btnArmAway.classList.remove('little')%3B%0A%0A%09%09%09%2F%2Fvar%20override%20%3D%20document.createAttribute(%22data-override%22)%3B%0A%09%09%09btnArmHome.removeAttributeNode(this.override)%3B%0A%0A%09%09%09var%20arm_mode%20%3D%20document.createAttribute(%22data-call%22)%3B%0A%09%09%09arm_mode.value%20%3D%20'alarm_arm_home'%3B%0A%09%09%09btnArmHome.setAttributeNode(arm_mode)%3B%0A%0A%09%09%09var%20arm_mode2%20%3D%20document.createAttribute(%22data-call%22)%3B%0A%09%09%09arm_mode2.value%20%3D%20'alarm_arm_away'%3B%0A%09%09%09btnArmAway.setAttributeNode(arm_mode2)%3B%0A%0A%09%09%09btnArmHome.innerHTML%20%3D%20%22%3Ciron-icon%20icon%3D'mdi%3Alock-outline'%3E%3C%2Firon-icon%3E%26nbsp%3BHome%20Mode%22%3B%0A%09%09%09btnArmAway.innerHTML%20%3D%20%22%3Ciron-icon%20icon%3D'mdi%3Alock'%3E%3C%2Firon-icon%3E%26nbsp%3BAway%20Mode%22%3B%0A%09%09%7D%0A%0A%09%09entityTapped(ev)%7B%0A%09%09%09ev.stopPropagation()%3B%0A%09%09%09var%20entityId%20%3D%20ev.target.getAttribute('data-entity')%3B%0A%09%09%09this.fire('hass-more-info'%2C%20%7B%20entityId%3A%20entityId%20%7D)%3B%0A%09%09%7D%0A%0A%09%09%2F%2F%20Observer%3A%20polymer%20gaurantees%20that%20this%20won't%20be%20called%20util%20hass%20and%20panel%20are%20both%20defined%0A%09%09onPanelUpdate(hass%2C%20panel)%7B%0A%09%09%09this.alarm%20%3D%20hass.states%5Bpanel.config.alarmid%5D%3B%0A%09%09%7D%0A%09%7D%0A%09customElements.define(HaPanelAlarm.is%2C%20HaPanelAlarm)%3B%0A%0A%2F%2F%23%20sourceURL%3Dhttp%3A%2F%2Fapt.codes%3A8123%2Ffrontend%2Fpanels%2Falarm-89a9dcd19218929b09433a87851823b2.html.js%0A:2:46 TypeError: undefined is not an object (evaluating 'window.hassMixins.LocalizeMixin')
08:33 components/system_log/__init__.py (ERROR)
Safari showing this error in console:
[Error] TypeError: undefined is not an object (evaluating 'window.hassMixins.LocalizeMixin')
Global Code (data:text/javascript;charset=utf-8,%0A…%0A:2)
I could have sworn this was happening to me before .70. Maybe I updated to the beta without realizing. I’ll probably roll back to .69 until a fix is made. Nothing in .70 is more appealing to me this far