bulldog5046 / ha_nespresso_integration

19 stars 4 forks source link

Feature Request: Nespresso Vertuo Next Support #12

Open jwymann opened 7 months ago

jwymann commented 7 months ago

Hello,

I am trying to use your Nespresso integration, but my machine isn't discovered and I see no indication in the documentation to tell me what to do or how to debug what is happening. Can you help me?

I've captured what I see in my nespresso app, telling that everything is ok in terms of wifi connection.

Thanks a lot for your help. IMG_0913

bulldog5046 commented 7 months ago

What machine are you trying to connect to?

jwymann commented 7 months ago

My machine is the following: Vertuo Next Premium Rose Gold

bulldog5046 commented 7 months ago

This project has not yet been tested on this model. There is underlying code for basic support for it but i'd caution against testing it unless you are comfortable providing meaningful feedback for development.

Device connections are via bluetooth, so you will either need to extract the auth_key from your mobile device or factory reset the machine to attempt pairing.

jwymann commented 7 months ago

No problem for me doing the factory reset. Extracting the auth_key will depend whether it’s easy on an iPhone or not.

gustavzet commented 7 months ago

+1. I've the Vertuo Next aswell and keen to get it to work with HA! I have no problem providing feedback for development of the integration. Let me know if I can help!

bulldog5046 commented 7 months ago

The starting point would be to factory reset one of the machines and attempt to connect to it with the integration. I believe it should work. Brewing a drinks may not but you will need to collect the logs and feedback to me so i can look into it.

Andbarz commented 7 months ago

Hello everyone, I've tried to connect to my Vertuo Pop (after a factory reset) but at the moment I'm not successful.

I'm on a haos install (latest version) on a rpi4, and I'm using the builtin bluetooth adapter. I can see the nespresso from bluetoothctl, but if I try to configure it from this integration I get a message saying that no devices are found.

If I look at the logs I see this error:

2024-01-09 20:47:58.028 ERROR (MainThread) [custom_components.nespresso.nespresso] Couldn't read onboarding status of device. Probably BT Dongle incompatible? 2024-01-09 20:47:58.029 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/discovery_flow.py", line 96, in _async_start await gather_with_limitedconcurrency( File "/usr/src/homeassistant/homeassistant/util/async.py", line 188, in gather_with_limitedconcurrency return await gather( ^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/util/async.py", line 186, in sem_task return await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/config_entries.py", line 888, in async_init flow, result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/config_entries.py", line 916, in _async_init result = await self._async_handle_step(flow, flow.init_step, data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 416, in _async_handle_step result: FlowResult = await getattr(flow, method)(user_input) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/nespresso/config_flow.py", line 88, in async_step_bluetooth await device.connect(ble_device) File "/config/custom_components/nespresso/nespresso.py", line 96, in connect await self.get_onboard_status(client) File "/config/custom_components/nespresso/nespresso.py", line 198, in get_onboard_status self.isOnboard = onboard ^^^^^^^ UnboundLocalError: cannot access local variable 'onboard' where it is not associated with a value

gustavzet commented 7 months ago

Hey again!

I've also tried factory reseting the machine and when I run your integration I get the following logs. I know that this is the MAC adress to the Nespresso Vertuo Next I have, since it's the same as the app tells me. But integration just says "No devices found on the network". You have any clue based on these log-messages? 2024-01-09 21:17:46.728 DEBUG (MainThread) [homeassistant.components.bluetooth] Triggering bluetooth usb discovery 2024-01-09 21:17:51.758 DEBUG (MainThread) [homeassistant.components.bluetooth] Rediscovered adapters: {'hci0': {'address': 'B8:27:EB:E4:6E:FD', 'sw_version': 'homeassistant', 'hw_version': 'usb:v1D6Bp0246d0546', 'passive_scan': True, 'manufacturer': 'Raspberry Pi Foundation', 'product': None, 'vendor_id': None, 'product_id': None}} 2024-01-09 21:17:51.935 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (B8:27:EB:E4:6E:FD) [connectable]: E0:5A:1B:26:0C:0A AdvertisementData(local_name='Venus_E05A1B260C0A', manufacturer_data={9474: b'@\x8c\x00\x00\x00\x00'}, service_uuids=['06aa1910-f22a-11e3-9daa-0002a5d5c51b'], tx_power=5, rssi=-83) match: set() 2024-01-09 21:17:54.450 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (B8:27:EB:E4:6E:FD) [connectable]: E0:5A:1B:26:0C:0A AdvertisementData(local_name='Venus_E05A1B260C0A', manufacturer_data={9474: b'@\x83 \x00\x00\x00'}, service_uuids=['06aa1910-f22a-11e3-9daa-0002a5d5c51b'], tx_power=5, rssi=-72) match: set()

bulldog5046 commented 7 months ago

Venus_E05A1B260C0A

This one is useful, Thank you!

Let me get a dev branch setup for this and we can explore this further. The name 'Venus' isn't in the list of know devices which is why it doesn't display in the integration. Shouldn't take long for me to adjust.

bulldog5046 commented 7 months ago

Ok. Can you please try with the codebase from this branch:

https://github.com/bulldog5046/ha_nespresso_integration/tree/12-device-not-found-even-if-the-machine-is-on-and-was-correctly-linked-to-the-nespresso-app

Brew operations etc won't do anything yet but lets see if it will connect.

Andbarz commented 7 months ago

Venus_E05A1B260C0A

This one is useful, Thank you!

Let me get a dev branch setup for this and we can explore this further. The name 'Venus' isn't in the list of know devices which is why it doesn't display in the integration. Shouldn't take long for me to adjust.

Is this useful too since I have another machine (Vertuo Pop)? It's what I get from bluetoothctl (I still get the error I mentioned previously if I try to use the integration).

Device 0C:B8:15:68:65:AE (public) Name: DV2_0CB8156865AE Alias: DV2_0CB8156865AE Paired: yes Bonded: yes Trusted: yes Blocked: no Connected: no LegacyPairing: no UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) UUID: Vendor specific (06aa1910-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1920-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1930-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1940-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1990-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa19b0-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (43af0000-5c58-4180-a3e4-471d6a45e2de) ManufacturerData Key: 0x2502 (9474) ManufacturerData Value: 00 89 00 00 00 00 ...... RSSI: 0xffffffb8 (-72) AdvertisingFlags: 06 .

bulldog5046 commented 7 months ago

Venus_E05A1B260C0A

This one is useful, Thank you! Let me get a dev branch setup for this and we can explore this further. The name 'Venus' isn't in the list of know devices which is why it doesn't display in the integration. Shouldn't take long for me to adjust.

Is this useful too since I have another machine (Vertuo Pop)? It's what I get from bluetoothctl (I still get the error I mentioned previously if I try to use the integration).

Device 0C:B8:15:68:65:AE (public) Name: DV2_0CB8156865AE Alias: DV2_0CB8156865AE Paired: yes Bonded: yes Trusted: yes Blocked: no Connected: no LegacyPairing: no UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) UUID: Vendor specific (06aa1910-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1920-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1930-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1940-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa1990-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (06aa19b0-f22a-11e3-9daa-0002a5d5c51b) UUID: Vendor specific (43af0000-5c58-4180-a3e4-471d6a45e2de) ManufacturerData Key: 0x2502 (9474) ManufacturerData Value: 00 89 00 00 00 00 ...... RSSI: 0xffffffb8 (-72) AdvertisingFlags: 06 .

Just pushed another commit for you to try too for the MachineType 'DV2'. Please feedback any observations/logs.

Download it from the same branch as above.

gustavzet commented 7 months ago

Some progress here, now I find it when using the integration, but it doesn't connect successfully. I get "Failed to connect" and these are the logs:

2024-01-09 22:16:36.225 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (B8:27:EB:E4:6E:FD) [connectable]: E0:5A:1B:26:0C:0A AdvertisementData(local_name='Venus_E05A1B260C0A', manufacturer_data={9474: b'\x00\x01\x00\x00\x00\x00'}, service_uuids=['00001800-0000-1000-8000-00805f9b34fb', '00001801-0000-1000-8000-00805f9b34fb', '06aa1910-f22a-11e3-9daa-0002a5d5c51b', '06aa1920-f22a-11e3-9daa-0002a5d5c51b', '06aa1930-f22a-11e3-9daa-0002a5d5c51b', '06aa1940-f22a-11e3-9daa-0002a5d5c51b', '06aa1990-f22a-11e3-9daa-0002a5d5c51b', '06aa19b0-f22a-11e3-9daa-0002a5d5c51b', '43af0000-5c58-4180-a3e4-471d6a45e2de'], tx_power=5, rssi=-69) match: set() 2024-01-09 22:16:36.425 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (B8:27:EB:E4:6E:FD) [connectable]: E0:5A:1B:26:0C:0A AdvertisementData(local_name='Venus_E05A1B260C0A', manufacturer_data={9474: b'\x00\x02\x00\x00\x00\x00'}, service_uuids=['00001800-0000-1000-8000-00805f9b34fb', '00001801-0000-1000-8000-00805f9b34fb', '06aa1910-f22a-11e3-9daa-0002a5d5c51b', '06aa1920-f22a-11e3-9daa-0002a5d5c51b', '06aa1930-f22a-11e3-9daa-0002a5d5c51b', '06aa1940-f22a-11e3-9daa-0002a5d5c51b', '06aa1990-f22a-11e3-9daa-0002a5d5c51b', '06aa19b0-f22a-11e3-9daa-0002a5d5c51b', '43af0000-5c58-4180-a3e4-471d6a45e2de'], tx_power=5, rssi=-72) match: set()

2024-01-09 22:16:40.698 DEBUG (MainThread) [bleak_retry_connector] E0:5A:1B:26:0C:0A - E0:5A:1B:26:0C:0A: Connection attempt: 1 2024-01-09 22:16:41.640 DEBUG (MainThread) [bleak_retry_connector] E0:5A:1B:26:0C:0A - E0:5A:1B:26:0C:0A: Connected after 1 attempts

2024-01-09 22:18:36.147 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (B8:27:EB:E4:6E:FD) [connectable]: E0:5A:1B:26:0C:0A AdvertisementData(local_name='Venus_E05A1B260C0A', manufacturer_data={9474: b'\x00\x0c\x00\x00\x00\x00'}, service_uuids=['00001800-0000-1000-8000-00805f9b34fb', '00001801-0000-1000-8000-00805f9b34fb', '06aa1910-f22a-11e3-9daa-0002a5d5c51b', '06aa1920-f22a-11e3-9daa-0002a5d5c51b', '06aa1930-f22a-11e3-9daa-0002a5d5c51b', '06aa1940-f22a-11e3-9daa-0002a5d5c51b', '06aa1990-f22a-11e3-9daa-0002a5d5c51b', '06aa19b0-f22a-11e3-9daa-0002a5d5c51b', '43af0000-5c58-4180-a3e4-471d6a45e2de'], tx_power=5, rssi=-90) match: set()

2024-01-09 22:18:42.576 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (B8:27:EB:E4:6E:FD) [connectable]: E0:5A:1B:26:0C:0A AdvertisementData(local_name='Venus_E05A1B260C0A', manufacturer_data={9474: b'\x00\t\x00\x00\x00\x00'}, service_uuids=['00001800-0000-1000-8000-00805f9b34fb', '00001801-0000-1000-8000-00805f9b34fb', '06aa1910-f22a-11e3-9daa-0002a5d5c51b', '06aa1920-f22a-11e3-9daa-0002a5d5c51b', '06aa1930-f22a-11e3-9daa-0002a5d5c51b', '06aa1940-f22a-11e3-9daa-0002a5d5c51b', '06aa1990-f22a-11e3-9daa-0002a5d5c51b', '06aa19b0-f22a-11e3-9daa-0002a5d5c51b', '43af0000-5c58-4180-a3e4-471d6a45e2de'], tx_power=5, rssi=-92) match: set()

2024-01-09 22:18:48.563 ERROR (MainThread) [custom_components.nespresso.nespresso] Couldn't read onboarding status of device. Probably BT Dongle incompatible? 2024-01-09 22:18:48.564 ERROR (MainThread) [custom_components.nespresso.config_flow] Failed to connect to device: cannot access local variable 'onboard' where it is not associated with a value

bulldog5046 commented 7 months ago

Can you enable debug log level for the integration please then try again and provide the logs?

Andbarz commented 7 months ago

Unrelated to this issue, but how can I easily use this branch in HA? After some googling I couldn't find how so I just directly edited the files since they were just a few lines.

I have some good news from my side: I'm succesfully connected to the machine and I see some sensors! immagine The serial number, the firmware and connectivity firmware versions are correct. I'm not sure about the sensors.

I'm still getting this error in the logs, same as @gustavzet: 2024-01-09 22:18:48.563 ERROR (MainThread) [custom_components.nespresso.nespresso] Couldn't read onboarding status of device. Probably BT Dongle incompatible? 2024-01-09 22:18:48.564 ERROR (MainThread) [custom_components.nespresso.config_flow] Failed to connect to device: cannot access local variable 'onboard' where it is not associated with a value

gustavzet commented 7 months ago

Can you enable debug log level for the integration please then try again and provide the logs?

I think the above is debug log level? I'm using the Bluetooth integration feature "Enable debug logging", or is there another way?

bulldog5046 commented 7 months ago

Can you enable debug log level for the integration please then try again and provide the logs?

I think the above is debug log level? I'm using the Bluetooth integration feature "Enable debug logging", or is there another way?

There is also debug logging for the integration

image

bulldog5046 commented 7 months ago

Unrelated to this issue, but how can I easily use this branch in HA? After some googling I couldn't find how so I just directly edited the files since they were just a few lines.

I have some good news from my side: I'm succesfully connected to the machine and I see some sensors! immagine The serial number, the firmware and connectivity firmware versions are correct. I'm not sure about the sensors.

I'm still getting this error in the logs, same as @gustavzet: 2024-01-09 22:18:48.563 ERROR (MainThread) [custom_components.nespresso.nespresso] Couldn't read onboarding status of device. Probably BT Dongle incompatible? 2024-01-09 22:18:48.564 ERROR (MainThread) [custom_components.nespresso.config_flow] Failed to connect to device: cannot access local variable 'onboard' where it is not associated with a value

Mmm.... That could be a bit misleading as HA creates the sensors. The underlying framework probably still can't communicate properly. Need the integration debug logs though, they will give me more to work with.

gustavzet commented 7 months ago

Can you enable debug log level for the integration please then try again and provide the logs?

I think the above is debug log level? I'm using the Bluetooth integration feature "Enable debug logging", or is there another way?

There is also debug logging for the integration

image

Since I can't set-up the integration I can't see that window. But I've tried to add logger: default: warning logs: custom_components.nespresso: debug to config.yaml. Tho, I don't see any more debug messages sent from your integration. I don't think there is any debug messages before this error makes the integration crash: 2024-01-10 00:11:20.228 ERROR (MainThread) [custom_components.nespresso.nespresso] Couldn't read onboarding status of device. Probably BT Dongle incompatible? 2024-01-10 00:11:20.235 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/discovery_flow.py", line 96, in _async_start await gather_with_limitedconcurrency( File "/usr/src/homeassistant/homeassistant/util/async.py", line 188, in gather_with_limitedconcurrency return await gather( ^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/util/async.py", line 186, in sem_task return await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/config_entries.py", line 888, in async_init flow, result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/config_entries.py", line 916, in _async_init result = await self._async_handle_step(flow, flow.init_step, data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 416, in _async_handle_step result: FlowResult = await getattr(flow, method)(user_input) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/nespresso/config_flow.py", line 88, in async_step_bluetooth await device.connect(ble_device) File "/config/custom_components/nespresso/nespresso.py", line 96, in connect await self.get_onboard_status(client) File "/config/custom_components/nespresso/nespresso.py", line 198, in get_onboard_status self.isOnboard = onboard ^^^^^^^ UnboundLocalError: cannot access local variable 'onboard' where it is not associated with a value

bulldog5046 commented 7 months ago

Ah. May be able to force your way to the config url?

http://homeassistant.local:8123/config/integrations/integration/nespresso

Andbarz commented 7 months ago

I see that you're on a raspberry, like me. Is it a rpi4?

Before the new branch was uploaded I was messing with Bluetoothctl (connecting to ha with ssh) and I had already paired the machine with that. Maybe that's why the integration is working for me?

Now I'm not in the same place as the machine, but tomorrow I will get the logs and also try to see if some sensor values change.

gustavzet commented 7 months ago

Yes @Andbarz, I'm also on a RPi, a 3+ tho. That sounds resonable with Bluetoothctl!

@bulldog5046 Unfortunately does not show the debug option: image

Andbarz commented 7 months ago

@gustavzet maybe then you can try to set the adapter as discoverable, pairable and connectable from bluetoothctl, that's what I did since according to the internet that's not the default state for the raspberry bt adapter (you can check if that's the case for you too). I don't remember the commands, but if you need help I can look them up.

@bulldog5046 As I mentioned the machine is not where I live, but I managed to go there this morning to see if I could trigger some sensor update. I unplugged the power cord and plugged it back again, and the sensor showed it changing from power save, to ready, then back again to power save. I also left the lid open to see if that was recognized, but nothing changed. I don't know what caused the change in water freshness.

immagine

This evening I'll try to run a descaling and emptying process to see if those sensors work.

Below you can find some debug logs. They're pretty long because as far as I can tell the sensor update runs every minute and this is a night of logs, so I'm pasting here only what looks useful. This is the full log from startup, with debug logs from the bluetooth and nespresso integrations: home-assistant_2024-01-10T09-49-01.761Z.log

Integration startup after a system reboot:

2024-01-09 23:03:54.045 INFO (MainThread) [homeassistant.setup] Setting up nespresso
2024-01-09 23:03:54.046 INFO (MainThread) [homeassistant.setup] Setup of domain nespresso took 0.0 seconds
2024-01-09 23:03:54.072 WARNING (MainThread) [homeassistant.const] DEVICE_CLASS_TIMESTAMP was used from nespresso, this is a deprecated constant which will be removed in HA Core 2025.1. Use SensorDeviceClass.TIMESTAMP instead, please report it to the author of the 'nespresso' custom integration
2024-01-09 23:03:54.081 WARNING (MainThread) [homeassistant.components.binary_sensor] DEVICE_CLASS_MOTION was used from nespresso, this is a deprecated constant which will be removed in HA Core 2025.1. Use BinarySensorDeviceClass.MOTION instead, please report it to the author of the 'nespresso' custom integration
2024-01-09 23:03:54.091 WARNING (MainThread) [homeassistant.components.binary_sensor] DEVICE_CLASS_DOOR was used from nespresso, this is a deprecated constant which will be removed in HA Core 2025.1. Use BinarySensorDeviceClass.DOOR instead, please report it to the author of the 'nespresso' custom integration
2024-01-09 23:03:54.100 WARNING (MainThread) [homeassistant.components.binary_sensor] DEVICE_CLASS_MOTION was used from nespresso, this is a deprecated constant which will be removed in HA Core 2025.1. Use BinarySensorDeviceClass.MOTION instead, please report it to the author of the 'nespresso' custom integration
2024-01-09 23:03:54.109 WARNING (MainThread) [homeassistant.components.binary_sensor] DEVICE_CLASS_DOOR was used from nespresso, this is a deprecated constant which will be removed in HA Core 2025.1. Use BinarySensorDeviceClass.DOOR instead, please report it to the author of the 'nespresso' custom integration
2024-01-09 23:03:54.114 INFO (MainThread) [homeassistant.components.sensor] Setting up nespresso.sensor
2024-01-09 23:03:57.509 INFO (MainThread) [custom_components.nespresso.sensor] 0C:B8:15:68:65:AE: Name: DV2_0CB8156865AE
Serial: 23095DV2f012618209F
2024-01-09 23:04:00.040 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.water_is_empty
2024-01-09 23:04:00.042 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.descaling_needed
2024-01-09 23:04:00.043 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.capsule_mechanism_jammed
2024-01-09 23:04:00.047 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.water_fresh
2024-01-09 23:04:00.049 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.state
2024-01-09 23:04:00.050 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.descaling_counter
2024-01-09 23:04:00.052 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.slider
2024-01-09 23:04:00.055 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.nespresso entity: sensor.water_hardness
2024-01-09 23:05:38.522 DEBUG (MainThread) [homeassistant.components.bluetooth] Rediscovered adapters: {'hci0': {'address': 'E4:5F:01:36:84:5F', 'sw_version': 'homeassistant', 'hw_version': 'usb:v1D6Bp0246d0546', 'passive_scan': True, 'manufacturer': 'Raspberry Pi Trading Ltd', 'product': None, 'vendor_id': None, 'product_id': None}}
2024-01-09 23:13:52.482 DEBUG (MainThread) [homeassistant.components.bluetooth] Triggering bluetooth usb discovery
2024-01-09 23:13:57.501 DEBUG (MainThread) [homeassistant.components.bluetooth] Rediscovered adapters: {'hci0': {'address': 'E4:5F:01:36:84:5F', 'sw_version': 'homeassistant', 'hw_version': 'usb:v1D6Bp0246d0546', 'passive_scan': True, 'manufacturer': 'Raspberry Pi Trading Ltd', 'product': None, 'vendor_id': None, 'product_id': None}}
2024-01-09 23:14:00.087 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000073
2024-01-09 23:14:00.087 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_is_empty Not Empty
2024-01-09 23:14:00.088 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000042
2024-01-09 23:14:00.088 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_needed Not Needed
2024-01-09 23:14:00.088 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000033
2024-01-09 23:14:00.088 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-capsule_mechanism_jammed Not Jammed
2024-01-09 23:14:00.089 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000030
2024-01-09 23:14:00.089 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_fresh Fresh
2024-01-09 23:14:00.090 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000032
2024-01-09 23:14:00.090 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-state Power Save
2024-01-09 23:14:00.090 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000015
2024-01-09 23:14:00.090 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_counter 0
2024-01-09 23:14:00.091 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000028
2024-01-09 23:14:00.091 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-slider Open
2024-01-09 23:14:00.091 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000032
2024-01-09 23:14:00.092 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_hardness Level 4
2024-01-09 23:15:02.707 DEBUG (MainThread) [custom_components.nespresso.nespresso] Nespresso auth_key: 99fcb19d4ad84c6f
2024-01-09 23:15:03.134 DEBUG (MainThread) [custom_components.nespresso.nespresso] get_sensor_data() took 0:00:00.270070

Then the last part repeats every ~2 minutes. I don't know if this may be useful, but here's the log from when the states changed (from the sensor update before the change to the sensor update after the change) according to the integration's logbook:

2024-01-10 09:41:03.919 DEBUG (MainThread) [custom_components.nespresso.nespresso] Nespresso auth_key: 99fcb19d4ad84c6f
2024-01-10 09:41:04.346 DEBUG (MainThread) [custom_components.nespresso.nespresso] get_sensor_data() took 0:00:00.269933
2024-01-10 09:41:07.047 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.212483
2024-01-10 09:41:07.048 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_is_empty Not Empty
2024-01-10 09:41:07.050 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.212750
2024-01-10 09:41:07.050 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_needed Not Needed
2024-01-10 09:41:07.051 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.213530
2024-01-10 09:41:07.051 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-capsule_mechanism_jammed Not Jammed
2024-01-10 09:41:07.051 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.214072
2024-01-10 09:41:07.051 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_fresh Fresh
2024-01-10 09:41:07.052 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.214598
2024-01-10 09:41:07.052 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-state Power Save
2024-01-10 09:41:07.052 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.215012
2024-01-10 09:41:07.052 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_counter 0
2024-01-10 09:41:07.053 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.215527
2024-01-10 09:41:07.053 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-slider Open
2024-01-10 09:41:07.053 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.215924
2024-01-10 09:41:07.053 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_hardness Level 4
2024-01-10 09:42:00.838 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000062
2024-01-10 09:42:00.838 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_is_empty Not Empty
2024-01-10 09:42:00.839 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000033
2024-01-10 09:42:00.839 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_needed Not Needed
2024-01-10 09:42:00.839 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000031
2024-01-10 09:42:00.839 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-capsule_mechanism_jammed Not Jammed
2024-01-10 09:42:00.840 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000027
2024-01-10 09:42:00.840 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_fresh Fresh
2024-01-10 09:42:00.841 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000031
2024-01-10 09:42:00.841 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-state Power Save
2024-01-10 09:42:00.841 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000014
2024-01-10 09:42:00.841 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_counter 0
2024-01-10 09:42:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000026
2024-01-10 09:42:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-slider Open
2024-01-10 09:42:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000029
2024-01-10 09:42:00.843 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_hardness Level 4
2024-01-10 09:43:00.897 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (E4:5F:01:36:84:5F) [connectable]: 0C:B8:15:68:65:AE AdvertisementData(local_name='DV2_0CB8156865AE', manufacturer_data={9474: b'@\x02\x00\x00\x00\x00'}, service_uuids=['00001800-0000-1000-8000-00805f9b34fb', '00001801-0000-1000-8000-00805f9b34fb', '06aa1910-f22a-11e3-9daa-0002a5d5c51b', '06aa1920-f22a-11e3-9daa-0002a5d5c51b', '06aa1930-f22a-11e3-9daa-0002a5d5c51b', '06aa1940-f22a-11e3-9daa-0002a5d5c51b', '06aa1990-f22a-11e3-9daa-0002a5d5c51b', '06aa19b0-f22a-11e3-9daa-0002a5d5c51b', '43af0000-5c58-4180-a3e4-471d6a45e2de'], rssi=-70) match: set()
2024-01-10 09:43:03.587 DEBUG (MainThread) [custom_components.nespresso.nespresso] Nespresso auth_key: 99fcb19d4ad84c6f
2024-01-10 09:43:04.147 DEBUG (MainThread) [custom_components.nespresso.nespresso] get_sensor_data() took 0:00:00.359978
2024-01-10 09:43:06.084 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.245683
2024-01-10 09:43:06.085 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_is_empty Not Empty
2024-01-10 09:43:06.088 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.247888
2024-01-10 09:43:06.089 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_needed Not Needed
2024-01-10 09:43:06.092 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.251489
2024-01-10 09:43:06.092 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-capsule_mechanism_jammed Not Jammed
2024-01-10 09:43:06.096 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.255117
2024-01-10 09:43:06.096 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_fresh Not Fresh
2024-01-10 09:43:06.097 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.256017
2024-01-10 09:43:06.097 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-state Ready
2024-01-10 09:43:06.105 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.264145
2024-01-10 09:43:06.105 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_counter 0
2024-01-10 09:43:06.105 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.264720
2024-01-10 09:43:06.106 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-slider Open
2024-01-10 09:43:06.106 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:05.264975
2024-01-10 09:43:06.106 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_hardness Level 4
2024-01-10 09:44:00.839 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000060
2024-01-10 09:44:00.840 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_is_empty Not Empty
2024-01-10 09:44:00.840 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000037
2024-01-10 09:44:00.841 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_needed Not Needed
2024-01-10 09:44:00.841 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000033
2024-01-10 09:44:00.841 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-capsule_mechanism_jammed Not Jammed
2024-01-10 09:44:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000030
2024-01-10 09:44:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_fresh Not Fresh
2024-01-10 09:44:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000026
2024-01-10 09:44:00.843 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-state Ready
2024-01-10 09:44:00.843 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000014
2024-01-10 09:44:00.843 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_counter 0
2024-01-10 09:44:00.844 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000027
2024-01-10 09:44:00.844 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-slider Open
2024-01-10 09:44:00.844 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000030
2024-01-10 09:44:00.845 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_hardness Level 4
2024-01-10 09:45:00.973 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] hci0 (E4:5F:01:36:84:5F) [connectable]: 0C:B8:15:68:65:AE AdvertisementData(local_name='DV2_0CB8156865AE', manufacturer_data={9474: b'@\t\x00\x00\x00\x00'}, service_uuids=['00001800-0000-1000-8000-00805f9b34fb', '00001801-0000-1000-8000-00805f9b34fb', '06aa1910-f22a-11e3-9daa-0002a5d5c51b', '06aa1920-f22a-11e3-9daa-0002a5d5c51b', '06aa1930-f22a-11e3-9daa-0002a5d5c51b', '06aa1940-f22a-11e3-9daa-0002a5d5c51b', '06aa1990-f22a-11e3-9daa-0002a5d5c51b', '06aa19b0-f22a-11e3-9daa-0002a5d5c51b', '43af0000-5c58-4180-a3e4-471d6a45e2de'], rssi=-70) match: set()
2024-01-10 09:45:03.903 DEBUG (MainThread) [custom_components.nespresso.nespresso] Nespresso auth_key: 99fcb19d4ad84c6f
2024-01-10 09:45:04.328 DEBUG (MainThread) [custom_components.nespresso.nespresso] get_sensor_data() took 0:00:00.269718
2024-01-10 09:45:07.075 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.235199
2024-01-10 09:45:07.076 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_is_empty Not Empty
2024-01-10 09:45:07.076 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.234610
2024-01-10 09:45:07.077 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_needed Not Needed
2024-01-10 09:45:07.077 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.235373
2024-01-10 09:45:07.077 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-capsule_mechanism_jammed Not Jammed
2024-01-10 09:45:07.078 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.236014
2024-01-10 09:45:07.078 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_fresh Fresh
2024-01-10 09:45:07.079 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.236848
2024-01-10 09:45:07.079 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-state Power Save
2024-01-10 09:45:07.080 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.237594
2024-01-10 09:45:07.080 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_counter 0
2024-01-10 09:45:07.080 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.238213
2024-01-10 09:45:07.080 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-slider Open
2024-01-10 09:45:07.081 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:06.238654
2024-01-10 09:45:07.081 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_hardness Level 4
2024-01-10 09:46:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000059
2024-01-10 09:46:00.842 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_is_empty Not Empty
2024-01-10 09:46:00.843 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000034
2024-01-10 09:46:00.843 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_needed Not Needed
2024-01-10 09:46:00.843 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000029
2024-01-10 09:46:00.844 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-capsule_mechanism_jammed Not Jammed
2024-01-10 09:46:00.844 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000026
2024-01-10 09:46:00.844 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_fresh Fresh
2024-01-10 09:46:00.845 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000029
2024-01-10 09:46:00.845 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-state Power Save
2024-01-10 09:46:00.845 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000015
2024-01-10 09:46:00.846 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-descaling_counter 0
2024-01-10 09:46:00.846 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000026
2024-01-10 09:46:00.846 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-slider Open
2024-01-10 09:46:00.847 DEBUG (MainThread) [custom_components.nespresso.sensor] async_update() took 0:00:00.000029
2024-01-10 09:46:00.847 DEBUG (MainThread) [custom_components.nespresso.sensor] State DV2_0CB8156865AE-water_hardness Level 4
bulldog5046 commented 7 months ago

@Andbarz Thank you. The most interesting part from those logs is that there are no errors. This means the integration is able to read the data from the device, even if it's not nessesarily being decoded properly.

The sensors were built around the older Expert model so we may need to work out what is really applicible to these Vertuo devices.

Andbarz commented 7 months ago

Any way I can help with that?

I will try to do random stuff (cleaning/descaling procedures, brewing coffe, etc.), look at the logbook and post here the relevant logs, but if you tell me how to access the raw data I can also get that. Sorry but I've no experience with this kind of stuff.

bulldog5046 commented 7 months ago

Any way I can help with that?

I will try to do random stuff (cleaning/descaling procedures, brewing coffe, etc.), look at the logbook and post here the relevant logs, but if you tell me how to access the raw data I can also get that. Sorry but I've no experience with this kind of stuff.

I think the obvious questions to ask are:

What can you do with this machine type in the Nespresso app?

What are you expecting the integration to be able to do?

Andbarz commented 7 months ago

The app functionality (at least for my Pop, but looking at the Next on nespresso's website I think it's the same) is actually super limited, as far as I understand it's basically used only to update the machine and is supposed to notify me when a descaling is needed. If I open it I can only see the status (standby/ready) and software versions.

Any additional info we can get would be nice, I'd like to at least get warnings for descaling/empty-stale water from HA. I guess that for this I need the get data from the machine and see what's changing depending on what's happening. It's something I'm totally willing to invest time in, but if you can give me some advise it wold be useful.

It would also be really really nice to be able to start brewing coffe, but that probably means trying to send the same commands as the Expert and see if we're lucky. There should be no need for brewing settings as the machine is supposed to read them from a sort of barcode printed on the capsules.

The machine can also be connected to WiFi using the app, but that's probably for cloud only stuff so I don't know if that can be exploited.

bulldog5046 commented 7 months ago

@Andbarz Okay. Thanks for the feedback.

I'll put something together to look for the UUIDs available on your machine so we can look into what might be available to work with.

i-am-at0m commented 7 months ago

The app functionality (at least for my Pop, but looking at the Next on nespresso's website I think it's the same) is actually super limited, as far as I understand it's basically used only to update the machine and is supposed to notify me when a descaling is needed. If I open it I can only see the status (standby/ready) and software versions.

Any additional info we can get would be nice, I'd like to at least get warnings for descaling/empty-stale water from HA. I guess that for this I need the get data from the machine and see what's changing depending on what's happening. It's something I'm totally willing to invest time in, but if you can give me some advise it wold be useful.

It would also be really really nice to be able to start brewing coffe, but that probably means trying to send the same commands as the Expert and see if we're lucky. There should be no need for brewing settings as the machine is supposed to read them from a sort of barcode printed on the capsules.

The machine can also be connected to WiFi using the app, but that's probably for cloud only stuff so I don't know if that can be exploited.

I don't mind doing data captures of my vertuo next on WiFi but it might be out of scope for this since it's likely to be cloud and not local, yeah

My HA install is not near my machine so I'd have to set up a BT proxy to pair with it and haven't gone through the trouble of setting any of those up in my house yet (but may soon for my Switchbot stuff).

Andbarz commented 7 months ago

Yeah, I agree that WiFi is out scope. It's also probably quite useless since I think it's turned off when the machine goes into standby.

In the meanwhile I tried to run some things while looking at the HA logbook for the machine:

1) Cleaning procedure:

2) Descaling procedure (which is actually made of a descaling cycle and a rinse cycle):

3) After a few minutes the machine state changed to "Power Save" and the water to "Fresh"

4) Emptying procedure:

5) a few minutes after the procedure ended the machine went back to Power Save

From now one I never touched the water tank, apart from filling it from a bottle

6) Brewing some coffee (in expert mode, which is started with a double press of the button):

7) After some time, back again to power save

8) Brewing some more coffee (with the usual single button press). It's important to note that first I tried to brew again with the same capsule (I didn't want to waste one for a test), but the machine complained (button blinking red and no brewing) so I put a new one in:

9) after drinking the coffee I opened and closed the lid to eject the capsule, the state changed to "Ready" and water to "Not fresh"

10) after some time the state changed to "Power Save" and the water to "Fresh"

To sum things up: 1) the state sensor works, some states just have to be renamed. For example:

As the next steps I think it would be useful to have something which reports all the changes to the values with a much better temporal resolution (1 to few seconds maybe?): this could be useful if some sensor (like the water states) are related to the operation of individual components (pump, motor, heating, etc.) which can turn on and off in less than 1 minute (which is the update frequency of the integration). Moreover logging all the other UUIDs would also be useful to try and look at more useful data.

I've looked into doing this with a python script (the pygatt module looks like it's the correct one to be used), but interfacing with BLE hardware is a bit out of my area of expertise, so it will be slow going. If you could help me with that that would be great @bulldog5046

bulldog5046 commented 7 months ago

Thanks for the feedback. I did uncover the required state updates in the decompiles source i have, now that we know the 'Vertuo' is called 'Venus' internally.

Implementing the states per machine type needs a bit more looking into as it's currently a static enum. But i'll drop the source here so i don't have to go searching for it again.

private static MachineState venusMachineStateFrom(byte b) {
        switch (b) {
            case 0:
                return MachineState.FACTORY_RESET;
            case 1:
                return MachineState.HEAT_UP;
            case 2:
                return MachineState.READY;
            case 3:
                return MachineState.DESCALING_READY;
            case 4:
                return MachineState.BREWING;
            case 5:
                return MachineState.CLEANING;
            case 6:
                return MachineState.DESCALING;
            case 7:
                return MachineState.STEAM_OUT;
            case 8:
                return MachineState.ERROR;
            case 9:
                return MachineState.POWER_SAVE;
            case 10:
                return MachineState.OVER_HEAT;
            case 11:
                return MachineState.DIAGNOSTIC_MODE;
            case 12:
                return MachineState.STANDBY;
            case 13:
                return MachineState.UPDATING;
            case 14:
                return MachineState.RINSING;
            case 17:
                return MachineState.CAPSULE_READING;
            case 18:
                return MachineState.DESCALE_SEQUENCE_DECODING;
            case 19:
                return MachineState.TANK_EMPTY;
            case 20:
                return MachineState.DESCALING_PAUSED;
            case 21:
                return MachineState.INITIALIZATION;
            case 22:
                return MachineState.RINSING_READY;
            default:
                return MachineState.UNKNOWN;
        }
    }

If you want to play with the machine yourself. Take the code from here and run nespresso.py directly. You'll see at the bottom of the file i've left in my testing/experimental code. Just remember to always call disconnect otherwise the machine will stop responding.

bulldog5046 commented 7 months ago

@Andbarz I've just pushed some changes to the branch to handle the above states. Can you test this please?

Andbarz commented 7 months ago

@bulldog5046 yes, I'll get to it as soon as I can.

Is there an easy way to have HACS use that branch? I could not find it, but it would be useful to test the extension without manually downloading everything.

bulldog5046 commented 7 months ago

@Andbarz I tried to find a way awhile ago. HACS has this page on it: https://hacs.xyz/docs/faq/beta/

But I couldn't get it to work.

Andbarz commented 6 months ago

I'm sorry for not getting back to you earlier, but I have very little spare time at the moment.

The reported states are now correct (apart from "Descaling ready", see below). Other sensors are still wrong, but that was expected since they use different parsers as far as I can tell:

I still want to look at other UUIDs while using the machine, but since my python skills are pretty basic I still have to understand how to manually poll them (other than manually using bluetoothctl, which is a PITA) and which UUIDs are currently used for the sensors to look at the others.

I wasn't hopeful, but I tried to enable brewing for this machine and ran the service (standard recipe, ignored all the options). As I expected, it didn't work.

magnushacker commented 6 months ago

The app functionality (at least for my Pop, but looking at the Next on nespresso's website I think it's the same) is actually super limited, as far as I understand it's basically used only to update the machine and is supposed to notify me when a descaling is needed. If I open it I can only see the status (standby/ready) and software versions.

Any additional info we can get would be nice, I'd like to at least get warnings for descaling/empty-stale water from HA. I guess that for this I need the get data from the machine and see what's changing depending on what's happening. It's something I'm totally willing to invest time in, but if you can give me some advise it wold be useful.

It would also be really really nice to be able to start brewing coffe, but that probably means trying to send the same commands as the Expert and see if we're lucky. There should be no need for brewing settings as the machine is supposed to read them from a sort of barcode printed on the capsules.

The machine can also be connected to WiFi using the app, but that's probably for cloud only stuff so I don't know if that can be exploited.

I also have a Pop and I was hoping that the machine would expose the current capsule name/id somehow and that I could capture this info and count the capsules per type. My end goal would be to combine this info with my capsule purchases so that that Home Assistant can send me a message like "You're running out of Odacio capsules!" :)

Andbarz commented 6 months ago

The app functionality (at least for my Pop, but looking at the Next on nespresso's website I think it's the same) is actually super limited, as far as I understand it's basically used only to update the machine and is supposed to notify me when a descaling is needed. If I open it I can only see the status (standby/ready) and software versions. Any additional info we can get would be nice, I'd like to at least get warnings for descaling/empty-stale water from HA. I guess that for this I need the get data from the machine and see what's changing depending on what's happening. It's something I'm totally willing to invest time in, but if you can give me some advise it wold be useful. It would also be really really nice to be able to start brewing coffe, but that probably means trying to send the same commands as the Expert and see if we're lucky. There should be no need for brewing settings as the machine is supposed to read them from a sort of barcode printed on the capsules. The machine can also be connected to WiFi using the app, but that's probably for cloud only stuff so I don't know if that can be exploited.

I also have a Pop and I was hoping that the machine would expose the current capsule name/id somehow and that I could capture this info and count the capsules per type. My end goal would be to combine this info with my capsule purchases so that that Home Assistant can send me a message like "You're running out of Odacio capsules!" :)

Maybe it does, but I didn't have time to look at all the exposed UUIDs (meaning that I didn't have time to research how to do it in some sort of semi-automatic way) to see which values changes and when they do. I've also finished the capsules that came with the machine, so no testing until I order some more.

nxor commented 4 months ago

Hi guys, I tried to modify your branch to support DV6, but I alway get:

2024-04-06 10:47:38.074 ERROR (MainThread) [custom_components.nespresso.nespresso] Onboarding not permitted. Already paired? 2024-04-06 10:47:41.076 ERROR (MainThread) [custom_components.nespresso.nespresso] Couldn't read onboarding status of device. Probably BT Dongle incompatible?

The device is : Vertuo_DV6_80646F4D3454 (not real mac)

fernac03 commented 2 months ago

Unrelated to this issue, but how can I easily use this branch in HA? After some googling I couldn't find how so I just directly edited the files since they were just a few lines.

I have some good news from my side: I'm succesfully connected to the machine and I see some sensors! immagine The serial number, the firmware and connectivity firmware versions are correct. I'm not sure about the sensors.

I'm still getting this error in the logs, same as @gustavzet: 2024-01-09 22:18:48.563 ERROR (MainThread) [custom_components.nespresso.nespresso] Couldn't read onboarding status of device. Probably BT Dongle incompatible? 2024-01-09 22:18:48.564 ERROR (MainThread) [custom_components.nespresso.config_flow] Failed to connect to device: cannot access local variable 'onboard' where it is not associated with a value

hi @Andbarz , i have vertuo pop and cant connect too. Did you have a successful connection? What files and what modifications were made, could you share?

el97 commented 1 month ago

I managed to get some data from my Vertuo Next machine. I used a BLE scanner to get it. I don't know if it's helpful or not but at least I contributed. Screenshot_2024-07-02-19-05-23-07_02c69135304086e2cfe67ad022fd87ed