ptst / o365-homeassistant Goto Github PK
View Code? Open in Web Editor NEWOffice 365 integration for Home Assistant
License: MIT License
Office 365 integration for Home Assistant
License: MIT License
After updating to 2.16 I get the following below.
I deleted the cache token, and the calendar yaml only to have the same error after re-configuring.
Rolling back to 2.15 fixes the issue and allows the component to work, but I'd like to be able to update.
Logger: homeassistant.components.calendar
Source: custom_components/o365/calendar.py:130
Integration: Calendar (documentation, issues)
First occurred: 8:40:17 AM (1 occurrences)
Last logged: 8:40:17 AM
o365: Error on device update!
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 322, in _async_add_entity
await entity.async_device_update(warning=False)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 470, in async_device_update
await self.async_update()
File "/config/custom_components/o365/calendar.py", line 130, in async_update
events = list(await hass.async_add_executor_job(self.data.o365_get_events,
NameError: name 'hass' is not defined
Describe the bug
The integration is setup and access is granted. But when restarting HASS I get the below error:
office365calendar: Error on device update!
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 299, in _async_add_entity
await entity.async_device_update(warning=False)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 461, in async_device_update
await self.hass.async_add_executor_job(self.update)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/office365calendar/sensor.py", line 248, in update
self._state = self.device_state_attributes["event_active"]
File "/config/custom_components/office365calendar/sensor.py", line 149, in device_state_attributes
limit=999, query=query, include_recurring=True
File "/usr/local/lib/python3.7/site-packages/O365/calendar.py", line 1680, in <genexpr>
for event in data.get('value', []))
File "/usr/local/lib/python3.7/site-packages/O365/calendar.py", line 873, in __init__
cc('recurrence'), None))
File "/usr/local/lib/python3.7/site-packages/O365/calendar.py", line 125, in __init__
get_windows_tz(self.protocol.timezone))
File "/usr/local/lib/python3.7/site-packages/O365/utils/windows_tz.py", line 642, in get_windows_tz
"Can't find Iana TimeZone " + iana_tz.zone)
pytz.exceptions.UnknownTimeZoneError: "Can't find Iana TimeZone local"
Installation method (please select one):
Additional context
Add any other context about the problem here.
Describe the bug
Since 0.105.0 only the first calendar in the list is loading
To Reproduce
Steps to reproduce the behavior:
Expected behavior
All calendars should be loaded
Installation method (please select one):
Additional context
These are the attributes since 0.105.0
data: [object Object],[object Object]
calendar_id: AAMkADZlYjQ4YzVjLTAyYjQtNDRlYi05MTMwLWQzNDMwY2NmMDQ3MgBGAAAAAACMxiT4r3KUTLubbwPEBuciBwDE2oNYc5kjT7TXqMpClzJTAAAAVwjKAAAegiUP3rX5RqIMKiubJHzGACIYFgICAAA=
event_active: false
friendly_name: Events
Just updated to 0.109 and found this issue in my log
Detected I/O inside the event loop. This is causing stability issues. Please report issue to the custom component author for o365 doing I/O at custom_components/o365/calendar.py, line 158: limit=self.limit, query=query, include_recurring=True
In the release notes of 0.109 (as well as the log) HA team asks any instance of this log entry be reported as an issue on the component.
Hi i got the link account in notifications buth when i try this happens
invalid_request: The provided value for the input parameter 'redirect_uri' is not valid. The expected value is a URI which matches a redirect URI registered for this client application.
the uri is the uri of my hassio server, portforwarding is set, any ideas?
Describe the bug
The configurator notification seems to show up every time I restart HA. It looks like the token JSON is being saved inside the O365 folder but when I try and load up entity no calendar information is available. Once I go through the link account flow the calendar information is there as expected until I restart HA again.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
The link should persist between HA restarts
Screenshots
N/A
Installation method (please select one):
Additional context
Add any other context about the problem here.
Hiya there,
Thanks very much for this!
I was wondering if you could add links to the attachment contained within an e-mail? Unfortunately I have a CCTV AI system (Sentry) that can only provide images via e-mail, so extracting those URLs would be very useful!
I have the following configuration:
- device_id: WorkFromHome end_offset: 24 name: Work From Home start_offset: -24 track: true search: "WFH"
Today is may 5th, at 22:56 EDT
I've added the following _LOGGER calls to calendar.py
def o365_get_events(self, start_date, end_date): query = self.calendar.new_query("start").greater_equal(start_date) query.chain("and").on_attribute("end").less_equal(end_date) if self.search is not None: query.chain("and").on_attribute("subject").contains(self.search) _LOGGER.warning("HERE") _LOGGER.warning(query)
The results of the _Logger calls are as follows:
2020-05-05 22:56:33 WARNING (MainThread) [custom_components.o365.calendar] HERE
2020-05-05 22:56:33 WARNING (MainThread) [custom_components.o365.calendar] Filter: start/dateTime ge '2020-05-05T04:00:00+00:00' and end/dateTime le '2020-05-06T04:00:00+00:00' and contains(subject, 'WFH')
Start and end times are still midnight even though they should be May 4th at 22:56 and May 6th at 22:56
I believe the issue is in the below snippet of code, and I don't believe the :
@Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): results = self.o365_get_events( dt.start_of_local_day(), dt.start_of_local_day() + timedelta(days=1) )
However, I haven't changed it as I'm not a 100% sure, and don't know if it will affect other parts of the component. I do have a WFH event in my calendar, recurring each day so it should be finding the event.
I also wonder if this is correct:
async def async_update(self): self.data.update() event = copy.deepcopy(self.data.event) if event is None: self._event = event return
This returns no event, then exits the method and doesn't attempt to the rest of the method.
I'm not a HA developer (yet) and as such don't fully understand everything going on here, but it does appear to me that the only time my search phrase is looked for my offsets are ignored.
Let me know if I can provide anything else you may need to help resolve this issue.
Hi, I'm trying to see in my GUI a list of all calendar event. ( at least the next one )
I know for sure that the title is able summary but I don't know how to extract that info
When I try to Push Link =365 account below I get the request to that my app has to be a Multi-tenant application.
I have made my App. multi-tenant but I still get this error:
But you see that my app. is now multi-tenant:
NB: Sorry I don't know if this is a Bug - but how can I mark this as "not a Bug"?
I'm having the same problem as #4 . After installing from HACS, I get a config validating notification when trying to restart HA, and the following in the logs:
2020-01-11 12:36:51 ERROR (MainThread) [homeassistant.components.hassio] Platform error sensor.office365calendar - No module named 'O365'
(Running hass.io in Docker.)
Was very pleased to get this integration up and running - with the new 2FA methods using the IMAP email sensor is not an option for me, and this one works so well.
I was wondering how complex it would be to include the orderBy clause in the query sensor configuration? I'm not a python coder, but it looks like this is implemented in the python-o365 package so hopefully a minor change on this end.
My use case is I've got a flow in Node red that triggers on boot or when a new email matching a subject arrives. Extracting a word from the body of the email I can then set a binary sensor to the appropriate state. I only want to return a single email (max_items: 1), and I don't care if it's read or unread (again easy to do with the options). However, I've not got a choice over which order it returns them in, and by default it appears to be returning the oldest email first when I really need the newest.
I can do a temporary workaround by returning more items and then using a function to find the newest, but would be much cleaner if I could use the full power of the odata query parameters to only return the email of interest.
Reminder to self
When I want to parse the location data from the JSON value, HA returns nothing.
This might be due to bad JSON formatting from the sensor?
When I use the following template:
{{ states.sensor.my_calendar.attributes.data }}
HA returns the following (as expected):
[ { "subject": "The Subject", "body": "", "location": "The location", "categories": [], "sensitivity": "Normal", "show_as": "Busy", "is_all_day": false, "attendees": [ "[email protected]" ], "start": "2020-01-14T08:30:00+0100", "end": "2020-01-14T18:00:00+0100", "event_active": false } ]
Now I want the first value, so the template becomes:
{{ states.sensor.my_calendar.attributes.data[0] }}
HA returns only the first bracket ( [ ). It seems that the carriage return is causing this.
Other sensors, that don't have a CR between [ and { work fine.
Getting the following error:
2020-01-14 15:58:13 ERROR (SyncWorker_7) [O365.connection] Client Error: 400 Client Error: Bad Request for url: https://graph.microsoft.com/v1.0/me/calendar | Error Message: Error authenticating with resource
2020-01-14 15:58:13 ERROR (MainThread) [homeassistant.components.sensor] office365calendar: Error on device update!
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 292, in _async_add_entity
await entity.async_device_update(warning=False)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 461, in async_device_update
await self.hass.async_add_executor_job(self.update)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/office365calendar/sensor.py", line 248, in update
self._state = self.device_state_attributes["event_active"]
File "/config/custom_components/office365calendar/sensor.py", line 142, in device_state_attributes
calendar = schedule.get_default_calendar()
File "/usr/local/lib/python3.7/site-packages/O365/calendar.py", line 1888, in get_default_calendar
response = self.con.get(url)
File "/usr/local/lib/python3.7/site-packages/O365/connection.py", line 776, in get
return self.oauth_request(url, 'get', params=params, **kwargs)
File "/usr/local/lib/python3.7/site-packages/O365/connection.py", line 765, in oauth_request
return self._internal_request(self.session, url, method, **kwargs)
File "/usr/local/lib/python3.7/site-packages/O365/connection.py", line 727, in _internal_request
raise HTTPError('{} | Error Message: {}'.format(e.args[0], error_message), response=response) from None
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://graph.microsoft.com/v1.0/me/calendar | Error Message: Error authenticating with resource
Tried both with default and alt auth...
Redirect URI for default auth is:
https://XXXX.XXXX.com:8123/api/o365
Installed with HACS
After start-up on 0.112 I saw this message in my logs:
Detected use of deprecated `base_url` property, use `homeassistant.helpers.network.get_url` method instead. Please report issue to the custom component author for o365 using this method at custom_components/o365/__init__.py, line 40: callback_url = f"{hass.config.api.base_url}{AUTH_CALLBACK_PATH}"
Reporting it as an issue as requested
2020-05-09 08:51:45 WARNING (MainThread) [homeassistant.util.async_] Detected I/O inside the event loop. This is causing stability issues. Please report issue to the custom component author for o365 doing I/O at custom_components/o365/calendar.py, line 158: limit=self.limit, query=query, include_recurring=True
Got this error like 1000 of times and hassio works unstbale because of this
how to fix?
First I would like to thank you for the work done. This might be the solution I have been looking for. :) The manual installation went fine... but I'm not sure about the configuration of this thing.
I travel a lot for work and I want to use my o365 calendar entries as a base for setting travel_mode in HA. In Outlook I always add an event with the subject "Hotel" at 18:00 to 18:00, same day.
What I want is for the o365 Integration pick this up and set the sensor to on thus letting HA know that I'm not coming home. Would work nice in a bayesian sensor.
This is what I have in my o365_calendar_.yaml. Is this file to be stored in the same folder as configuration.yaml btw?
`- cal_id: xxxx
entities:
cal_id... Where to I find this o365 unique generated ID?
start_offset and end_offset... I can't wrap my head around those.
Under Entities in HA I found several calendars, my calendars and shared. I only want the one calendar I define in o365_calendar.yaml. I understand that I have not configured it correctly. Will the calendars I do not set cal_id be removed automatically?
This is what I have in configuration.yaml. I have no need for e-mail, only calendars.
o365: client_secret: "removed" client_id: "removed"
Did I remove too much or is this OK?
Thank you in advance.
Let me know if I should break these into different requests.
Sensor for next event: I'd like to be able to get the next event, ignoring the current one if there is currently an event.
Allow offset to be minutes: Add a flag H or M to indicate that the offset is Minutes or Hours, default Hours
Ignore OOO: I have some blocked time in my work calendar marked as OOO to prevent being scheduled for meetings, would like to use this value in conjunction with the above get next event
Ignore Free Events: Same as OOO, but a couple things in my calendar I check for with HA just to denote if I'm working that day
Is it possible to add the service: 'update calendar data'.
When calendar data is changed, I would like to have the possibility to call this service in HA to update the data.
Also after a reboot of HA, it takes some time to update the calendars automatically.
The compiler is missing the dependencies as stated in the manifest.json.
Where can I find these / install them?
(Running on HASS.IO)
Is your feature request related to a problem? Please describe.
Currently you have to create a multi-tenant application in azure, although the tutorial is kind of suggesting it's optional. If you don't need personal accounts it's better to use a single tenant application.
Describe the solution you'd like
Add a optional config parameter for tenant_id and pass it to the Account constructor
account = Account(credentials, token_backend=TOKEN_BACKEND, tenant_id=config_tenant_id)
Found this in the logs thats causing a total freeze of my hassio server
Updating o365 calendar took longer than the scheduled update interval 0:01:00
4:37:19 AM โ Calendar (WARNING) - message first occurred at 3:18:01 AM and shows up 7779 times
Hi Patrick,
my issue as mentioned in the community:
I installed according the instructions. I get the request to verify (capture_1)
When I click I get to fill out my username and then I get an error (cap_2)
See setting in Azure. (cap_3 and cap_4)
Also attached my log file.
I really would like this to work so any help is appreciated!
Thank you.
Eric
I noticed, that when I hardcode my external URL from Nabu Casa into the component, I can use the standard auth flow - the same when I set my external URL as internal URL. Without that I could only use the alternative auth flow.
It would be nice to either have a checkbox to use the external URL or an input field for a custom URL to use (or maybe there's even a better solution).
Since I've got the component working and all is looking good, I would like to do some feature requests:
Component only looks 24Hrs ahead, possibility to change this in the configuration.yaml
Maybe do something with start/end date/time?
Possibility to create multiple sensors, each for a (shared) calendar
Is your feature request related to a problem? Please describe.
The new overhaul of the integration is great and I can already receive the events.
To use existing lovelace calendar cards, the calendar events have to be returned in a format which is the same for all home assistant calendars. Those are defined in the CalendarEventDevice (
https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/calendar/__init__.py)
I would assume that's also necessary for the component to be accepted as official hass component (but that's just my opinion).
It seems like all the methods are already existing in your component, they just need to be wired up and the event converted to the standard hass event format.
For implementation hints you could also check the caldav component:
https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/caldav/calendar.py
This may seems stupid
buth the only thing i get from my calendars entitys is false /true
how do i actually get "data" from the calendar into the lovelace?
The integration stopped working for me.
I can't pinpoint exactly when, but here is the scenario:
Client ID & secret are correct;
Application is authorized;
o365_calendars.yaml is being (re-)created;
Requested calendars are being registered in HA;
No data is retrieved from office 365 calendar (data attribute remains empty), even there is data present.
This last step is where it goes wrong.
I have 3 calendars listed, all filled with data the next 24hrs, but none is showing any events.
offset_reached: false
data:
friendly_name: myCalendar
- cal_id: !secret
entities:
- device_id: myCalendar
end_offset: 24
name: My Calendar
start_offset: 0
track: true
Home Assistant Version: 0.109.6
o365 version: v2.1.7
System | HassOS 3.13
Feature request: ability to configure and link multiple accounts - e.g. corporate and private o365 account. Scanning the code briefly, this likely requires some significant refactoring.
If a calendar event is marked as 'all day' within Office 365, this is not correctly translated to the all_day
attribute on the corresponding calendar
entity.
The correct value can be seen within the calendar
's data
attribute, however. Where is_all_day
is correctly marked as true
(see attached image).
Not sure if there is some bug because I also tagged the event as "Out of Office" โ just worth noting for debugging.
Describe the bug
It looks like during the auth flow the account parameter isn't being passed in which is causing validation errors.
To Reproduce
Steps to reproduce the behavior:
1 Setup the component per the instructions
2. Click Link Account
3. After coming back from the Account Linking flow I get redirected to https://[my domain]/api/o365?code=[a guid]&state=[alpha numeric string]
The page conents shows "500 Internal Server Error Server got itself into trouble"
4. Going to the logs I get the following error
Log Details (ERROR)
Mon Feb 03 2020 14:34:47 GMT-0600 (Central Standard Time)
Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/aiohttp/web_protocol.py", line 418, in start
resp = await task
File "/usr/local/lib/python3.7/site-packages/aiohttp/web_app.py", line 458, in _handle
resp = await handler(request)
File "/usr/local/lib/python3.7/site-packages/aiohttp/web_middlewares.py", line 119, in impl
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/real_ip.py", line 39, in real_ip_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 72, in ban_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 135, in auth_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 120, in handle
result = handler(request, **request.match_info)
File "/config/custom_components/o365/__init__.py", line 142, in get
do_setup(self._hass, self.config)
TypeError: do_setup() missing 1 required positional argument: 'account'
Expected behavior
I get a 200 response or a happy face and the logs are free of errors
Installation method (please select one):
Additional context
Not sure if this is related to issue 61, but since it broke today I'm entering a new issue.
I have the following configuration, which was working fine for last week or so. Event is set up recurring at 6:30-7:30am
Today I have an all day event, and with that there the WFH event wasn't found. Actually all my events aren't found, Both of the templates below always return values for the all day event.
device_id: WorkFromHome
end_offset: 24
name: Work From Home
start_offset: -24
track: true
search: "WFH"
platform: template
sensors:
timetonextmeeting:
friendly_name: Time to next meeting
entity_id: sensor.time
value_template: >-
{% if states.calendar.work.attributes.start_time %}
{{((as_timestamp(states.calendar.work.attributes.start_time) - as_timestamp(now())) / 60) | default(99) | int }}
{%- else -%}
0
{%- endif %}
titlenextmeeting:
friendly_name: Next Meeting Title
entity_id: sensor.time
value_template: >-
{% if states.calendar.work.attributes.start_time %}
{{states.calendar.work.attributes.message}}
{%- else -%}
0
{%- endif %}
I'm seeing this message in my log from the o365 component:
Configuring calendars trough configuration.yaml has been deprecated, and will be removed in a future release. Please see the docs for how to proceed
First of all, I looked in the docs and there doesn't seem to be anything that explains what exactly was deprecated and what you should do. Since you're saying to go to the docs to figure out how to proceed please put something in the docs that specifically references this and tells me how to proceed.
Second, I think I figured out what you mean by this although I'm not totally sure. I noticed that there's now an o365_calendars.yaml
file in my config that I don't remember adding before. So I believe what this is telling me is to remove this part in my configuration.yaml
:
o365:
client_secret: "xx.xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client_id: "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
- calendars:
- - name: Mike work calendar
- start_offset: -8
- end_offset: 336
- calendar_name: default_calendar
If so, please remove that part from your example for sure.
Final point, I'm not sure deprecation is the right word here. If you notice in my configuration above I had one calendar listed that I called 'Mike work calendar'. At the time I wrote that this component generated one calendar entity with the id calendar.mike_work_calendar
that shows the list of events from 8 hours ago until 14 days from now. But thats not what I have now. There is no calendar.mike_work_calendar
, instead I have 3 calendar entities called calendar.o365_calendar
, calendar.o365_birthdays
and calendar.o365_united_states_holidays
which all list events from now to 24 hours from now. Which is exactly what's in this new o365_calendars.yaml
file.
So is this option actually deprecated or just completely unsupported ? Because it seems like configuring calendars in configuration.yaml just flat out doesn't work anymore.
As an aside I actually really like your component, I was looking for this forever and am so glad I can connect to my work calendar now. And this all isn't a big deal to me now that I think I know what is going on I just was really confused by this message.
I really like this component and would like to keep using it but I am concerned because it was blacklisted. The blacklist is here. Would like to see it removed from the blacklist and listed in HACS again.
I am using the ZWave Lock Code manager and need to add entities so it looks something like this:
The issue is when HassOS is rebooted a new entry is added for the calendar above and the manual entries are ignored. I believe the O365 integration is not taking this into account and new entries cannot be added like what I have above. Thoughts?
This either needs to be suppressed or the old notification have to be cleared
It's probably easiest to suppress the new notification by returning the Auth callback function early if Auth fails.
Update a binary switch on home assistant setting whether there is a event in time frame that is matching some string or not.
I would like to be able to modify the behavior of some automation depending on whether I am working at home or at the office. Example at 6:00, if I have to go to the office I have to get up, otherwise it can wait...
Describe the solution you'd like
Is it possible to also create a Calendar object
After successful upgrade to latest version (2.1.1), adding necessary permissions in Azure portal, modifying configuration file accordingly -
# Office 365 calendar access
o365:
client_id: !secret o365_client_id
client_secret: !secret o365_client_secret
calendars:
calendar_name: default_calendar
2020-02-05 11:33:16 ERROR (MainThread) [homeassistant.components.calendar] Error while setting up platform o365
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 158, in _async_setup_platform
await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT)
File "/usr/local/lib/python3.7/asyncio/tasks.py", line 442, in wait_for
return fut.result()
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/o365/calendar.py", line 39, in setup_platform
name = calendar.get(CONF_NAME)
AttributeError: 'str' object has no attribute 'get'
Installation method (please select one):
Hi,
I'm getting this message but i'm 100% sure the URL is the same.
I've tried multiple settings but i can't get this to work, while it has worked in a previous version before it was a HACS component.
I've tried enabling both internal and external URL's, checked the certificate and recreated the azure config multiple times according to readme but no luck.
It it the port number, or is this component still using the base_url for initial configuration?
Here is my config;
# external_url: "https://home.domain.eu:8123"
# internal_url: "http://10.0.0.10:8123"
internal_url: "https://home.domain.eu:8123"
Here's some messages from my log:
2020-05-29 16:51:19 WARNING (SyncWorker_14) [custom_components.o365.utils] Could not loacte token at .O365-token-cache/o365.token
2020-05-29 16:51:19 WARNING (SyncWorker_14) [homeassistant.components.http] Detected use of deprecated base_url
property, use homeassistant.helpers.network.get_url
method instead. Please report issue for http using this method at homeassistant/components/http/init.py, line 136: for frame in reversed(extract_stack()):
2020-05-29 16:51:19 WARNING (SyncWorker_14) [custom_components.o365.utils] Could not loacte token at .O365-token-cache/o365.token
2020-05-29 17:27:32 WARNING (MainThread) [homeassistant.components.webhook] Received message for unregistered webhook
Error on device update
After first authorization the sensor doesn't get updated.
Log Details (ERROR)
Sat Jan 25 2020 20:47:18 GMT+0100 (Central European Standard Time)
office365calendar: Error on device update!
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 299, in _async_add_entity
await entity.async_device_update(warning=False)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 461, in async_device_update
await self.hass.async_add_executor_job(self.update)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/office365calendar/sensor.py", line 248, in update
self._state = self.device_state_attributes["event_active"]
File "/config/custom_components/office365calendar/sensor.py", line 143, in device_state_attributes
query = calendar.new_query("start").greater_equal(start_date)
AttributeError: 'NoneType' object has no attribute 'new_query'
Installation method (please select one):
Configuration details:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.