Giter Site home page Giter Site logo

zweckj / lamarzocco Goto Github PK

View Code? Open in Web Editor NEW
44.0 4.0 3.0 1.05 MB

Interact with your La Marzocco espresso machine

Python 100.00%
coffee hassio hassio-integration home-assistant home-assistant-custom-component homeassistant-custom-component homeassistant-integration lamarzocco hacs hacs-integration

lamarzocco's Introduction

La Marzocco Home Assistant Integration (Gateway v3)

hacs_badge issues_badge
Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Overview

This is an integration for recent La Marzocco espresso machines that use WiFi to connect to the cloud and can be controlled via the La Marzocco mobile app. This capability was rolled out in late 2019, and La Marzocco supposedly offers a retrofit kit to add it to earlier models. This repo started as fork for https://github.com/rccoleman/lamarzocco, but with the release of La Marzocco's Gateway V3 in 2023 became the new default.

Based on the investigation from Plonx on the Home Assistant forum here, this integration presents a comprehensive machine status through several entities and allows the user to change the machine configuration from Home Assistant.

Bluetooth

This integration can communicate to the machine through Bluetooth, in which case some of the commands (e.g. turning on/off) are not sent through the cloud. If your server doesn't have a bluetooth interface, or is not close enough to your machine ESPHome's Bluetooth Proxies are a very good solution.

WebSockets

This integration opens a WebSocket connection to your machine to stream information. In case you are encountering any issues, for example with the official app connecting, you can disable the WebSocket connections in the integration's settings.

Lovelace

A companion Lovelace card that uses this integration to retrieve data and control the machine can be found here.

Feedback

This integration currently only supports a single espresso machine. It's possible to support multiple machines, but I only have one and I suspect that'll be the case for most folks. If anyone has a fleet of espresso machines and is willing to provide data and feedback, We're happy to entertain adding support for more than one machine.

Installation

HACS

This integration is compatible with HACS, which means that you can easily download and manage updates for it.
Click the button below to add it to your HACS installation
Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

or add the repo to HACS manually:

  1. Launch the HACS panel from the left sidebar
  2. Click "Integrations`
  3. Click the three dots in the top right corner
  4. Click "Add custom repository"
  5. Add the link to this repo (https://github.com/zweckj/lamarzocco)
  6. Click "Explore & Download Repositories"
  7. Install "La Marzocco"

Manual

If you don't have HACS installed or would prefer to install manually.

  1. Create a config/custom_comoponents directory if it doesn't already exist
  2. Clone this repo and move lamarzocco into config/custom_components. Your directory tree should look like config/custom_components/lamarzocco/...files...

Restart Home Assistant

Configuration

Click the following button to set up this integration in Home Assistant.

Open your Home Assistant instance and start setting up a new integration.

Alternatively, you may add the integration manually.

  1. Navigate to Settings->Devices & Services
  2. Hit the "+ Add Integration" button in the lower-right
  3. Search for "La Marzocco" and select it
  4. You'll be presented with a dialog box like this:

Config Flow

  1. Fill in the info
  2. Hit "Submit"

Configured Integration

Once you configured the integration, you should see this in Configuration->Integrations:

image

Usage

In Dev->States, you should see several new entities, with your machine model dictating which ones:

  • water_heater.<machine_name>_coffee
  • water_heater.<machine_name>_steam
  • sensor.<machine_name>_total_drinks
  • binary_sensor.<machine_name>_water_reservoir
  • switch.<machine_name>_main
  • switch.<machine_name>_auto_on_off
  • switch.<machine_name>_prebrew
  • switch.<machine_name>_preinfusion
  • button.<machine_name>_start_backflush
  • switch.<machine_name>_steam_boiler_enable

Thw switches control their respective functions globally, i.e., enable/disable auto on/off for the whole machine, enable/disable prebrewing for all front-panel keys.

Services

The water_heater and switch entities support the standard services for those domains, described here and here, respectively.

The following domain-specific services are also available (model-dependent):

Service lamarzocco.set_auto_on_off_enable

Enable or disable auto on/off for a specific day of the week.

Service data attribute Optional Description
day_of_week no The day of the week to enable (sun, mon, tue, wed, thu, fri, sat)
enable no Boolean value indicating whether to enable or disable auto on/off, e.g. "on" or "off"

Service lamarzocco.set_auto_on_off_times

Set the auto on and off times for each day of the week.

Service data attribute Optional Description
day_of_week no The day of the week to enable (sun, mon, tue, wed, thu, fri, sat)
hour_on no The hour to turn the machine on (0..23)
minute_on yes The minute to turn the machine on (0..59)
hour_off no The hour to turn the machine off (0..23)
minute_off yes The minute to turn the machine off (0..59)

Service lamarzocco.set_dose

Sets the dose for a specific key.

Service data attribute Optional Description
key no The key to program (1-5)
pulses no The dose in pulses (roughly ~0.5ml per pulse), e.g. 120

Service lamarzocco.set_dose_hot_water

Sets the dose for hot water.

Service data attribute Optional Description
seconds no The number of seconds to stream hot water, e.g. 8

Service lamarzocco.set_prebrew_times

Set the prebrewing "on" and "off" times for a specific key.

Service data attribute Optional Description
key no The key to program (1-4)
seconds_on no The time in seconds for the pump to run during prebrewing (0-5.9s)
seconds_off no The time in seconds for the pump to stop during prebrewing (0-5.9s)

Service lamarzocco.set_preinfusion_time

Set the preinfusion time for a specific key.

Service data attribute Optional Description
key no The key to program (1-4)
seconds no The time in seconds for preinfusion (0-24.9s)

NOTE: The machine won't allow more than one device to connect at once, so you may need to wait to allow the mobile app to connect while the integration is running. The integration only maintains the connection while it's sending or receiving information and polls every 30s, so you should still be able to use the mobile app.

If you have any questions or find any issues, either file them here or post to the thread on the Home Assistant forum here.

lamarzocco's People

Contributors

ktibow avatar luuuis avatar neuralldev avatar rccoleman avatar timclipsham avatar wrt54g avatar zweckj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

lamarzocco's Issues

Prebrew endpoint returning 404 on Mini

It seems of late the prebrew endpoint is retuning a 404. Is anyone else getting this? Could they have changed the endpoint?

image

Edit: I don't have it plumbed so it's prebrew not pre-infusion. It seems the prebrew and preinfusion calls the same endpoint and gets 404.

HA entities no longer present after upgrade

Hi,

This is probably more of a HA issue, but I'm not sure where to start...

I was using your integration in version 0.11 (ish) since some months without problems for our GS3 AV.

Now I made the fatal mistake of upgrading the integration to the last version, and all my entities got disconnected and I can't make them reappear in HA :-(

I think I still have connection to the machine, as the "download diagnostics" show all the proper data from the machine. I tried to delete and reconnect the machine, which succeeds but still no entities are being created.

Does anyone have an idea? What info should I provide for this to be helpful?

HA tells me this for my entities:


2023-11-20 12:40:57.390 ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform lamarzocco.binary_sensor: Platform not found (cannot import name 'DeviceInfo' from 'homeassistant.helpers.device_registry' (/
usr/src/homeassistant/homeassistant/helpers/device_registry.py)).
2023-11-20 12:40:57.705 ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform lamarzocco.button: Platform not found (cannot import name 'DeviceInfo' from 'homeassistant.helpers.device_registry' (/usr/src
/homeassistant/homeassistant/helpers/device_registry.py)).
2023-11-20 12:40:57.955 ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform lamarzocco.sensor: Platform not found (cannot import name 'DeviceInfo' from 'homeassistant.helpers.device_registry' (/usr/src
/homeassistant/homeassistant/helpers/device_registry.py)).
2023-11-20 12:40:58.024 ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform lamarzocco.switch: Platform not found (cannot import name 'DeviceInfo' from 'homeassistant.helpers.device_registry' (/usr/src
/homeassistant/homeassistant/helpers/device_registry.py)).
2023-11-20 12:40:58.100 ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform lamarzocco.update: Platform not found (cannot import name 'DeviceInfo' from 'homeassistant.helpers.device_registry' (/usr/src
/homeassistant/homeassistant/helpers/device_registry.py)).

Failed to initialize Integration due to bluetooth device

Using the integration with Raspberry PI 4 and HA for my Micra since Sunday. The integration didn't work reliable and I couldn't figure it out until i checked the logs and saw the stacktrace. At first I only saw timeouts. Upon checking the stack trace I noticed it failed initializing the bleak client.

Since the Raspberry PI is in the basement i disabled the BT device. Since then if worked reliably for me.

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/bleak/backends/bluezdbus/client.py", line 209, in connect
    reply = await self._bus.call(
            ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/dbus_fast/aio/message_bus.py", line 399, in call
    await future
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/lamarzocco/services.py", line 35, in call_service
    await func(*args, **kwargs)
  File "/config/custom_components/lamarzocco/lm_client.py", line 96, in set_power
    await self.get_hass_bt_client()
  File "/config/custom_components/lamarzocco/lm_client.py", line 172, in get_hass_bt_client
    await self._lm_bluetooth.new_bleak_client_from_ble_device(ble_device)
  File "/usr/local/lib/python3.11/site-packages/lmcloud/lmbluetooth.py", line 104, in new_bleak_client_from_ble_device
    await self._client.connect()
  File "/usr/src/homeassistant/homeassistant/components/bluetooth/wrappers.py", line 292, in connect
    connected = await super().connect(**kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/bleak/__init__.py", line 605, in connect
    return await self._backend.connect(**kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/bleak/backends/bluezdbus/client.py", line 146, in connect
    async with async_timeout(timeout):
  File "/usr/local/lib/python3.11/asyncio/timeouts.py", line 111, in __aexit__
    raise TimeoutError from exc_val
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 226, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 2012, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2049, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 235, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 876, in entity_service_call
    response_data = await _handle_entity_call(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 948, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/lamarzocco/switch.py", line 143, in async_turn_off
    await call_service(
  File "/config/custom_components/lamarzocco/services.py", line 38, in call_service
    raise HomeAssistantError(ex) from ex
homeassistant.exceptions.HomeAssistantError

Can't figure out how to even configure this thing

Instructions say to go to Configuration -> Integrations, neither of which things exist whatsoever, there is no mention of either of these words anywhere in the web interface

Furthermore once it's installed, you click the plugin in the list, and all it does is open up a useless WIKI page with out of date instructions that do not apply.

How do you even access the part where you enter login and password?

tmp3

This makes quite literally zero sense whatsoever - none of these sections even exist in my Home Assistant, see for yourself:

tmp4

Please show me how to navigate to Configuration -> Integrations because these words do not even exist in my interface.

And clicking the La Marzocco entry only opens up a WIKI page, there's no configuration options or screen to be found

Man I hate open source sometimes

Cascading errors when there are connectivity issues

Every so often, the LM servers seem to go offline temporarily and recover after a while. When this happens, the integration starts throwing cascading exceptions that flood the HA log. Here's an example:

2024-01-04 01:22:23.552 ERROR (MainThread) [custom_components.lamarzocco.coordinator] Unexpected error fetching lamarzocco data:
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/anyio/streams/tls.py", line 133, in _call_sslobject_method
    result = func(*args)
             ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/ssl.py", line 921, in read
    v = self._sslobj.read(len)
        ^^^^^^^^^^^^^^^^^^^^^^
ssl.SSLWantReadError: The operation did not complete (read) (_ssl.c:2580)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/anyio/_core/_tasks.py", line 115, in fail_after
    yield cancel_scope
  File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 34, in read
    return await self._stream.receive(max_bytes=max_bytes)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/anyio/streams/tls.py", line 198, in receive
    data = await self._call_sslobject_method(self._ssl_object.read, max_bytes)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/anyio/streams/tls.py", line 140, in _call_sslobject_method
    data = await self.transport_stream.receive()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1095, in receive
    await self._protocol.read_event.wait()
  File "/usr/local/lib/python3.11/asyncio/locks.py", line 213, in wait
    await fut
asyncio.exceptions.CancelledError: Cancelled by cancel scope 7f58bfe2cd90

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/httpcore/_exceptions.py", line 10, in map_exceptions
    yield
  File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 32, in read
    with anyio.fail_after(timeout):
  File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/anyio/_core/_tasks.py", line 118, in fail_after
    raise TimeoutError
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 67, in map_httpcore_exceptions
    yield
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 371, in handle_async_request
    resp = await self._pool.handle_async_request(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 268, in handle_async_request
    raise exc
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 251, in handle_async_request
    response = await connection.handle_async_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection.py", line 103, in handle_async_request
    return await self._connection.handle_async_request(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 133, in handle_async_request
    raise exc
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 111, in handle_async_request
    ) = await self._receive_response_headers(**kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 176, in _receive_response_headers
    event = await self._receive_event(timeout=timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 212, in _receive_event
    data = await self._network_stream.read(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 31, in read
    with map_exceptions(exc_map):
  File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
    raise to_exc(exc) from exc
httpcore.ReadTimeout

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 300, in _async_refresh
    self.data = await self._async_update_data()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/lamarzocco/coordinator.py", line 37, in _async_update_data
    await self._lm.update_machine_status()
  File "/config/custom_components/lamarzocco/lm_client.py", line 94, in update_machine_status
    await self.update_local_machine_status(force_update=True)
  File "/usr/local/lib/python3.11/site-packages/lmcloud/lmcloud.py", line 533, in update_local_machine_status
    await self._update_statistics_obj(force_update=force_update)
  File "/usr/local/lib/python3.11/site-packages/lmcloud/lmcloud.py", line 559, in _update_statistics_obj
    self._statistics = await self.get_statistics()
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/lmcloud/lmcloud.py", line 543, in get_statistics
    statistics = await self._rest_api_call(url=url, verb="GET")
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/lmcloud/lmcloud.py", line 573, in _rest_api_call
    response = await self.client.get(url)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1786, in get
    return await self.request(
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/authlib/integrations/httpx_client/oauth2_client.py", line 90, in request
    return await super().request(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1559, in request
    return await self.send(request, auth=auth, follow_redirects=follow_redirects)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1646, in send
    response = await self._send_handling_auth(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1674, in _send_handling_auth
    response = await self._send_handling_redirects(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1711, in _send_handling_redirects
    response = await self._send_single_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1748, in _send_single_request
    response = await transport.handle_async_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 370, in handle_async_request
    with map_httpcore_exceptions():
  File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 84, in map_httpcore_exceptions
    raise mapped_exc(message) from exc
httpx.ReadTimeout
2024-01-04 01:22:56.785 INFO (MainThread) [custom_components.lamarzocco.coordinator] Fetching lamarzocco data recovered

Note that it does recover afterward, but it creates a lot of logging because (I think) the timeout exception isn't being caught. Can this be handled more gracefully?

Device switch on calls too many entities and causes unexpected behaviours

Beta 5 residual issue having used for a few days and been a bit confused! Did some testing and digging and discovered:

When you use an automation to call a service to switch the machine on as a DEVICE instead of just turning on the Main On/Off control entity, it also turns on the Auto On/Off control entity and the Steam Boiler enable control entity. Similarly when you use an automation to call a service to switch off the machine as a DEVICE it turns all three control entities off.

The issue with that is if you have turned the machine off with that automation and then use an entity button or entity automation that specifically calls the Main On/Off control entity, your steam boiler enable remains turned off and doesn't heat up. Confused the hell out of me!! Similarly if you turn the machine off manually or by an entity switch, then it leaves the auto on/off enabled and it then starts doing its own thing per the auto schedule. Given it was Halloween I thought I had a ghost in my machine!!

Obviously can workaround by ensuring any automations call the Main on/off entity but assume you will want to fix if possible so the calling of the DEVICE to turn on by HA links only to the Main on/off entity, not to all three entities that have an on/off function.

Thank you!

Multiple machines are showing up as just one

Hi there, edge case for sure...

I have 2 Lineas (one Mini and one Micra) in 2 different places, each place running their own instance of Home Assistant. In Place 1, the Mini gets discovered just fine and works well with its Home Assistant instance.

On the second place, the second Home Assistant install only detects the Mini again, even though I provided the IP of the Micra. And it tracks how the Mini is, instead of the Micra.

Help? Tips?

Setup Failed (Requirements for lamarzocco not found: ['lmcloud==4.0.2b2'])

Just started getting the below error message, I did update gateway version, not sure if related or not though.

Machine: Linea Mini
Gateway: v3.2-RC9
Firmware: 2.12

Logger: homeassistant.setup
Source: setup.py:185
First occurred: 15:57:32 (1 occurrences)
Last logged: 15:57:32

Setup failed for custom integration lamarzocco: Requirements for lamarzocco not found: ['lmcloud==4.0.2b2'].

UNable to get entities: ValueError: Config entry was never loaded!

Hi

thank you profusely for creating and maintining this integration

I am experiencing issues running this integration on a RPI5 with:

Core
2024.1.0.dev20231218
Supervisor
2024.01.0.dev1902
Operating System
11.3.dev20231212
Frontend
20231218.0.dev

I have installed the integration and configured it, and no entities have appeared (LaMarz.jpg) laMarz

I have deleted and reinstalled the integration after rebooting and have not ever seen any entities appear

The log outlines "ValueError: Config entry was never loaded!"

The integration is "configured successfully" and is "Device is already configured" when trying to re-add the account /machine (LaMarz2.jpg)
laMarz2

I have attached a few screenshots and the error log

Any info would be greatly appreciated.

home-assistant_lamarzocco_2024-01-22T06-47-56.648Z.log

Config flow could not be loaded: 500 Internal Server Error Server got itself in trouble

I am getting this error after upgrading to the latest alpha (3).
Config flow could not be loaded: 500 Internal Server Error Server got itself in trouble

In logs I see;
Logger: aiohttp.server
Source: /usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py:403
First occurred: 07:56:20 (2 occurrences)
Last logged: 07:57:17

Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 227, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 236, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 31, in headers_middleware
response = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 148, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 63, in with_admin
return await func(self, request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 147, in post
return await super().post(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
result = await method(view, request, data, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 71, in post
result = await self._flow_mgr.async_init(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 872, in async_init
flow, result = await task
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 890, in _async_init
flow = await self.async_create_flow(handler, context=context, data=data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 992, in async_create_flow
handler = await _async_get_flow_handler(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2088, in _async_get_flow_handler
await _load_integration(hass, domain, hass_config)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2064, in _load_integration
await async_process_deps_reqs(hass, hass_config, integration)
File "/usr/src/homeassistant/homeassistant/setup.py", line 420, in async_process_deps_reqs
await requirements.async_get_integration_with_requirements(
File "/usr/src/homeassistant/homeassistant/requirements.py", line 52, in async_get_integration_with_requirements
return await manager.async_get_integration_with_requirements(domain)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/requirements.py", line 171, in async_get_integration_with_requirements
await self._async_process_integration(integration, done)
File "/usr/src/homeassistant/homeassistant/requirements.py", line 186, in _async_process_integration
await self.async_process_requirements(
File "/usr/src/homeassistant/homeassistant/requirements.py", line 245, in async_process_requirements
self._raise_for_failed_requirements(name, missing)
File "/usr/src/homeassistant/homeassistant/requirements.py", line 274, in _raise_for_failed_requirements
raise RequirementsNotFound(integration, [req])
homeassistant.requirements.RequirementsNotFound: Requirements for lamarzocco not found: ['lmcloud==4.0.2b2'].

Ambiguous warning: Could not find bluetooth device.

A warning is being logged: Could not find bluetooth device.Bluetooth commands will not be availableand commands will all be sent through cloud

It is unclear to me whether the integration is unable to find a connected bluetooth device to use at all, or whether the machine cannot be found using HA bluetooth. There is a bluetooth device connected to HA.

Full logs for lmcloud.lmcloud:

2024-04-12 09:43:38.602 WARNING (MainThread) [lmcloud.lmcloud] Could not find bluetooth device.Bluetooth commands will not be availableand commands will all be sent through cloud
2024-04-12 09:43:38.603 DEBUG (MainThread) [lmcloud.lmcloud] Full error: Couldn't find a machine
2024-04-12 09:43:38.605 DEBUG (MainThread) [lmcloud.lmcloud] Getting config from local API
2024-04-12 09:43:39.468 DEBUG (MainThread) [lmcloud.lmcloud] Received data from websocket, property updated: machineConfiguration with value: 
{
  version: "v1",
  preinfusionModesAvailable: ["ByDoseType"],
  machineCapabilities: [
    {
      family: "LINEA",
      groupsNumber: 1,
      coffeeBoilersNumber: 1,
      hasCupWarmer: False,
      steamBoilersNumber: 1,
      teaDosesNumber: 1,
      machineModes: ["BrewingMode", "StandBy"],
      schedulingType: "smartWakeUpSleep",
    },
  ],
  machine_sn: "Snxxxxxxxxxx",
  machine_hw: "0",
  isPlumbedIn: False,
  isBackFlushEnabled: False,
  standByTime: 0,
  tankStatus: True,
  settings: [],
  recipes: [
    {
      id: "Recipe1",
      dose_mode: "Mass",
      recipe_doses: [
        { id: "A", target: 32 },
        { id: "B", target: 42 },
      ],
    },
  ],
  recipeAssignment: [
    {
      dose_index: "DoseA",
      recipe_id: "Recipe1",
      recipe_dose: "A",
      group: "Group1",
    },
  ],
  groupCapabilities: [
    {
      capabilities: {
        groupType: "AV_Group",
        groupNumber: "Group1",
        boilerId: "CoffeeBoiler1",
        hasScale: False,
        hasFlowmeter: False,
        numberOfDoses: 0,
      },
      doses: [],
      doseMode: { groupNumber: "Group1", brewingType: "ManualType" },
    },
  ],
  machineMode: "BrewingMode",
  teaDoses: { DoseA: { doseIndex: "DoseA", stopTarget: 0 } },
  scale: { connected: False, address: "", name: "", battery: 0 },
  boilers: [
    { id: "SteamBoiler", isEnabled: True, target: 0, current: 0 },
    {
      id: "CoffeeBoiler1",
      isEnabled: True,
      target: 91.0999984741211,
      current: 90,
    },
  ],
  boilerTargetTemperature: { SteamBoiler: 0, CoffeeBoiler1: 91.0999984741211 },
  preinfusionMode: {
    Group1: {
      groupNumber: "Group1",
      preinfusionStyle: "PreinfusionByDoseType",
    },
  },
  preinfusionSettings: {
    mode: "Enabled",
    Group1: [
      {
        groupNumber: "Group1",
        doseType: "DoseA",
        preWetTime: 2,
        preWetHoldTime: 3,
      },
    ],
  },
  wakeUpSleepEntries: [
    {
      id: "fvWnpDF",
      days: [
        "monday",
        "tuesday",
        "wednesday",
        "thursday",
        "friday",
        "saturday",
        "sunday",
      ],
      steam: True,
      enabled: True,
      timeOn: "5:0",
      timeOff: "12:0",
    },
  ],
  smartStandBy: { mode: "PowerOn", minutes: 10, enabled: False },
  clock: "2024-04-12T09:44:15",
  firmwareVersions: [
    { name: "machine_firmware", fw_version: "2.12" },
    { name: "gateway_firmware", fw_version: "v3.4-rc5" },
  ],
}
2024-04-12 09:43:39.469 DEBUG (MainThread) [lmcloud.lmcloud] Calling callback function
2024-04-12 09:43:39.489 DEBUG (MainThread) [lmcloud.lmcloud] Getting statistics from cloud
2024-04-12 09:44:10.254 DEBUG (MainThread) [lmcloud.lmcloud] Getting config from local API
2024-04-12 09:45:43.418 DEBUG (MainThread) [lmcloud.lmcloud] Getting statistics from cloud
2024-04-12 09:46:13.254 DEBUG (MainThread) [lmcloud.lmcloud] Getting config from local API
2024-04-12 09:46:13.612 DEBUG (MainThread) [lmcloud.lmcloud] Getting statistics from cloud
2024-04-12 09:46:44.256 DEBUG (MainThread) [lmcloud.lmcloud] Getting config from local API
2024-04-12 09:46:44.466 DEBUG (MainThread) [lmcloud.lmcloud] Getting statistics from cloud

Latest update added features in `weeklySchedulingConfig` which breaks HA

@zweckj It seems the latest ios App, gateway and/or machine firmware has added some new features which has broken the implementation.

Machine: Linea Mini (OG version)
Gateway: v3.4-RC5
Machine Firmware: 2.12

2024-03-20 13:35:32.829 DEBUG (MainThread) [custom_components.lamarzocco.coordinator] Finished fetching lamarzocco data in 0.103 seconds (success: False)
2024-03-20 13:35:38.132 DEBUG (MainThread) [custom_components.lamarzocco.coordinator] Initializing local API
2024-03-20 13:35:38.132 DEBUG (MainThread) [custom_components.lamarzocco.coordinator] Init WebSocket in background task
2024-03-20 13:35:38.345 ERROR (MainThread) [custom_components.lamarzocco.coordinator] Unexpected error fetching lamarzocco data: 'weeklySchedulingConfig'
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 318, in _async_refresh
    self.data = await self._async_update_data()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/lamarzocco/coordinator.py", line 107, in _async_update_data
    await self._async_handle_request(self.device.get_config)
  File "/config/custom_components/lamarzocco/coordinator.py", line 129, in _async_handle_request
    await func()
  File "/usr/local/lib/python3.12/site-packages/lmcloud/lm_device.py", line 119, in get_config
    self.parse_config(raw_config)
  File "/usr/local/lib/python3.12/site-packages/lmcloud/lm_machine.py", line 137, in parse_config
    raw_config["weeklySchedulingConfig"]
    ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'weeklySchedulingConfig'
2024-03-20 13:35:38.351 DEBUG (MainThread) [custom_components.lamarzocco.coordinator] Finished fetching lamarzocco data in 0.218 seconds (success: False)

Update: On reading logs properly, this is an issue with the lmcloud repo, not this one but issue remains.

cannot install on current stable HomeAssistant version

Hi, I tried to install your fork on HA, current stable docker version is Home Assistant 2023.3.5.

When I launch the integration it fails to load the service with this error message in the logs:

Logger: homeassistant.util.package
Source: util/package.py:107
First occurred: 09:29:53 (3 occurrences)
Last logged: 09:30:01

Unable to install package lmcloud==0.3.35: ERROR: Cannot install lmcloud==0.3.35 because these package versions have conflicting dependencies. ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts [notice] A new release of pip is available: 23.0 -> 23.2.1 [notice] To update, run: pip install --upgrade pip

There is no minimum HA version defined in your setup procedure so I assume the current stable docker version is not ok. What can I do as I cannot modify docker image?

New HA core Beta causing issues

Installed the latest HA core beta and have run into the issues with this CC.

Not sure if it is related to what is mentioned at the bottom of this page?

https://rc.home-assistant.io/blog/2023/12/27/release-20241/

Logger: homeassistant.setup
Source: setup.py:403
First occurred: 09:01:34 (6 occurrences)
Last logged: 09:01:34

Unable to prepare setup for platform 'lamarzocco.button': Platform not found (Exception importing custom_components.lamarzocco.button).
Unable to prepare setup for platform 'lamarzocco.sensor': Platform not found (Exception importing custom_components.lamarzocco.sensor).
Unable to prepare setup for platform 'lamarzocco.switch': Platform not found (Exception importing custom_components.lamarzocco.switch).



Logger: homeassistant.loader
Source: loader.py:842
First occurred: 09:01:34 (6 occurrences)
Last logged: 09:01:34

Unexpected exception importing platform custom_components.lamarzocco.button
Unexpected exception importing platform custom_components.lamarzocco.sensor
Unexpected exception importing platform custom_components.lamarzocco.switch
Unexpected exception importing platform custom_components.lamarzocco.update
Unexpected exception importing platform custom_components.lamarzocco.water_heater
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/loader.py", line 842, in get_platform
cache[full_name] = self._import_platform(platform_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/loader.py", line 859, in _import_platform
return importlib.import_module(f"{self.pkg_path}.{platform_name}")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1204, in _gcd_import
File "", line 1176, in _find_and_load
File "", line 1147, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "", line 940, in exec_module
File "", line 241, in _call_with_frames_removed
File "/config/custom_components/lamarzocco/binary_sensor.py", line 28, in
@DataClass
^^^^^^^^^
File "/usr/local/lib/python3.11/dataclasses.py", line 1230, in dataclass
return wrap(cls)
^^^^^^^^^
File "/usr/local/lib/python3.11/dataclasses.py", line 1220, in wrap
return _process_class(cls, init, repr, eq, order, unsafe_hash,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dataclasses.py", line 1027, in _process_class
_init_fn(all_init_fields,
File "/usr/local/lib/python3.11/dataclasses.py", line 545, in _init_fn
raise TypeError(f'non-default argument {f.name!r} '
TypeError: non-default argument 'extra_attributes' follows default argument


Unable to prepare setup for platform 'lamarzocco.update': Platform not found (Exception importing custom_components.lamarzocco.update).
Unable to prepare setup for platform 'lamarzocco.water_heater': Platform not found (Exception importing custom_components.lamarzocco.water_heater).

Failed setup

Disconnected. Deleted and reinstalled integration. Finds the coffee machine but then when loading says Failed Setup. Checked LM cloud details are correct. Tried with both sets of client /secret details. Same error.

Log notes:

Logger: homeassistant.config_entries
Source: config_entries.py:441
First occurred: 12:50:38 (2 occurrences)
Last logged: 12:52:10

Config entry 'GS3 Coffee Machine' for lamarzocco integration not ready yet: ('Querying API failed. Error: %s', TimeoutError()); Retrying in background

Integration stopped working

Started seeing this error today after I upgraded to core preview. Tried downgrading subsequently but that didn't seem to help either.

Logger: homeassistant.components.lamarzocco.coordinator
Source: helpers/update_coordinator.py:313
Integration: La Marzocco (documentation, issues)
First occurred: 10:50:53 PM (3 occurrences)
Last logged: 10:51:03 PM

Unexpected error fetching lamarzocco data: 'machine'
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 313, in _async_refresh
self.data = await self._async_update_data()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/lamarzocco/coordinator.py", line 43, in _async_update_data
await self._async_init_client()
File "/usr/src/homeassistant/homeassistant/components/lamarzocco/coordinator.py", line 59, in _async_init_client
machine_serial=self.config_entry.data[CONF_MACHINE],
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
KeyError: 'machine'

feature request : brew by weight

Hi zweckj,

do you think it can be possible to detect bbw? add buttons to select 1 dose, 2 doses and normal mode when you have brew by weigth activated? maybe dose definition too?

I can help by capturing wifi frames if needed.

regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.