All The Silly Home Releases

05.08.2022 The Silly Home Release

Welcome Folks to The Silly Home’s first weekly release - Model Mania

The Silly Home tries to bring true automation to your smart homes via ML. This means no more rules!

Through these regular releases, we hope to make The Silly Home a better application and allows us to broadcast insider knowledge on the developments!

Our roadmap :: container repo :: addon-repo :: docker images

Don’t feel shy to post any comments, criticism and ideas below. I want the feedback and ideas to make this amazing. We also have a discord chat if anyone needs help setting up or just wants a chat.

Enhancements

  1. Human-in-the-loop
  2. Best model selector

Human-in-the-loop

A huge pain-point of The Silly Home (at least for me) is that the model can trigger incorrect actions that I cannot rectify. My inability to ‘fix it’ is because any new state will re-trigger the models will generally predict the same incorrect action, which is very annoying.

Our solution is to have a small database (sqlite3) that stores all sensor states when an action that reverses a recent (within 5 secs) event occurs. These rules are then checked against before executing any actions.

Future:

  • There is thought to feed this information back into the training set.
  • This implementation falters if the AI predicted actions also are within 5 secs. A more comprehensive implementation is to differentiate which actuators events are created by The Silly Home vs Manual. It does not seem easy to do this within AppDaemon.

Best model selector

Right now, only DecisionTreeClassifier is used to train our models. Not much thought other than the fact that its easy to explain. To improve accuracy and more importantly precision, this feature checks the 4 models and returns the best one based on a metric skewed towards precision.

  • Decision Tree
  • Logistic Regression
  • Random Forest
  • SVM

This is a cheap way to gain performance.

Future:

  • All hyper params are defaulted. There needs to be some intuition/testing on the possible Hyperparams for each model.
  • Some Data scientists may comment that this approach will lead to overfitting. I agree and its something to investigate but at the moment, having it overfitted with high precision and low recall will help cover the top 70% cases for automations rules.

Bug fixes:

  1. Date Feature missed

Date Feature missed

The date features was previously not accounted for in the model execution step. This has now been added.

Next week - Sharing is Caring

Our next focus will be to implement a Shared database for all our states data. I know many Data scientist (including myself) would love to have a larger dataset to see if there techniques we can apply to generalize the model (i.e. people switch off all the lights when no one is in the house). This global base model can then work in ensemble with the personal data model.

This will be an opt-out feature and the data will be stored on AWS (the exact service is up in the air as I’m speaking with AWS on Monday to check the best approach to do this).

9 Likes

12.08.2022 The Silly Home Release - Sharing is Caring

Welcome Folks to The Silly Home’s Second weekly release - Sharing is Caring

The Silly Home tries to bring true automation to your smart homes via ML. This means no more rules!

Through these regular releases, we hope to make The Silly Home a better application and allows us to broadcast insider knowledge on the developments!

Our roadmap :: container repo :: addon-repo :: docker images

Don’t feel shy to post any comments, criticism and ideas below. I want the feedback and ideas to make this amazing. We also have a discord chat if anyone needs help setting up or just wants a chat.

Enhancements

  1. Shared Database
  2. Enable/Disable Actuators UI
  3. Autotrain

Shared Database

I envision one of the big improvements to the models and our strategy is for us to leverage more peoples data.

My vision is to build a ensemble model using a generic Deep Learning model trained on all users data, then a refined model based on only the specific users data. With this approach, it should make the predictions more accurate and also more helpful (in the sense that it suggests useful actions even if you haven’t performed these before). One of the key things to do now is to gather enough data which is where the Shared Database comes in.

Right now, the feature essentially replicates your states data from your Home Assistant database and stores it in an AWS Aurora V2 serverless DB (which only I have view access to). The data is anonymous and you can opt-out if you do not want to share your data in the config.

This is definitely a long term goal but this is an important step to start building towards it.

Enable/Disable Actuators UI

A useful enhancement to the dashboards UI which gives you flexibility to enable or disable actuators on the fly.

Autotrain

For more regular usage, I thought adding a cron job to auto retrain the models won’t hurt. It is on by default but you can adjust it using the config params - autotrain: [’true’,’false’] and autotrain_cadence: [””]

Bug fixes:

No bug fixes this week!

Next week - Performance Retro

There are a 2 things I want to improve so that the user experience is better. One major thing I noticed is that the data parsing step is exceptionally slow when running on a Raspberry Pi. Also an improvement to the configuration module is long overdue! I also want to investigate minute by minute snapshots of states using AppDaemon instead of just taking what Home Assistant stores.

That’s all folks! Hope everyone has a great weekend :slight_smile:

2 Likes

19.08.2022 The Silly Home Release - Performance Rec

This is The Silly Home’s third release - Performance Rec - All around speeding up processing and deployment.

Our roadmap :: container repo :: addon-repo :: docker images :: feedback calendly :: discord chat

Enhancements

  1. Improve Code performance & quality
  2. DL minute snapshots
  3. Easier configuration

Improve Code performance & quality

One of the bigger changes is to convert a bulk of the original parsing code into vectorized operations. This has sped up the parsing by at least 50x!

Another aspect of this ticket is to also start using pre-built images for the addons which reduces the time to install the addon itself. Although I don’t fully know why it is faster, I verified it by testing and went from 4 mins to 2 mins.

DL minute snapshots

I added a new Appdaemon app that records all states every 5 seconds and also when the states from specific devices changes. This is now storing data into the shared db and hopefully I can test out some fancy deep learning models (RNN?) to see if it works.

Easier configuration

I couldn’t come up with an easy solution that would make sense for both the container and the addon. Will keep digging and do welcome suggestions.

Bug fixes:

  1. Share data option

Share data option

Now added the share_data option to the config.yaml for the addon so this can now be specified.

Next week - Going deep

I really want to get feed back from anyone who is using the addon,

I truly believe a crucial next stage is to apply Deep Learning models in order to predict user interactions. RNN on the outset seems to be the right approach but there are so much setup to find important features before even we can test it out.

While actioning on this effort locally, I still want to add usability features to make sure you guys are happy! With respect to this, I’ve opened this Calendly so that anyone who wants to discuss can reach me easily - I don’t bite and your feedback means a lot to me and my project.

2 Likes

Hi All, hope everyone is doing well. There is no new release this week as I have been busy getting to grips with TensorFlow and getting it setup for Home Assistant. (Also, planning my travels back to Hong Kong!)

3 Likes

05.09.2022 The Silly Home Release

This was another week of learnings and stumbling so although I only worked on one ticket… it took some time to get here.

Our roadmap :: container repo :: addon-repo :: docker images :: feedback calendly :: discord chat

Enhancements

  1. Deep learning RNN model on periodic states data

Deep learning RNN model on periodic states

As plan of explaining my workings, I have published this blog post on the things I wanted to try and why I think they would work.

There is no actual code change to the main pipeline as all the testing was done on notebooks first. I created a small sample (~1.5k) from my personal user_data which was then used as training data for a typical Deep Neural Net and Recurrent Neural net. This results still need some scrutiny but there is good results from DNN 88% but worse results in RNN 75%, which is either interesting or I’ve implemented something wrong.

I plan to merge this into the main pipeline in the coming release so that we can start using these new models. I am slightly afraid of letting a small raspberry pi run neural network training so in the initial phase, I will set the default if installed as an add_on to not train neural nets.

Bug fixes:

The states snapshots was also getting a bit out of hand as I originally set it up to take a snap every 5 secs. This turned out to be a huge mistake as the db grew too large and any queries took forever. I have now removed this and plan to leverage the data from the states db.

Next 2 weeks - Production and Beyond

This release will be focused on making things to ‘production’. A large part of the training and model saving I would want to store them on AWS. Also, I want to remove putting db creds on the code as its pretty awful so I will add a small login page on my website to have people signup (free!) for a token.

I am also busy this Friday so the release will be the week after!

2 Likes

30.09.2022 The Silly Home Release - Bug Battle

Welcome to The Silly Home’s 5th release - Bug battle

This is a long overdue release but I had been busy travelling! This is a summation of a few changes I made based on the support I was giving in our discord channel.

Our roadmap :: container repo :: addon-repo :: docker images :: feedback calendly :: discord chat

Don’t feel shy to post any comments, criticism and ideas below. I want the feedback and ideas to make this amazing. We also have a discord chat if anyone needs help setting up or just wants a chat.

Enhancements

N/A

Bug fixes:

  1. RAM leakage
  2. Config checking
  3. Better logging
  4. Removal of sharing data by SQL
  5. Deployment changes

RAM leakage

One of our users indicated that the container was using an outrageous 15gbs of RAM on start-up causing the container to shutdown due to lack of resources. I did some investigation with the results noted in this post. The changes to the query helped reduce the load.

Config checking

To assist in user config, I’ve added a few checks so that things like spelling mistakes can be found quicker in the execution.

Better logging for addon

It is quite hard to get logs from The Silly Home Addon. The container itself is unreachable on HASS so the local log file cannot be accessed meaning you can only see it in the UI. However, the logs themselves are often flooded by AppDaemon messages, so the underlying cause is hard to find. I have added 2 things:

  • Sending logs and config to me. With adding a username and password field to the config, I can more easily identify the logs of particular users which can help me debug. The usernames and password (>8 chars) needs to be unique. All security info is not sent!
  • Don’t start AppDaemon if the model generation failed.

Removal of sharing data by SQL

The sharing of the states data is not very efficient with SQL and is causing the RAM issues. In the future when moving to AWS, a flat file will suffice through API gateway. For now, I’ve removed the states data sharing through SQL.

Deployment changes

I think for now, having a production and dev version isn’t adding too much value (as there are too many updates and fixes). As of now, I intend to only update the DEV release until further notice.

Next week - Production and Beyond

I will follow up back onto the productionalization of The Silly Home container! The AWS Sagemaker piece is almost complete. Now to create API gateways to service the model training.

2 Likes

21.10.2022 The Silly Home Release - Interim Update

Welcome Folks to The Silly Home’s release - Interim Update

Its been a while since the last release, as I am working on the production version of this product. Here are some promised changes :slight_smile:

Enhancements

  1. Docker Optimization
  2. Disable all on start-up

Docker Optimization

The docker image was getting a bit out of hand with a whopping size of 1.7GB when uncompressed. I amended the DockerFile to leverage a few optimization techniques such as combining layers and multi-stage building. With the changes, its now a more modest 1GB.

Disable all on start-up

A user requested feature to disable everything on start-up and then optionally turn actuators on in the UI. This is added as a config parameter startup_disable_all which is defaulted to false.

Bug fixes:

  1. Removed hard exception for incorrect actuator/sensor ids

Removed hard exception for incorrect actuator/sensor ids

In the previous version, we had added config checking and here was a hard exception if there is no cases for the actuators or sensors provided. However, it was actually difficult for users to determine if there are cases for them, so I’ve changed this to a warning and removing these erroneous ids from the list instead.

1 Like

A nice little update! You can now use sqlite!

  db_database:  sqlite db filename (`home-assistant_v2.db` is the default)
  db_type:  Database type. Only {sqlite,mariadb,postgres} is supported

I’m trying to use this addon but it’s impossible to configure. I’m using HA with standard installation (no docker installation) with mariadB as database. The configuration for the adddum is:

- db_password: "12345"
  db_username: homeassistant
  db_host: 192.168.1.120
  db_port: "3306"
  db_database: homeassistant
  db_type: mariadb

But there are some errors like:

File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 868, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 476, in checkout
    rec = pool._do_get()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/impl.py", line 146, in _do_get
    self._dec_overflow()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
    return self._create_connection()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 256, in _create_connection
    return _ConnectionRecord(self)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 371, in __init__
    self.__connect()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 666, in __connect
    pool.logger.debug("Error on connect(): %s", e)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 661, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/create.py", line 578, in connect
    return dialect.connect(*cargs, **cparams)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 597, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/opt/venv/lib/python3.9/site-packages/pymysql/connections.py", line 353, in __init__
    self.connect()
  File "/opt/venv/lib/python3.9/site-packages/pymysql/connections.py", line 664, in connect
    raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '192.168.1.120' ([Errno 111] Connection refused)")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/thesillyhome_src/thesillyhome/src/thesillyhome/model_creator/main.py", line 16, in <module>
    parse_data_from_db()
  File "/thesillyhome_src/thesillyhome/src/thesillyhome/model_creator/parse_data.py", line 73, in parse_data_from_db
    df_all = homedb().get_data()
  File "/thesillyhome_src/thesillyhome/src/thesillyhome/model_creator/home.py", line 74, in get_data
    with self.mydb.connect() as con:
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3315, in connect
    return self._connection_cls(self, close_with_result=close_with_result)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
    else engine.raw_connection()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3394, in raw_connection
    return self._wrap_pool_connect(self.pool.connect, _connection)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3364, in _wrap_pool_connect
    Connection._handle_dbapi_exception_noconnection(
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2198, in _handle_dbapi_exception_noconnection
    util.raise_(
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3361, in _wrap_pool_connect
    return fn()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 310, in connect
    return _ConnectionFairy._checkout(self)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 868, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 476, in checkout
    rec = pool._do_get()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/impl.py", line 146, in _do_get
    self._dec_overflow()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
    return self._create_connection()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 256, in _create_connection
    return _ConnectionRecord(self)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 371, in __init__
    self.__connect()
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 666, in __connect
    pool.logger.debug("Error on connect(): %s", e)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 661, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/create.py", line 578, in connect
    return dialect.connect(*cargs, **cparams)
  File "/opt/venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 597, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/opt/venv/lib/python3.9/site-packages/pymysql/connections.py", line 353, in __init__
    self.connect()
  File "/opt/venv/lib/python3.9/site-packages/pymysql/connections.py", line 664, in connect
    raise exc
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '192.168.1.120' ([Errno 111] Connection refused)")
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Model generation failed.
Starting frontend on 0.0.0.0:2300
Listening on 0.0.0.0:2300

I uninstalled the addon, because is impossible to check…

Jose

You have to set the port of MariaDB to 3306.

Dear Jeff,

My maridb is configured with the port 3306, then I don’t undestand your suggestion…, can you clarify?,

Thanks

You have to type in “3306”, save it and restart MariaDB and The Silly Home Addon.

Hi @josemsubcn ,
Apologies for the late reply! I wasn’t following this thread so did not see this.
@jeffconrad18 is correct. Basically by default the mariadb addon does not expose itself to the wider network. If you use a db connector (e.g. MySql workbench) on you computer and try to connect to it you will find the same error as the port has not been exposed.

To expose it, you will need to add 3306 to the settings. This basically forwards your 3306 for the mariadb addon container and exposes it as 3306 so that you can access the db which the addon requires. (see yellow below)

Feel free to reach me also on our discord!

Hi everybody, Chris here!

Around May last year, I made this little addon on Home Assistant that automates devices using machine learning techniques. Our project now has 59 total GitHub stars & 56 members in the our Discord community.

Ambient intelligence for a smarter home

Our big vision is to make the home truly intelligent, eliminating routines and requirements for human control. The smart home should work for you, not the other way around. The goal is to make a service that is easy to use and an integral part of the smart home ecosystem.

With that I’m happy to launch The Silly Home’s first alpha version!

Start small with a big vision.

Our primary focus for now is to automate lights with AI. Why? Smart lights is one of the key components of any smart home. It’s adoption is wide and its attributes are well defined. Solving this particular problem will help the most people and will prove the concept.

Our platform support will begin with Home Assistant. Why? It is the largest open-source smart home platform, has tons of support for developers and a lively community. Using Home Assistant as our first base will propel our progress in building the technology.

Once our support for automated lights is up to scratch, the next phase will be to expand into other types of devices and other platforms.

It’s free. Sign up now!

This is a culmination of 3 months of hard work and your interest, feedback and support is crucial to its development. Even if your platform is not available yet, sign up to register your interest!

Hello! Can you record a tutorial video and a video with an example of the work? Thank you very much!

1 Like

Here’s a quick video of how to setup!
Will hopefully come out with better content soon.

I saw that. I’m looking forward to more materials on YouTube

Thanks,

Now it’s working without errors. I’m waiting to understand what this integration do with the lights and switchs…

Thanks and regards,

We continue with some errors when training phase finish…

DEBUG:websockets.client:> PING 85 31 56 74 [binary, 4 bytes]
DEBUG:websockets.client:< PONG 85 31 56 74 [binary, 4 bytes]
DEBUG:websockets.client:% received keepalive pong
DEBUG:websockets.client:< TEXT 'Something went wrong with the training! Please ...a\'] not found in axis"' [144 bytes]
INFO:root:Received model under Something went wrong with the training! Please raise and issue with support and tag your user-id. "['light.led_estudio_mesa'] not found in axis". Downloading and unzipping.
2023-01-27 23:12:26,942 - root - INFO - Received model under Something went wrong with the training! Please raise and issue with support and tag your user-id. "['light.led_estudio_mesa'] not found in axis". Downloading and unzipping.
INFO:root:Model is empty. No data in buffer
2023-01-27 23:12:26,945 - root - INFO - Model is empty. No data in buffer
DEBUG:websockets.client:< TEXT 'end_transmission' [16 bytes]
DEBUG:websockets.client:= connection is CLOSING
DEBUG:websockets.client:> CLOSE 1000 (OK) [2 bytes]
DEBUG:websockets.client:< CLOSE 1000 (OK) [2 bytes]
DEBUG:websockets.client:= connection is CLOSED
DEBUG:websockets.client:x closing TCP connection
INFO:root:Completed training job. Model saved.
2023-01-27 23:12:27,013 - root - INFO - Completed training job. Model saved.
Starting Appdaemon
2023-01-27 22:12:27.701635 INFO AppDaemon: AppDaemon Version 4.2.1 starting
2023-01-27 22:12:27.701733 INFO AppDaemon: Python version is 3.9.16
2023-01-27 22:12:27.701824 INFO AppDaemon: Configuration read from: /thesillyhome_src/appdaemon/appdaemon.yaml
2023-01-27 22:12:27.701933 INFO AppDaemon: Added log: AppDaemon
2023-01-27 22:12:27.702055 INFO AppDaemon: Added log: Error
2023-01-27 22:12:27.702160 INFO AppDaemon: Added log: Access
2023-01-27 22:12:27.702265 INFO AppDaemon: Added log: Diag
2023-01-27 22:12:27.716228 INFO AppDaemon: Loading Plugin HASS using class HassPlugin from module hassplugin
2023-01-27 22:12:27.890495 INFO HASS: HASS Plugin Initializing
2023-01-27 22:12:27.890617 INFO HASS: HASS Plugin initialization complete
2023-01-27 22:12:27.890866 INFO AppDaemon: HTTP is disabled
2023-01-27 22:12:27.896892 INFO HASS: Connected to Home Assistant 2023.1.7
2023-01-27 22:12:27.912776 INFO AppDaemon: App 'model_executor' added
2023-01-27 22:12:27.913382 INFO AppDaemon: Found 1 total apps
2023-01-27 22:12:27.913687 INFO AppDaemon: Starting Apps with 1 workers and 1 pins
2023-01-27 22:12:27.939072 INFO HASS: Evaluating startup conditions
2023-01-27 22:12:27.944009 INFO HASS: Startup condition met: hass state=RUNNING
2023-01-27 22:12:27.944186 INFO HASS: All startup conditions met
2023-01-27 22:12:27.969483 INFO AppDaemon: Got initial state from namespace default
2023-01-27 22:12:29.920167 INFO AppDaemon: Scheduler running in realtime
2023-01-27 22:12:29.927441 INFO AppDaemon: Adding /thesillyhome_src/appdaemon/apps to module import path
2023-01-27 22:12:29.931203 INFO AppDaemon: Loading App Module: /thesillyhome_src/appdaemon/apps/model_executor.py
2023-01-27 22:12:33.745168 INFO AppDaemon: Initializing app model_executor using class ModelExecutor from module model_executor
2023-01-27 22:12:33.835138 WARNING model_executor: ------------------------------------------------------------
2023-01-27 22:12:33.835528 WARNING model_executor: Unexpected error running initialize() for model_executor
2023-01-27 22:12:33.835661 WARNING model_executor: ------------------------------------------------------------
2023-01-27 22:12:33.838915 WARNING model_executor: Traceback (most recent call last):
  File "/opt/venv/lib/python3.9/site-packages/appdaemon/app_management.py", line 165, in initialize_app
    await utils.run_in_executor(self, init)
  File "/opt/venv/lib/python3.9/site-packages/appdaemon/utils.py", line 337, in run_in_executor
    response = future.result()
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/thesillyhome_src/appdaemon/apps/model_executor.py", line 23, in initialize
    pd.read_parquet(f"{self.model_path}/X_train_entity_ids.parquet")["entity_ids"]
  File "/opt/venv/lib/python3.9/site-packages/pandas/io/parquet.py", line 501, in read_parquet
    return impl.read(
  File "/opt/venv/lib/python3.9/site-packages/pandas/io/parquet.py", line 349, in read
    handles = get_handle(
  File "/opt/venv/lib/python3.9/site-packages/pandas/io/common.py", line 866, in get_handle
    handle = open(handle, ioargs.mode)
FileNotFoundError: [Errno 2] No such file or directory: '/thesillyhome_src/data/model/1/X_train_entity_ids.parquet'
2023-01-27 22:12:33.839090 WARNING model_executor: ------------------------------------------------------------
2023-01-27 22:12:33.839494 INFO AppDaemon: App initialization complete